From 5871194a56259541d04e5e72e0c142a65272f371 Mon Sep 17 00:00:00 2001 From: Eshank Vaish <48060426+eshankvaish@users.noreply.github.com> Date: Mon, 28 Oct 2024 16:49:56 +0530 Subject: [PATCH] fix: group env options by cluster --- package-lock.json | 4 +- package.json | 2 +- .../useGetResourceKindsOptions/service.ts | 61 ++++++++++++------- .../Hooks/useGetResourceKindsOptions/types.ts | 11 +++- .../useGetResourceKindsOptions.tsx | 9 ++- 5 files changed, 57 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index cee9ce365..8f161cb4a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@devtron-labs/devtron-fe-common-lib", - "version": "0.5.8-beta-5", + "version": "0.5.8-beta-8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@devtron-labs/devtron-fe-common-lib", - "version": "0.5.8-beta-5", + "version": "0.5.8-beta-8", "license": "ISC", "dependencies": { "@types/react-dates": "^21.8.6", diff --git a/package.json b/package.json index 91159b5cb..f9c5cf7c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@devtron-labs/devtron-fe-common-lib", - "version": "0.5.8-beta-5", + "version": "0.5.8-beta-8", "description": "Supporting common component library", "type": "module", "main": "dist/index.js", diff --git a/src/Shared/Hooks/useGetResourceKindsOptions/service.ts b/src/Shared/Hooks/useGetResourceKindsOptions/service.ts index c67f29585..88b5a9278 100644 --- a/src/Shared/Hooks/useGetResourceKindsOptions/service.ts +++ b/src/Shared/Hooks/useGetResourceKindsOptions/service.ts @@ -18,11 +18,11 @@ import { ResponseType, Teams } from '@Common/Types' import { getTeamListMin } from '@Common/Common.service' import { get } from '@Common/Api' import { ClusterType } from '@Shared/Services' -import { EnvironmentType, EnvListMinDTO } from '@Shared/types' +import { EnvListMinDTO } from '@Shared/types' import { EnvironmentTypeEnum } from '@Shared/constants' import { ROUTES } from '@Common/Constants' import { stringComparatorBySortOrder } from '@Shared/Helpers' -import { AppsGroupedByProjectsType, ClusterDTO } from './types' +import { AppsGroupedByProjectsType, ClusterDTO, EnvironmentsGroupedByClustersType } from './types' export const getAppOptionsGroupedByProjects = async (): Promise => { const { result } = (await get(ROUTES.APP_LIST_MIN)) as ResponseType @@ -70,30 +70,47 @@ export const getClusterOptions = async (): Promise => { .sort((a, b) => stringComparatorBySortOrder(a.name, b.name)) } -export const getEnvironmentOptions = async (): Promise => { +export const getEnvironmentOptionsGroupedByClusters = async (): Promise => { const { result } = (await get(ROUTES.ENVIRONMENT_LIST_MIN)) as ResponseType if (!result) { return [] } - return result - .map( - ({ - id, - environment_name: name, - isVirtualEnvironment, - cluster_name: cluster, - default: isDefault, - namespace, - }) => ({ - id, - name, - isVirtual: isVirtualEnvironment ?? false, - cluster, - environmentType: isDefault ? EnvironmentTypeEnum.production : EnvironmentTypeEnum.nonProduction, - namespace, - }), - ) - .sort((a, b) => stringComparatorBySortOrder(a.name, b.name)) + const sortedEnvList = result.map( + ({ + id, + environment_name: name, + isVirtualEnvironment, + cluster_name: cluster, + default: isDefault, + namespace, + }) => ({ + id, + name, + isVirtual: isVirtualEnvironment ?? false, + cluster, + environmentType: isDefault ? EnvironmentTypeEnum.production : EnvironmentTypeEnum.nonProduction, + namespace, + }), + ) + + const envGroupedByCluster = Object.values( + sortedEnvList.reduce< + Record + >((acc, env) => { + if (!acc[env.cluster]) { + acc[env.cluster] = { + clusterName: env.cluster, + envList: [], + } + } + + acc[env.cluster].envList.push(env) + + return acc + }, {}), + ).sort((a, b) => stringComparatorBySortOrder(a.clusterName, b.clusterName)) + + return envGroupedByCluster } diff --git a/src/Shared/Hooks/useGetResourceKindsOptions/types.ts b/src/Shared/Hooks/useGetResourceKindsOptions/types.ts index 7c72b8492..f87d9db7e 100644 --- a/src/Shared/Hooks/useGetResourceKindsOptions/types.ts +++ b/src/Shared/Hooks/useGetResourceKindsOptions/types.ts @@ -16,9 +16,9 @@ // ====== Service Types: Start ====== // -import { ResourceKindType } from '@Shared/types' +import { EnvironmentType, ResourceKindType } from '@Shared/types' import { ServerErrors } from '@Common/ServerError' -import { getAppOptionsGroupedByProjects, getClusterOptions, getEnvironmentOptions, getProjectOptions } from './service' +import { getAppOptionsGroupedByProjects, getClusterOptions, getProjectOptions } from './service' export interface AppType { name: string @@ -30,6 +30,11 @@ export type AppsGroupedByProjectsType = { appList: AppType[] }[] +export type EnvironmentsGroupedByClustersType = { + clusterName: EnvironmentType['cluster'] + envList: EnvironmentType[] +}[] + export interface ClusterDTO { id: number cluster_name: string @@ -54,7 +59,7 @@ export interface UseGetResourceKindOptionsReturnType { [ResourceKindType.devtronApplication]: Awaited> [ResourceKindType.project]: Awaited> [ResourceKindType.cluster]: Awaited> - [ResourceKindType.environment]: Awaited> + [ResourceKindType.environment]: EnvironmentsGroupedByClustersType } resourcesOptionsError: ServerErrors refetchResourcesOptions: () => void diff --git a/src/Shared/Hooks/useGetResourceKindsOptions/useGetResourceKindsOptions.tsx b/src/Shared/Hooks/useGetResourceKindsOptions/useGetResourceKindsOptions.tsx index 104eaa689..4bd2f3829 100644 --- a/src/Shared/Hooks/useGetResourceKindsOptions/useGetResourceKindsOptions.tsx +++ b/src/Shared/Hooks/useGetResourceKindsOptions/useGetResourceKindsOptions.tsx @@ -17,7 +17,12 @@ import { useMemo } from 'react' import { ResourceKindType } from '@Shared/types' import { useAsync } from '@Common/Helper' -import { getAppOptionsGroupedByProjects, getClusterOptions, getEnvironmentOptions, getProjectOptions } from './service' +import { + getAppOptionsGroupedByProjects, + getClusterOptions, + getEnvironmentOptionsGroupedByClusters, + getProjectOptions, +} from './service' import { UseGetResourceKindOptionsReturnType, UseGetResourceKindsOptionsProps } from './types' import { getResourcesToFetchMap } from './utils' @@ -43,7 +48,7 @@ const useGetResourceKindsOptions = ({ resourcesToFetchMap[ResourceKindType.devtronApplication] ? getAppOptionsGroupedByProjects() : null, resourcesToFetchMap[ResourceKindType.project] ? getProjectOptions() : null, resourcesToFetchMap[ResourceKindType.cluster] ? getClusterOptions() : null, - resourcesToFetchMap[ResourceKindType.environment] ? getEnvironmentOptions() : null, + resourcesToFetchMap[ResourceKindType.environment] ? getEnvironmentOptionsGroupedByClusters() : null, ]), [resourcesToFetchMap], resourcesToFetch.length > 0,