@snack-uikit/table 0.37.16-preview-964a845f.0 → 0.37.16

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +2 -2
  3. package/dist/cjs/components/ServerTable/utils.d.ts +6 -1
  4. package/dist/cjs/components/Table/Table.js +10 -12
  5. package/dist/cjs/components/Table/hooks/useColumnSettings/useColumnSettings.js +2 -3
  6. package/dist/cjs/components/Table/hooks/useLoadingTable.d.ts +6 -2
  7. package/dist/cjs/components/Table/hooks/useLoadingTable.js +37 -9
  8. package/dist/cjs/components/Table/utils/getTableColumnsDefinitions.d.ts +2 -3
  9. package/dist/cjs/components/Table/utils/getTableColumnsDefinitions.js +2 -5
  10. package/dist/cjs/components/types.d.ts +0 -6
  11. package/dist/cjs/components/types.js +1 -7
  12. package/dist/cjs/helperComponents/Cells/TreeCell/TreeCell.d.ts +1 -3
  13. package/dist/cjs/helperComponents/Cells/TreeCell/TreeCell.js +2 -5
  14. package/dist/cjs/helperComponents/Rows/BodyRow.d.ts +1 -3
  15. package/dist/cjs/helperComponents/Rows/BodyRow.js +1 -4
  16. package/dist/cjs/helperComponents/Rows/styles.module.css +1 -3
  17. package/dist/cjs/helperComponents/TableEmptyState/TableEmptyState.d.ts +2 -9
  18. package/dist/esm/components/ServerTable/utils.d.ts +6 -1
  19. package/dist/esm/components/Table/Table.js +5 -3
  20. package/dist/esm/components/Table/hooks/useColumnSettings/useColumnSettings.js +1 -2
  21. package/dist/esm/components/Table/hooks/useLoadingTable.d.ts +6 -2
  22. package/dist/esm/components/Table/hooks/useLoadingTable.js +22 -3
  23. package/dist/esm/components/Table/utils/getTableColumnsDefinitions.d.ts +2 -3
  24. package/dist/esm/components/Table/utils/getTableColumnsDefinitions.js +2 -6
  25. package/dist/esm/components/types.d.ts +0 -6
  26. package/dist/esm/components/types.js +1 -5
  27. package/dist/esm/helperComponents/Cells/TreeCell/TreeCell.d.ts +1 -3
  28. package/dist/esm/helperComponents/Cells/TreeCell/TreeCell.js +2 -4
  29. package/dist/esm/helperComponents/Rows/BodyRow.d.ts +1 -3
  30. package/dist/esm/helperComponents/Rows/BodyRow.js +2 -3
  31. package/dist/esm/helperComponents/Rows/styles.module.css +1 -3
  32. package/dist/esm/helperComponents/TableEmptyState/TableEmptyState.d.ts +2 -9
  33. package/package.json +2 -3
  34. package/src/components/ServerTable/utils.ts +6 -1
  35. package/src/components/Table/Table.tsx +5 -12
  36. package/src/components/Table/hooks/useColumnSettings/useColumnSettings.ts +1 -2
  37. package/src/components/Table/hooks/useLoadingTable.tsx +49 -11
  38. package/src/components/Table/utils/getTableColumnsDefinitions.ts +2 -7
  39. package/src/components/types.ts +0 -7
  40. package/src/helperComponents/Cells/TreeCell/TreeCell.tsx +1 -6
  41. package/src/helperComponents/Rows/BodyRow.tsx +0 -4
  42. package/src/helperComponents/Rows/styles.module.scss +1 -3
  43. package/src/helperComponents/TableEmptyState/TableEmptyState.tsx +2 -11
package/CHANGELOG.md CHANGED
@@ -3,6 +3,15 @@
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
+ ## <small>0.37.16 (2025-11-21)</small>
7
+
8
+ * fix(IAM-5889): fix table loading state ([27646e0](https://github.com/cloud-ru-tech/snack-uikit/commit/27646e0))
9
+ * feat(IAM-5889): extend table empty state props ([03463ff](https://github.com/cloud-ru-tech/snack-uikit/commit/03463ff))
10
+
11
+
12
+
13
+
14
+
6
15
  ## <small>0.37.15 (2025-11-14)</small>
7
16
 
8
17
  ### Only dependencies have been changed
package/README.md CHANGED
@@ -126,7 +126,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
126
126
  | sorting | `{ initialState?: SortingState; state?: SortingState; onChange?(state: SortingState): void; }` | - | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br> <strong>initialState</strong>: Начальное состояние сортировки <br> <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br> <strong>onChange</strong>: Колбэк на изменение сортировки |
127
127
  | columnsSettings | `{ enableDrag?: boolean; enableSettingsMenu?: boolean; }` | - | Параметры отвечают за настройки колонок <br> <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br> <strong>enableSettingsMenu</strong>: Включение настроек показа колонок <br> |
128
128
  | expanding | `{ getSubRows: (element: TData) => TData[]; expandingColumnDefinition: TreeColumnDefinitionProps<TData>; state?: ExpandedState; onChange?(state: ExpandedState): void; }` | - | Параметр отвечает за общие настройки раскрывающихся строк <br> <strong>getSubRows</strong>: Метод отвечает за получение дочерних строк <br> <strong>expandingColumnDefinition</strong>: Описание колонок для дочерних строк <br> <strong>state</strong>: Состояние открытых строк <br> <strong>onExpandedChange</strong>: Колбэк на раскрытие строк <br> |
129
- | rowSelection | `{ initialState?: RowSelectionState; state?: RowSelectionState; enable?: boolean \| ((row: Row<TData>) => boolean); multiRow?: boolean; onChange?(state: RowSelectionState): void; appearance?: RowAppearance; }` | - | Параметры отвечают за возможность выбора строк <br> <strong>initialState</strong>: Начальное состояние выбора строк <br> <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br> <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br> <strong>appearance</strong>: Режим отображения недоступной для выбора строки. Опции: RowAppearance.Disabled (по дефолту) - серый фон, чекбокс/радиобаттон скрыт, RowAppearance.HideToggler - обычный фон, чекбокс/радиобаттон скрыт <br> <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br> <strong>onChange</strong>: Колбэк на выбор строк |
129
+ | 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>: Колбэк на выбор строк |
130
130
  | 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 строки поиска |
131
131
  | enableFuzzySearch | `boolean` | - | Включить нечеткий поиск |
132
132
  | rowAutoHeight | `boolean` | - | |
@@ -200,7 +200,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
200
200
  | enableSelectPinned | `boolean` | - | Параметр отвечает за чекбокс выбора закрепленных строк |
201
201
  | columnsSettings | `{ enableDrag?: boolean; enableSettingsMenu?: boolean; }` | - | Параметры отвечают за настройки колонок <br> <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br> <strong>enableSettingsMenu</strong>: Включение настроек показа колонок <br> |
202
202
  | expanding | `{ getSubRows: (element: TData) => TData[]; expandingColumnDefinition: TreeColumnDefinitionProps<TData>; state?: ExpandedState; onChange?(state: ExpandedState): void; }` | - | Параметр отвечает за общие настройки раскрывающихся строк <br> <strong>getSubRows</strong>: Метод отвечает за получение дочерних строк <br> <strong>expandingColumnDefinition</strong>: Описание колонок для дочерних строк <br> <strong>state</strong>: Состояние открытых строк <br> <strong>onExpandedChange</strong>: Колбэк на раскрытие строк <br> |
203
- | rowSelection | `{ initialState?: RowSelectionState; state?: RowSelectionState; enable?: boolean \| ((row: Row<TData>) => boolean); multiRow?: boolean; onChange?(state: RowSelectionState): void; appearance?: RowAppearance; }` | - | Параметры отвечают за возможность выбора строк <br> <strong>initialState</strong>: Начальное состояние выбора строк <br> <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br> <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br> <strong>appearance</strong>: Режим отображения недоступной для выбора строки. Опции: RowAppearance.Disabled (по дефолту) - серый фон, чекбокс/радиобаттон скрыт, RowAppearance.HideToggler - обычный фон, чекбокс/радиобаттон скрыт <br> <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br> <strong>onChange</strong>: Колбэк на выбор строк |
203
+ | 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>: Колбэк на выбор строк |
204
204
  | enableFuzzySearch | `boolean` | - | Включить нечеткий поиск |
205
205
  | rowAutoHeight | `boolean` | - | |
206
206
  | onRowClick | `RowClickHandler<TData>` | - | Колбэк клика по строке |
@@ -1 +1,6 @@
1
- export declare const onSearchDebounced: import("lodash").DebouncedFunc<(newValue: string, onChange: (newValue: string) => void) => void>;
1
+ import debounce from 'lodash.debounce';
2
+ type ChangeHandler = (newValue: string) => void;
3
+ type SearchHandler = (newValue: string, onChange: ChangeHandler) => void;
4
+ type OnSearchDebouncedType = ReturnType<typeof debounce<SearchHandler>>;
5
+ export declare const onSearchDebounced: OnSearchDebouncedType;
6
+ export {};
@@ -118,9 +118,8 @@ function Table(_a) {
118
118
  columnDefinitions,
119
119
  enableSelection,
120
120
  enableSelectPinned,
121
- expanding,
122
- rowSelectionAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance
123
- }), [columnDefinitions, enableSelection, enableSelectPinned, expanding, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance]);
121
+ expanding
122
+ }), [columnDefinitions, enableSelection, enableSelectPinned, expanding]);
124
123
  const pinnedGroups = (0, react_1.useMemo)(() => (0, utils_3.getPinnedGroups)(allTableColumns), [allTableColumns]);
