Skip to content

Commit 8b60c07

Browse files
fix(Clusters): fix columns setup do not save values
1 parent 0434410 commit 8b60c07

File tree

5 files changed

+67
-54
lines changed

5 files changed

+67
-54
lines changed

src/containers/Clusters/Clusters.tsx

+8-3
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,19 @@ import {
2020
} from '../../store/reducers/clusters/selectors';
2121
import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
2222
import {useAutoRefreshInterval, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
23+
import {useSelectedColumns} from '../../utils/hooks/useSelectedColumns';
2324
import {getMinorVersion} from '../../utils/versions';
2425

2526
import {ClustersStatistics} from './ClustersStatistics';
2627
import {CLUSTERS_COLUMNS, CLUSTERS_COLUMNS_WIDTH_LS_KEY} from './columns';
27-
import {COLUMNS_NAMES, COLUMNS_TITLES, DEFAULT_COLUMNS, SELECTED_COLUMNS_KEY} from './constants';
28+
import {
29+
CLUSTERS_SELECTED_COLUMNS_KEY,
30+
COLUMNS_NAMES,
31+
COLUMNS_TITLES,
32+
DEFAULT_COLUMNS,
33+
} from './constants';
2834
import i18n from './i18n';
2935
import {b} from './shared';
30-
import {useSelectedColumns} from './useSelectedColumns';
3136

3237
import './Clusters.scss';
3338

@@ -59,7 +64,7 @@ export function Clusters() {
5964

6065
const {columnsToShow, columnsToSelect, setColumns} = useSelectedColumns(
6166
CLUSTERS_COLUMNS,
62-
SELECTED_COLUMNS_KEY,
67+
CLUSTERS_SELECTED_COLUMNS_KEY,
6368
COLUMNS_TITLES,
6469
DEFAULT_COLUMNS,
6570
[COLUMNS_NAMES.TITLE],

src/containers/Clusters/columns.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ export const CLUSTERS_COLUMNS: Column<PreparedCluster>[] = [
122122
},
123123
},
124124
{
125-
name: COLUMNS_NAMES.CLUSTER,
126-
header: COLUMNS_TITLES[COLUMNS_NAMES.CLUSTER],
125+
name: COLUMNS_NAMES.DC,
126+
header: COLUMNS_TITLES[COLUMNS_NAMES.DC],
127127
width: 120,
128128
sortable: false,
129129
render: ({row}) => {

src/containers/Clusters/constants.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
export const SELECTED_COLUMNS_KEY = 'selectedColumns';
1+
export const CLUSTERS_SELECTED_COLUMNS_KEY = 'selectedColumns';
22

33
export const COLUMNS_NAMES = {
44
TITLE: 'title',
55
VERSIONS: 'versions',
6-
CLUSTER: 'cluster',
6+
DC: 'dc',
77
SERVICE: 'service',
88
STATUS: 'status',
99
NODES: 'nodes',
@@ -33,7 +33,7 @@ export const DEFAULT_COLUMNS = [
3333
export const COLUMNS_TITLES = {
3434
[COLUMNS_NAMES.TITLE]: 'Cluster',
3535
[COLUMNS_NAMES.VERSIONS]: 'Versions',
36-
[COLUMNS_NAMES.CLUSTER]: 'DC',
36+
[COLUMNS_NAMES.DC]: 'DC',
3737
[COLUMNS_NAMES.SERVICE]: 'Service',
3838
[COLUMNS_NAMES.STATUS]: 'Status',
3939
[COLUMNS_NAMES.NODES]: 'Nodes',

src/containers/Clusters/useSelectedColumns.ts

-46
This file was deleted.

src/utils/hooks/useSelectedColumns.ts

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import React from 'react';
2+
3+
import type {TableColumnSetupItem, TableColumnSetupProps} from '@gravity-ui/uikit';
4+
5+
import {settingsManager} from '../../services/settings';
6+
7+
export const useSelectedColumns = <T extends {name: string}>(
8+
columns: T[],
9+
storageKey: string,
10+
columnsTitles: Record<string, string>,
11+
defaultColumnsIds: string[],
12+
requiredColumnsIds?: string[],
13+
) => {
14+
const [selectedColumnsIds, setSelectedColumnsIds] = React.useState<string[]>(() => {
15+
return settingsManager.readUserSettingsValue(storageKey, defaultColumnsIds) as string[];
16+
});
17+
18+
const columnsToShow = React.useMemo(() => {
19+
return columns.filter((column) => selectedColumnsIds.find((name) => name === column.name));
20+
}, [columns, selectedColumnsIds]);
21+
22+
const columnsToSelect: TableColumnSetupItem[] = React.useMemo(() => {
23+
const columnsIds = columns.map((column) => column.name);
24+
25+
return columnsIds.map((id) => {
26+
const isRequired = requiredColumnsIds?.includes(id);
27+
const isSelected = selectedColumnsIds.includes(id);
28+
29+
return {
30+
id,
31+
title: columnsTitles[id],
32+
selected: isRequired || isSelected,
33+
required: isRequired,
34+
sticky: isRequired ? 'start' : undefined,
35+
};
36+
});
37+
}, [columns, columnsTitles, requiredColumnsIds, selectedColumnsIds]);
38+
39+
const setColumns: TableColumnSetupProps['onUpdate'] = React.useCallback(
40+
(value) => {
41+
const selectedColumns = value.filter((el) => el.selected).map((el) => el.id);
42+
43+
settingsManager.setUserSettingsValue(storageKey, selectedColumns);
44+
setSelectedColumnsIds(selectedColumns);
45+
},
46+
[storageKey],
47+
);
48+
49+
return {
50+
columnsToShow,
51+
columnsToSelect,
52+
setColumns,
53+
};
54+
};

0 commit comments

Comments
 (0)