@@ -36,11 +36,6 @@ const tableColumnsNames = {
3636 Path : 'Path' ,
3737} ;
3838
39- const INITIAL_SORT_ORDER = [ {
40- columnId : tableColumnsNames . CPUCores ,
41- order : DataTable . DESCENDING ,
42- } ] ;
43-
4439const autofetcher = new AutoFetcher ( ) ;
4540
4641function prepareCPUWorkloadValue ( value ) {
@@ -51,16 +46,24 @@ function prepareDateSizeValue(value) {
5146 return new Intl . NumberFormat ( i18n . lang ) . format ( value ) ;
5247}
5348
54- function parseColumnsSortOrder ( columns ) {
55- return columns . map ( ( { columnId, order} ) => ( {
49+ function stringToDataTableSortOrder ( value ) {
50+ return value && value . split ( ',' ) . map ( ( columnId ) => ( {
51+ columnId,
52+ order : DataTable . DESCENDING ,
53+ } ) ) ;
54+ }
55+
56+ function stringToQuerySortOrder ( value ) {
57+ return value && value . split ( ',' ) . map ( ( columnId ) => ( {
5658 columnId,
57- order : {
58- [ DataTable . ASCENDING ] : 'ASC' ,
59- [ DataTable . DESCENDING ] : 'DESC' ,
60- } [ order ] ,
59+ order : 'DESC' ,
6160 } ) ) ;
6261}
6362
63+ function dataTableToStringSortOrder ( value = [ ] ) {
64+ return value . map ( ( { columnId} ) => columnId ) . join ( ',' ) ;
65+ }
66+
6467function TopShards ( {
6568 sendShardQuery,
6669 currentSchemaPath,
@@ -75,7 +78,7 @@ function TopShards({
7578 setShardQueryOptions,
7679 type,
7780} ) {
78- const [ sortOrder , setSortOrder ] = useState ( INITIAL_SORT_ORDER ) ;
81+ const [ sortOrder , setSortOrder ] = useState ( tableColumnsNames . CPUCores ) ;
7982
8083 useEffect ( ( ) => {
8184 autofetcher . stop ( ) ;
@@ -85,7 +88,7 @@ function TopShards({
8588 autofetcher . fetch ( ( ) => sendShardQuery ( {
8689 database : path ,
8790 path : currentSchemaPath ,
88- sortOrder : parseColumnsSortOrder ( sortOrder ) ,
91+ sortOrder : stringToQuerySortOrder ( sortOrder ) ,
8992 } ) ) ;
9093 }
9194
@@ -106,7 +109,7 @@ function TopShards({
106109 sendShardQuery ( {
107110 database : path ,
108111 path : currentSchemaPath ,
109- sortOrder : parseColumnsSortOrder ( sortOrder ) ,
112+ sortOrder : stringToQuerySortOrder ( sortOrder ) ,
110113 } ) ;
111114 } , [ currentSchemaPath , path , sendShardQuery , sortOrder ] ) ;
112115
@@ -120,6 +123,13 @@ function TopShards({
120123 } ;
121124 } ;
122125
126+ const onSort = ( newSortOrder ) => {
127+ // omit information about sort order to disable ASC order, only DESC makes sense for top shards
128+ // use a string (and not the DataTable default format) to prevent reference change,
129+ // which would cause an excess state change, to avoid repeating requests
130+ setSortOrder ( dataTableToStringSortOrder ( newSortOrder ) ) ;
131+ } ;
132+
123133 const tableColumns = useMemo ( ( ) => {
124134 return [
125135 {
@@ -189,8 +199,8 @@ function TopShards({
189199 settings = { TABLE_SETTINGS }
190200 className = { b ( 'table' ) }
191201 theme = "yandex-cloud"
192- onSort = { setSortOrder }
193- sortOrder = { sortOrder }
202+ onSort = { onSort }
203+ sortOrder = { stringToDataTableSortOrder ( sortOrder ) }
194204 />
195205 </ div >
196206 ) : (
0 commit comments