125
124
  const {
126
125
  enabledColumns,
@@ -246,7 +245,10 @@ function Table(_a) {
246
245
  } = (0, hooks_1.useLoadingTable)({
247
246
  pageSize: Math.min(Math.max(pageSize, 5), constants_1.DEFAULT_PAGE_SIZE),
248
247
  columnDefinitions: enabledColumnsDefinitions,
249
- columnPinning
248
+ columnPinning,
249
+ enableSelection,
250
+ enableSelectPinned,
251
+ expanding
250
252
  });
251
253
  const handleOnRefresh = (0, react_1.useCallback)(() => {
252
254
  table.resetRowSelection();
@@ -458,8 +460,7 @@ function Table(_a) {
458
460
  }), loadingTableRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
459
461
  row: row,
460
462
  rowAutoHeight: rowAutoHeight,
461
- columnOrder: columnOrder,
462
- disabledRowAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance
463
+ columnOrder: columnOrder
463
464
  }, row.id))]
464
465
  }) : (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
465
466
  children: [centerRows.length || filteredTopRows.length ? (0, jsx_runtime_1.jsx)(helperComponents_1.HeaderRow, {
@@ -473,23 +474,20 @@ function Table(_a) {
473
474
  onRowClick: onRowClick,
474
475
  rowAutoHeight: rowAutoHeight,
475
476
  columnOrder: columnOrder,
476
- enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag,
477
- disabledRowAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance
477
+ enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag
478
478
  }, row.id))
479
479
  }) : null, centerRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
480
480
  row: row,
481
481
  onRowClick: onRowClick,
482
482
  rowAutoHeight: rowAutoHeight,
483
483
  columnOrder: columnOrder,
484
- enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag,
485
- disabledRowAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance
484
+ enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag
486
485
  }, row.id)), data.length > 0 && infiniteLoading && loading && !dataError && (0, jsx_runtime_1.jsx)(skeleton_1.SkeletonContextProvider, {
487
486
  loading: true,
488
487
  children: loadingTableRows.slice(0, 3).map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
489
488
  row: row,
490
489
  columnOrder: columnOrder,
491
- enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag,
492
- disabledRowAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance
490
+ enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag
493
491
  }, row.id))
494
492
  }), (0, jsx_runtime_1.jsx)(helperComponents_1.TableEmptyState, {
495
493
  emptyStates: emptyStates,
@@ -48,9 +48,8 @@ function useColumnSettings(_ref) {
48
48
  columnDefinitions: enabledColumnsDefinitions,
49
49
  enableSelection,
50
50
  enableSelectPinned,
51
- expanding,
52
- rowSelectionAppearance: rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.appearance
53
- }), [enableSelectPinned, enableSelection, enabledColumnsDefinitions, expanding, rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.appearance]);
51
+ expanding
52
+ }), [enableSelectPinned, enableSelection, enabledColumnsDefinitions, expanding]);
54
53
  const areAllColumnsEnabled = enabledColumns.length === configurableColumns.length;
