Skip to content

Commit 7afe86f

Browse files
fix(Schema): display keys in right order
1 parent c92953b commit 7afe86f

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

src/containers/Tenant/Schema/SchemaViewer/SchemaViewer.tsx

+18-11
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import {useMemo} from 'react';
12
import cn from 'bem-cn-lite';
23

34
import DataTable, {Column} from '@gravity-ui/react-data-table';
@@ -28,6 +29,15 @@ interface SchemaViewerProps {
2829
}
2930

3031
export const SchemaViewer = ({keyColumnIds = [], columns = [], type}: SchemaViewerProps) => {
32+
const keyColumnsOrderValues = useMemo(() => {
33+
return keyColumnIds.reduce<Record<number, number>>((result, keyColumnId, index) => {
34+
// Put columns with negative values, so they will be the first with ascending sort
35+
// Minus keyColumnIds.length for the first key, -1 for the last
36+
result[keyColumnId] = index - keyColumnIds.length;
37+
return result;
38+
}, {});
39+
}, [keyColumnIds]);
40+
3141
let dataTableColumns: Column<TColumnDescription>[] = [
3242
{
3343
name: SchemaViewerColumns.id,
@@ -36,8 +46,11 @@ export const SchemaViewer = ({keyColumnIds = [], columns = [], type}: SchemaView
3646
{
3747
name: SchemaViewerColumns.key,
3848
width: 40,
49+
// Table should start with key columns on sort click
50+
defaultOrder: DataTable.ASCENDING,
3951
sortAccessor: (row) => {
40-
return row.Id && keyColumnIds.includes(row.Id) ? 1 : 0;
52+
// Values in keyColumnsOrderValues are always negative, so it will be 1 for not key columns
53+
return (row.Id && keyColumnsOrderValues[row.Id]) || 1;
4154
},
4255
render: ({row}) => {
4356
return row.Id && keyColumnIds.includes(row.Id) ? (
@@ -58,6 +71,8 @@ export const SchemaViewer = ({keyColumnIds = [], columns = [], type}: SchemaView
5871
{
5972
name: SchemaViewerColumns.notNull,
6073
width: 100,
74+
// Table should start with notNull columns on sort click
75+
defaultOrder: DataTable.DESCENDING,
6176
render: ({row}) => {
6277
if (row.NotNull) {
6378
return '\u2713';
@@ -75,22 +90,14 @@ export const SchemaViewer = ({keyColumnIds = [], columns = [], type}: SchemaView
7590
);
7691
}
7792

78-
// Display key columns first
79-
const tableData = columns.sort((column) => {
80-
if (column.Id && keyColumnIds.includes(column.Id)) {
81-
return 1;
82-
}
83-
return -1;
84-
});
85-
8693
return (
8794
<div className={b()}>
8895
<DataTable
8996
theme="yandex-cloud"
90-
data={tableData}
97+
data={columns}
9198
columns={dataTableColumns}
9299
settings={DEFAULT_TABLE_SETTINGS}
93-
initialSortOrder={{columnId: SchemaViewerColumns.key, order: DataTable.DESCENDING}}
100+
initialSortOrder={{columnId: SchemaViewerColumns.key, order: DataTable.ASCENDING}}
94101
/>
95102
</div>
96103
);

0 commit comments

Comments
 (0)