@@ -2,9 +2,11 @@ import React from 'react';
2
2
3
3
import { Checkbox , RadioButton } from '@gravity-ui/uikit' ;
4
4
5
- import { Loader } from '../../components/Loader ' ;
5
+ import { LoaderWrapper } from '../../components/LoaderWrapper/LoaderWrapper ' ;
6
6
import { nodesApi } from '../../store/reducers/nodes/nodes' ;
7
+ import type { NodesPreparedEntity } from '../../store/reducers/nodes/types' ;
7
8
import type { TClusterInfo } from '../../types/api/cluster' ;
9
+ import type { VersionToColorMap , VersionValue } from '../../types/versions' ;
8
10
import { cn } from '../../utils/cn' ;
9
11
import { useAutoRefreshInterval } from '../../utils/hooks' ;
10
12
import { VersionsBar } from '../Cluster/VersionsBar/VersionsBar' ;
@@ -19,21 +21,39 @@ import './Versions.scss';
19
21
20
22
const b = cn ( 'ydb-versions' ) ;
21
23
22
- interface VersionsProps {
23
- cluster : TClusterInfo ;
24
+ interface VersionsContainerProps {
25
+ cluster ?: TClusterInfo ;
26
+ loading ?: boolean ;
24
27
}
25
28
26
- export const Versions = ( { cluster} : VersionsProps ) => {
29
+ export function VersionsContainer ( { cluster, loading } : VersionsContainerProps ) {
27
30
const [ autoRefreshInterval ] = useAutoRefreshInterval ( ) ;
28
- const versionToColor = useVersionToColorMap ( ) ;
29
-
30
- const versionsValues = useGetVersionValues ( cluster , versionToColor ) ;
31
31
const { currentData, isLoading : isNodesLoading } = nodesApi . useGetNodesQuery (
32
32
{ tablets : false , fieldsRequired : [ 'SystemState' , 'SubDomainKey' ] } ,
33
33
{ pollingInterval : autoRefreshInterval } ,
34
34
) ;
35
+ const versionToColor = useVersionToColorMap ( ) ;
36
+
37
+ const versionsValues = useGetVersionValues ( { cluster, versionToColor, clusterLoading : loading } ) ;
38
+
39
+ return (
40
+ < LoaderWrapper loading = { loading || isNodesLoading } >
41
+ < Versions
42
+ versionsValues = { versionsValues }
43
+ nodes = { currentData ?. Nodes }
44
+ versionToColor = { versionToColor }
45
+ />
46
+ </ LoaderWrapper >
47
+ ) ;
48
+ }
35
49
36
- const nodes = currentData ?. Nodes ;
50
+ interface VersionsProps {
51
+ nodes ?: NodesPreparedEntity [ ] ;
52
+ versionsValues : VersionValue [ ] ;
53
+ versionToColor ?: VersionToColorMap ;
54
+ }
55
+
56
+ function Versions ( { versionsValues, nodes, versionToColor} : VersionsProps ) {
37
57
const [ groupByValue , setGroupByValue ] = React . useState < GroupByValue > ( GroupByValue . VERSION ) ;
38
58
const [ expanded , setExpanded ] = React . useState ( false ) ;
39
59
@@ -71,10 +91,6 @@ export const Versions = ({cluster}: VersionsProps) => {
71
91
) ;
72
92
} ;
73
93
74
- if ( isNodesLoading ) {
75
- return < Loader /> ;
76
- }
77
-
78
94
const tenantNodes = getGroupedTenantNodes ( nodes , versionToColor , groupByValue ) ;
79
95
const storageNodes = getGroupedStorageNodes ( nodes , versionToColor ) ;
80
96
const otherNodes = getOtherNodes ( nodes , versionToColor ) ;
@@ -146,4 +162,4 @@ export const Versions = ({cluster}: VersionsProps) => {
146
162
{ otherNodesContent }
147
163
</ div >
148
164
) ;
149
- } ;
165
+ }
0 commit comments