Skip to content

Commit 6aa326f

Browse files
committed
fix(TopShards): only allow DESC sort
1 parent 006d3d9 commit 6aa326f

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

src/containers/Tenant/Diagnostics/TopShards/TopShards.js

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
4439
const autofetcher = new AutoFetcher();
4540

4641
function 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+
6467
function 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

Comments
 (0)