diff --git a/frontend/src/component/feature/FeatureView/FeatureSettings/FeatureSettingsProject/FeatureSettingsProjectConfirm/FeatureSettingsProjectConfirm.tsx b/frontend/src/component/feature/FeatureView/FeatureSettings/FeatureSettingsProject/FeatureSettingsProjectConfirm/FeatureSettingsProjectConfirm.tsx index 1fe31df175..d406ca7a57 100644 --- a/frontend/src/component/feature/FeatureView/FeatureSettings/FeatureSettingsProject/FeatureSettingsProjectConfirm/FeatureSettingsProjectConfirm.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureSettings/FeatureSettingsProject/FeatureSettingsProjectConfirm/FeatureSettingsProjectConfirm.tsx @@ -50,7 +50,7 @@ const FeatureSettingsProjectConfirm = ({ const hasSameEnvironments: boolean = useMemo(() => { return arraysHaveSameItems( feature.environments.map(env => env.name), - project.environments + project.environments.map(projectEnv => projectEnv.environment) ); }, [feature, project]); diff --git a/frontend/src/component/project/Project/Import/configure/ImportOptions.tsx b/frontend/src/component/project/Project/Import/configure/ImportOptions.tsx index cae6a0c163..43844b35d0 100644 --- a/frontend/src/component/project/Project/Import/configure/ImportOptions.tsx +++ b/frontend/src/component/project/Project/Import/configure/ImportOptions.tsx @@ -32,11 +32,13 @@ export const ImportOptions: FC = ({ onChange, }) => { const { project: projectInfo } = useProject(project); - const environmentOptions = projectInfo.environments.map(environment => ({ - key: environment, - label: environment, - title: environment, - })); + const environmentOptions = projectInfo.environments.map( + ({ environment }) => ({ + key: environment, + label: environment, + title: environment, + }) + ); useEffect(() => { if (environment === '' && environmentOptions[0]) { diff --git a/frontend/src/component/project/Project/ProjectFeatureToggles/ProjectFeatureToggles.tsx b/frontend/src/component/project/Project/ProjectFeatureToggles/ProjectFeatureToggles.tsx index 3d8d694691..39fb1741e1 100644 --- a/frontend/src/component/project/Project/ProjectFeatureToggles/ProjectFeatureToggles.tsx +++ b/frontend/src/component/project/Project/ProjectFeatureToggles/ProjectFeatureToggles.tsx @@ -148,7 +148,9 @@ export const ProjectFeatureToggles = ({ const [searchParams, setSearchParams] = useSearchParams(); const { isChangeRequestConfigured } = useChangeRequestsEnabled(projectId); const environments = useEnvironmentsRef( - loading ? ['a', 'b', 'c'] : newEnvironments + loading + ? [{ environment: 'a' }, { environment: 'b' }, { environment: 'c' }] + : newEnvironments ); const { refetch } = useProject(projectId); const { setToastData, setToastApiError } = useToast(); diff --git a/frontend/src/component/project/Project/ProjectFeatureToggles/hooks/useEnvironmentsRef.ts b/frontend/src/component/project/Project/ProjectFeatureToggles/hooks/useEnvironmentsRef.ts index 7269498461..3c3580e523 100644 --- a/frontend/src/component/project/Project/ProjectFeatureToggles/hooks/useEnvironmentsRef.ts +++ b/frontend/src/component/project/Project/ProjectFeatureToggles/hooks/useEnvironmentsRef.ts @@ -7,23 +7,14 @@ import { CreateFeatureStrategySchema } from 'openapi'; export type ProjectEnvironmentType = { environment: string; - defaultStrategy: CreateFeatureStrategySchema | null; + defaultStrategy?: CreateFeatureStrategySchema; }; export const useEnvironmentsRef = ( - environments: Array = [] + environments: Array = [] ): string[] => { - let names: string[]; - if ( - environments && - environments.length > 0 && - typeof environments[0] !== 'string' - ) { - names = environments.map( - env => (env as ProjectEnvironmentType).environment - ); - } else { - names = environments as string[]; - } + let names = environments.map( + env => (env as ProjectEnvironmentType).environment + ); const ref = useRef>(names); if (names.join('') !== ref.current?.join('')) { ref.current = names; diff --git a/frontend/src/component/project/ProjectEnvironment/ProjectEnvironment.tsx b/frontend/src/component/project/ProjectEnvironment/ProjectEnvironment.tsx index 3a737209c4..f26c8ce6f1 100644 --- a/frontend/src/component/project/ProjectEnvironment/ProjectEnvironment.tsx +++ b/frontend/src/component/project/ProjectEnvironment/ProjectEnvironment.tsx @@ -73,9 +73,9 @@ const ProjectEnvironmentList = () => { () => environments.map(environment => ({ ...environment, - projectVisible: project?.environments.includes( - environment.name - ), + projectVisible: project?.environments + .map(projectEnvironment => projectEnvironment.environment) + .includes(environment.name), })), [environments, project?.environments] ); diff --git a/frontend/src/interfaces/project.ts b/frontend/src/interfaces/project.ts index e6245a3ac4..bfbf44fd8f 100644 --- a/frontend/src/interfaces/project.ts +++ b/frontend/src/interfaces/project.ts @@ -1,5 +1,6 @@ import { ProjectStatsSchema } from 'openapi'; import { IFeatureToggleListItem } from './featureToggle'; +import { ProjectEnvironmentType } from '../component/project/Project/ProjectFeatureToggles/hooks/useEnvironmentsRef'; export interface IProjectCard { name: string; @@ -18,7 +19,7 @@ export interface IProject { version: string; name: string; description?: string; - environments: string[]; + environments: Array; health: number; stats: ProjectStatsSchema; favorite: boolean; diff --git a/src/test/e2e/api/admin/state.e2e.test.ts b/src/test/e2e/api/admin/state.e2e.test.ts index d51a39b615..483eabe472 100644 --- a/src/test/e2e/api/admin/state.e2e.test.ts +++ b/src/test/e2e/api/admin/state.e2e.test.ts @@ -428,11 +428,11 @@ test(`should not show environment on feature toggle, when environment is disable .get('/api/admin/projects/default/features/my-feature') .expect(200); - // sort to have predictable test results - const result = body.environments.sort((e1, e2) => e1.name < e2.name); - expect(result).toHaveLength(2); - expect(result[0].name).toBe('development'); - expect(result[0].enabled).toBeTruthy(); - expect(result[1].name).toBe('production'); - expect(result[1].enabled).toBeFalsy(); + const result = body.environments; + const sorted = result.sort((e1, e2) => e1.name[0] < e2.name[0]); + expect(sorted).toHaveLength(2); + expect(sorted[0].name).toBe('development'); + expect(sorted[0].enabled).toBeTruthy(); + expect(sorted[1].name).toBe('production'); + expect(sorted[1].enabled).toBeFalsy(); });