11import type { InfoViewerItem } from '..' ;
22import { InfoViewer } from '..' ;
33import { getEntityName } from '../../../containers/Tenant/utils' ;
4- import type { TEvDescribeSchemeResult , TIndexDescription } from '../../../types/api/schema' ;
4+ import type { TEvDescribeSchemeResult } from '../../../types/api/schema' ;
5+ import { formatNumber } from '../../../utils/dataFormatters/dataFormatters' ;
56import { formatTableIndexItem } from '../formatters' ;
7+ import { createInfoFormatter } from '../utils' ;
68
7- const DISPLAYED_FIELDS : Set < keyof TIndexDescription > = new Set ( [
9+ import i18n from './i18n' ;
10+
11+ const DISPLAYED_FIELDS_KEYS = [
812 'Type' ,
913 'State' ,
1014 'DataSize' ,
1115 'KeyColumnNames' ,
1216 'DataColumnNames' ,
13- ] ) ;
17+ ] as const ;
18+ type DisplayedIndexField = ( typeof DISPLAYED_FIELDS_KEYS ) [ number ] ;
19+ const DISPLAYED_FIELDS = new Set < DisplayedIndexField > ( DISPLAYED_FIELDS_KEYS ) ;
1420
1521interface TableIndexInfoProps {
1622 data ?: TEvDescribeSchemeResult ;
@@ -26,12 +32,71 @@ export const TableIndexInfo = ({data}: TableIndexInfoProps) => {
2632 const TableIndex = data . PathDescription ?. TableIndex ;
2733 const info : Array < InfoViewerItem > = [ ] ;
2834
29- let key : keyof TIndexDescription ;
30- for ( key in TableIndex ) {
31- if ( DISPLAYED_FIELDS . has ( key ) ) {
32- info . push ( formatTableIndexItem ( key , TableIndex ?. [ key ] ) ) ;
35+ if ( TableIndex ) {
36+ DISPLAYED_FIELDS . forEach ( ( key : DisplayedIndexField ) => {
37+ const value = TableIndex [ key ] ;
38+ if ( value !== undefined ) {
39+ info . push ( formatTableIndexItem ( key , value ) ) ;
40+ }
41+ } ) ;
42+ }
43+
44+ const vectorSettings = TableIndex ?. VectorIndexKmeansTreeDescription ?. Settings ;
45+
46+ if ( ! vectorSettings ) {
47+ return < InfoViewer title = { entityName } info = { info } /> ;
48+ }
49+
50+ const vectorFormatter = createInfoFormatter < { clusters ?: number ; levels ?: number } > ( {
51+ values : {
52+ clusters : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
53+ levels : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
54+ } ,
55+ labels : {
56+ clusters : i18n ( 'field_clusters' ) ,
57+ levels : i18n ( 'field_levels' ) ,
58+ } ,
59+ } ) ;
60+
61+ const vectorSettingsFormatter = createInfoFormatter < {
62+ vector_dimension ?: number ;
63+ vector_type ?: string ;
64+ metric ?: string ;
65+ } > ( {
66+ values : {
67+ vector_dimension : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
68+ } ,
69+ labels : {
70+ vector_dimension : i18n ( 'field_vector-dimension' ) ,
71+ vector_type : i18n ( 'field_vector-type' ) ,
72+ metric : i18n ( 'field_metric' ) ,
73+ } ,
74+ } ) ;
75+
76+ const vectorInfo : Array < InfoViewerItem > = [ ] ;
77+ if ( 'clusters' in vectorSettings ) {
78+ vectorInfo . push ( vectorFormatter ( 'clusters' , vectorSettings . clusters ) ) ;
79+ }
80+ if ( 'levels' in vectorSettings ) {
81+ vectorInfo . push ( vectorFormatter ( 'levels' , vectorSettings . levels ) ) ;
82+ }
83+ if ( vectorSettings . settings ) {
84+ const settings = vectorSettings . settings ;
85+ if ( 'vector_dimension' in settings ) {
86+ vectorInfo . push ( vectorSettingsFormatter ( 'vector_dimension' , settings . vector_dimension ) ) ;
87+ }
88+ if ( 'vector_type' in settings ) {
89+ vectorInfo . push ( vectorSettingsFormatter ( 'vector_type' , settings . vector_type ) ) ;
90+ }
91+ if ( 'metric' in settings ) {
92+ vectorInfo . push ( vectorSettingsFormatter ( 'metric' , settings . metric ) ) ;
3393 }
3494 }
3595
36- return < InfoViewer title = { entityName } info = { info } /> ;
96+ return (
97+ < >
98+ < InfoViewer title = { entityName } info = { info } />
99+ < InfoViewer title = { i18n ( 'title_vector-index' ) } info = { vectorInfo } />
100+ </ >
101+ ) ;
37102} ;
0 commit comments