@snack-uikit/table 0.37.33-preview-e710125b.0 → 0.37.34

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,22 @@
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.34 (2026-02-16)</small>
7
+
8
+ * feat(LK-7075): added expanding column minsize param ([a216a36](https://github.com/cloud-ru-tech/snack-uikit/commit/a216a36))
9
+
10
+
11
+
12
+
13
+
14
+ ## <small>0.37.33 (2026-02-13)</small>
15
+
16
+ * feat(EVODP-8477): Added table toolbar checkbox selection options. ([e57fcea](https://github.com/cloud-ru-tech/snack-uikit/commit/e57fcea))
17
+
18
+
19
+
20
+
21
+
6
22
  ## <small>0.37.32 (2026-02-03)</small>
7
23
 
8
24
  * feat(PDS-3472): add HideToggler appearance mode for disabled rows ([802be3d](https://github.com/cloud-ru-tech/snack-uikit/commit/802be3d))
package/README.md CHANGED
@@ -222,6 +222,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
222
222
  | infiniteLoading | `boolean` | - | Режим работы "бесконечной" загрузки |
223
223
  | suppressPagination | `boolean` | - | Отключение пагинации |
224
224
  | manualPagination | `boolean` | - | |
225
+ | toolbarCheckBoxMode | enum ToolbarCheckBoxMode: `"pageRows"`, `"allRows"` | - | Определение как должен работать чекбокс в тулбаре (по всем страницам или по текущей) |
225
226
  ## Table.getStatusColumnDef
226
227
  Вспомогательная функция для создания ячейки со статусом
227
228
  ### Props
@@ -1,7 +1,7 @@
1
1
  import { FiltersState } from '@snack-uikit/chips';
2
2
  import { TableProps } from '../types';
3
3
  /** Компонент таблицы */
4
- export declare function Table<TData extends object, TFilters extends FiltersState = Record<string, unknown>>({ data, rowPinning, columnDefinitions, keepPinnedRows, copyPinnedRows, enableSelectPinned, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, pageSize, pageCount, loading, infiniteLoading, outline, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar, suppressSearch, toolbarAfter, suppressPagination, manualSorting, manualPagination: manualPaginationProp, manualFiltering, autoResetPageIndex, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, expanding, bulkActions: bulkActionsProp, rowAutoHeight, columnsSettings: columnsSettingsProp, getRowBackgroundColor, ...rest }: TableProps<TData, TFilters>): import("react/jsx-runtime").JSX.Element;
4
+ export declare function Table<TData extends object, TFilters extends FiltersState = Record<string, unknown>>({ data, rowPinning, columnDefinitions, keepPinnedRows, copyPinnedRows, enableSelectPinned, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, pageSize, pageCount, loading, infiniteLoading, outline, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar, suppressSearch, toolbarAfter, suppressPagination, manualSorting, manualPagination: manualPaginationProp, manualFiltering, autoResetPageIndex, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, expanding, bulkActions: bulkActionsProp, rowAutoHeight, columnsSettings: columnsSettingsProp, getRowBackgroundColor, toolbarCheckBoxMode, ...rest }: TableProps<TData, TFilters>): import("react/jsx-runtime").JSX.Element;
5
5
  export declare namespace Table {
6
6
  var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
7
7
  var statusAppearances: {
@@ -32,6 +32,7 @@ const constants_1 = require("../../constants");
32
32
  const contexts_1 = require("../../contexts");
33
33
  const helperComponents_1 = require("../../helperComponents");
34
34
  const utils_2 = require("../../utils");
35
+ const types_1 = require("../types");
35
36
  const hooks_1 = require("./hooks");
36
37
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
37
38
  const utils_3 = require("./utils");
@@ -85,9 +86,10 @@ function Table(_a) {
85
86
  bulkActions: bulkActionsProp,
86
87
  rowAutoHeight,
87
88
  columnsSettings: columnsSettingsProp,
88
- getRowBackgroundColor
89
+ getRowBackgroundColor,
90
+ toolbarCheckBoxMode
89
91
  } = _a,
90
- rest = __rest(_a, ["data", "rowPinning", "columnDefinitions", "keepPinnedRows", "copyPinnedRows", "enableSelectPinned", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "pageSize", "pageCount", "loading", "infiniteLoading", "outline", "moreActions", "exportSettings", "dataFiltered", "dataError", "noDataState", "noResultsState", "errorDataState", "suppressToolbar", "suppressSearch", "toolbarAfter", "suppressPagination", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "scrollRef", "scrollContainerRef", "getRowId", "enableFuzzySearch", "savedState", "expanding", "bulkActions", "rowAutoHeight", "columnsSettings", "getRowBackgroundColor"]);
92
+ rest = __rest(_a, ["data", "rowPinning", "columnDefinitions", "keepPinnedRows", "copyPinnedRows", "enableSelectPinned", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "pageSize", "pageCount", "loading", "infiniteLoading", "outline", "moreActions", "exportSettings", "dataFiltered", "dataError", "noDataState", "noResultsState", "errorDataState", "suppressToolbar", "suppressSearch", "toolbarAfter", "suppressPagination", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "scrollRef", "scrollContainerRef", "getRowId", "enableFuzzySearch", "savedState", "expanding", "bulkActions", "rowAutoHeight", "columnsSettings", "getRowBackgroundColor", "toolbarCheckBoxMode"]);
91
93
  const [globalFilter, onGlobalFilterChange] = (0, hooks_1.useStateControl)(search, '');
92
94
  const [rowSelection, onRowSelectionChange] = (0, hooks_1.useStateControl)(rowSelectionProp, constants_1.DEFAULT_ROW_SELECTION);
93
95
  const defaultPaginationState = (0, react_1.useMemo)(() => ({
@@ -262,10 +264,11 @@ function Table(_a) {
262
264
  return (_a = action.onClick) === null || _a === void 0 ? void 0 : _a.call(action, table.getState().rowSelection, table.resetRowSelection);
263
265
  }
264
266
  })) : undefined, [bulkActionsProp, enableSelection, table]);
267
+ const isAllRowsMode = toolbarCheckBoxMode === types_1.ToolbarCheckBoxMode.AllRows;
265
268
  const handleOnToolbarCheck = (0, react_1.useCallback)(() => {
266
269
  if (!loading && !enableSelectPinned && table.getTopRows().length) {
267
270
  const centerRows = table.getCenterRows();
268
- const isSomeRowsSelected = table.getIsSomePageRowsSelected();
271
+ const isSomeRowsSelected = isAllRowsMode ? table.getIsSomeRowsSelected() : table.getIsSomePageRowsSelected();
269
272
  const isAllCenterRowsSelected = centerRows.every(row => row.getIsSelected());
270
273
  if (isAllCenterRowsSelected) {
271
274
  table.resetRowSelection();
@@ -275,10 +278,10 @@ function Table(_a) {
275
278
  return;
276
279
  }
277
280
  if (!loading && (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow)) {
278
- table.toggleAllPageRowsSelected();
281
+ isAllRowsMode ? table.toggleAllRowsSelected() : table.toggleAllPageRowsSelected();
279
282
  return;
280
283
  }
281
- }, [loading, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow, table, enableSelectPinned]);
284
+ }, [isAllRowsMode, loading, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow, table, enableSelectPinned]);
282
285
  const columnSizeVarsRef = (0, react_1.useRef)();
283
286
  const headers = table.getFlatHeaders();
284
287
  const columnSizes = (0, react_1.useMemo)(() => {
@@ -380,6 +383,16 @@ function Table(_a) {
380
383
  } = (0, contexts_1.useCellAutoResizeController)(table);
381
384
  const showToolbar = !suppressToolbar;
382
385
  const showPagination = !infiniteLoading && !suppressPagination;
386
+ const {
387
+ checked,
388
+ indeterminate
389
+ } = isAllRowsMode ? {
390
+ checked: table.getIsAllRowsSelected(),
391
+ indeterminate: table.getIsSomeRowsSelected()
392
+ } : {
393
+ checked: table.getIsAllPageRowsSelected(),
394
+ indeterminate: table.getIsSomePageRowsSelected()
395
+ };
383
396
  return (0, jsx_runtime_1.jsxs)("div", Object.assign({
384
397
  className: (0, classnames_1.default)(styles_module_scss_1.default.wrapper, className),
385
398
  "data-with-toolbar": showToolbar || undefined
@@ -417,8 +430,8 @@ function Table(_a) {
417
430
  } : undefined,
418
431
  bulkActions: bulkActions,
419
432
  selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single',
420
- checked: table.getIsAllPageRowsSelected(),
421
- indeterminate: table.getIsSomePageRowsSelected(),
433
+ checked: checked,
434
+ indeterminate: indeterminate,
422
435
  onCheck: enableSelection ? handleOnToolbarCheck : undefined,
423
436
  outline: outline,
424
437
  after: toolbarAfter || exportSettings || areColumnsSettingsEnabled ? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
@@ -14,6 +14,10 @@ export declare enum RowAppearance {
14
14
  Disabled = "disabled",
15
15
  HideToggler = "hide-toggler"
16
16
  }
17
+ export declare enum ToolbarCheckBoxMode {
18
+ PageRows = "pageRows",
19
+ AllRows = "allRows"
20
+ }
17
21
  type BaseTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = WithSupportProps<{
18
22
  /** Данные для отрисовки */
19
23
  data: TData[];
@@ -162,6 +166,7 @@ export type InfiniteTableProps<TData extends object, TFilters extends FiltersSta
162
166
  /** Отключение пагинации */
163
167
  suppressPagination?: never;
164
168
  manualPagination?: never;
169
+ toolbarCheckBoxMode?: never;
165
170
  };
166
171
  export type ClientTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = BaseTableProps<TData, TFilters> & {
167
172
  /** Параметры отвечают за пагинацию в таблице <br>
@@ -187,9 +192,13 @@ export type ClientTableProps<TData extends object, TFilters extends FiltersState
187
192
  suppressPagination?: boolean;
188
193
  manualPagination?: boolean;
189
194
  infiniteLoading?: never;
195
+ /**
196
+ * Определение как должен работать чекбокс в тулбаре (по всем страницам или по текущей)
197
+ */
198
+ toolbarCheckBoxMode?: ToolbarCheckBoxMode;
190
199
  };
191
200
  export type TableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = InfiniteTableProps<TData, TFilters> | ClientTableProps<TData, TFilters>;
192
- export type ServerTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = Omit<ClientTableProps<TData, TFilters>, 'pageSize' | 'pageCount' | 'pagination' | 'search' | 'data'> & {
201
+ export type ServerTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = Omit<ClientTableProps<TData, TFilters>, 'pageSize' | 'pageCount' | 'pagination' | 'search' | 'data' | 'toolbarCheckBoxMode'> & {
193
202
  /** Данные для отрисовки */
194
203
  items?: TData[];
195
204
  /**
@@ -3,9 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.RowAppearance = void 0;
6
+ exports.ToolbarCheckBoxMode = exports.RowAppearance = void 0;
7
7
  var RowAppearance;
8
8
  (function (RowAppearance) {
9
9
  RowAppearance["Disabled"] = "disabled";
10
10
  RowAppearance["HideToggler"] = "hide-toggler";
11
- })(RowAppearance || (exports.RowAppearance = RowAppearance = {}));
11
+ })(RowAppearance || (exports.RowAppearance = RowAppearance = {}));
12
+ var ToolbarCheckBoxMode;
13
+ (function (ToolbarCheckBoxMode) {
14
+ ToolbarCheckBoxMode["PageRows"] = "pageRows";
15
+ ToolbarCheckBoxMode["AllRows"] = "allRows";
16
+ })(ToolbarCheckBoxMode || (exports.ToolbarCheckBoxMode = ToolbarCheckBoxMode = {}));
@@ -1,7 +1,7 @@
1
1
  import { FiltersState } from '@snack-uikit/chips';
2
2
  import { TableProps } from '../types';
3
3
  /** Компонент таблицы */
4
- export declare function Table<TData extends object, TFilters extends FiltersState = Record<string, unknown>>({ data, rowPinning, columnDefinitions, keepPinnedRows, copyPinnedRows, enableSelectPinned, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, pageSize, pageCount, loading, infiniteLoading, outline, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar, suppressSearch, toolbarAfter, suppressPagination, manualSorting, manualPagination: manualPaginationProp, manualFiltering, autoResetPageIndex, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, expanding, bulkActions: bulkActionsProp, rowAutoHeight, columnsSettings: columnsSettingsProp, getRowBackgroundColor, ...rest }: TableProps<TData, TFilters>): import("react/jsx-runtime").JSX.Element;
4
+ export declare function Table<TData extends object, TFilters extends FiltersState = Record<string, unknown>>({ data, rowPinning, columnDefinitions, keepPinnedRows, copyPinnedRows, enableSelectPinned, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, pageSize, pageCount, loading, infiniteLoading, outline, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar, suppressSearch, toolbarAfter, suppressPagination, manualSorting, manualPagination: manualPaginationProp, manualFiltering, autoResetPageIndex, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, expanding, bulkActions: bulkActionsProp, rowAutoHeight, columnsSettings: columnsSettingsProp, getRowBackgroundColor, toolbarCheckBoxMode, ...rest }: TableProps<TData, TFilters>): import("react/jsx-runtime").JSX.Element;
5
5
  export declare namespace Table {
6
6
  var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
7
7
  var statusAppearances: {
@@ -24,6 +24,7 @@ import { DEFAULT_EXPANDED, DEFAULT_PAGE_SIZE, DEFAULT_ROW_SELECTION, DEFAULT_SOR
24
24
  import { CellAutoResizeContext, useCellAutoResizeController } from '../../contexts';
25
25
  import { BodyRow, ColumnsSettings, ExportButton, getColumnId, getRowActionsColumnDef, getStatusColumnDef, HeaderRow, STATUS_APPEARANCE, TableContext, TableEmptyState, TablePagination, useEmptyState, } from '../../helperComponents';
26
26
  import { fuzzyFilter } from '../../utils';
27
+ import { ToolbarCheckBoxMode } from '../types';
27
28
  import { useColumnOrderByDrag, useColumnSettings, useFilters, useLoadingTable, usePageReset, useStateControl, } from './hooks';
28
29
  import styles from './styles.module.css';
29
30
  import { getColumnStyleVars, getCurrentlyConfiguredHeaderWidth, getInitColumnSizeFromLocalStorage, getPinnedGroups, getTableColumnsDefinitions, saveStateToLocalStorage, } from './utils';
@@ -33,7 +34,7 @@ import { validateFilter, validatePaging, validateSorting } from './utils/saveTab
33
34
  export function Table(_a) {
34
35
  var { data, rowPinning = {
35
36
  top: [],
36
- }, columnDefinitions, keepPinnedRows = false, copyPinnedRows = false, enableSelectPinned = false, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, pageSize = DEFAULT_PAGE_SIZE, pageCount, loading = false, infiniteLoading = false, outline = false, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar = false, suppressSearch = false, toolbarAfter, suppressPagination = false, manualSorting = false, manualPagination: manualPaginationProp = false, manualFiltering = false, autoResetPageIndex = false, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, expanding, bulkActions: bulkActionsProp, rowAutoHeight, columnsSettings: columnsSettingsProp, getRowBackgroundColor } = _a, rest = __rest(_a, ["data", "rowPinning", "columnDefinitions", "keepPinnedRows", "copyPinnedRows", "enableSelectPinned", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "pageSize", "pageCount", "loading", "infiniteLoading", "outline", "moreActions", "exportSettings", "dataFiltered", "dataError", "noDataState", "noResultsState", "errorDataState", "suppressToolbar", "suppressSearch", "toolbarAfter", "suppressPagination", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "scrollRef", "scrollContainerRef", "getRowId", "enableFuzzySearch", "savedState", "expanding", "bulkActions", "rowAutoHeight", "columnsSettings", "getRowBackgroundColor"]);
37
+ }, columnDefinitions, keepPinnedRows = false, copyPinnedRows = false, enableSelectPinned = false, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, pageSize = DEFAULT_PAGE_SIZE, pageCount, loading = false, infiniteLoading = false, outline = false, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar = false, suppressSearch = false, toolbarAfter, suppressPagination = false, manualSorting = false, manualPagination: manualPaginationProp = false, manualFiltering = false, autoResetPageIndex = false, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, expanding, bulkActions: bulkActionsProp, rowAutoHeight, columnsSettings: columnsSettingsProp, getRowBackgroundColor, toolbarCheckBoxMode } = _a, rest = __rest(_a, ["data", "rowPinning", "columnDefinitions", "keepPinnedRows", "copyPinnedRows", "enableSelectPinned", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "pageSize", "pageCount", "loading", "infiniteLoading", "outline", "moreActions", "exportSettings", "dataFiltered", "dataError", "noDataState", "noResultsState", "errorDataState", "suppressToolbar", "suppressSearch", "toolbarAfter", "suppressPagination", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "scrollRef", "scrollContainerRef", "getRowId", "enableFuzzySearch", "savedState", "expanding", "bulkActions", "rowAutoHeight", "columnsSettings", "getRowBackgroundColor", "toolbarCheckBoxMode"]);
37
38
  const [globalFilter, onGlobalFilterChange] = useStateControl(search, '');
38
39
  const [rowSelection, onRowSelectionChange] = useStateControl(rowSelectionProp, DEFAULT_ROW_SELECTION);
39
40
  const defaultPaginationState = useMemo(() => ({
@@ -178,10 +179,11 @@ export function Table(_a) {
178
179
  const bulkActions = useMemo(() => enableSelection
179
180
  ? bulkActionsProp === null || bulkActionsProp === void 0 ? void 0 : bulkActionsProp.map(action => (Object.assign(Object.assign({}, action), { onClick: () => { var _a; return (_a = action.onClick) === null || _a === void 0 ? void 0 : _a.call(action, table.getState().rowSelection, table.resetRowSelection); } })))
180
181
  : undefined, [bulkActionsProp, enableSelection, table]);
182
+ const isAllRowsMode = toolbarCheckBoxMode === ToolbarCheckBoxMode.AllRows;
181
183
  const handleOnToolbarCheck = useCallback(() => {
182
184
  if (!loading && !enableSelectPinned && table.getTopRows().length) {
183
185
  const centerRows = table.getCenterRows();
184
- const isSomeRowsSelected = table.getIsSomePageRowsSelected();
186
+ const isSomeRowsSelected = isAllRowsMode ? table.getIsSomeRowsSelected() : table.getIsSomePageRowsSelected();
185
187
  const isAllCenterRowsSelected = centerRows.every(row => row.getIsSelected());
186
188
  if (isAllCenterRowsSelected) {
187
189
  table.resetRowSelection();
@@ -191,10 +193,10 @@ export function Table(_a) {
191
193
  return;
192
194
  }
193
195
  if (!loading && (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow)) {
194
- table.toggleAllPageRowsSelected();
196
+ isAllRowsMode ? table.toggleAllRowsSelected() : table.toggleAllPageRowsSelected();
195
197
  return;
196
198
  }
197
- }, [loading, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow, table, enableSelectPinned]);
199
+ }, [isAllRowsMode, loading, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow, table, enableSelectPinned]);
198
200
  const columnSizeVarsRef = useRef();
199
201
  const headers = table.getFlatHeaders();
200
202
  const columnSizes = useMemo(() => {
@@ -277,6 +279,9 @@ export function Table(_a) {
277
279
  const { updateCellMap } = useCellAutoResizeController(table);
278
280
  const showToolbar = !suppressToolbar;
279
281
  const showPagination = !infiniteLoading && !suppressPagination;
282
+ const { checked, indeterminate } = isAllRowsMode
283
+ ? { checked: table.getIsAllRowsSelected(), indeterminate: table.getIsSomeRowsSelected() }
284
+ : { checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected() };
280
285
  return (_jsxs("div", Object.assign({ className: cn(styles.wrapper, className), "data-with-toolbar": showToolbar || undefined }, extractSupportProps(rest), { children: [showToolbar && (_jsx("div", { className: styles.header, children: _jsx(Toolbar, { search: suppressSearch
281
286
  ? undefined
282
287
  : {
@@ -305,7 +310,7 @@ export function Table(_a) {
305
310
  }
306
311
  },
307
312
  }
308
- : 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 })] }), showPagination && (_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 }))] })));
313
+ : undefined, bulkActions: bulkActions, selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single', checked: checked, indeterminate: indeterminate, 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 })] }), showPagination && (_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 }))] })));
309
314
  }
310
315
  Table.getStatusColumnDef = getStatusColumnDef;
311
316
  Table.statusAppearances = STATUS_APPEARANCE;
@@ -14,6 +14,10 @@ export declare enum RowAppearance {
14
14
  Disabled = "disabled",
15
15
  HideToggler = "hide-toggler"
16
16
  }
17
+ export declare enum ToolbarCheckBoxMode {
18
+ PageRows = "pageRows",
19
+ AllRows = "allRows"
20
+ }
17
21
  type BaseTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = WithSupportProps<{
18
22
  /** Данные для отрисовки */
19
23
  data: TData[];
@@ -162,6 +166,7 @@ export type InfiniteTableProps<TData extends object, TFilters extends FiltersSta
162
166
  /** Отключение пагинации */
163
167
  suppressPagination?: never;
164
168
  manualPagination?: never;
169
+ toolbarCheckBoxMode?: never;
165
170
  };
166
171
  export type ClientTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = BaseTableProps<TData, TFilters> & {
167
172
  /** Параметры отвечают за пагинацию в таблице <br>
@@ -187,9 +192,13 @@ export type ClientTableProps<TData extends object, TFilters extends FiltersState
187
192
  suppressPagination?: boolean;
188
193
  manualPagination?: boolean;
189
194
  infiniteLoading?: never;
195
+ /**
196
+ * Определение как должен работать чекбокс в тулбаре (по всем страницам или по текущей)
197
+ */
198
+ toolbarCheckBoxMode?: ToolbarCheckBoxMode;
190
199
  };
191
200
  export type TableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = InfiniteTableProps<TData, TFilters> | ClientTableProps<TData, TFilters>;
192
- export type ServerTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = Omit<ClientTableProps<TData, TFilters>, 'pageSize' | 'pageCount' | 'pagination' | 'search' | 'data'> & {
201
+ export type ServerTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = Omit<ClientTableProps<TData, TFilters>, 'pageSize' | 'pageCount' | 'pagination' | 'search' | 'data' | 'toolbarCheckBoxMode'> & {
193
202
  /** Данные для отрисовки */
194
203
  items?: TData[];
195
204
  /**
@@ -3,3 +3,8 @@ export var RowAppearance;
3
3
  RowAppearance["Disabled"] = "disabled";
4
4
  RowAppearance["HideToggler"] = "hide-toggler";
5
5
  })(RowAppearance || (RowAppearance = {}));
6
+ export var ToolbarCheckBoxMode;
7
+ (function (ToolbarCheckBoxMode) {
8
+ ToolbarCheckBoxMode["PageRows"] = "pageRows";
9
+ ToolbarCheckBoxMode["AllRows"] = "allRows";
10
+ })(ToolbarCheckBoxMode || (ToolbarCheckBoxMode = {}));
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Table",
7
- "version": "0.37.33-preview-e710125b.0",
7
+ "version": "0.37.34",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -65,5 +65,5 @@
65
65
  "peerDependencies": {
66
66
  "@snack-uikit/locale": "*"
67
67
  },
68
- "gitHead": "2c50067068db8d0c400f15f6013a3cff445771f1"
68
+ "gitHead": "7342fbaed272bfd1c382432826c0ef53311c7ada"
69
69
  }
@@ -50,7 +50,7 @@ import {
50
50
  } from '../../helperComponents';
51
51
  import { ColumnDefinition } from '../../types';
52
52
  import { fuzzyFilter } from '../../utils';
53
- import { TableProps } from '../types';
53
+ import { TableProps, ToolbarCheckBoxMode } from '../types';
54
54
  import {
55
55
  useColumnOrderByDrag,
56
56
  useColumnSettings,
@@ -124,6 +124,7 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
124
124
  rowAutoHeight,
125
125
  columnsSettings: columnsSettingsProp,
126
126
  getRowBackgroundColor,
127
+ toolbarCheckBoxMode,
127
128
  ...rest
128
129
  }: TableProps<TData, TFilters>) {
129
130
  const [globalFilter, onGlobalFilterChange] = useStateControl<string>(search, '');
@@ -328,10 +329,12 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
328
329
  [bulkActionsProp, enableSelection, table],
329
330
  );
330
331
 
332
+ const isAllRowsMode = toolbarCheckBoxMode === ToolbarCheckBoxMode.AllRows;
333
+
331
334
  const handleOnToolbarCheck = useCallback(() => {
332
335
  if (!loading && !enableSelectPinned && table.getTopRows().length) {
333
336
  const centerRows = table.getCenterRows();
334
- const isSomeRowsSelected = table.getIsSomePageRowsSelected();
337
+ const isSomeRowsSelected = isAllRowsMode ? table.getIsSomeRowsSelected() : table.getIsSomePageRowsSelected();
335
338
  const isAllCenterRowsSelected = centerRows.every(row => row.getIsSelected());
336
339
 
337
340
  if (isAllCenterRowsSelected) {
@@ -344,10 +347,10 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
344
347
  }
345
348
 
346
349
  if (!loading && rowSelectionProp?.multiRow) {
347
- table.toggleAllPageRowsSelected();
350
+ isAllRowsMode ? table.toggleAllRowsSelected() : table.toggleAllPageRowsSelected();
348
351
  return;
349
352
  }
350
- }, [loading, rowSelectionProp?.multiRow, table, enableSelectPinned]);
353
+ }, [isAllRowsMode, loading, rowSelectionProp?.multiRow, table, enableSelectPinned]);
351
354
 
352
355
  const columnSizeVarsRef = useRef<Record<string, string>>();
353
356
  const headers = table.getFlatHeaders();
@@ -450,6 +453,10 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
450
453
  const showToolbar = !suppressToolbar;
451
454
  const showPagination = !infiniteLoading && !suppressPagination;
452
455
 
456
+ const { checked, indeterminate } = isAllRowsMode
457
+ ? { checked: table.getIsAllRowsSelected(), indeterminate: table.getIsSomeRowsSelected() }
458
+ : { checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected() };
459
+
453
460
  return (
454
461
  <div
455
462
  className={cn(styles.wrapper, className)}
@@ -497,8 +504,8 @@ export function Table<TData extends object, TFilters extends FiltersState = Reco
497
504
  }
498
505
  bulkActions={bulkActions}
499
506
  selectionMode={rowSelectionProp?.multiRow ? 'multiple' : 'single'}
500
- checked={table.getIsAllPageRowsSelected()}
501
- indeterminate={table.getIsSomePageRowsSelected()}
507
+ checked={checked}
508
+ indeterminate={indeterminate}
502
509
  onCheck={enableSelection ? handleOnToolbarCheck : undefined}
503
510
  outline={outline}
504
511
  after={
@@ -27,6 +27,11 @@ export enum RowAppearance {
27
27
  HideToggler = 'hide-toggler',
28
28
  }
29
29
 
30
+ export enum ToolbarCheckBoxMode {
31
+ PageRows = 'pageRows',
32
+ AllRows = 'allRows',
33
+ }
34
+
30
35
  type BaseTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = WithSupportProps<{
31
36
  /** Данные для отрисовки */
32
37
  data: TData[];
@@ -202,6 +207,8 @@ export type InfiniteTableProps<
202
207
  suppressPagination?: never;
203
208
 
204
209
  manualPagination?: never;
210
+
211
+ toolbarCheckBoxMode?: never;
205
212
  };
206
213
 
207
214
  export type ClientTableProps<
@@ -236,6 +243,11 @@ export type ClientTableProps<
236
243
  manualPagination?: boolean;
237
244
 
238
245
  infiniteLoading?: never;
246
+
247
+ /**
248
+ * Определение как должен работать чекбокс в тулбаре (по всем страницам или по текущей)
249
+ */
250
+ toolbarCheckBoxMode?: ToolbarCheckBoxMode;
239
251
  };
240
252
 
241
253
  export type TableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> =
@@ -244,7 +256,7 @@ export type TableProps<TData extends object, TFilters extends FiltersState = Rec
244
256
 
245
257
  export type ServerTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = Omit<
246
258
  ClientTableProps<TData, TFilters>,
247
- 'pageSize' | 'pageCount' | 'pagination' | 'search' | 'data'
259
+ 'pageSize' | 'pageCount' | 'pagination' | 'search' | 'data' | 'toolbarCheckBoxMode'
248
260
  > & {
249
261
  /** Данные для отрисовки */
250
262
  items?: TData[];