@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 +16 -0
- package/README.md +1 -0
- package/dist/cjs/components/Table/Table.d.ts +1 -1
- package/dist/cjs/components/Table/Table.js +20 -7
- package/dist/cjs/components/types.d.ts +10 -1
- package/dist/cjs/components/types.js +7 -2
- package/dist/esm/components/Table/Table.d.ts +1 -1
- package/dist/esm/components/Table/Table.js +10 -5
- package/dist/esm/components/types.d.ts +10 -1
- package/dist/esm/components/types.js +5 -0
- package/package.json +2 -2
- package/src/components/Table/Table.tsx +13 -6
- package/src/components/types.ts +13 -1
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:
|
|
421
|
-
indeterminate:
|
|
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:
|
|
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.
|
|
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": "
|
|
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={
|
|
501
|
-
indeterminate={
|
|
507
|
+
checked={checked}
|
|
508
|
+
indeterminate={indeterminate}
|
|
502
509
|
onCheck={enableSelection ? handleOnToolbarCheck : undefined}
|
|
503
510
|
outline={outline}
|
|
504
511
|
after={
|
package/src/components/types.ts
CHANGED
|
@@ -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[];
|