Skip to content

Commit 302a8b6

Browse files
Merge pull request #1499 from devtron-labs/fix/retain-env-state
fix: env id issues on switching tabs on Applications page
2 parents 4f2ca76 + aee5bb6 commit 302a8b6

File tree

2 files changed

+64
-16
lines changed

2 files changed

+64
-16
lines changed

src/components/app/details/appDetails/AppDetails.tsx

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ import {
5757
getPodNameSuffix,
5858
processDeploymentStatusDetailsData,
5959
ValueContainer,
60+
NoParamsNoEnvContext,
61+
NoParamsWithEnvContext,
62+
ParamsNoEnvContext,
63+
ParamsAndEnvContext,
6064
} from './utils'
6165
import { AppMetrics } from './AppMetrics'
6266
import IndexStore from '../../../v2/appDetails/index.store'
@@ -120,30 +124,31 @@ export default function AppDetail({ filteredEnvIds }: { filteredEnvIds?: string
120124
?.sort((a, b) => (a.environmentName > b.environmentName ? 1 : -1)) || []
121125

122126
if (_envList.length > 0) {
123-
let _envId
124-
if (!params.envId && _envList.length === 1) {
125-
_envId = _envList[0].environmentId
126-
} else if (
127-
!params.envId &&
128-
environmentId &&
129-
_envList.map((env) => env.environmentId).includes(environmentId)
130-
) {
131-
_envId = environmentId
132-
} else if (!_envList.map((env) => env.environmentId).includes(+params.envId)) {
133-
_envId = _envList[0].environmentId
127+
let selector
128+
if (!params.envId && !environmentId) {
129+
selector = new NoParamsNoEnvContext()
130+
} else if (!params.envId && environmentId) {
131+
selector = new NoParamsWithEnvContext()
132+
} else if (params.envId && !environmentId) {
133+
selector = new ParamsNoEnvContext()
134+
} else if (params.envId && environmentId) {
135+
selector = new ParamsAndEnvContext()
134136
}
135-
if (_envId) {
136-
const newUrl = getAppDetailsURL(params.appId, _envId)
137+
138+
const selectedEnvId = selector.resolveEnvironmentId(params, environmentId, _envList, setEnvironmentId)
139+
140+
// Set the URL and push to navigation stack
141+
if (selectedEnvId) {
142+
const newUrl = getAppDetailsURL(params.appId, selectedEnvId)
137143
push(newUrl)
138144
} else {
139145
setEnvironmentId(null)
140146
}
141147
} else {
142148
setEnvironmentId(null)
143149
}
150+
// Return the filtered and sorted environment list
144151
return _envList
145-
} else {
146-
setEnvironmentId(null)
147152
}
148153
return []
149154
}, [filteredEnvIds, otherEnvsResult])
@@ -561,7 +566,7 @@ export const Details: React.FC<DetailsType> = ({
561566
) {
562567
return (
563568
<>
564-
{environments?.length > 0 && (
569+
{environments?.length > 0 && (
565570
<div className="flex left ml-20 mt-16">
566571
<EnvSelector
567572
environments={environments}

src/components/app/details/appDetails/utils.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,3 +711,46 @@ export const validateMomentDate = (date: string, format: string): string => {
711711
if (!date || date === ZERO_TIME_STRING) return '--'
712712
return moment(date, format).fromNow()
713713
}
714+
715+
class EnvironmentSelection {
716+
resolveEnvironmentId(params, environmentId, _envList, setEnvironmentId) {
717+
throw new Error('This method should be overridden by concrete classes.')
718+
}
719+
}
720+
721+
export class NoParamsNoEnvContext extends EnvironmentSelection {
722+
resolveEnvironmentId(params, environmentId, _envList, setEnvironmentId) {
723+
return _envList[0].environmentId
724+
}
725+
}
726+
727+
export class NoParamsWithEnvContext extends EnvironmentSelection {
728+
resolveEnvironmentId(params, environmentId, _envList, setEnvironmentId) {
729+
if (environmentId && _envList.map((env) => env.environmentId).includes(environmentId)) {
730+
return environmentId
731+
}
732+
return _envList[0].environmentId
733+
}
734+
}
735+
736+
export class ParamsNoEnvContext extends EnvironmentSelection {
737+
resolveEnvironmentId(params, environmentId, _envList, setEnvironmentId) {
738+
if (params.envId && _envList.map((env) => env.environmentId).includes(+params.envId)) {
739+
return +params.envId
740+
}
741+
return _envList[0].environmentId
742+
}
743+
}
744+
745+
export class ParamsAndEnvContext extends EnvironmentSelection {
746+
resolveEnvironmentId(params, environmentId, _envList, setEnvironmentId) {
747+
if (params.envId && _envList.map((env) => env.environmentId).includes(+params.envId)) {
748+
// If environmentId is present and different from params.envContext, set environmentId
749+
if (environmentId && +environmentId !== +params.envId) {
750+
setEnvironmentId(+params.envId)
751+
}
752+
return +params.envId
753+
}
754+
return _envList[0].environmentId
755+
}
756+
}

0 commit comments

Comments
 (0)