@snack-uikit/table 0.34.0 → 0.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 0.34.1 (2025-03-07)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **PDS-1483:** translation and initial column filters open state improvements for table ([d4ef555](https://github.com/cloud-ru-tech/snack-uikit/commit/d4ef5552a9a7883b01cdabcb96a22f1ee08d8d29))
12
+
13
+
14
+
15
+
16
+
6
17
  # 0.34.0 (2025-03-06)
7
18
 
8
19
 
package/README.md CHANGED
@@ -115,7 +115,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
115
115
  | copyPinnedRows | `boolean` | - | Параметр отвечает за сохранение закрепленных строк в теле таблицы |
116
116
  | enableSelectPinned | `boolean` | - | Параметр отвечает за чекбокс выбора закрепленных строк |
117
117
  | sorting | `{ initialState?: SortingState; state?: SortingState; onChange?(state: SortingState): void; }` | - | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br> <strong>initialState</strong>: Начальное состояние сортировки <br> <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br> <strong>onChange</strong>: Колбэк на изменение сортировки |
118
- | columnsSettings | `{ enableDrag?: boolean; headerLabel?: string; }` | - | Параметры отвечают за настройки колонок <br> <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br> <strong>headerLabel</strong>: Название меню настроек колонок. Наличие включает показ настроек <br> <strong>selectAllButtonLabels</strong>: Значения кнопки включения/отключения всех айтемов ([вкл, выкл]) <br> |
118
+ | columnsSettings | `{ enableDrag?: boolean; enableSettingsMenu?: boolean; }` | - | Параметры отвечают за настройки колонок <br> <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br> <strong>enableSettingsMenu</strong>: Включение настроек показа колонок <br> |
119
119
  | expanding | `{ getSubRows: (element: TData) => TData[]; expandingColumnDefinition: TreeColumnDefinitionProps<TData>; }` | - | Параметр отвечает за общие настройки раскрывающихся строк |
120
120
  | rowSelection | `{ initialState?: RowSelectionState; state?: RowSelectionState; enable?: boolean \| ((row: Row<TData>) => boolean); multiRow?: boolean; onChange?(state: RowSelectionState): void; }` | - | Параметры отвечают за возможность выбора строк <br> <strong>initialState</strong>: Начальное состояние выбора строк <br> <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br> <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br> <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br> <strong>onChange</strong>: Колбэк на выбор строк |
121
121
  | search | `{ initialState?: string; state?: string; placeholder?: string; loading?: boolean; onChange?(value: string): void; }` | 'Search'<br> <strong>loading</strong>: Состояние загрузки в строке поиска <br> <strong>onChange</strong>: Колбэк на изменение данных в строке поиска | Параметры отвечают за глобальный поиск в таблице <br> <strong>initialState</strong>: Начальное состояние строки поиска <br> <strong>state</strong>: Состояние строки поиска, жестко устанавливаемое снаружи <br> <strong>placeholder</strong>: Placeholder строки поиска |
@@ -127,7 +127,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
127
127
  | loading | `boolean` | - | Состояние загрузки |
128
128
  | onRefresh | `() => void` | - | Колбек обновления данных |
129
129
  | outline | `boolean` | - | Внешний бордер для тулбара и таблицы |
130
- | columnFilters | `FilterRow<TFilters>` | - | Фильтры |
130
+ | columnFilters | `Omit<ChipChoiceRowProps<TFilters>, "size" \| "data-test-id"> & { open?: boolean; onOpenChange?(isOpen: boolean): void; } & { initialOpen?: boolean; }` | - | Фильтры |
131
131
  | dataFiltered | `boolean` | - | Флаг, показывающий что данные были отфильтрованы при пустых данных |
132
132
  | dataError | `boolean` | - | Флаг, показывающий что произошла ошибка запроса при пустых данных |
133
133
  | noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
@@ -187,7 +187,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
187
187
  | copyPinnedRows | `boolean` | false | Параметр отвечает за сохранение закрепленных строк в теле таблицы |
188
188
  | enableSelectPinned | `boolean` | - | Параметр отвечает за чекбокс выбора закрепленных строк |
189
189
  | sorting | `{ initialState?: SortingState; state?: SortingState; onChange?(state: SortingState): void; }` | - | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br> <strong>initialState</strong>: Начальное состояние сортировки <br> <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br> <strong>onChange</strong>: Колбэк на изменение сортировки |
190
- | columnsSettings | `{ enableDrag?: boolean; headerLabel?: string; }` | - | Параметры отвечают за настройки колонок <br> <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br> <strong>headerLabel</strong>: Название меню настроек колонок. Наличие включает показ настроек <br> <strong>selectAllButtonLabels</strong>: Значения кнопки включения/отключения всех айтемов ([вкл, выкл]) <br> |
190
+ | columnsSettings | `{ enableDrag?: boolean; enableSettingsMenu?: boolean; }` | - | Параметры отвечают за настройки колонок <br> <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br> <strong>enableSettingsMenu</strong>: Включение настроек показа колонок <br> |
191
191
  | expanding | `{ getSubRows: (element: TData) => TData[]; expandingColumnDefinition: TreeColumnDefinitionProps<TData>; }` | - | Параметр отвечает за общие настройки раскрывающихся строк |
192
192
  | rowSelection | `{ initialState?: RowSelectionState; state?: RowSelectionState; enable?: boolean \| ((row: Row<TData>) => boolean); multiRow?: boolean; onChange?(state: RowSelectionState): void; }` | - | Параметры отвечают за возможность выбора строк <br> <strong>initialState</strong>: Начальное состояние выбора строк <br> <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br> <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br> <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br> <strong>onChange</strong>: Колбэк на выбор строк |
193
193
  | enableFuzzySearch | `boolean` | - | Включить нечеткий поиск |
@@ -195,7 +195,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
195
195
  | onRowClick | `RowClickHandler<TData>` | - | Колбэк клика по строке |
196
196
  | loading | `boolean` | - | Состояние загрузки |
197
197
  | outline | `boolean` | - | Внешний бордер для тулбара и таблицы |
198
- | columnFilters | `FilterRow<TFilters>` | - | Фильтры |
198
+ | columnFilters | `Omit<ChipChoiceRowProps<TFilters>, "size" \| "data-test-id"> & { open?: boolean; onOpenChange?(isOpen: boolean): void; } & { initialOpen?: boolean; }` | - | Фильтры |
199
199
  | dataFiltered | `boolean` | - | Флаг, показывающий что данные были отфильтрованы при пустых данных |
200
200
  | dataError | `boolean` | - | Флаг, показывающий что произошла ошибка запроса при пустых данных |
201
201
  | noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
@@ -114,7 +114,7 @@ function Table(_a) {
114
114
  initialState: [],
115
115
  onChange: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.onVisibleFiltersChange
116
116
  }, constants_1.DEFAULT_FILTER_VISIBILITY);
117
- const [areColumnFiltersOpen, setAreColumnFiltersOpen] = (0, react_1.useState)(true);
117
+ const [areColumnFiltersOpen, setAreColumnFiltersOpen] = (0, react_1.useState)(() => (0, utils_3.getInitialColumnsOpenValue)(columnFilters));
118
118
  (0, react_1.useEffect)(() => {
119
119
  setDataToStorages({
120
120
  pagination,
@@ -138,9 +138,10 @@ function Table(_a) {
138
138
  if (!columnFilters) {
139
139
  return undefined;
140
140
  }
141
- return Object.assign(Object.assign({}, columnFilters), {
141
+ return Object.assign(Object.assign({
142
142
  open: areColumnFiltersOpen,
143
- onOpenChange: setAreColumnFiltersOpen,
143
+ onOpenChange: setAreColumnFiltersOpen
144
+ }, columnFilters), {
144
145
  value: filter,
145
146
  onChange: setFilter,
146
147
  visibleFilters: filterVisibility,
@@ -181,9 +182,8 @@ function Table(_a) {
181
182
  columnDefinitions,
182
183
  columnOrder,
183
184
  areAllColumnsEnabled,
184
- columnsSettingsHeader: columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel,
185
185
  t
186
- }), [areAllColumnsEnabled, columnDefinitions, columnOrder, columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel, t]);
186
+ }), [areAllColumnsEnabled, columnDefinitions, columnOrder, t]);
187
187
  const columnPinning = (0, react_1.useMemo)(() => {
188
188
  var _a;
189
189
  const pinningState = {
@@ -404,7 +404,7 @@ function Table(_a) {
404
404
  updateCellMap
405
405
  } = (0, contexts_1.useCellAutoResizeController)(table);
406
406
  const showToolbar = !suppressToolbar;
407
- const showColumnsSettings = Boolean(columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel);
407
+ const showColumnsSettings = Boolean(columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.enableSettingsMenu);
408
408
  const enableColumnsOrderSortByDrag = Boolean(columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.enableDrag);
409
409
  return (0, jsx_runtime_1.jsxs)("div", Object.assign({
410
410
  className: (0, classnames_1.default)(styles_module_scss_1.default.wrapper, className)
@@ -1,6 +1,7 @@
1
1
  import { GroupSelectItemProps } from '@snack-uikit/list';
2
2
  import { useLocale } from '@snack-uikit/locale';
3
3
  import { ColumnDefinition, FilterableColumnDefinition } from '../../types';
4
+ import { TableProps } from '../types';
4
5
  export declare function getCurrentlyConfiguredHeaderWidth(id: string): number;
5
6
  export declare function getColumnStyleVars(id: string): {
6
7
  sizeKey: string;
@@ -23,8 +24,8 @@ type PrepareColumnsSettingsProps<TData extends object> = {
23
24
  columnDefinitions: ColumnDefinition<TData>[];
24
25
  columnOrder: string[];
25
26
  areAllColumnsEnabled: boolean;
26
- columnsSettingsHeader?: string;
27
27
  t: ReturnType<typeof useLocale<'Table'>>['t'];
28
28
  };
29
- export declare function prepareColumnsSettings<TData extends object>({ columnDefinitions, columnOrder, columnsSettingsHeader, areAllColumnsEnabled, t, }: PrepareColumnsSettingsProps<TData>): [GroupSelectItemProps];
29
+ export declare function prepareColumnsSettings<TData extends object>({ columnDefinitions, columnOrder, areAllColumnsEnabled, t, }: PrepareColumnsSettingsProps<TData>): [GroupSelectItemProps];
30
+ export declare function getInitialColumnsOpenValue<TData extends object>(columnFilters: TableProps<TData>['columnFilters']): boolean;
30
31
  export {};
@@ -10,6 +10,7 @@ exports.saveStateToLocalStorage = saveStateToLocalStorage;
10
10
  exports.isFilterableColumn = isFilterableColumn;
11
11
  exports.prepareColumnsSettingsMap = prepareColumnsSettingsMap;
12
12
  exports.prepareColumnsSettings = prepareColumnsSettings;
13
+ exports.getInitialColumnsOpenValue = getInitialColumnsOpenValue;
13
14
  const utils_1 = require("@snack-uikit/utils");
14
15
  function getCurrentlyConfiguredHeaderWidth(id) {
15
16
  if ((0, utils_1.isBrowser)()) {
@@ -85,7 +86,6 @@ function prepareColumnsSettings(_ref3) {
85
86
  let {
86
87
  columnDefinitions,
87
88
  columnOrder,
88
- columnsSettingsHeader,
89
89
  areAllColumnsEnabled,
90
90
  t
91
91
  } = _ref3;
@@ -123,8 +123,14 @@ function prepareColumnsSettings(_ref3) {
123
123
  type: 'group'
124
124
  }],
125
125
  selectButtonLabel: areAllColumnsEnabled ? t('groupSelectButton.hide') : t('groupSelectButton.show'),
126
- label: columnsSettingsHeader || 'Display settings',
126
+ label: t('settingsHeaderLabel'),
127
127
  mode: 'primary',
128
128
  type: 'group-select'
129
129
  }];
130
+ }
131
+ function getInitialColumnsOpenValue(columnFilters) {
132
+ if (!columnFilters) {
133
+ return false;
134
+ }
135
+ return 'initialOpen' in columnFilters && typeof columnFilters.initialOpen === 'boolean' ? columnFilters.initialOpen : true;
130
136
  }
@@ -32,12 +32,11 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
32
32
  };
33
33
  /** Параметры отвечают за настройки колонок <br>
34
34
  * <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br>
35
- * <strong>headerLabel</strong>: Название меню настроек колонок. Наличие включает показ настроек <br>
36
- * <strong>selectAllButtonLabels</strong>: Значения кнопки включения/отключения всех айтемов ([вкл, выкл]) <br>
35
+ * <strong>enableSettingsMenu</strong>: Включение настроек показа колонок <br>
37
36
  * */
38
37
  columnsSettings?: {
39
38
  enableDrag?: boolean;
40
- headerLabel?: string;
39
+ enableSettingsMenu?: boolean;
41
40
  };
42
41
  /** Параметр отвечает за общие настройки раскрывающихся строк*/
43
42
  expanding?: {
@@ -89,7 +88,9 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
89
88
  /** Внешний бордер для тулбара и таблицы */
90
89
  outline?: boolean;
91
90
  /** Фильтры */
92
- columnFilters?: FilterRow<TFilters>;
91
+ columnFilters?: FilterRow<TFilters> & {
92
+ initialOpen?: boolean;
93
+ };
93
94
  /** Флаг, показывающий что данные были отфильтрованы при пустых данных */
94
95
  dataFiltered?: boolean;
95
96
  /** Флаг, показывающий что произошла ошибка запроса при пустых данных */
@@ -30,7 +30,7 @@ import { useColumnOrderByDrag, useLoadingTable, useStateControl } from './hooks'
30
30
  import { usePageReset } from './hooks/usePageReset';
31
31
  import { useSaveTableSettings } from './hooks/useSaveTableSettings';
32
32
  import styles from './styles.module.css';
33
- import { getColumnStyleVars, getCurrentlyConfiguredHeaderWidth, getInitColumnSizeFromLocalStorage, isFilterableColumn, prepareColumnsSettings, prepareColumnsSettingsMap, saveStateToLocalStorage, } from './utils';
33
+ import { getColumnStyleVars, getCurrentlyConfiguredHeaderWidth, getInitColumnSizeFromLocalStorage, getInitialColumnsOpenValue, isFilterableColumn, prepareColumnsSettings, prepareColumnsSettingsMap, saveStateToLocalStorage, } from './utils';
34
34
  /** Компонент таблицы */
35
35
  export function Table(_a) {
36
36
  var { data, rowPinning = {
@@ -58,7 +58,7 @@ export function Table(_a) {
58
58
  initialState: [],
59
59
  onChange: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.onVisibleFiltersChange,
60
60
  }, DEFAULT_FILTER_VISIBILITY);
61
- const [areColumnFiltersOpen, setAreColumnFiltersOpen] = useState(true);
61
+ const [areColumnFiltersOpen, setAreColumnFiltersOpen] = useState(() => getInitialColumnsOpenValue(columnFilters));
62
62
  useEffect(() => {
63
63
  setDataToStorages({ pagination, sorting, filter, search: globalFilter || '' });
64
64
  }, [pagination, sorting, filter, setDataToStorages, globalFilter]);
@@ -77,7 +77,7 @@ export function Table(_a) {
77
77
  if (!columnFilters) {
78
78
  return undefined;
79
79
  }
80
- return Object.assign(Object.assign({}, columnFilters), { open: areColumnFiltersOpen, onOpenChange: setAreColumnFiltersOpen, value: filter, onChange: setFilter, visibleFilters: filterVisibility, onVisibleFiltersChange: setFilterVisibility });
80
+ return Object.assign(Object.assign({ open: areColumnFiltersOpen, onOpenChange: setAreColumnFiltersOpen }, columnFilters), { value: filter, onChange: setFilter, visibleFilters: filterVisibility, onVisibleFiltersChange: setFilterVisibility });
81
81
  }, [columnFilters, areColumnFiltersOpen, filter, setFilter, filterVisibility, setFilterVisibility]);
82
82
  const enableSelection = Boolean(rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable);
83
83
  const manualPagination = infiniteLoading || manualPaginationProp;
@@ -106,9 +106,8 @@ export function Table(_a) {
106
106
  columnDefinitions,
107
107
  columnOrder,
108
108
  areAllColumnsEnabled,
109
- columnsSettingsHeader: columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel,
110
109
  t,
111
- }), [areAllColumnsEnabled, columnDefinitions, columnOrder, columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel, t]);
110
+ }), [areAllColumnsEnabled, columnDefinitions, columnOrder, t]);
112
111
  const columnPinning = useMemo(() => {
113
112
  var _a;
114
113
  const pinningState = { left: [], right: [] };
@@ -298,7 +297,7 @@ export function Table(_a) {
298
297
  });
299
298
  const { updateCellMap } = useCellAutoResizeController(table);
300
299
  const showToolbar = !suppressToolbar;
301
- const showColumnsSettings = Boolean(columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel);
300
+ const showColumnsSettings = Boolean(columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.enableSettingsMenu);
302
301
  const enableColumnsOrderSortByDrag = Boolean(columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.enableDrag);
303
302
  return (_jsxs("div", Object.assign({ className: cn(styles.wrapper, className) }, extractSupportProps(rest), { children: [showToolbar && (_jsx("div", { className: styles.header, children: _jsx(Toolbar, { search: suppressSearch
304
303
  ? undefined
@@ -1,6 +1,7 @@
1
1
  import { GroupSelectItemProps } from '@snack-uikit/list';
2
2
  import { useLocale } from '@snack-uikit/locale';
3
3
  import { ColumnDefinition, FilterableColumnDefinition } from '../../types';
4
+ import { TableProps } from '../types';
4
5
  export declare function getCurrentlyConfiguredHeaderWidth(id: string): number;
5
6
  export declare function getColumnStyleVars(id: string): {
6
7
  sizeKey: string;
@@ -23,8 +24,8 @@ type PrepareColumnsSettingsProps<TData extends object> = {
23
24
  columnDefinitions: ColumnDefinition<TData>[];
24
25
  columnOrder: string[];
25
26
  areAllColumnsEnabled: boolean;
26
- columnsSettingsHeader?: string;
27
27
  t: ReturnType<typeof useLocale<'Table'>>['t'];
28
28
  };
29
- export declare function prepareColumnsSettings<TData extends object>({ columnDefinitions, columnOrder, columnsSettingsHeader, areAllColumnsEnabled, t, }: PrepareColumnsSettingsProps<TData>): [GroupSelectItemProps];
29
+ export declare function prepareColumnsSettings<TData extends object>({ columnDefinitions, columnOrder, areAllColumnsEnabled, t, }: PrepareColumnsSettingsProps<TData>): [GroupSelectItemProps];
30
+ export declare function getInitialColumnsOpenValue<TData extends object>(columnFilters: TableProps<TData>['columnFilters']): boolean;
30
31
  export {};
@@ -56,7 +56,7 @@ function createColumnsSettingsOption(columnDefinition) {
56
56
  showSwitchIcon: true,
57
57
  };
58
58
  }
59
- export function prepareColumnsSettings({ columnDefinitions, columnOrder, columnsSettingsHeader, areAllColumnsEnabled, t, }) {
59
+ export function prepareColumnsSettings({ columnDefinitions, columnOrder, areAllColumnsEnabled, t, }) {
60
60
  const groupedItems = columnDefinitions
61
61
  .filter(isFilterableColumn)
62
62
  .sort(sortColumnDefinitions(columnOrder))
@@ -99,9 +99,17 @@ export function prepareColumnsSettings({ columnDefinitions, columnOrder, columns
99
99
  },
100
100
  ],
101
101
  selectButtonLabel: areAllColumnsEnabled ? t('groupSelectButton.hide') : t('groupSelectButton.show'),
102
- label: columnsSettingsHeader || 'Display settings',
102
+ label: t('settingsHeaderLabel'),
103
103
  mode: 'primary',
104
104
  type: 'group-select',
105
105
  },
106
106
  ];
107
107
  }
108
+ export function getInitialColumnsOpenValue(columnFilters) {
109
+ if (!columnFilters) {
110
+ return false;
111
+ }
112
+ return 'initialOpen' in columnFilters && typeof columnFilters.initialOpen === 'boolean'
113
+ ? columnFilters.initialOpen
114
+ : true;
115
+ }
@@ -32,12 +32,11 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
32
32
  };
33
33
  /** Параметры отвечают за настройки колонок <br>
34
34
  * <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br>
35
- * <strong>headerLabel</strong>: Название меню настроек колонок. Наличие включает показ настроек <br>
36
- * <strong>selectAllButtonLabels</strong>: Значения кнопки включения/отключения всех айтемов ([вкл, выкл]) <br>
35
+ * <strong>enableSettingsMenu</strong>: Включение настроек показа колонок <br>
37
36
  * */
38
37
  columnsSettings?: {
39
38
  enableDrag?: boolean;
40
- headerLabel?: string;
39
+ enableSettingsMenu?: boolean;
41
40
  };
42
41
  /** Параметр отвечает за общие настройки раскрывающихся строк*/
43
42
  expanding?: {
@@ -89,7 +88,9 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
89
88
  /** Внешний бордер для тулбара и таблицы */
90
89
  outline?: boolean;
91
90
  /** Фильтры */
92
- columnFilters?: FilterRow<TFilters>;
91
+ columnFilters?: FilterRow<TFilters> & {
92
+ initialOpen?: boolean;
93
+ };
93
94
  /** Флаг, показывающий что данные были отфильтрованы при пустых данных */
94
95
  dataFiltered?: boolean;
95
96
  /** Флаг, показывающий что произошла ошибка запроса при пустых данных */
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Table",
7
- "version": "0.34.0",
7
+ "version": "0.34.1",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -66,5 +66,5 @@
66
66
  "peerDependencies": {
67
67
  "@snack-uikit/locale": "*"
68
68
  },
69
- "gitHead": "cafb29b74a6ac4d38594e9d46599617925165935"
69
+ "gitHead": "d2606dfcde2dbcc674adc2d7765c3f1eee55aa7a"
70
70
  }
@@ -60,6 +60,7 @@ import {
60
60
  getColumnStyleVars,
61
61
  getCurrentlyConfiguredHeaderWidth,
62
62
  getInitColumnSizeFromLocalStorage,
63
+ getInitialColumnsOpenValue,
63
64
  isFilterableColumn,
64
65
  prepareColumnsSettings,
65
66
  prepareColumnsSettingsMap,
@@ -157,7 +158,9 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
157
158
  DEFAULT_FILTER_VISIBILITY,
158
159
  );
159
160
 
160
- const [areColumnFiltersOpen, setAreColumnFiltersOpen] = useState<boolean>(true);
161
+ const [areColumnFiltersOpen, setAreColumnFiltersOpen] = useState<boolean>(() =>
162
+ getInitialColumnsOpenValue(columnFilters),
163
+ );
161
164
 
162
165
  useEffect(() => {
163
166
  setDataToStorages({ pagination, sorting, filter, search: globalFilter || '' });
@@ -181,9 +184,9 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
181
184
  }
182
185
 
183
186
  return {
184
- ...columnFilters,
185
187
  open: areColumnFiltersOpen,
186
188
  onOpenChange: setAreColumnFiltersOpen,
189
+ ...columnFilters,
187
190
  value: filter,
188
191
  onChange: setFilter,
189
192
  visibleFilters: filterVisibility,
@@ -233,10 +236,9 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
233
236
  columnDefinitions,
234
237
  columnOrder,
235
238
  areAllColumnsEnabled,
236
- columnsSettingsHeader: columnsSettingsProp?.headerLabel,
237
239
  t,
238
240
  }),
239
- [areAllColumnsEnabled, columnDefinitions, columnOrder, columnsSettingsProp?.headerLabel, t],
241
+ [areAllColumnsEnabled, columnDefinitions, columnOrder, t],
240
242
  );
241
243
 
242
244
  const columnPinning = useMemo(() => {
@@ -469,7 +471,7 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
469
471
  const { updateCellMap } = useCellAutoResizeController(table);
470
472
 
471
473
  const showToolbar = !suppressToolbar;
472
- const showColumnsSettings = Boolean(columnsSettingsProp?.headerLabel);
474
+ const showColumnsSettings = Boolean(columnsSettingsProp?.enableSettingsMenu);
473
475
  const enableColumnsOrderSortByDrag = Boolean(columnsSettingsProp?.enableDrag);
474
476
 
475
477
  return (
@@ -3,6 +3,7 @@ import { useLocale } from '@snack-uikit/locale';
3
3
  import { isBrowser } from '@snack-uikit/utils';
4
4
 
5
5
  import { ColumnDefinition, FilterableColumnDefinition } from '../../types';
6
+ import { TableProps } from '../types';
6
7
 
7
8
  export function getCurrentlyConfiguredHeaderWidth(id: string): number {
8
9
  if (isBrowser()) {
@@ -114,14 +115,12 @@ type PrepareColumnsSettingsProps<TData extends object> = {
114
115
  columnDefinitions: ColumnDefinition<TData>[];
115
116
  columnOrder: string[];
116
117
  areAllColumnsEnabled: boolean;
117
- columnsSettingsHeader?: string;
118
118
  t: ReturnType<typeof useLocale<'Table'>>['t'];
119
119
  };
120
120
 
121
121
  export function prepareColumnsSettings<TData extends object>({
122
122
  columnDefinitions,
123
123
  columnOrder,
124
- columnsSettingsHeader,
125
124
  areAllColumnsEnabled,
126
125
  t,
127
126
  }: PrepareColumnsSettingsProps<TData>): [GroupSelectItemProps] {
@@ -175,9 +174,19 @@ export function prepareColumnsSettings<TData extends object>({
175
174
  },
176
175
  ],
177
176
  selectButtonLabel: areAllColumnsEnabled ? t('groupSelectButton.hide') : t('groupSelectButton.show'),
178
- label: columnsSettingsHeader || 'Display settings',
177
+ label: t('settingsHeaderLabel'),
179
178
  mode: 'primary',
180
179
  type: 'group-select',
181
180
  },
182
181
  ];
183
182
  }
183
+
184
+ export function getInitialColumnsOpenValue<TData extends object>(columnFilters: TableProps<TData>['columnFilters']) {
185
+ if (!columnFilters) {
186
+ return false;
187
+ }
188
+
189
+ return 'initialOpen' in columnFilters && typeof columnFilters.initialOpen === 'boolean'
190
+ ? columnFilters.initialOpen
191
+ : true;
192
+ }
@@ -44,12 +44,11 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
44
44
 
45
45
  /** Параметры отвечают за настройки колонок <br>
46
46
  * <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br>
47
- * <strong>headerLabel</strong>: Название меню настроек колонок. Наличие включает показ настроек <br>
48
- * <strong>selectAllButtonLabels</strong>: Значения кнопки включения/отключения всех айтемов ([вкл, выкл]) <br>
47
+ * <strong>enableSettingsMenu</strong>: Включение настроек показа колонок <br>
49
48
  * */
50
49
  columnsSettings?: {
51
50
  enableDrag?: boolean;
52
- headerLabel?: string;
51
+ enableSettingsMenu?: boolean;
53
52
  };
54
53
 
55
54
  /** Параметр отвечает за общие настройки раскрывающихся строк*/
@@ -111,7 +110,9 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
111
110
  outline?: boolean;
112
111
 
113
112
  /** Фильтры */
114
- columnFilters?: FilterRow<TFilters>;
113
+ columnFilters?: FilterRow<TFilters> & {
114
+ initialOpen?: boolean;
115
+ };
115
116
 
116
117
  /** Флаг, показывающий что данные были отфильтрованы при пустых данных */
117
118
  dataFiltered?: boolean;