11import React from 'react' ;
22
3+ import { ChevronDown , ChevronUp } from '@gravity-ui/icons' ;
4+ import { Button , Disclosure , Icon } from '@gravity-ui/uikit' ;
5+
36import { YDBDefinitionList } from '../../../../../components/YDBDefinitionList/YDBDefinitionList' ;
47import type { EPathType , TEvDescribeSchemeResult } from '../../../../../types/api/schema' ;
58import { cn } from '../../../../../utils/cn' ;
@@ -21,12 +24,22 @@ export const TableInfo = ({data, type}: TableInfoProps) => {
2124 const {
2225 generalInfoLeft = [ ] ,
2326 generalInfoRight = [ ] ,
27+ generalStats = [ ] ,
2428 tableStatsInfo = [ ] ,
29+ generalMetrics = [ ] ,
2530 tabletMetricsInfo = [ ] ,
2631 partitionConfigInfo = [ ] ,
2732 partitionProgressConfig,
2833 } = React . useMemo ( ( ) => prepareTableInfo ( data , type ) , [ data , type ] ) ;
2934
35+ const [ expanded , setExpanded ] = React . useState ( false ) ;
36+
37+ const handleExpandedChange = React . useCallback ( ( value : boolean ) => setExpanded ( value ) , [ ] ) ;
38+
39+ const hasMoreLeft = tableStatsInfo . some ( ( items ) => items . length > 0 ) ;
40+ const hasMoreRight = tabletMetricsInfo . length > 0 || partitionConfigInfo . length > 0 ;
41+ const hasMore = hasMoreLeft || hasMoreRight ;
42+
3043 return (
3144 < div className = { b ( ) } >
3245 < div className = { b ( 'title' ) } > { i18n ( 'title_partitioning' ) } </ div >
@@ -39,7 +52,7 @@ export const TableInfo = ({data, type}: TableInfoProps) => {
3952 />
4053 </ div >
4154 ) }
42- < div className = { b ( 'row' ) } >
55+ < div className = { b ( 'row' , { 'general-info' : true } ) } >
4356 < div className = { b ( 'col' ) } >
4457 { generalInfoLeft . length > 0 ? (
4558 < YDBDefinitionList
@@ -63,40 +76,26 @@ export const TableInfo = ({data, type}: TableInfoProps) => {
6376 ) : null }
6477 </ div >
6578 </ div >
66- < div className = { b ( 'row' ) } >
67- { tableStatsInfo ?. length ? (
68- < div className = { b ( 'col' ) } >
69- { tableStatsInfo
70- . filter ( ( items ) => items . length > 0 )
71- . map ( ( items , index ) => (
72- < YDBDefinitionList
73- key = { index }
74- items = { items }
75- title = { index === 0 ? i18n ( 'title_table-stats' ) : undefined }
76- className = { b ( 'info-block' ) }
77- nameMaxWidth = "auto"
78- responsive
79- titleClassname = { b ( 'info-title' ) }
80- />
81- ) ) }
82- </ div >
83- ) : null }
8479
80+ < div className = { b ( 'row' ) } >
8581 < div className = { b ( 'col' ) } >
86- { tabletMetricsInfo . length > 0 ? (
82+ { generalStats . length > 0 ? (
8783 < YDBDefinitionList
88- items = { tabletMetricsInfo }
89- title = { i18n ( 'title_tablet-metrics ' ) }
84+ items = { generalStats }
85+ title = { i18n ( 'title_table-stats ' ) }
9086 className = { b ( 'info-block' ) }
9187 nameMaxWidth = "auto"
92- titleClassname = { b ( 'info-title' ) }
9388 responsive
89+ titleClassname = { b ( 'info-title' ) }
9490 />
9591 ) : null }
96- { partitionConfigInfo . length > 0 ? (
92+ </ div >
93+
94+ < div className = { b ( 'col' ) } >
95+ { generalMetrics . length > 0 ? (
9796 < YDBDefinitionList
98- items = { partitionConfigInfo }
99- title = { i18n ( 'title_partition-config ' ) }
97+ items = { generalMetrics }
98+ title = { i18n ( 'title_tablet-metrics ' ) }
10099 className = { b ( 'info-block' ) }
101100 nameMaxWidth = "auto"
102101 responsive
@@ -105,6 +104,62 @@ export const TableInfo = ({data, type}: TableInfoProps) => {
105104 ) : null }
106105 </ div >
107106 </ div >
107+
108+ { hasMore ? (
109+ < Disclosure
110+ className = { b ( 'show-more-disclosure' ) }
111+ expanded = { expanded }
112+ onUpdate = { handleExpandedChange }
113+ >
114+ < Disclosure . Summary >
115+ { ( props ) => (
116+ < Button { ...props } view = "normal" size = "s" >
117+ { expanded ? i18n ( 'button_show-less' ) : i18n ( 'button_show-more' ) }
118+ < Icon data = { expanded ? ChevronUp : ChevronDown } size = { 16 } />
119+ </ Button >
120+ ) }
121+ </ Disclosure . Summary >
122+
123+ < Disclosure . Details >
124+ < div className = { b ( 'row' ) } >
125+ < div className = { b ( 'col' ) } >
126+ { tableStatsInfo
127+ . filter ( ( items ) => items . length > 0 )
128+ . map ( ( items , index ) => (
129+ < YDBDefinitionList
130+ key = { index }
131+ items = { items }
132+ className = { b ( 'info-block' ) }
133+ nameMaxWidth = "auto"
134+ responsive
135+ />
136+ ) ) }
137+ </ div >
138+
139+ < div className = { b ( 'col' ) } >
140+ { tabletMetricsInfo . length > 0 ? (
141+ < YDBDefinitionList
142+ items = { tabletMetricsInfo }
143+ className = { b ( 'info-block' ) }
144+ nameMaxWidth = "auto"
145+ responsive
146+ />
147+ ) : null }
148+ { partitionConfigInfo . length > 0 ? (
149+ < YDBDefinitionList
150+ items = { partitionConfigInfo }
151+ title = { i18n ( 'title_partition-config' ) }
152+ className = { b ( 'info-block' ) }
153+ nameMaxWidth = "auto"
154+ responsive
155+ titleClassname = { b ( 'info-title' ) }
156+ />
157+ ) : null }
158+ </ div >
159+ </ div >
160+ </ Disclosure . Details >
161+ </ Disclosure >
162+ ) : null }
108163 </ div >
109164 ) ;
110165} ;
0 commit comments