Skip to content

Commit 7aacdfe

Browse files
feat: request clusters handler only on Versions tab (#2008)
1 parent 105fd2c commit 7aacdfe

File tree

6 files changed

+44
-55
lines changed

6 files changed

+44
-55
lines changed

src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx

-16
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,9 @@ import {useClusterBaseInfo} from '../../../store/reducers/cluster/cluster';
44
import type {
55
AdditionalClusterProps,
66
AdditionalTenantsProps,
7-
AdditionalVersionsProps,
87
NodeAddress,
98
} from '../../../types/additionalProps';
10-
import type {MetaClusterVersion} from '../../../types/api/meta';
119
import type {ETenantType} from '../../../types/api/tenant';
12-
import {getVersionColors, getVersionMap} from '../../../utils/clusterVersionColors';
1310
import {cn} from '../../../utils/cn';
1411
import {USE_CLUSTER_BALANCER_AS_BACKEND_KEY} from '../../../utils/constants';
1512
import {useSetting} from '../../../utils/hooks';
@@ -18,7 +15,6 @@ import type {GetMonitoringClusterLink, GetMonitoringLink} from '../../../utils/m
1815
import {getCleanBalancerValue, removeViewerPathname} from '../../../utils/parseBalancer';
1916
import {getBackendFromNodeHost, getBackendFromRawNodeData} from '../../../utils/prepareBackend';
2017
import type {Cluster} from '../../Cluster/Cluster';
21-
import {useClusterVersions} from '../useClusterData';
2218

2319
import './ExtendedCluster.scss';
2420

@@ -61,16 +57,6 @@ const getAdditionalClusterProps = (
6157
return additionalClusterProps;
6258
};
6359

64-
const getAdditionalVersionsProps = (
65-
versions: MetaClusterVersion[] = [],
66-
): AdditionalVersionsProps => {
67-
return {
68-
getVersionToColorMap: () => {
69-
return getVersionColors(getVersionMap(versions));
70-
},
71-
};
72-
};
73-
7460
const getAdditionalTenantsProps = (
7561
clusterName: string | undefined,
7662
monitoring: string | undefined,
@@ -126,7 +112,6 @@ export function ExtendedCluster({
126112
getMonitoringLink,
127113
getMonitoringClusterLink,
128114
}: ExtendedClusterProps) {
129-
const versions = useClusterVersions();
130115
const additionalNodesProps = useAdditionalNodesProps();
131116
const {name, balancer, monitoring} = useClusterBaseInfo();
132117

@@ -141,7 +126,6 @@ export function ExtendedCluster({
141126
balancer,
142127
getMonitoringClusterLink,
143128
)}
144-
additionalVersionsProps={getAdditionalVersionsProps(versions)}
145129
additionalTenantsProps={getAdditionalTenantsProps(
146130
name,
147131
monitoring,

src/containers/AppWithClusters/useClusterData.ts

-17
This file was deleted.

src/containers/Cluster/Cluster.tsx

+1-12
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@ import type {
2222
AdditionalClusterProps,
2323
AdditionalNodesProps,
2424
AdditionalTenantsProps,
25-
AdditionalVersionsProps,
2625
} from '../../types/additionalProps';
2726
import {cn} from '../../utils/cn';
2827
import {useTypedDispatch, useTypedSelector} from '../../utils/hooks';
29-
import {parseVersionsToVersionToColorMap} from '../../utils/versions';
3028
import {Nodes} from '../Nodes/Nodes';
3129
import {PaginatedStorage} from '../Storage/PaginatedStorage';
3230
import {TabletsTable} from '../Tablets/TabletsTable';
@@ -46,14 +44,12 @@ interface ClusterProps {
4644
additionalTenantsProps?: AdditionalTenantsProps;
4745
additionalNodesProps?: AdditionalNodesProps;
4846
additionalClusterProps?: AdditionalClusterProps;
49-
additionalVersionsProps?: AdditionalVersionsProps;
5047
}
5148

5249
export function Cluster({
5350
additionalClusterProps,
5451
additionalTenantsProps,
5552
additionalNodesProps,
56-
additionalVersionsProps,
5753
}: ClusterProps) {
5854
const container = React.useRef<HTMLDivElement>(null);
5955
const isClusterDashboardAvailable = useClusterDashboardAvailable();
@@ -91,13 +87,6 @@ export function Cluster({
9187
dispatch(setHeaderBreadcrumbs('cluster', {}));
9288
}, [dispatch]);
9389

94-
const versionToColor = React.useMemo(() => {
95-
if (additionalVersionsProps?.getVersionToColorMap) {
96-
return additionalVersionsProps?.getVersionToColorMap();
97-
}
98-
return parseVersionsToVersionToColorMap(cluster?.Versions);
99-
}, [additionalVersionsProps, cluster]);
100-
10190
const getClusterTitle = () => {
10291
if (infoLoading) {
10392
return <Skeleton className={b('title-skeleton')} />;
@@ -204,7 +193,7 @@ export function Cluster({
204193
getLocationObjectFromHref(getClusterPath(clusterTabsIds.versions)).pathname
205194
}
206195
>
207-
<Versions versionToColor={versionToColor} cluster={cluster} />
196+
<Versions cluster={cluster} />
208197
</Route>
209198
<Route
210199
render={() => (

src/containers/Versions/Versions.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {Checkbox, RadioButton} from '@gravity-ui/uikit';
55
import {Loader} from '../../components/Loader';
66
import {nodesApi} from '../../store/reducers/nodes/nodes';
77
import type {TClusterInfo} from '../../types/api/cluster';
8-
import type {VersionToColorMap} from '../../types/versions';
98
import {cn} from '../../utils/cn';
109
import {useAutoRefreshInterval} from '../../utils/hooks';
1110
import {VersionsBar} from '../Cluster/VersionsBar/VersionsBar';
@@ -14,19 +13,20 @@ import {GroupedNodesTree} from './GroupedNodesTree/GroupedNodesTree';
1413
import {getGroupedStorageNodes, getGroupedTenantNodes, getOtherNodes} from './groupNodes';
1514
import i18n from './i18n';
1615
import {GroupByValue} from './types';
17-
import {useGetVersionValues} from './utils';
16+
import {useGetVersionValues, useVersionToColorMap} from './utils';
1817

1918
import './Versions.scss';
2019

2120
const b = cn('ydb-versions');
2221

2322
interface VersionsProps {
24-
versionToColor?: VersionToColorMap;
2523
cluster?: TClusterInfo;
2624
}
2725

28-
export const Versions = ({versionToColor, cluster}: VersionsProps) => {
26+
export const Versions = ({cluster}: VersionsProps) => {
2927
const [autoRefreshInterval] = useAutoRefreshInterval();
28+
const versionToColor = useVersionToColorMap();
29+
3030
const versionsValues = useGetVersionValues(cluster, versionToColor);
3131
const {currentData, isLoading: isNodesLoading} = nodesApi.useGetNodesQuery(
3232
{tablets: false, fieldsRequired: ['SystemState']},

src/containers/Versions/utils.ts

+39-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
import React from 'react';
22

33
import {skipToken} from '@reduxjs/toolkit/query';
4+
import {StringParam, useQueryParam} from 'use-query-params';
45

6+
import {clustersApi} from '../../store/reducers/clusters/clusters';
57
import {nodesApi} from '../../store/reducers/nodes/nodes';
68
import {isClusterInfoV2} from '../../types/api/cluster';
79
import type {TClusterInfo} from '../../types/api/cluster';
810
import type {VersionToColorMap} from '../../types/versions';
9-
import {parseNodeGroupsToVersionsValues, parseNodesToVersionsValues} from '../../utils/versions';
11+
import {getVersionColors, getVersionMap} from '../../utils/clusterVersionColors';
12+
import {useTypedSelector} from '../../utils/hooks';
13+
import {
14+
parseNodeGroupsToVersionsValues,
15+
parseNodesToVersionsValues,
16+
parseVersionsToVersionToColorMap,
17+
} from '../../utils/versions';
1018

1119
export const useGetVersionValues = (cluster?: TClusterInfo, versionToColor?: VersionToColorMap) => {
1220
const {currentData} = nodesApi.useGetNodesQuery(
@@ -42,3 +50,33 @@ export const useGetVersionValues = (cluster?: TClusterInfo, versionToColor?: Ver
4250

4351
return versionsValues;
4452
};
53+
54+
export function useVersionToColorMap(cluster?: TClusterInfo) {
55+
const getVersionToColorMap = useGetClusterVersionToColorMap();
56+
57+
return React.useMemo(() => {
58+
if (getVersionToColorMap) {
59+
return getVersionToColorMap();
60+
}
61+
return parseVersionsToVersionToColorMap(cluster?.Versions);
62+
}, [cluster?.Versions, getVersionToColorMap]);
63+
}
64+
65+
/** For multi-cluster version - with using meta handlers */
66+
function useGetClusterVersionToColorMap(): (() => VersionToColorMap) | undefined {
67+
const [clusterName] = useQueryParam('clusterName', StringParam);
68+
const singleClusterMode = useTypedSelector((state) => state.singleClusterMode);
69+
const {data} = clustersApi.useGetClustersListQuery(undefined, {skip: singleClusterMode});
70+
71+
return React.useMemo(() => {
72+
if (singleClusterMode) {
73+
return undefined;
74+
}
75+
76+
const clusters = data || [];
77+
const info = clusters.find((cluster) => cluster.name === clusterName);
78+
const versions = info?.versions || [];
79+
80+
return () => getVersionColors(getVersionMap(versions));
81+
}, [singleClusterMode, data, clusterName]);
82+
}

src/types/additionalProps.ts

-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import type {TSystemStateInfo} from './api/nodes';
22
import type {ETenantType} from './api/tenant';
33
import type {InfoItem} from './components';
4-
import type {VersionToColorMap} from './versions';
5-
6-
export interface AdditionalVersionsProps {
7-
getVersionToColorMap?: () => VersionToColorMap;
8-
}
94

105
export interface ClusterLink {
116
title: string;

0 commit comments

Comments
 (0)