55
54
  const getColumnsSettings = (0, react_1.useCallback)(columnOrder => (0, utils_3.prepareColumnsSettings)({
56
55
  pinnedGroups,
@@ -1,11 +1,15 @@
1
1
  import { ColumnPinningState } from '@tanstack/react-table';
2
2
  import { ColumnDefinition } from '../../../types';
3
- type UseLoadingTableProps<TData> = {
3
+ import { TableProps } from '../../types';
4
+ type UseLoadingTableProps<TData extends object> = {
4
5
  columnDefinitions: ColumnDefinition<TData>[];
5
6
  pageSize: number;
6
7
  columnPinning: ColumnPinningState;
8
+ enableSelection?: boolean;
9
+ enableSelectPinned?: boolean;
10
+ expanding?: TableProps<TData>['expanding'];
7
11
  };
8
- export declare function useLoadingTable<TData>({ pageSize, columnDefinitions, columnPinning }: UseLoadingTableProps<TData>): {
12
+ export declare function useLoadingTable<TData extends object>({ pageSize, columnDefinitions, columnPinning, enableSelection, enableSelectPinned, expanding, }: UseLoadingTableProps<TData>): {
9
13
  loadingTable: import("@tanstack/react-table").Table<TData>;
10
14
  };
11
15
  export {};
@@ -13,23 +13,51 @@ const jsx_runtime_1 = require("react/jsx-runtime");
13
13
  const react_table_1 = require("@tanstack/react-table");
14
14
  const react_1 = require("react");
15
15
  const skeleton_1 = require("@snack-uikit/skeleton");
16
+ const helperComponents_1 = require("../../../helperComponents");
16
17
  const styles_module_scss_1 = __importDefault(require('../styles.module.css'));
18
+ function CellSkeleton() {
19
+ return (0, jsx_runtime_1.jsx)(skeleton_1.SkeletonText, {
20
+ className: styles_module_scss_1.default.skeleton,
21
+ lines: 1,
22
+ width: '100%'
23
+ });
24
+ }
17
25
  function useLoadingTable(_ref) {
18
26
  let {
19
27
  pageSize,
20
28
  columnDefinitions,
21
- columnPinning
29
+ columnPinning,
30
+ enableSelection,
31
+ enableSelectPinned,
32
+ expanding
22
33
  } = _ref;
23
34
  const data = (0, react_1.useMemo)(() => Array.from({
24
35
  length: pageSize
25
- }).map(() => '') || [], [pageSize]);
26
- const columns = (0, react_1.useMemo)(() => columnDefinitions.map(column => Object.assign(Object.assign({}, column), {
27
- cell: () => (0, jsx_runtime_1.jsx)(skeleton_1.SkeletonText, {
28
- className: styles_module_scss_1.default.skeleton,
29
- lines: 1,
30
- width: '100%'
31
- })
32
- })), [columnDefinitions]);
36
+ }).map(() => ({})), [pageSize]);
37
+ const columns = (0, react_1.useMemo)(() => {
38
+ let cols = columnDefinitions.map(column => Object.assign(Object.assign({}, column), {
39
+ cell: () => (0, jsx_runtime_1.jsx)(CellSkeleton, {})
40
+ }));
41
+ // for selection column
42
+ if (enableSelection && !expanding) {
43
+ const selectionColumnDef = (0, helperComponents_1.getSelectionCellColumnDef)(enableSelectPinned !== null && enableSelectPinned !== void 0 ? enableSelectPinned : false);
44
+ const loadingSelectionColumn = Object.assign(Object.assign({}, selectionColumnDef), {
45
+ cell: () => (0, jsx_runtime_1.jsx)(CellSkeleton, {})
46
+ });
47
+ cols = [loadingSelectionColumn, ...cols];
48
+ }
49
+ // for tree column
50
+ if (expanding) {
51
+ const treeColumnDef = (0, helperComponents_1.getTreeColumnDef)(Object.assign(Object.assign({}, expanding.expandingColumnDefinition), {
52
+ enableSelection
53
+ }));
54
+ const loadingTreeColumn = Object.assign(Object.assign({}, treeColumnDef), {
55
+ cell: () => (0, jsx_runtime_1.jsx)(CellSkeleton, {})
56
+ });
57
+ cols = [loadingTreeColumn, ...cols];
58
+ }
59
+ return cols;
60
+ }, [columnDefinitions, enableSelection, enableSelectPinned, expanding]);
33
61
  const loadingTable = (0, react_table_1.useReactTable)({
34
62
  data,
35
63
  columns,
@@ -1,11 +1,10 @@
1
1
  import { ColumnDefinition } from '../../../types';
2
- import { RowAppearance, TableProps } from '../../types';
2
+ import { TableProps } from '../../types';
3
3
  type GetTableColumnsDefinitionsProps<TData extends object> = {
4
4
  columnDefinitions: ColumnDefinition<TData>[];
5
5
  enableSelection: boolean;
6
6
  enableSelectPinned: boolean;
7
7
  expanding: TableProps<TData>['expanding'];
8
- rowSelectionAppearance?: RowAppearance;
9
8
  };
10
- export declare function getTableColumnsDefinitions<TData extends object>({ columnDefinitions, enableSelection, enableSelectPinned, expanding, rowSelectionAppearance, }: GetTableColumnsDefinitionsProps<TData>): ColumnDefinition<TData>[];
9
+ export declare function getTableColumnsDefinitions<TData extends object>({ columnDefinitions, enableSelection, enableSelectPinned, expanding, }: GetTableColumnsDefinitionsProps<TData>): ColumnDefinition<TData>[];
11
10
  export {};
@@ -5,14 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getTableColumnsDefinitions = getTableColumnsDefinitions;
7
7
  const helperComponents_1 = require("../../../helperComponents");
8
- const types_1 = require("../../types");
9
8
  function getTableColumnsDefinitions(_ref) {
10
9
  let {
11
10
  columnDefinitions,
12
11
  enableSelection,
13
12
  enableSelectPinned,
14
- expanding,
15
- rowSelectionAppearance = types_1.RowAppearance.Disabled
13
+ expanding
16
14
  } = _ref;
17
15
  let cols = columnDefinitions;
18
16
  if (enableSelection && !expanding) {
@@ -20,8 +18,7 @@ function getTableColumnsDefinitions(_ref) {
20
18
  }
21
19
  if (expanding) {
22
20
  cols = [(0, helperComponents_1.getTreeColumnDef)(Object.assign(Object.assign({}, expanding.expandingColumnDefinition), {
23
- enableSelection,
24
- rowSelectionAppearance
21
+ enableSelection
25
22
  })), ...cols];
26
23
  }
27
24
  return cols;
@@ -10,10 +10,6 @@ export type TableRowColor = ValueOf<typeof TABLE_ROW_COLOR>;
10
10
  type BulkAction = Omit<NonNullable<ToolbarProps<Record<string, string>>['bulkActions']>[number], 'onClick'> & {
11
11
  onClick?(selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void): void;
12
12
  };
13
- export declare enum RowAppearance {
14
- Disabled = "disabled",
15
- HideToggler = "hide-toggler"
16
- }
17
13
  type BaseTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = WithSupportProps<{
18
14
  /** Данные для отрисовки */
19
15
  data: TData[];
@@ -59,7 +55,6 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
59
55
  * <strong>initialState</strong>: Начальное состояние выбора строк <br>
60
56
  * <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br>
61
57
  * <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br>
62
- * <strong>appearance</strong>: Режим отображения недоступной для выбора строки. Опции: RowAppearance.Disabled (по дефолту) - серый фон, чекбокс/радиобаттон скрыт, RowAppearance.HideToggler - обычный фон, чекбокс/радиобаттон скрыт <br>
63
58
  * <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br>
64
59
  * <strong>onChange</strong>: Колбэк на выбор строк
65
60
  * */
@@ -69,7 +64,6 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
69
64
  enable?: RowSelectionOptions<TData>['enableRowSelection'];
70
65
  multiRow?: boolean;
71
66
  onChange?(state: RowSelectionState): void;
72
- appearance?: RowAppearance;
73
67
  };
74
68
  /** Параметры отвечают за глобальный поиск в таблице <br>
75
69
  * <strong>initialState</strong>: Начальное состояние строки поиска <br>
@@ -2,10 +2,4 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
6
- exports.RowAppearance = void 0;
7
- var RowAppearance;
8
- (function (RowAppearance) {
9
- RowAppearance["Disabled"] = "disabled";
10
- RowAppearance["HideToggler"] = "hide-toggler";
11
- })(RowAppearance || (exports.RowAppearance = RowAppearance = {}));
5
+ });
@@ -1,6 +1,5 @@
1
1
  import { CellContext } from '@tanstack/react-table';
2
2
  import { ReactNode } from 'react';
3
- import { RowAppearance } from '../../../components';
4
3
  import { ColumnDefinition } from '../../../types';
5
4
  type BaseTreeColumnDef = {
6
5
  /** Имя ключа соответствующее полю в data */
@@ -27,8 +26,7 @@ type TreeColumnDefWithDescription<TData> = BaseTreeColumnDef & {
27
26
  export type TreeColumnDefinitionProps<TData> = TreeColumnDef | TreeColumnDefWithDescription<TData>;
28
27
  type TreeColDefProps<TData> = TreeColumnDefinitionProps<TData> & {
29
28
  enableSelection?: boolean;
30
- rowSelectionAppearance: RowAppearance;
31
29
  };
32
30
  /** Вспомогательная функция для создания ячейки со статусом */
33
- export declare function getTreeColumnDef<TData>({ showToggle, icon, expandedIcon, collapsedIcon, header, accessorKey, cell: renderCell, enableSelection, rowSelectionAppearance, }: TreeColDefProps<TData>): ColumnDefinition<TData>;
31
+ export declare function getTreeColumnDef<TData>({ showToggle, icon, expandedIcon, collapsedIcon, header, accessorKey, cell: renderCell, enableSelection, }: TreeColDefProps<TData>): ColumnDefinition<TData>;
34
32
  export {};
@@ -15,7 +15,6 @@ const button_1 = require("@snack-uikit/button");
15
15
  const icons_1 = require("@snack-uikit/icons");
16
16
  const toggles_1 = require("@snack-uikit/toggles");
17
17
  const truncate_string_1 = require("@snack-uikit/truncate-string");
18
- const components_1 = require("../../../components");
19
18
  const constants_1 = require("../../../constants");
20
19
  const contexts_1 = require("../../../contexts");
21
20
  const constants_2 = require("./constants");
@@ -37,8 +36,7 @@ function getTreeColumnDef(_ref) {
37
36
  header,
38
37
  accessorKey,
39
38
  cell: renderCell,
40
- enableSelection,
41
- rowSelectionAppearance
39
+ enableSelection
42
40
  } = _ref;
43
41
  const cell = function TreeCell(ctx) {
44
42
  var _a;
@@ -59,7 +57,6 @@ function getTreeColumnDef(_ref) {
59
57
  const {
60
58
  ref
61
59
  } = (0, contexts_1.useCellResize)(constants_2.TREE_CELL_ID, cell);
62
- const isToggleHidden = !isRowsSelectionEnabled && rowSelectionAppearance === components_1.RowAppearance.HideToggler;
63
60
  const linesVisibilityByIndex = (0, react_1.useMemo)(() => {
64
61
  var _a;
65
62
  const parents = [];
@@ -144,7 +141,7 @@ function getTreeColumnDef(_ref) {
144
141
  "data-disabled": !isRowsSelectionEnabled || undefined,
145
142
  "data-selected": isRowSelected || undefined,
146
143
  "data-multiselect": isMultiSelect || undefined,
147
- children: [showToggle && !isToggleHidden && (0, jsx_runtime_1.jsx)("div", {
144
+ children: [showToggle && (0, jsx_runtime_1.jsx)("div", {
148
145
  tabIndex: -1,
149
146
  className: styles_module_scss_1.default.treeCheckboxWrap,
150
147
  children: isMultiSelect ? (0, jsx_runtime_1.jsx)(toggles_1.Checkbox, {
@@ -1,6 +1,5 @@
1
1
  import { Row as TableRow } from '@tanstack/react-table';
2
2
  import { MouseEvent } from 'react';
3
- import { RowAppearance } from '../../components';
4
3
  import { ColumnOrder } from '../../types';
5
4
  import { RowProps } from './Row';
6
5
  export type RowInfo<TData> = {
@@ -15,6 +14,5 @@ export type BodyRowProps<TData> = Pick<RowProps, 'rowAutoHeight'> & {
15
14
  onRowClick?: RowClickHandler<TData>;
16
15
  columnOrder: ColumnOrder;
17
16
  enableColumnsOrderSortByDrag?: boolean;
18
- disabledRowAppearance?: RowAppearance;
19
17
  };
20
- export declare function BodyRow<TData>({ row, onRowClick, rowAutoHeight, columnOrder, enableColumnsOrderSortByDrag, disabledRowAppearance, }: BodyRowProps<TData>): import("react/jsx-runtime").JSX.Element;
18
+ export declare function BodyRow<TData>({ row, onRowClick, rowAutoHeight, columnOrder, enableColumnsOrderSortByDrag, }: BodyRowProps<TData>): import("react/jsx-runtime").JSX.Element;
@@ -12,7 +12,6 @@ exports.BodyRow = BodyRow;
12
12
  const jsx_runtime_1 = require("react/jsx-runtime");
13
13
  const sortable_1 = require("@dnd-kit/sortable");
14
14
  const react_1 = require("react");
15
- const components_1 = require("../../components");
16
15
  const constants_1 = require("../../constants");
17
16
  const Cells_1 = require("../Cells");
18
17
  const contexts_1 = require("../contexts");
@@ -26,8 +25,7 @@ function BodyRow(_ref) {
26
25
  onRowClick,
27
26
  rowAutoHeight,
28
27
  columnOrder,
29
- enableColumnsOrderSortByDrag,
30
- disabledRowAppearance = components_1.RowAppearance.Disabled
28
+ enableColumnsOrderSortByDrag
31
29
  } = _ref;
32
30
  const {
33
31
  leftPinned,
@@ -59,7 +57,6 @@ function BodyRow(_ref) {
59
57
  onClick: handleRowClick,
60
58
  "data-clickable": Boolean(onRowClick) || undefined,
61
59
  "data-disabled": disabled || undefined,
62
- "data-row-appearance": disabled ? disabledRowAppearance : undefined,
63
60
  "data-selected": isSelected || undefined,
64
61
  "data-actions-opened": dropListOpened || undefined,
65
62
  "data-test-id": constants_1.TEST_IDS.bodyRow,
@@ -84,11 +84,9 @@
84
84
  }
85
85
  .bodyRow[data-disabled]{
86
86
  cursor:not-allowed;
87
- }
88
- .bodyRow[data-row-appearance=disabled]{
89
87
  background-color:var(--sys-neutral-background, #eeeff3);
90
88
  }
91
- .bodyRow[data-row-appearance=disabled] .rowPinnedCells{
89
+ .bodyRow[data-disabled] .rowPinnedCells{
92
90
  background-color:var(--sys-neutral-background, #eeeff3);
93
91
  }
94
92
  .bodyRow[data-selected]{
@@ -1,12 +1,5 @@
1
- import { ReactNode } from 'react';
2
- import { IconPredefinedProps } from '@snack-uikit/icon-predefined';
3
- export type EmptyStateProps = {
4
- title?: string;
5
- description?: string;
6
- icon?: Pick<IconPredefinedProps, 'icon' | 'decor' | 'appearance'>;
7
- footer?: ReactNode;
8
- className?: string;
9
- };
1
+ import { InfoBlockProps } from '@snack-uikit/info-block';
2
+ export type EmptyStateProps = Pick<InfoBlockProps, 'title' | 'description' | 'icon' | 'footer' | 'className'>;
10
3
  export type TableEmptyState = {
11
4
  emptyStates: {
12
5
  noDataState: EmptyStateProps;
@@ -1 +1,6 @@
1
- export declare const onSearchDebounced: import("lodash").DebouncedFunc<(newValue: string, onChange: (newValue: string) => void) => void>;
1
+ import debounce from 'lodash.debounce';
2
+ type ChangeHandler = (newValue: string) => void;
3
+ type SearchHandler = (newValue: string, onChange: ChangeHandler) => void;
4
+ type OnSearchDebouncedType = ReturnType<typeof debounce<SearchHandler>>;
5
+ export declare const onSearchDebounced: OnSearchDebouncedType;
6
+ export {};
@@ -58,8 +58,7 @@ export function Table(_a) {
58
58
  enableSelection,
59
59
  enableSelectPinned,
60
60
  expanding,
61
- rowSelectionAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance,
62
- }), [columnDefinitions, enableSelection, enableSelectPinned, expanding, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance]);
61
+ }), [columnDefinitions, enableSelection, enableSelectPinned, expanding]);
63
62
  const pinnedGroups = useMemo(() => getPinnedGroups(allTableColumns), [allTableColumns]);
64
63
  const { enabledColumns, setEnabledColumns, getColumnsSettings, enabledTableColumns, enabledColumnsDefinitions, areColumnsSettingsEnabled, } = useColumnSettings({
65
64
  columnDefinitions,
@@ -166,6 +165,9 @@ export function Table(_a) {
166
165
  pageSize: Math.min(Math.max(pageSize, 5), DEFAULT_PAGE_SIZE),
167
166
  columnDefinitions: enabledColumnsDefinitions,
168
167
  columnPinning,
168
+ enableSelection,
169
+ enableSelectPinned,
170
+ expanding,
169
171
  });
170
172
  const handleOnRefresh = useCallback(() => {
171
173
  table.resetRowSelection();
@@ -300,7 +302,7 @@ export function Table(_a) {
300
302
  }
301
303
  },
302
304
  }
303
- : undefined, bulkActions: bulkActions, selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single', checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected(), onCheck: enableSelection ? handleOnToolbarCheck : undefined, outline: outline, after: toolbarAfter || exportSettings || areColumnsSettingsEnabled ? (_jsxs(_Fragment, { children: [toolbarAfter, exportSettings && (_jsx(ExportButton, { settings: exportSettings, columnDefinitions: columnDefinitions, data: data, topRows: filteredTopRows, centerRows: centerRows })), areColumnsSettingsEnabled && (_jsx(ColumnsSettings, { columnsSettings: columnsSettings, enabledColumns: enabledColumns, setEnabledColumns: setEnabledColumns }))] })) : undefined, moreActions: moreActions, filterRow: patchedFilter, "data-test-id": TEST_IDS.toolbar }) })), _jsxs(Scroll, { size: 's', className: styles.table, ref: scrollContainerRef, "data-outline": outline || undefined, children: [_jsx("div", { className: styles.tableContent, style: columnSizes.vars, children: _jsx(CellAutoResizeContext.Provider, { value: { updateCellMap }, children: _jsx(DndContext, Object.assign({}, dndContextProps, { children: _jsx(TableContext.Provider, { value: { table, getRowBackgroundColor }, children: (!infiniteLoading || !data.length) && loading ? (_jsxs(SkeletonContextProvider, { loading: true, children: [_jsx(HeaderRow, { rowAutoHeight: rowAutoHeight, columnOrder: columnOrder }), loadingTableRows.map(row => (_jsx(BodyRow, { row: row, rowAutoHeight: rowAutoHeight, columnOrder: columnOrder, disabledRowAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance }, row.id)))] })) : (_jsxs(_Fragment, { children: [centerRows.length || filteredTopRows.length ? (_jsx(HeaderRow, { rowAutoHeight: rowAutoHeight, columnOrder: columnOrder, enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag })) : null, filteredTopRows.length ? (_jsx("div", { className: styles.topRowWrapper, children: filteredTopRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick, rowAutoHeight: rowAutoHeight, columnOrder: columnOrder, enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag, disabledRowAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance }, row.id))) })) : null, centerRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick, rowAutoHeight: rowAutoHeight, columnOrder: columnOrder, enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag, disabledRowAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance }, row.id))), data.length > 0 && infiniteLoading && loading && !dataError && (_jsx(SkeletonContextProvider, { loading: true, children: loadingTableRows.slice(0, 3).map(row => (_jsx(BodyRow, { row: row, columnOrder: columnOrder, enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag, disabledRowAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance }, row.id))) })), _jsx(TableEmptyState, { emptyStates: emptyStates, dataError: dataError, dataFiltered: dataFiltered || Boolean(table.getState().globalFilter), tableRowsLength: tableRows.length + filteredTopRows.length })] })) }) })) }) }), _jsx("div", { className: styles.scrollStub, ref: scrollRef })] }), !infiniteLoading && !suppressPagination && (_jsx(TablePagination, { table: table, options: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.options, optionsLabel: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsLabel, pageCount: pageCount, optionsRender: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsRender }))] })));
305
+ : undefined, bulkActions: bulkActions, selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single', checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected(), onCheck: enableSelection ? handleOnToolbarCheck : undefined, outline: outline, after: toolbarAfter || exportSettings || areColumnsSettingsEnabled ? (_jsxs(_Fragment, { children: [toolbarAfter, exportSettings && (_jsx(ExportButton, { settings: exportSettings, columnDefinitions: columnDefinitions, data: data, topRows: filteredTopRows, centerRows: centerRows })), areColumnsSettingsEnabled && (_jsx(ColumnsSettings, { columnsSettings: columnsSettings, enabledColumns: enabledColumns, setEnabledColumns: setEnabledColumns }))] })) : undefined, moreActions: moreActions, filterRow: patchedFilter, "data-test-id": TEST_IDS.toolbar }) })), _jsxs(Scroll, { size: 's', className: styles.table, ref: scrollContainerRef, "data-outline": outline || undefined, children: [_jsx("div", { className: styles.tableContent, style: columnSizes.vars, children: _jsx(CellAutoResizeContext.Provider, { value: { updateCellMap }, children: _jsx(DndContext, Object.assign({}, dndContextProps, { children: _jsx(TableContext.Provider, { value: { table, getRowBackgroundColor }, children: (!infiniteLoading || !data.length) && loading ? (_jsxs(SkeletonContextProvider, { loading: true, children: [_jsx(HeaderRow, { rowAutoHeight: rowAutoHeight, columnOrder: columnOrder }), loadingTableRows.map(row => (_jsx(BodyRow, { row: row, rowAutoHeight: rowAutoHeight, columnOrder: columnOrder }, row.id)))] })) : (_jsxs(_Fragment, { children: [centerRows.length || filteredTopRows.length ? (_jsx(HeaderRow, { rowAutoHeight: rowAutoHeight, columnOrder: columnOrder, enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag })) : null, filteredTopRows.length ? (_jsx("div", { className: styles.topRowWrapper, children: filteredTopRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick, rowAutoHeight: rowAutoHeight, columnOrder: columnOrder, enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag }, row.id))) })) : null, centerRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick, rowAutoHeight: rowAutoHeight, columnOrder: columnOrder, enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag }, row.id))), data.length > 0 && infiniteLoading && loading && !dataError && (_jsx(SkeletonContextProvider, { loading: true, children: loadingTableRows.slice(0, 3).map(row => (_jsx(BodyRow, { row: row, columnOrder: columnOrder, enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag }, row.id))) })), _jsx(TableEmptyState, { emptyStates: emptyStates, dataError: dataError, dataFiltered: dataFiltered || Boolean(table.getState().globalFilter), tableRowsLength: tableRows.length + filteredTopRows.length })] })) }) })) }) }), _jsx("div", { className: styles.scrollStub, ref: scrollRef })] }), !infiniteLoading && !suppressPagination && (_jsx(TablePagination, { table: table, options: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.options, optionsLabel: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsLabel, pageCount: pageCount, optionsRender: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsRender }))] })));
304
306
  }
305
307
  Table.getStatusColumnDef = getStatusColumnDef;
306
308
  Table.statusAppearances = STATUS_APPEARANCE;
@@ -32,8 +32,7 @@ export function useColumnSettings({ columnDefinitions, columnsSettings, pinnedGr
32
32
  enableSelection,
33
33
  enableSelectPinned,
34
34
  expanding,
35
- rowSelectionAppearance: rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.appearance,
36
- }), [enableSelectPinned, enableSelection, enabledColumnsDefinitions, expanding, rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.appearance]);
35
+ }), [enableSelectPinned, enableSelection, enabledColumnsDefinitions, expanding]);
37
36
  const areAllColumnsEnabled = enabledColumns.length === configurableColumns.length;
38
37
  const getColumnsSettings = useCallback((columnOrder) => prepareColumnsSettings({
39
38
  pinnedGroups,
@@ -1,11 +1,15 @@
1
1
  import { ColumnPinningState } from '@tanstack/react-table';
2
2
  import { ColumnDefinition } from '../../../types';
3
- type UseLoadingTableProps<TData> = {
3
+ import { TableProps } from '../../types';
4
+ type UseLoadingTableProps<TData extends object> = {
4
5
  columnDefinitions: ColumnDefinition<TData>[];
5
6
  pageSize: number;
6
7
  columnPinning: ColumnPinningState;
8
+ enableSelection?: boolean;
9
+ enableSelectPinned?: boolean;
10
+ expanding?: TableProps<TData>['expanding'];
7
11
  };
8
- export declare function useLoadingTable<TData>({ pageSize, columnDefinitions, columnPinning }: UseLoadingTableProps<TData>): {
12
+ export declare function useLoadingTable<TData extends object>({ pageSize, columnDefinitions, columnPinning, enableSelection, enableSelectPinned, expanding, }: UseLoadingTableProps<TData>): {
9
13
  loadingTable: import("@tanstack/react-table").Table<TData>;
10
14
  };
11
15
  export {};
@@ -2,10 +2,29 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { getCoreRowModel, useReactTable } from '@tanstack/react-table';
3
3
  import { useMemo } from 'react';
4
4
  import { SkeletonText } from '@snack-uikit/skeleton';
5
+ import { getSelectionCellColumnDef, getTreeColumnDef } from '../../../helperComponents';
5
6
  import styles from '../styles.module.css';
6
- export function useLoadingTable({ pageSize, columnDefinitions, columnPinning }) {
7
- const data = useMemo(() => (Array.from({ length: pageSize }).map(() => '') || []), [pageSize]);
8
- const columns = useMemo(() => columnDefinitions.map(column => (Object.assign(Object.assign({}, column), { cell: () => _jsx(SkeletonText, { className: styles.skeleton, lines: 1, width: '100%' }) }))), [columnDefinitions]);
7
+ function CellSkeleton() {
8
+ return _jsx(SkeletonText, { className: styles.skeleton, lines: 1, width: '100%' });
9
+ }
10
+ export function useLoadingTable({ pageSize, columnDefinitions, columnPinning, enableSelection, enableSelectPinned, expanding, }) {
11
+ const data = useMemo(() => Array.from({ length: pageSize }).map(() => ({})), [pageSize]);
12
+ const columns = useMemo(() => {
13
+ let cols = columnDefinitions.map(column => (Object.assign(Object.assign({}, column), { cell: () => _jsx(CellSkeleton, {}) })));
14
+ // for selection column
15
+ if (enableSelection && !expanding) {
16
+ const selectionColumnDef = getSelectionCellColumnDef(enableSelectPinned !== null && enableSelectPinned !== void 0 ? enableSelectPinned : false);
17
+ const loadingSelectionColumn = Object.assign(Object.assign({}, selectionColumnDef), { cell: () => _jsx(CellSkeleton, {}) });
18
+ cols = [loadingSelectionColumn, ...cols];
19
+ }
20
+ // for tree column
21
+ if (expanding) {
22
+ const treeColumnDef = getTreeColumnDef(Object.assign(Object.assign({}, expanding.expandingColumnDefinition), { enableSelection }));
23
+ const loadingTreeColumn = Object.assign(Object.assign({}, treeColumnDef), { cell: () => _jsx(CellSkeleton, {}) });
24
+ cols = [loadingTreeColumn, ...cols];
25
+ }
26
+ return cols;
27
+ }, [columnDefinitions, enableSelection, enableSelectPinned, expanding]);
9
28
  const loadingTable = useReactTable({
10
29
  data,
11
30
  columns,
@@ -1,11 +1,10 @@
1
1
  import { ColumnDefinition } from '../../../types';
2
- import { RowAppearance, TableProps } from '../../types';
2
+ import { TableProps } from '../../types';
3
3
  type GetTableColumnsDefinitionsProps<TData extends object> = {
4
4
  columnDefinitions: ColumnDefinition<TData>[];
5
5
  enableSelection: boolean;
6
6
  enableSelectPinned: boolean;
7
7
  expanding: TableProps<TData>['expanding'];
8
- rowSelectionAppearance?: RowAppearance;
9
8
  };
10
- export declare function getTableColumnsDefinitions<TData extends object>({ columnDefinitions, enableSelection, enableSelectPinned, expanding, rowSelectionAppearance, }: GetTableColumnsDefinitionsProps<TData>): ColumnDefinition<TData>[];
9
+ export declare function getTableColumnsDefinitions<TData extends object>({ columnDefinitions, enableSelection, enableSelectPinned, expanding, }: GetTableColumnsDefinitionsProps<TData>): ColumnDefinition<TData>[];
11
10
  export {};
@@ -1,15 +1,11 @@
1
1
  import { getSelectionCellColumnDef, getTreeColumnDef } from '../../../helperComponents';
2
- import { RowAppearance } from '../../types';
3
- export function getTableColumnsDefinitions({ columnDefinitions, enableSelection, enableSelectPinned, expanding, rowSelectionAppearance = RowAppearance.Disabled, }) {
2
+ export function getTableColumnsDefinitions({ columnDefinitions, enableSelection, enableSelectPinned, expanding, }) {
4
3
  let cols = columnDefinitions;
5
4
  if (enableSelection && !expanding) {
6
5
  cols = [getSelectionCellColumnDef(enableSelectPinned), ...cols];
7
6
  }
8
7
  if (expanding) {
9
- cols = [
10
- getTreeColumnDef(Object.assign(Object.assign({}, expanding.expandingColumnDefinition), { enableSelection, rowSelectionAppearance })),
11
- ...cols,
12
- ];
8
+ cols = [getTreeColumnDef(Object.assign(Object.assign({}, expanding.expandingColumnDefinition), { enableSelection })), ...cols];
13
9
  }
14
10
  return cols;
15
11
  }
@@ -10,10 +10,6 @@ export type TableRowColor = ValueOf<typeof TABLE_ROW_COLOR>;
10
10
  type BulkAction = Omit<NonNullable<ToolbarProps<Record<string, string>>['bulkActions']>[number], 'onClick'> & {
11
11
  onClick?(selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void): void;
12
12
  };
13
- export declare enum RowAppearance {
14
- Disabled = "disabled",
15
- HideToggler = "hide-toggler"
16
- }
17
13
  type BaseTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = WithSupportProps<{
18
14
  /** Данные для отрисовки */
19
15
  data: TData[];
@@ -59,7 +55,6 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
59
55
  * <strong>initialState</strong>: Начальное состояние выбора строк <br>
60
56
  * <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br>
61
57
  * <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br>
62
- * <strong>appearance</strong>: Режим отображения недоступной для выбора строки. Опции: RowAppearance.Disabled (по дефолту) - серый фон, чекбокс/радиобаттон скрыт, RowAppearance.HideToggler - обычный фон, чекбокс/радиобаттон скрыт <br>
63
58
  * <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br>
64
59
  * <strong>onChange</strong>: Колбэк на выбор строк
65
60
  * */
@@ -69,7 +64,6 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
69
64
  enable?: RowSelectionOptions<TData>['enableRowSelection'];
70
65
  multiRow?: boolean;
71
66
  onChange?(state: RowSelectionState): void;
72
- appearance?: RowAppearance;
73
67
  };
74
68
  /** Параметры отвечают за глобальный поиск в таблице <br>
75
69
  * <strong>initialState</strong>: Начальное состояние строки поиска <br>
@@ -1,5 +1 @@
1
- export var RowAppearance;
2
- (function (RowAppearance) {
3
- RowAppearance["Disabled"] = "disabled";
4
- RowAppearance["HideToggler"] = "hide-toggler";
5
- })(RowAppearance || (RowAppearance = {}));
1
+ export {};
@@ -1,6 +1,5 @@
1
1
  import { CellContext } from '@tanstack/react-table';
2
2
  import { ReactNode } from 'react';
3
- import { RowAppearance } from '../../../components';
4
3
  import { ColumnDefinition } from '../../../types';
5
4
  type BaseTreeColumnDef = {
6
5
  /** Имя ключа соответствующее полю в data */
@@ -27,8 +26,7 @@ type TreeColumnDefWithDescription<TData> = BaseTreeColumnDef & {
27
26
  export type TreeColumnDefinitionProps<TData> = TreeColumnDef | TreeColumnDefWithDescription<TData>;
28
27
  type TreeColDefProps<TData> = TreeColumnDefinitionProps<TData> & {
29
28
  enableSelection?: boolean;
30
- rowSelectionAppearance: RowAppearance;
31
29
  };
32
30
  /** Вспомогательная функция для создания ячейки со статусом */
33
- export declare function getTreeColumnDef<TData>({ showToggle, icon, expandedIcon, collapsedIcon, header, accessorKey, cell: renderCell, enableSelection, rowSelectionAppearance, }: TreeColDefProps<TData>): ColumnDefinition<TData>;
31
+ export declare function getTreeColumnDef<TData>({ showToggle, icon, expandedIcon, collapsedIcon, header, accessorKey, cell: renderCell, enableSelection, }: TreeColDefProps<TData>): ColumnDefinition<TData>;
34
32
  export {};
@@ -4,14 +4,13 @@ import { ButtonFunction } from '@snack-uikit/button';
4
4
  import { ChevronRightSVG, FileSVG, FolderOpenSVG, FolderSVG } from '@snack-uikit/icons';
5
5
  import { Checkbox, Radio } from '@snack-uikit/toggles';
6
6
  import { TruncateString } from '@snack-uikit/truncate-string';
7
- import { RowAppearance } from '../../../components';
8
7
  import { COLUMN_PIN_POSITION, TEST_IDS } from '../../../constants';
9
8
  import { useCellResize } from '../../../contexts';
10
9
  import { TREE_CELL_ID } from './constants';
11
10
  import styles from './styles.module.css';
12
11
  import { TreeLine } from './TreeLine';
13
12
  /** Вспомогательная функция для создания ячейки со статусом */
14
- export function getTreeColumnDef({ showToggle = false, icon = _jsx(FileSVG, { size: 24 }), expandedIcon = _jsx(FolderOpenSVG, { size: 24 }), collapsedIcon = _jsx(FolderSVG, { size: 24 }), header, accessorKey, cell: renderCell, enableSelection, rowSelectionAppearance, }) {
13
+ export function getTreeColumnDef({ showToggle = false, icon = _jsx(FileSVG, { size: 24 }), expandedIcon = _jsx(FolderOpenSVG, { size: 24 }), collapsedIcon = _jsx(FolderSVG, { size: 24 }), header, accessorKey, cell: renderCell, enableSelection, }) {
15
14
  const cell = function TreeCell(ctx) {
16
15
  var _a;
17
16
  const { row, cell } = ctx;
@@ -26,7 +25,6 @@ export function getTreeColumnDef({ showToggle = false, icon = _jsx(FileSVG, { si
26
25
  const isLastChildRow = ((_a = parent === null || parent === void 0 ? void 0 : parent.subRows.at(-1)) === null || _a === void 0 ? void 0 : _a.id) === row.id;
27
26
  const depth = row.depth;
28
27
  const { ref } = useCellResize(TREE_CELL_ID, cell);
29
- const isToggleHidden = !isRowsSelectionEnabled && rowSelectionAppearance === RowAppearance.HideToggler;
30
28
  const linesVisibilityByIndex = useMemo(() => {
31
29
  var _a;
32
30
  const parents = [];
@@ -84,7 +82,7 @@ export function getTreeColumnDef({ showToggle = false, icon = _jsx(FileSVG, { si
84
82
  // @ts-ignore
85
83
  cell.row.original[accessorKey]
86
84
  : cell.getValue();
87
- return (_jsx("div", { role: 'presentation', "data-test-id": TEST_IDS.tree.node, className: styles.treeCellContainer, onClick: toggleClickHandler, children: _jsxs("div", { className: styles.treeCell, ref: ref, children: [lines, Boolean(parent) && _jsx(TreeLine, { horizontal: true, visible: true }), isExpandable && (_jsx(ButtonFunction, { size: 'xs', "data-test-id": TEST_IDS.tree.chevron, icon: _jsx(ChevronRightSVG, {}), onClick: chevronClickHandler, className: styles.cellExpandButton, "data-expanded": isExpanded || undefined })), _jsxs("div", { className: styles.treeNodeContent, "data-disabled": !isRowsSelectionEnabled || undefined, "data-selected": isRowSelected || undefined, "data-multiselect": isMultiSelect || undefined, children: [showToggle && !isToggleHidden && (_jsx("div", { tabIndex: -1, className: styles.treeCheckboxWrap, children: isMultiSelect ? (_jsx(Checkbox, { size: 's', disabled: !isRowsSelectionEnabled, checked: isRowSelected, "data-test-id": TEST_IDS.tree.checkbox, indeterminate: isSomeSubRowSelected && !isAllSubRowsSelected })) : (_jsx(Radio, { size: 's', disabled: !isRowsSelectionEnabled, "data-test-id": TEST_IDS.tree.radio, checked: isRowSelected })) })), _jsxs("div", { role: 'presentation', onClick: chevronClickHandler, className: styles.cellUserToggleIcon, children: [isExpandable && isExpanded && expandedIcon, isExpandable && !isExpanded && collapsedIcon] }), _jsxs("div", { role: 'presentation', className: styles.userContent, children: [!isExpandable && icon, renderCell ? renderCell(ctx) : _jsx(TruncateString, { text: value })] })] })] }) }));
85
+ return (_jsx("div", { role: 'presentation', "data-test-id": TEST_IDS.tree.node, className: styles.treeCellContainer, onClick: toggleClickHandler, children: _jsxs("div", { className: styles.treeCell, ref: ref, children: [lines, Boolean(parent) && _jsx(TreeLine, { horizontal: true, visible: true }), isExpandable && (_jsx(ButtonFunction, { size: 'xs', "data-test-id": TEST_IDS.tree.chevron, icon: _jsx(ChevronRightSVG, {}), onClick: chevronClickHandler, className: styles.cellExpandButton, "data-expanded": isExpanded || undefined })), _jsxs("div", { className: styles.treeNodeContent, "data-disabled": !isRowsSelectionEnabled || undefined, "data-selected": isRowSelected || undefined, "data-multiselect": isMultiSelect || undefined, children: [showToggle && (_jsx("div", { tabIndex: -1, className: styles.treeCheckboxWrap, children: isMultiSelect ? (_jsx(Checkbox, { size: 's', disabled: !isRowsSelectionEnabled, checked: isRowSelected, "data-test-id": TEST_IDS.tree.checkbox, indeterminate: isSomeSubRowSelected && !isAllSubRowsSelected })) : (_jsx(Radio, { size: 's', disabled: !isRowsSelectionEnabled, "data-test-id": TEST_IDS.tree.radio, checked: isRowSelected })) })), _jsxs("div", { role: 'presentation', onClick: chevronClickHandler, className: styles.cellUserToggleIcon, children: [isExpandable && isExpanded && expandedIcon, isExpandable && !isExpanded && collapsedIcon] }), _jsxs("div", { role: 'presentation', className: styles.userContent, children: [!isExpandable && icon, renderCell ? renderCell(ctx) : _jsx(TruncateString, { text: value })] })] })] }) }));
88
86
  };
89
87
  return {
90
88
  id: TREE_CELL_ID,
@@ -1,6 +1,5 @@
1
1
  import { Row as TableRow } from '@tanstack/react-table';
2
2
  import { MouseEvent } from 'react';
3
- import { RowAppearance } from '../../components';
4
3
  import { ColumnOrder } from '../../types';
5
4
  import { RowProps } from './Row';
6
5
  export type RowInfo<TData> = {
@@ -15,6 +14,5 @@ export type BodyRowProps<TData> = Pick<RowProps, 'rowAutoHeight'> & {
15
14
  onRowClick?: RowClickHandler<TData>;
16
15
  columnOrder: ColumnOrder;
17
16
  enableColumnsOrderSortByDrag?: boolean;
18
- disabledRowAppearance?: RowAppearance;
19
17
  };
20
- export declare function BodyRow<TData>({ row, onRowClick, rowAutoHeight, columnOrder, enableColumnsOrderSortByDrag, disabledRowAppearance, }: BodyRowProps<TData>): import("react/jsx-runtime").JSX.Element;
18
+ export declare function BodyRow<TData>({ row, onRowClick, rowAutoHeight, columnOrder, enableColumnsOrderSortByDrag, }: BodyRowProps<TData>): import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortable';
3
3
  import { useState } from 'react';
4
- import { RowAppearance } from '../../components';
5
4
  import { COLUMN_PIN_POSITION, TEST_IDS } from '../../constants';
6
5
  import { BodyCell } from '../Cells';
7
6
  import { RowContext, useTableContext } from '../contexts';
@@ -9,7 +8,7 @@ import { useRowCells } from '../hooks';
9
8
  import { PinnedCells } from './PinnedCells';
10
9
  import { Row } from './Row';
11
10
  import styles from './styles.module.css';
12
- export function BodyRow({ row, onRowClick, rowAutoHeight, columnOrder, enableColumnsOrderSortByDrag, disabledRowAppearance = RowAppearance.Disabled, }) {
11
+ export function BodyRow({ row, onRowClick, rowAutoHeight, columnOrder, enableColumnsOrderSortByDrag, }) {
13
12
  const { leftPinned, rightPinned, unpinned } = useRowCells(row);
14
13
  const [dropListOpened, setDropListOpen] = useState(false);
15
14
  const disabled = !row.getCanSelect();
@@ -26,5 +25,5 @@ export function BodyRow({ row, onRowClick, rowAutoHeight, columnOrder, enableCol
26
25
  };
27
26
  const isSelected = row.getIsSelected() || (row.getIsSomeSelected() && !row.getCanMultiSelect() && !row.getIsExpanded());
28
27
  const rowBackgroundColor = getRowBackgroundColor === null || getRowBackgroundColor === void 0 ? void 0 : getRowBackgroundColor(row.original);
29
- return (_jsx(RowContext.Provider, { value: { dropListOpened, setDropListOpen }, children: _jsxs(Row, { onClick: handleRowClick, "data-clickable": Boolean(onRowClick) || undefined, "data-disabled": disabled || undefined, "data-row-appearance": disabled ? disabledRowAppearance : undefined, "data-selected": isSelected || undefined, "data-actions-opened": dropListOpened || undefined, "data-test-id": TEST_IDS.bodyRow, "data-row-id": row.id, "data-row-bg-appearance": rowBackgroundColor && !disabled && !isSelected ? rowBackgroundColor : undefined, className: styles.bodyRow, rowAutoHeight: rowAutoHeight, children: [leftPinned && (_jsx(PinnedCells, { position: COLUMN_PIN_POSITION.Left, children: leftPinned.map(cell => (_jsx(BodyCell, { cell: cell, rowAutoHeight: rowAutoHeight }, cell.id))) })), unpinned.map(cell => (_jsx(SortableContext, { items: columnOrder, strategy: horizontalListSortingStrategy, children: _jsx(BodyCell, { cell: cell, rowAutoHeight: rowAutoHeight, isDraggable: enableColumnsOrderSortByDrag }, cell.id) }, cell.id))), rightPinned && (_jsx(PinnedCells, { position: COLUMN_PIN_POSITION.Right, children: rightPinned.map(cell => (_jsx(BodyCell, { cell: cell, rowAutoHeight: rowAutoHeight, isDraggable: enableColumnsOrderSortByDrag }, cell.id))) }))] }) }));
28
+ return (_jsx(RowContext.Provider, { value: { dropListOpened, setDropListOpen }, children: _jsxs(Row, { onClick: handleRowClick, "data-clickable": Boolean(onRowClick) || undefined, "data-disabled": disabled || undefined, "data-selected": isSelected || undefined, "data-actions-opened": dropListOpened || undefined, "data-test-id": TEST_IDS.bodyRow, "data-row-id": row.id, "data-row-bg-appearance": rowBackgroundColor && !disabled && !isSelected ? rowBackgroundColor : undefined, className: styles.bodyRow, rowAutoHeight: rowAutoHeight, children: [leftPinned && (_jsx(PinnedCells, { position: COLUMN_PIN_POSITION.Left, children: leftPinned.map(cell => (_jsx(BodyCell, { cell: cell, rowAutoHeight: rowAutoHeight }, cell.id))) })), unpinned.map(cell => (_jsx(SortableContext, { items: columnOrder, strategy: horizontalListSortingStrategy, children: _jsx(BodyCell, { cell: cell, rowAutoHeight: rowAutoHeight, isDraggable: enableColumnsOrderSortByDrag }, cell.id) }, cell.id))), rightPinned && (_jsx(PinnedCells, { position: COLUMN_PIN_POSITION.Right, children: rightPinned.map(cell => (_jsx(BodyCell, { cell: cell, rowAutoHeight: rowAutoHeight, isDraggable: enableColumnsOrderSortByDrag }, cell.id))) }))] }) }));
30
29
  }
@@ -84,11 +84,9 @@
84
84
  }
85
85
  .bodyRow[data-disabled]{
86
86
  cursor:not-allowed;
87
- }
88
- .bodyRow[data-row-appearance=disabled]{
89
87
  background-color:var(--sys-neutral-background, #eeeff3);
90
88
  }
91
- .bodyRow[data-row-appearance=disabled] .rowPinnedCells{
89
+ .bodyRow[data-disabled] .rowPinnedCells{
92
90
  background-color:var(--sys-neutral-background, #eeeff3);
93
91
  }
94
92
  .bodyRow[data-selected]{
@@ -1,12 +1,5 @@
1
- import { ReactNode } from 'react';
2
- import { IconPredefinedProps } from '@snack-uikit/icon-predefined';
3
- export type EmptyStateProps = {
4
- title?: string;
5
- description?: string;
6
- icon?: Pick<IconPredefinedProps, 'icon' | 'decor' | 'appearance'>;
7
- footer?: ReactNode;
8
- className?: string;
9
- };
1
+ import { InfoBlockProps } from '@snack-uikit/info-block';
2
+ export type EmptyStateProps = Pick<InfoBlockProps, 'title' | 'description' | 'icon' | 'footer' | 'className'>;
10
3
  export type TableEmptyState = {
11
4
  emptyStates: {
12
5
  noDataState: EmptyStateProps;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Table",
7
- "version": "0.37.16-preview-964a845f.0",
7
+ "version": "0.37.16",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -43,7 +43,6 @@
43
43
  "@dnd-kit/utilities": "3.2.2",
44
44
  "@snack-uikit/button": "0.19.16",
45
45
  "@snack-uikit/chips": "0.28.8",
46
- "@snack-uikit/icon-predefined": "0.7.10",
47
46
  "@snack-uikit/icons": "0.27.3",
48
47
  "@snack-uikit/info-block": "0.6.33",
49
48
  "@snack-uikit/list": "0.32.7",
@@ -66,5 +65,5 @@
66
65
  "peerDependencies": {
67
66
  "@snack-uikit/locale": "*"
68
67
  },
69
- "gitHead": "5a2d58901a4686899e92bfb9dfeb3159e37d6021"
68
+ "gitHead": "4bd295f8a30dd647edfec1dfdcad4dc1918e4cbc"
70
69
  }
@@ -2,6 +2,11 @@ import debounce from 'lodash.debounce';
2
2
 
3
3
  import { SEARCH_DELAY } from './constants';
4
4
 
5
- export const onSearchDebounced = debounce((newValue: string, onChange: (newValue: string) => void) => {
5
+ type ChangeHandler = (newValue: string) => void;
6
+ type SearchHandler = (newValue: string, onChange: ChangeHandler) => void;
7
+
8
+ type OnSearchDebouncedType = ReturnType<typeof debounce<SearchHandler>>;
9
+
10
+ export const onSearchDebounced: OnSearchDebouncedType = debounce((newValue, onChange) => {
6
11
  onChange(newValue);
7
12
  }, SEARCH_DELAY);
@@ -173,9 +173,8 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
173
173
  enableSelection,
174
174
  enableSelectPinned,
175
175
  expanding,
176
- rowSelectionAppearance: rowSelectionProp?.appearance,
177
176
  }),
178
- [columnDefinitions, enableSelection, enableSelectPinned, expanding, rowSelectionProp?.appearance],
177
+ [columnDefinitions, enableSelection, enableSelectPinned, expanding],
179
178
  );
180
179
  const pinnedGroups = useMemo(() => getPinnedGroups(allTableColumns), [allTableColumns]);
181
180
 
@@ -306,6 +305,9 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
306
305
  pageSize: Math.min(Math.max(pageSize, 5), DEFAULT_PAGE_SIZE),
307
306
  columnDefinitions: enabledColumnsDefinitions,
308
307
  columnPinning,
308
+ enableSelection,
309
+ enableSelectPinned,
310
+ expanding,
309
311
  });
310
312
 
311
313
  const handleOnRefresh = useCallback(() => {
@@ -531,13 +533,7 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
531
533
  <SkeletonContextProvider loading>
532
534
  <HeaderRow rowAutoHeight={rowAutoHeight} columnOrder={columnOrder} />
533
535
  {loadingTableRows.map(row => (
534
- <BodyRow
535
- key={row.id}
536
- row={row}
537
- rowAutoHeight={rowAutoHeight}
538
- columnOrder={columnOrder}
539
- disabledRowAppearance={rowSelectionProp?.appearance}
540
- />
536
+ <BodyRow key={row.id} row={row} rowAutoHeight={rowAutoHeight} columnOrder={columnOrder} />
541
537
  ))}
542
538
  </SkeletonContextProvider>
543
539
  ) : (
@@ -560,7 +556,6 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
560
556
  rowAutoHeight={rowAutoHeight}
561
557
  columnOrder={columnOrder}
562
558
  enableColumnsOrderSortByDrag={enableColumnsOrderSortByDrag}
563
- disabledRowAppearance={rowSelectionProp?.appearance}
564
559
  />
565
560
  ))}
566
561
  </div>
@@ -574,7 +569,6 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
574
569
  rowAutoHeight={rowAutoHeight}
575
570
  columnOrder={columnOrder}
576
571
  enableColumnsOrderSortByDrag={enableColumnsOrderSortByDrag}
577
- disabledRowAppearance={rowSelectionProp?.appearance}
578
572
  />
579
573
  ))}
580
574
 
@@ -586,7 +580,6 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
586
580
  row={row}
587
581
  columnOrder={columnOrder}
588
582
  enableColumnsOrderSortByDrag={enableColumnsOrderSortByDrag}
589
- disabledRowAppearance={rowSelectionProp?.appearance}
590
583
  />
591
584
  ))}
592
585
  </SkeletonContextProvider>
@@ -74,9 +74,8 @@ export function useColumnSettings<TData extends object, TFilters extends Record<
74
74
  enableSelection,
75
75
  enableSelectPinned,
76
76
  expanding,
77
- rowSelectionAppearance: rowSelection?.appearance,
78
77
  }),
79
- [enableSelectPinned, enableSelection, enabledColumnsDefinitions, expanding, rowSelection?.appearance],
78
+ [enableSelectPinned, enableSelection, enabledColumnsDefinitions, expanding],
80
79
  );
81
80
 
82
81
  const areAllColumnsEnabled = enabledColumns.length === configurableColumns.length;
@@ -3,25 +3,63 @@ import { useMemo } from 'react';
3
3
 
4
4
  import { SkeletonText } from '@snack-uikit/skeleton';
5
5
 
6
+ import { getSelectionCellColumnDef, getTreeColumnDef } from '../../../helperComponents';
6
7
  import { ColumnDefinition } from '../../../types';
8
+ import { TableProps } from '../../types';
7
9
  import styles from '../styles.module.scss';
8
10
 
9
- type UseLoadingTableProps<TData> = {
11
+ type UseLoadingTableProps<TData extends object> = {
10
12
  columnDefinitions: ColumnDefinition<TData>[];
11
13
  pageSize: number;
12
14
  columnPinning: ColumnPinningState;
15
+ enableSelection?: boolean;
16
+ enableSelectPinned?: boolean;
17
+ expanding?: TableProps<TData>['expanding'];
13
18
  };
14
19
 
15
- export function useLoadingTable<TData>({ pageSize, columnDefinitions, columnPinning }: UseLoadingTableProps<TData>) {
16
- const data = useMemo(() => (Array.from({ length: pageSize }).map(() => '') || []) as TData[], [pageSize]);
17
- const columns = useMemo(
18
- () =>
19
- columnDefinitions.map(column => ({
20
- ...column,
21
- cell: () => <SkeletonText className={styles.skeleton} lines={1} width={'100%'} />,
22
- })),
23
- [columnDefinitions],
24
- );
20
+ function CellSkeleton() {
21
+ return <SkeletonText className={styles.skeleton} lines={1} width={'100%'} />;
22
+ }
23
+
24
+ export function useLoadingTable<TData extends object>({
25
+ pageSize,
26
+ columnDefinitions,
27
+ columnPinning,
28
+ enableSelection,
29
+ enableSelectPinned,
30
+ expanding,
31
+ }: UseLoadingTableProps<TData>) {
32
+ const data = useMemo(() => Array.from({ length: pageSize }).map(() => ({}) as TData), [pageSize]);
33
+ const columns = useMemo(() => {
34
+ let cols: ColumnDefinition<TData>[] = columnDefinitions.map(column => ({
35
+ ...column,
36
+ cell: () => <CellSkeleton />,
37
+ }));
38
+
39
+ // for selection column
40
+ if (enableSelection && !expanding) {
41
+ const selectionColumnDef = getSelectionCellColumnDef(enableSelectPinned ?? false);
42
+ const loadingSelectionColumn = {
43
+ ...selectionColumnDef,
44
+ cell: () => <CellSkeleton />,
45
+ } as ColumnDefinition<TData>;
46
+
47
+ cols = [loadingSelectionColumn, ...cols];
48
+ }
49
+
50
+ // for tree column
51
+ if (expanding) {
52
+ const treeColumnDef = getTreeColumnDef({ ...expanding.expandingColumnDefinition, enableSelection });
53
+ const loadingTreeColumn = {
54
+ ...treeColumnDef,
55
+ cell: () => <CellSkeleton />,
56
+ } as ColumnDefinition<TData>;
57
+
58
+ cols = [loadingTreeColumn, ...cols];
59
+ }
60
+
61
+ return cols;
62
+ }, [columnDefinitions, enableSelection, enableSelectPinned, expanding]);
25
63
 
26
64
  const loadingTable = useReactTable<TData>({
27
65
  data,
@@ -1,13 +1,12 @@
1
1
  import { getSelectionCellColumnDef, getTreeColumnDef } from '../../../helperComponents';
2
2
  import { ColumnDefinition } from '../../../types';
3
- import { RowAppearance, TableProps } from '../../types';
3
+ import { TableProps } from '../../types';
4
4
 
5
5
  type GetTableColumnsDefinitionsProps<TData extends object> = {
6
6
  columnDefinitions: ColumnDefinition<TData>[];
7
7
  enableSelection: boolean;
8
8
  enableSelectPinned: boolean;
9
9
  expanding: TableProps<TData>['expanding'];
10
- rowSelectionAppearance?: RowAppearance;
11
10
  };
12
11
 
13
12
  export function getTableColumnsDefinitions<TData extends object>({
@@ -15,17 +14,13 @@ export function getTableColumnsDefinitions<TData extends object>({
15
14
  enableSelection,
16
15
  enableSelectPinned,
17
16
  expanding,
18
- rowSelectionAppearance = RowAppearance.Disabled,
19
17
  }: GetTableColumnsDefinitionsProps<TData>): ColumnDefinition<TData>[] {
20
18
  let cols: ColumnDefinition<TData>[] = columnDefinitions;
21
19
  if (enableSelection && !expanding) {
22
20
  cols = [getSelectionCellColumnDef(enableSelectPinned), ...cols];
23
21
  }
24
22
  if (expanding) {
25
- cols = [
26
- getTreeColumnDef({ ...expanding.expandingColumnDefinition, enableSelection, rowSelectionAppearance }),
27
- ...cols,
28
- ];
23
+ cols = [getTreeColumnDef({ ...expanding.expandingColumnDefinition, enableSelection }), ...cols];
29
24
  }
30
25
  return cols;
31
26
  }
@@ -22,11 +22,6 @@ type BulkAction = Omit<NonNullable<ToolbarProps<Record<string, string>>['bulkAct
22
22
  onClick?(selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void): void;
23
23
  };
24
24
 
25
- export enum RowAppearance {
26
- Disabled = 'disabled',
27
- HideToggler = 'hide-toggler',
28
- }
29
-
30
25
  type BaseTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = WithSupportProps<{
31
26
  /** Данные для отрисовки */
32
27
  data: TData[];
@@ -74,7 +69,6 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
74
69
  * <strong>initialState</strong>: Начальное состояние выбора строк <br>
75
70
  * <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br>
76
71
  * <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br>
77
- * <strong>appearance</strong>: Режим отображения недоступной для выбора строки. Опции: RowAppearance.Disabled (по дефолту) - серый фон, чекбокс/радиобаттон скрыт, RowAppearance.HideToggler - обычный фон, чекбокс/радиобаттон скрыт <br>
78
72
  * <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br>
79
73
  * <strong>onChange</strong>: Колбэк на выбор строк
80
74
  * */
@@ -84,7 +78,6 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
84
78
  enable?: RowSelectionOptions<TData>['enableRowSelection'];
85
79
  multiRow?: boolean;
86
80
  onChange?(state: RowSelectionState): void;
87
- appearance?: RowAppearance;
88
81
  };
89
82
  /** Параметры отвечают за глобальный поиск в таблице <br>
90
83
  * <strong>initialState</strong>: Начальное состояние строки поиска <br>
@@ -6,7 +6,6 @@ import { ChevronRightSVG, FileSVG, FolderOpenSVG, FolderSVG } from '@snack-uikit
6
6
  import { Checkbox, Radio } from '@snack-uikit/toggles';
7
7
  import { TruncateString } from '@snack-uikit/truncate-string';
8
8
 
9
- import { RowAppearance } from '../../../components';
10
9
  import { COLUMN_PIN_POSITION, TEST_IDS } from '../../../constants';
11
10
  import { useCellResize } from '../../../contexts';
12
11
  import { ColumnDefinition } from '../../../types';
@@ -43,7 +42,6 @@ export type TreeColumnDefinitionProps<TData> = TreeColumnDef | TreeColumnDefWith
43
42
 
44
43
  type TreeColDefProps<TData> = TreeColumnDefinitionProps<TData> & {
45
44
  enableSelection?: boolean;
46
- rowSelectionAppearance: RowAppearance;
47
45
  };
48
46
 
49
47
  /** Вспомогательная функция для создания ячейки со статусом */
@@ -56,7 +54,6 @@ export function getTreeColumnDef<TData>({
56
54
  accessorKey,
57
55
  cell: renderCell,
58
56
  enableSelection,
59
- rowSelectionAppearance,
60
57
  }: TreeColDefProps<TData>): ColumnDefinition<TData> {
61
58
  const cell: ColumnDefinition<TData>['cell'] = function TreeCell(ctx) {
62
59
  const { row, cell } = ctx;
@@ -72,8 +69,6 @@ export function getTreeColumnDef<TData>({
72
69
  const depth = row.depth;
73
70
  const { ref } = useCellResize(TREE_CELL_ID, cell);
74
71
 
75
- const isToggleHidden = !isRowsSelectionEnabled && rowSelectionAppearance === RowAppearance.HideToggler;
76
-
77
72
  const linesVisibilityByIndex = useMemo(() => {
78
73
  const parents: (Row<TData> | undefined)[] = [];
79
74
  for (let i = depth; i >= 0; i--) {
@@ -186,7 +181,7 @@ export function getTreeColumnDef<TData>({
186
181
  data-selected={isRowSelected || undefined}
187
182
  data-multiselect={isMultiSelect || undefined}
188
183
  >
189
- {showToggle && !isToggleHidden && (
184
+ {showToggle && (
190
185
  <div tabIndex={-1} className={styles.treeCheckboxWrap}>
191
186
  {isMultiSelect ? (
192
187
  <Checkbox
@@ -2,7 +2,6 @@ import { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortabl
2
2
  import { Row as TableRow } from '@tanstack/react-table';
3
3
  import { MouseEvent, useState } from 'react';
4
4
 
5
- import { RowAppearance } from '../../components';
6
5
  import { COLUMN_PIN_POSITION, TEST_IDS } from '../../constants';
7
6
  import { ColumnOrder } from '../../types';
8
7
  import { BodyCell } from '../Cells';
@@ -26,7 +25,6 @@ export type BodyRowProps<TData> = Pick<RowProps, 'rowAutoHeight'> & {
26
25
  onRowClick?: RowClickHandler<TData>;
27
26
  columnOrder: ColumnOrder;
28
27
  enableColumnsOrderSortByDrag?: boolean;
29
- disabledRowAppearance?: RowAppearance;
30
28
  };
31
29
 
32
30
  export function BodyRow<TData>({
@@ -35,7 +33,6 @@ export function BodyRow<TData>({
35
33
  rowAutoHeight,
36
34
  columnOrder,
37
35
  enableColumnsOrderSortByDrag,
38
- disabledRowAppearance = RowAppearance.Disabled,
39
36
  }: BodyRowProps<TData>) {
40
37
  const { leftPinned, rightPinned, unpinned } = useRowCells(row);
41
38
 
@@ -67,7 +64,6 @@ export function BodyRow<TData>({
67
64
  onClick={handleRowClick}
68
65
  data-clickable={Boolean(onRowClick) || undefined}
69
66
  data-disabled={disabled || undefined}
70
- data-row-appearance={disabled ? disabledRowAppearance : undefined}
71
67
  data-selected={isSelected || undefined}
72
68
  data-actions-opened={dropListOpened || undefined}
73
69
  data-test-id={TEST_IDS.bodyRow}
@@ -108,11 +108,9 @@ $snack-ui-table-row-background: var(--snack-ui-table-row-background);
108
108
  )};
109
109
  }
110
110
  }
111
+
111
112
  &[data-disabled] {
112
113
  cursor: not-allowed;
113
- }
114
-
115
- &[data-row-appearance='disabled'] {
116
114
  background-color: styles-tokens-table.$sys-neutral-background;
117
115
 
118
116
  .rowPinnedCells {
@@ -1,17 +1,8 @@
1
- import { ReactNode } from 'react';
2
-
3
- import { IconPredefinedProps } from '@snack-uikit/icon-predefined';
4
- import { InfoBlock } from '@snack-uikit/info-block';
1
+ import { InfoBlock, InfoBlockProps } from '@snack-uikit/info-block';
5
2
 
6
3
  import styles from './styles.module.scss';
7
4
 
8
- export type EmptyStateProps = {
9
- title?: string;
10
- description?: string;
11
- icon?: Pick<IconPredefinedProps, 'icon' | 'decor' | 'appearance'>;
12
- footer?: ReactNode;
13
- className?: string;
14
- };
5
+ export type EmptyStateProps = Pick<InfoBlockProps, 'title' | 'description' | 'icon' | 'footer' | 'className'>;
15
6
 
16
7
  export type TableEmptyState = {
17
8
  emptyStates: {