@@ -4,24 +4,30 @@ import {Checkbox, RadioButton} from '@gravity-ui/uikit';
44
55import { Loader } from '../../components/Loader' ;
66import { nodesApi } from '../../store/reducers/nodes/nodes' ;
7+ import type { TClusterInfo } from '../../types/api/cluster' ;
78import type { VersionToColorMap } from '../../types/versions' ;
89import { cn } from '../../utils/cn' ;
910import { useAutoRefreshInterval } from '../../utils/hooks' ;
11+ import { VersionsBar } from '../Cluster/VersionsBar/VersionsBar' ;
1012
1113import { GroupedNodesTree } from './GroupedNodesTree/GroupedNodesTree' ;
1214import { getGroupedStorageNodes , getGroupedTenantNodes , getOtherNodes } from './groupNodes' ;
15+ import i18n from './i18n' ;
1316import { GroupByValue } from './types' ;
17+ import { useGetVersionValues } from './utils' ;
1418
1519import './Versions.scss' ;
1620
1721const b = cn ( 'ydb-versions' ) ;
1822
1923interface VersionsProps {
2024 versionToColor ?: VersionToColorMap ;
25+ cluster ?: TClusterInfo ;
2126}
2227
23- export const Versions = ( { versionToColor} : VersionsProps ) => {
28+ export const Versions = ( { versionToColor, cluster } : VersionsProps ) => {
2429 const [ autoRefreshInterval ] = useAutoRefreshInterval ( ) ;
30+ const versionsValues = useGetVersionValues ( cluster , versionToColor ) ;
2531 const { currentData, isLoading : isNodesLoading } = nodesApi . useGetNodesQuery (
2632 { tablets : false } ,
2733 { pollingInterval : autoRefreshInterval } ,
@@ -74,7 +80,7 @@ export const Versions = ({versionToColor}: VersionsProps) => {
7480 const otherNodes = getOtherNodes ( nodes , versionToColor ) ;
7581 const storageNodesContent = storageNodes ?. length ? (
7682 < React . Fragment >
77- < h3 > Storage nodes </ h3 >
83+ < h4 > { i18n ( 'title_storage' ) } </ h4 >
7884 { storageNodes . map ( ( { title, nodes : itemNodes , items, versionColor} ) => (
7985 < GroupedNodesTree
8086 key = { `storage-nodes-${ title } ` }
@@ -88,7 +94,7 @@ export const Versions = ({versionToColor}: VersionsProps) => {
8894 ) : null ;
8995 const tenantNodesContent = tenantNodes ?. length ? (
9096 < React . Fragment >
91- < h3 > Database nodes </ h3 >
97+ < h4 > { i18n ( 'title_database' ) } </ h4 >
9298 { renderControls ( ) }
9399 { tenantNodes . map ( ( { title, nodes : itemNodes , items, versionColor, versionsValues} ) => (
94100 < GroupedNodesTree
@@ -105,7 +111,7 @@ export const Versions = ({versionToColor}: VersionsProps) => {
105111 ) : null ;
106112 const otherNodesContent = otherNodes ?. length ? (
107113 < React . Fragment >
108- < h3 > Other nodes </ h3 >
114+ < h4 > { i18n ( 'title_other' ) } </ h4 >
109115 { otherNodes . map ( ( { title, nodes : itemNodes , items, versionColor, versionsValues} ) => (
110116 < GroupedNodesTree
111117 key = { `other-nodes-${ title } ` }
@@ -119,8 +125,22 @@ export const Versions = ({versionToColor}: VersionsProps) => {
119125 </ React . Fragment >
120126 ) : null ;
121127
128+ const overallContent = (
129+ < React . Fragment >
130+ < h4 > { i18n ( 'title_overall' ) } </ h4 >
131+ < div className = { b ( 'overall-wrapper' ) } >
132+ < VersionsBar
133+ progressClassName = { b ( 'overall-progress' ) }
134+ versionsValues = { versionsValues . filter ( ( el ) => el . title !== 'unknown' ) }
135+ size = "m"
136+ />
137+ </ div >
138+ </ React . Fragment >
139+ ) ;
140+
122141 return (
123- < div className = { b ( 'versions' ) } >
142+ < div className = { b ( ) } >
143+ { overallContent }
124144 { storageNodesContent }
125145 { tenantNodesContent }
126146 { otherNodesContent }
0 commit comments