@snack-uikit/table 0.33.4 → 0.34.0
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 +11 -0
- package/README.md +5 -3
- package/dist/cjs/components/Table/Table.d.ts +1 -1
- package/dist/cjs/components/Table/Table.js +107 -48
- package/dist/cjs/components/Table/hooks/index.d.ts +1 -0
- package/dist/cjs/components/Table/hooks/index.js +2 -1
- package/dist/cjs/components/Table/hooks/useColumnOrderByDrag.d.ts +8 -0
- package/dist/cjs/components/Table/hooks/useColumnOrderByDrag.js +49 -0
- package/dist/cjs/components/Table/utils.d.ts +13 -0
- package/dist/cjs/components/Table/utils.js +71 -0
- package/dist/cjs/components/types.d.ts +12 -3
- package/dist/cjs/constants.d.ts +1 -0
- package/dist/cjs/constants.js +3 -2
- package/dist/cjs/helperComponents/Cells/BodyCell/BodyCell.d.ts +2 -1
- package/dist/cjs/helperComponents/Cells/BodyCell/BodyCell.js +13 -3
- package/dist/cjs/helperComponents/Cells/HeaderCell/HeaderCell.d.ts +2 -1
- package/dist/cjs/helperComponents/Cells/HeaderCell/HeaderCell.js +41 -17
- package/dist/cjs/helperComponents/Cells/HeaderCell/styles.module.css +10 -0
- package/dist/cjs/helperComponents/ColumnsSettings/ColumnsSettings.d.ts +8 -0
- package/dist/cjs/helperComponents/ColumnsSettings/ColumnsSettings.js +38 -0
- package/dist/cjs/helperComponents/ColumnsSettings/index.d.ts +1 -0
- package/dist/cjs/helperComponents/ColumnsSettings/index.js +25 -0
- package/dist/cjs/helperComponents/ColumnsSettings/styles.module.css +3 -0
- package/dist/cjs/helperComponents/Rows/BodyRow.d.ts +4 -1
- package/dist/cjs/helperComponents/Rows/BodyRow.js +20 -11
- package/dist/cjs/helperComponents/Rows/HeaderRow.d.ts +7 -1
- package/dist/cjs/helperComponents/Rows/HeaderRow.js +13 -5
- package/dist/cjs/helperComponents/hooks.d.ts +9 -9
- package/dist/cjs/helperComponents/hooks.js +39 -11
- package/dist/cjs/helperComponents/index.d.ts +1 -0
- package/dist/cjs/helperComponents/index.js +2 -1
- package/dist/cjs/types.d.ts +11 -3
- package/dist/esm/components/Table/Table.d.ts +1 -1
- package/dist/esm/components/Table/Table.js +40 -12
- package/dist/esm/components/Table/hooks/index.d.ts +1 -0
- package/dist/esm/components/Table/hooks/index.js +1 -0
- package/dist/esm/components/Table/hooks/useColumnOrderByDrag.d.ts +8 -0
- package/dist/esm/components/Table/hooks/useColumnOrderByDrag.js +39 -0
- package/dist/esm/components/Table/utils.d.ts +13 -0
- package/dist/esm/components/Table/utils.js +70 -0
- package/dist/esm/components/types.d.ts +12 -3
- package/dist/esm/constants.d.ts +1 -0
- package/dist/esm/constants.js +1 -0
- package/dist/esm/helperComponents/Cells/BodyCell/BodyCell.d.ts +2 -1
- package/dist/esm/helperComponents/Cells/BodyCell/BodyCell.js +7 -3
- package/dist/esm/helperComponents/Cells/HeaderCell/HeaderCell.d.ts +2 -1
- package/dist/esm/helperComponents/Cells/HeaderCell/HeaderCell.js +14 -4
- package/dist/esm/helperComponents/Cells/HeaderCell/styles.module.css +10 -0
- package/dist/esm/helperComponents/ColumnsSettings/ColumnsSettings.d.ts +8 -0
- package/dist/esm/helperComponents/ColumnsSettings/ColumnsSettings.js +12 -0
- package/dist/esm/helperComponents/ColumnsSettings/index.d.ts +1 -0
- package/dist/esm/helperComponents/ColumnsSettings/index.js +1 -0
- package/dist/esm/helperComponents/ColumnsSettings/styles.module.css +3 -0
- package/dist/esm/helperComponents/Rows/BodyRow.d.ts +4 -1
- package/dist/esm/helperComponents/Rows/BodyRow.js +4 -3
- package/dist/esm/helperComponents/Rows/HeaderRow.d.ts +7 -1
- package/dist/esm/helperComponents/Rows/HeaderRow.js +3 -2
- package/dist/esm/helperComponents/hooks.d.ts +9 -9
- package/dist/esm/helperComponents/hooks.js +32 -11
- package/dist/esm/helperComponents/index.d.ts +1 -0
- package/dist/esm/helperComponents/index.js +1 -0
- package/dist/esm/types.d.ts +11 -3
- package/package.json +9 -5
- package/src/components/Table/Table.tsx +147 -61
- package/src/components/Table/hooks/index.ts +1 -0
- package/src/components/Table/hooks/useColumnOrderByDrag.ts +67 -0
- package/src/components/Table/utils.ts +118 -0
- package/src/components/types.ts +13 -3
- package/src/constants.tsx +1 -0
- package/src/helperComponents/Cells/BodyCell/BodyCell.tsx +9 -2
- package/src/helperComponents/Cells/HeaderCell/HeaderCell.tsx +50 -23
- package/src/helperComponents/Cells/HeaderCell/styles.module.scss +15 -0
- package/src/helperComponents/ColumnsSettings/ColumnsSettings.tsx +28 -0
- package/src/helperComponents/ColumnsSettings/index.ts +1 -0
- package/src/helperComponents/ColumnsSettings/styles.module.scss +5 -0
- package/src/helperComponents/Rows/BodyRow.tsx +30 -8
- package/src/helperComponents/Rows/HeaderRow.tsx +21 -4
- package/src/helperComponents/hooks.ts +41 -11
- package/src/helperComponents/index.ts +1 -0
- package/src/types.ts +21 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# 0.34.0 (2025-03-06)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **PDS-1483:** table columns reorder by drag and columns settings ([80d43af](https://github.com/cloud-ru-tech/snack-uikit/commit/80d43af40c6acca38e2d788fcfa4fbd944818059))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## 0.33.4 (2025-03-05)
|
|
7
18
|
|
|
8
19
|
### Only dependencies have been changed
|
package/README.md
CHANGED
|
@@ -115,6 +115,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
115
115
|
| copyPinnedRows | `boolean` | - | Параметр отвечает за сохранение закрепленных строк в теле таблицы |
|
|
116
116
|
| enableSelectPinned | `boolean` | - | Параметр отвечает за чекбокс выбора закрепленных строк |
|
|
117
117
|
| sorting | `{ initialState?: SortingState; state?: SortingState; onChange?(state: SortingState): void; }` | - | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br> <strong>initialState</strong>: Начальное состояние сортировки <br> <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br> <strong>onChange</strong>: Колбэк на изменение сортировки |
|
|
118
|
+
| columnsSettings | `{ enableDrag?: boolean; headerLabel?: string; }` | - | Параметры отвечают за настройки колонок <br> <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br> <strong>headerLabel</strong>: Название меню настроек колонок. Наличие включает показ настроек <br> <strong>selectAllButtonLabels</strong>: Значения кнопки включения/отключения всех айтемов ([вкл, выкл]) <br> |
|
|
118
119
|
| expanding | `{ getSubRows: (element: TData) => TData[]; expandingColumnDefinition: TreeColumnDefinitionProps<TData>; }` | - | Параметр отвечает за общие настройки раскрывающихся строк |
|
|
119
120
|
| rowSelection | `{ initialState?: RowSelectionState; state?: RowSelectionState; enable?: boolean \| ((row: Row<TData>) => boolean); multiRow?: boolean; onChange?(state: RowSelectionState): void; }` | - | Параметры отвечают за возможность выбора строк <br> <strong>initialState</strong>: Начальное состояние выбора строк <br> <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br> <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br> <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br> <strong>onChange</strong>: Колбэк на выбор строк |
|
|
120
121
|
| search | `{ initialState?: string; state?: string; placeholder?: string; loading?: boolean; onChange?(value: string): void; }` | 'Search'<br> <strong>loading</strong>: Состояние загрузки в строке поиска <br> <strong>onChange</strong>: Колбэк на изменение данных в строке поиска | Параметры отвечают за глобальный поиск в таблице <br> <strong>initialState</strong>: Начальное состояние строки поиска <br> <strong>state</strong>: Состояние строки поиска, жестко устанавливаемое снаружи <br> <strong>placeholder</strong>: Placeholder строки поиска |
|
|
@@ -126,7 +127,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
126
127
|
| loading | `boolean` | - | Состояние загрузки |
|
|
127
128
|
| onRefresh | `() => void` | - | Колбек обновления данных |
|
|
128
129
|
| outline | `boolean` | - | Внешний бордер для тулбара и таблицы |
|
|
129
|
-
| columnFilters | `
|
|
130
|
+
| columnFilters | `FilterRow<TFilters>` | - | Фильтры |
|
|
130
131
|
| dataFiltered | `boolean` | - | Флаг, показывающий что данные были отфильтрованы при пустых данных |
|
|
131
132
|
| dataError | `boolean` | - | Флаг, показывающий что произошла ошибка запроса при пустых данных |
|
|
132
133
|
| noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
|
|
@@ -178,6 +179,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
178
179
|
|------|------|---------------|-------------|
|
|
179
180
|
| onChangePage* | `(offset: number, limit: number) => void` | - | |
|
|
180
181
|
| columnDefinitions* | `ColumnDefinition<TData>[]` | - | Определение внешнего вида и функционала колонок |
|
|
182
|
+
| className | `string` | - | CSS-класс |
|
|
181
183
|
| onRefresh | `() => void` | - | Колбек обновления данных |
|
|
182
184
|
| moreActions | `Action[]` | - | Элементы выпадающего списка кнопки с действиями |
|
|
183
185
|
| bulkActions | `BulkAction[]` | - | Список действия для массовых операций |
|
|
@@ -185,15 +187,15 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
185
187
|
| copyPinnedRows | `boolean` | false | Параметр отвечает за сохранение закрепленных строк в теле таблицы |
|
|
186
188
|
| enableSelectPinned | `boolean` | - | Параметр отвечает за чекбокс выбора закрепленных строк |
|
|
187
189
|
| sorting | `{ initialState?: SortingState; state?: SortingState; onChange?(state: SortingState): void; }` | - | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br> <strong>initialState</strong>: Начальное состояние сортировки <br> <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br> <strong>onChange</strong>: Колбэк на изменение сортировки |
|
|
190
|
+
| columnsSettings | `{ enableDrag?: boolean; headerLabel?: string; }` | - | Параметры отвечают за настройки колонок <br> <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br> <strong>headerLabel</strong>: Название меню настроек колонок. Наличие включает показ настроек <br> <strong>selectAllButtonLabels</strong>: Значения кнопки включения/отключения всех айтемов ([вкл, выкл]) <br> |
|
|
188
191
|
| expanding | `{ getSubRows: (element: TData) => TData[]; expandingColumnDefinition: TreeColumnDefinitionProps<TData>; }` | - | Параметр отвечает за общие настройки раскрывающихся строк |
|
|
189
192
|
| rowSelection | `{ initialState?: RowSelectionState; state?: RowSelectionState; enable?: boolean \| ((row: Row<TData>) => boolean); multiRow?: boolean; onChange?(state: RowSelectionState): void; }` | - | Параметры отвечают за возможность выбора строк <br> <strong>initialState</strong>: Начальное состояние выбора строк <br> <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br> <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br> <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br> <strong>onChange</strong>: Колбэк на выбор строк |
|
|
190
193
|
| enableFuzzySearch | `boolean` | - | Включить нечеткий поиск |
|
|
191
194
|
| rowAutoHeight | `boolean` | - | |
|
|
192
195
|
| onRowClick | `RowClickHandler<TData>` | - | Колбэк клика по строке |
|
|
193
|
-
| className | `string` | - | CSS-класс |
|
|
194
196
|
| loading | `boolean` | - | Состояние загрузки |
|
|
195
197
|
| outline | `boolean` | - | Внешний бордер для тулбара и таблицы |
|
|
196
|
-
| columnFilters | `
|
|
198
|
+
| columnFilters | `FilterRow<TFilters>` | - | Фильтры |
|
|
197
199
|
| dataFiltered | `boolean` | - | Флаг, показывающий что данные были отфильтрованы при пустых данных |
|
|
198
200
|
| dataError | `boolean` | - | Флаг, показывающий что произошла ошибка запроса при пустых данных |
|
|
199
201
|
| noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
|
|
@@ -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, ...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, ...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: Record<string, string>;
|
|
@@ -18,6 +18,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
18
18
|
});
|
|
19
19
|
exports.Table = Table;
|
|
20
20
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
21
|
+
const core_1 = require("@dnd-kit/core");
|
|
22
|
+
const modifiers_1 = require("@dnd-kit/modifiers");
|
|
21
23
|
const react_table_1 = require("@tanstack/react-table");
|
|
22
24
|
const classnames_1 = __importDefault(require("classnames"));
|
|
23
25
|
const react_1 = require("react");
|
|
@@ -83,9 +85,10 @@ function Table(_a) {
|
|
|
83
85
|
savedState,
|
|
84
86
|
expanding,
|
|
85
87
|
bulkActions: bulkActionsProp,
|
|
86
|
-
rowAutoHeight
|
|
88
|
+
rowAutoHeight,
|
|
89
|
+
columnsSettings: columnsSettingsProp
|
|
87
90
|
} = _a,
|
|
88
|
-
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"]);
|
|
91
|
+
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"]);
|
|
89
92
|
const {
|
|
90
93
|
setDataToStorages,
|
|
91
94
|
defaultFilter
|
|
@@ -111,6 +114,7 @@ function Table(_a) {
|
|
|
111
114
|
initialState: [],
|
|
112
115
|
onChange: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.onVisibleFiltersChange
|
|
113
116
|
}, constants_1.DEFAULT_FILTER_VISIBILITY);
|
|
117
|
+
const [areColumnFiltersOpen, setAreColumnFiltersOpen] = (0, react_1.useState)(true);
|
|
114
118
|
(0, react_1.useEffect)(() => {
|
|
115
119
|
setDataToStorages({
|
|
116
120
|
pagination,
|
|
@@ -130,16 +134,30 @@ function Table(_a) {
|
|
|
130
134
|
// Только для первого рендера, чтобы проинициализировать фильтр
|
|
131
135
|
// eslint-disable-next-line
|
|
132
136
|
}, [defaultFilter]);
|
|
133
|
-
const patchedFilter = (0, react_1.useMemo)(() =>
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
const patchedFilter = (0, react_1.useMemo)(() => {
|
|
138
|
+
if (!columnFilters) {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
return Object.assign(Object.assign({}, columnFilters), {
|
|
142
|
+
open: areColumnFiltersOpen,
|
|
143
|
+
onOpenChange: setAreColumnFiltersOpen,
|
|
144
|
+
value: filter,
|
|
145
|
+
onChange: setFilter,
|
|
146
|
+
visibleFilters: filterVisibility,
|
|
147
|
+
onVisibleFiltersChange: setFilterVisibility
|
|
148
|
+
});
|
|
149
|
+
}, [columnFilters, areColumnFiltersOpen, filter, setFilter, filterVisibility, setFilterVisibility]);
|
|
139
150
|
const enableSelection = Boolean(rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable);
|
|
140
151
|
const manualPagination = infiniteLoading || manualPaginationProp;
|
|
152
|
+
const [enabledColumns, setEnabledColumns] = (0, react_1.useState)(() => (0, utils_3.prepareColumnsSettingsMap)(columnDefinitions));
|
|
153
|
+
const filteredColumnDefinitions = (0, react_1.useMemo)(() => columnDefinitions.filter(colDef => {
|
|
154
|
+
if ((0, utils_3.isFilterableColumn)(colDef)) {
|
|
155
|
+
return enabledColumns.includes(colDef.id);
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
}), [columnDefinitions, enabledColumns]);
|
|
141
159
|
const tableColumns = (0, react_1.useMemo)(() => {
|
|
142
|
-
let cols =
|
|
160
|
+
let cols = filteredColumnDefinitions;
|
|
143
161
|
if (enableSelection && !expanding) {
|
|
144
162
|
cols = [(0, helperComponents_1.getSelectionCellColumnDef)(enableSelectPinned), ...cols];
|
|
145
163
|
}
|
|
@@ -147,7 +165,25 @@ function Table(_a) {
|
|
|
147
165
|
cols = [(0, TreeCell_1.getTreeColumnDef)(expanding.expandingColumnDefinition), ...cols];
|
|
148
166
|
}
|
|
149
167
|
return cols;
|
|
150
|
-
}, [
|
|
168
|
+
}, [filteredColumnDefinitions, enableSelection, enableSelectPinned, expanding]);
|
|
169
|
+
const {
|
|
170
|
+
columnOrder,
|
|
171
|
+
setColumnOrder,
|
|
172
|
+
sensors,
|
|
173
|
+
handleDragEnd
|
|
174
|
+
} = (0, hooks_1.useColumnOrderByDrag)(tableColumns);
|
|
175
|
+
const filterableColumns = (0, react_1.useMemo)(() => columnDefinitions.filter(utils_3.isFilterableColumn), [columnDefinitions]);
|
|
176
|
+
const areAllColumnsEnabled = filterableColumns.length === enabledColumns.length;
|
|
177
|
+
const {
|
|
178
|
+
t
|
|
179
|
+
} = (0, locale_1.useLocale)('Table');
|
|
180
|
+
const columnsSettings = (0, react_1.useMemo)(() => (0, utils_3.prepareColumnsSettings)({
|
|
181
|
+
columnDefinitions,
|
|
182
|
+
columnOrder,
|
|
183
|
+
areAllColumnsEnabled,
|
|
184
|
+
columnsSettingsHeader: columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel,
|
|
185
|
+
t
|
|
186
|
+
}), [areAllColumnsEnabled, columnDefinitions, columnOrder, columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel, t]);
|
|
151
187
|
const columnPinning = (0, react_1.useMemo)(() => {
|
|
152
188
|
var _a;
|
|
153
189
|
const pinningState = {
|
|
@@ -176,6 +212,7 @@ function Table(_a) {
|
|
|
176
212
|
columns: tableColumns,
|
|
177
213
|
state: {
|
|
178
214
|
columnPinning,
|
|
215
|
+
columnOrder,
|
|
179
216
|
globalFilter,
|
|
180
217
|
rowSelection,
|
|
181
218
|
sorting,
|
|
@@ -199,6 +236,7 @@ function Table(_a) {
|
|
|
199
236
|
});
|
|
200
237
|
}
|
|
201
238
|
},
|
|
239
|
+
onColumnOrderChange: setColumnOrder,
|
|
202
240
|
manualSorting,
|
|
203
241
|
manualPagination,
|
|
204
242
|
manualFiltering,
|
|
@@ -236,7 +274,7 @@ function Table(_a) {
|
|
|
236
274
|
loadingTable
|
|
237
275
|
} = (0, hooks_1.useLoadingTable)({
|
|
238
276
|
pageSize: Math.min(Math.max(pageSize, 5), constants_1.DEFAULT_PAGE_SIZE),
|
|
239
|
-
columnDefinitions:
|
|
277
|
+
columnDefinitions: filteredColumnDefinitions,
|
|
240
278
|
columnPinning
|
|
241
279
|
});
|
|
242
280
|
const handleOnRefresh = (0, react_1.useCallback)(() => {
|
|
@@ -350,9 +388,6 @@ function Table(_a) {
|
|
|
350
388
|
const loadingTableRows = loadingTable.getRowModel().rows;
|
|
351
389
|
const filteredTopRows = table.getState().globalFilter ? topRows.filter(tr => tableFilteredRowsIds.includes(tr.id)) : topRows;
|
|
352
390
|
const centerRows = copyPinnedRows ? tableRows : tableCenterRows;
|
|
353
|
-
const {
|
|
354
|
-
t
|
|
355
|
-
} = (0, locale_1.useLocale)('Table');
|
|
356
391
|
const emptyStates = (0, helperComponents_1.useEmptyState)({
|
|
357
392
|
noDataState,
|
|
358
393
|
noResultsState,
|
|
@@ -369,6 +404,8 @@ function Table(_a) {
|
|
|
369
404
|
updateCellMap
|
|
370
405
|
} = (0, contexts_1.useCellAutoResizeController)(table);
|
|
371
406
|
const showToolbar = !suppressToolbar;
|
|
407
|
+
const showColumnsSettings = Boolean(columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.headerLabel);
|
|
408
|
+
const enableColumnsOrderSortByDrag = Boolean(columnsSettingsProp === null || columnsSettingsProp === void 0 ? void 0 : columnsSettingsProp.enableDrag);
|
|
372
409
|
return (0, jsx_runtime_1.jsxs)("div", Object.assign({
|
|
373
410
|
className: (0, classnames_1.default)(styles_module_scss_1.default.wrapper, className)
|
|
374
411
|
}, (0, utils_1.extractSupportProps)(rest), {
|
|
@@ -389,13 +426,17 @@ function Table(_a) {
|
|
|
389
426
|
indeterminate: table.getIsSomePageRowsSelected(),
|
|
390
427
|
onCheck: enableSelection ? handleOnToolbarCheck : undefined,
|
|
391
428
|
outline: outline,
|
|
392
|
-
after: toolbarAfter || exportSettings ? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
|
|
429
|
+
after: toolbarAfter || exportSettings || showColumnsSettings ? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
|
|
393
430
|
children: [toolbarAfter, exportSettings && (0, jsx_runtime_1.jsx)(helperComponents_1.ExportButton, {
|
|
394
431
|
settings: exportSettings,
|
|
395
432
|
columnDefinitions: columnDefinitions,
|
|
396
433
|
data: data,
|
|
397
434
|
topRows: filteredTopRows,
|
|
398
435
|
centerRows: centerRows
|
|
436
|
+
}), showColumnsSettings && (0, jsx_runtime_1.jsx)(helperComponents_1.ColumnsSettings, {
|
|
437
|
+
columnsSettings: columnsSettings,
|
|
438
|
+
enabledColumns: enabledColumns,
|
|
439
|
+
setEnabledColumns: setEnabledColumns
|
|
399
440
|
})]
|
|
400
441
|
}) : undefined,
|
|
401
442
|
moreActions: moreActions,
|
|
@@ -414,41 +455,59 @@ function Table(_a) {
|
|
|
414
455
|
value: {
|
|
415
456
|
updateCellMap
|
|
416
457
|
},
|
|
417
|
-
children: (0, jsx_runtime_1.jsx)(
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
458
|
+
children: (0, jsx_runtime_1.jsx)(core_1.DndContext, {
|
|
459
|
+
collisionDetection: core_1.closestCenter,
|
|
460
|
+
modifiers: [modifiers_1.restrictToHorizontalAxis],
|
|
461
|
+
onDragEnd: handleDragEnd,
|
|
462
|
+
sensors: sensors,
|
|
463
|
+
children: (0, jsx_runtime_1.jsx)(helperComponents_1.TableContext.Provider, {
|
|
464
|
+
value: {
|
|
465
|
+
table
|
|
466
|
+
},
|
|
467
|
+
children: (!infiniteLoading || !data.length) && loading ? (0, jsx_runtime_1.jsxs)(skeleton_1.SkeletonContextProvider, {
|
|
468
|
+
loading: true,
|
|
469
|
+
children: [(0, jsx_runtime_1.jsx)(helperComponents_1.HeaderRow, {
|
|
470
|
+
rowAutoHeight: rowAutoHeight,
|
|
471
|
+
columnOrder: columnOrder
|
|
472
|
+
}), loadingTableRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
|
|
473
|
+
row: row,
|
|
474
|
+
rowAutoHeight: rowAutoHeight,
|
|
475
|
+
columnOrder: columnOrder
|
|
476
|
+
}, row.id))]
|
|
477
|
+
}) : (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
|
|
478
|
+
children: [centerRows.length || filteredTopRows.length ? (0, jsx_runtime_1.jsx)(helperComponents_1.HeaderRow, {
|
|
479
|
+
rowAutoHeight: rowAutoHeight,
|
|
480
|
+
columnOrder: columnOrder,
|
|
481
|
+
enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag
|
|
482
|
+
}) : null, filteredTopRows.length ? (0, jsx_runtime_1.jsx)("div", {
|
|
483
|
+
className: styles_module_scss_1.default.topRowWrapper,
|
|
484
|
+
children: filteredTopRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
|
|
485
|
+
row: row,
|
|
486
|
+
onRowClick: onRowClick,
|
|
487
|
+
rowAutoHeight: rowAutoHeight,
|
|
488
|
+
columnOrder: columnOrder,
|
|
489
|
+
enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag
|
|
490
|
+
}, row.id))
|
|
491
|
+
}) : null, centerRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
|
|
433
492
|
row: row,
|
|
434
493
|
onRowClick: onRowClick,
|
|
435
|
-
rowAutoHeight: rowAutoHeight
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
},
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
})
|
|
494
|
+
rowAutoHeight: rowAutoHeight,
|
|
495
|
+
columnOrder: columnOrder,
|
|
496
|
+
enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag
|
|
497
|
+
}, row.id)), data.length > 0 && infiniteLoading && loading && !dataError && (0, jsx_runtime_1.jsx)(skeleton_1.SkeletonContextProvider, {
|
|
498
|
+
loading: true,
|
|
499
|
+
children: loadingTableRows.slice(0, 3).map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
|
|
500
|
+
row: row,
|
|
501
|
+
columnOrder: columnOrder,
|
|
502
|
+
enableColumnsOrderSortByDrag: enableColumnsOrderSortByDrag
|
|
503
|
+
}, row.id))
|
|
504
|
+
}), (0, jsx_runtime_1.jsx)(helperComponents_1.TableEmptyState, {
|
|
505
|
+
emptyStates: emptyStates,
|
|
506
|
+
dataError: dataError,
|
|
507
|
+
dataFiltered: dataFiltered || Boolean(table.getState().globalFilter),
|
|
508
|
+
tableRowsLength: tableRows.length + filteredTopRows.length
|
|
509
|
+
})]
|
|
510
|
+
})
|
|
452
511
|
})
|
|
453
512
|
})
|
|
454
513
|
})
|
|
@@ -23,4 +23,5 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
23
23
|
value: true
|
|
24
24
|
});
|
|
25
25
|
__exportStar(require("./useLoadingTable"), exports);
|
|
26
|
-
__exportStar(require("./useStateControl"), exports);
|
|
26
|
+
__exportStar(require("./useStateControl"), exports);
|
|
27
|
+
__exportStar(require("./useColumnOrderByDrag"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DragEndEvent, SensorOptions } from '@dnd-kit/core';
|
|
2
|
+
import { ColumnDefinition } from '../../../types';
|
|
3
|
+
export declare function useColumnOrderByDrag<TData extends object>(tableColumns: ColumnDefinition<TData>[]): {
|
|
4
|
+
columnOrder: string[];
|
|
5
|
+
setColumnOrder: import("react").Dispatch<import("react").SetStateAction<string[]>>;
|
|
6
|
+
handleDragEnd: ({ active, over }: DragEndEvent) => void;
|
|
7
|
+
sensors: import("@dnd-kit/core").SensorDescriptor<SensorOptions>[];
|
|
8
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useColumnOrderByDrag = useColumnOrderByDrag;
|
|
7
|
+
const core_1 = require("@dnd-kit/core");
|
|
8
|
+
const sortable_1 = require("@dnd-kit/sortable");
|
|
9
|
+
const react_1 = require("react");
|
|
10
|
+
function prepareInitialState(tableColumns) {
|
|
11
|
+
return tableColumns.filter(column => column.pinned !== 'left' && column.pinned !== 'right').map(c => c.id);
|
|
12
|
+
}
|
|
13
|
+
const draggingOptions = {
|
|
14
|
+
activationConstraint: {
|
|
15
|
+
distance: 5 // Is required to differ click (sort) from drag
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
function useColumnOrderByDrag(tableColumns) {
|
|
19
|
+
const [columnOrder, setColumnOrder] = (0, react_1.useState)(() => prepareInitialState(tableColumns));
|
|
20
|
+
const handleDragEnd = (0, react_1.useCallback)(_ref => {
|
|
21
|
+
let {
|
|
22
|
+
active,
|
|
23
|
+
over
|
|
24
|
+
} = _ref;
|
|
25
|
+
if (!active || !over) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const activeId = active.id.toString();
|
|
29
|
+
const overId = over.id.toString();
|
|
30
|
+
if (activeId === overId) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!columnOrder.includes(overId)) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
setColumnOrder(columnOrder => {
|
|
37
|
+
const oldIndex = columnOrder.indexOf(activeId);
|
|
38
|
+
const newIndex = columnOrder.indexOf(overId);
|
|
39
|
+
return (0, sortable_1.arrayMove)(columnOrder, oldIndex, newIndex);
|
|
40
|
+
});
|
|
41
|
+
}, [columnOrder]);
|
|
42
|
+
const sensors = (0, core_1.useSensors)((0, core_1.useSensor)(core_1.MouseSensor, draggingOptions), (0, core_1.useSensor)(core_1.TouchSensor, {}), (0, core_1.useSensor)(core_1.KeyboardSensor, {}));
|
|
43
|
+
return {
|
|
44
|
+
columnOrder,
|
|
45
|
+
setColumnOrder,
|
|
46
|
+
handleDragEnd,
|
|
47
|
+
sensors
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { GroupSelectItemProps } from '@snack-uikit/list';
|
|
2
|
+
import { useLocale } from '@snack-uikit/locale';
|
|
3
|
+
import { ColumnDefinition, FilterableColumnDefinition } from '../../types';
|
|
1
4
|
export declare function getCurrentlyConfiguredHeaderWidth(id: string): number;
|
|
2
5
|
export declare function getColumnStyleVars(id: string): {
|
|
3
6
|
sizeKey: string;
|
|
@@ -14,4 +17,14 @@ type SaveStateToLocalStorageProps = {
|
|
|
14
17
|
size: string;
|
|
15
18
|
};
|
|
16
19
|
export declare function saveStateToLocalStorage({ id, columnId, size }: SaveStateToLocalStorageProps): void;
|
|
20
|
+
export declare function isFilterableColumn<TData extends object>(colDef: ColumnDefinition<TData>): colDef is FilterableColumnDefinition<TData>;
|
|
21
|
+
export declare function prepareColumnsSettingsMap<TData extends object>(columnDefinitions: ColumnDefinition<TData>[]): string[];
|
|
22
|
+
type PrepareColumnsSettingsProps<TData extends object> = {
|
|
23
|
+
columnDefinitions: ColumnDefinition<TData>[];
|
|
24
|
+
columnOrder: string[];
|
|
25
|
+
areAllColumnsEnabled: boolean;
|
|
26
|
+
columnsSettingsHeader?: string;
|
|
27
|
+
t: ReturnType<typeof useLocale<'Table'>>['t'];
|
|
28
|
+
};
|
|
29
|
+
export declare function prepareColumnsSettings<TData extends object>({ columnDefinitions, columnOrder, columnsSettingsHeader, areAllColumnsEnabled, t, }: PrepareColumnsSettingsProps<TData>): [GroupSelectItemProps];
|
|
17
30
|
export {};
|
|
@@ -7,6 +7,9 @@ exports.getCurrentlyConfiguredHeaderWidth = getCurrentlyConfiguredHeaderWidth;
|
|
|
7
7
|
exports.getColumnStyleVars = getColumnStyleVars;
|
|
8
8
|
exports.getInitColumnSizeFromLocalStorage = getInitColumnSizeFromLocalStorage;
|
|
9
9
|
exports.saveStateToLocalStorage = saveStateToLocalStorage;
|
|
10
|
+
exports.isFilterableColumn = isFilterableColumn;
|
|
11
|
+
exports.prepareColumnsSettingsMap = prepareColumnsSettingsMap;
|
|
12
|
+
exports.prepareColumnsSettings = prepareColumnsSettings;
|
|
10
13
|
const utils_1 = require("@snack-uikit/utils");
|
|
11
14
|
function getCurrentlyConfiguredHeaderWidth(id) {
|
|
12
15
|
if ((0, utils_1.isBrowser)()) {
|
|
@@ -56,4 +59,72 @@ function saveStateToLocalStorage(_ref2) {
|
|
|
56
59
|
localStorage.setItem(id, JSON.stringify(Object.assign(Object.assign({}, savedStateFromStorage || {}), {
|
|
57
60
|
resizeState: newResizeState
|
|
58
61
|
})));
|
|
62
|
+
}
|
|
63
|
+
function isFilterableColumn(colDef) {
|
|
64
|
+
return 'id' in colDef && 'headerConfigLabel' in colDef;
|
|
65
|
+
}
|
|
66
|
+
function prepareColumnsSettingsMap(columnDefinitions) {
|
|
67
|
+
return columnDefinitions.filter(isFilterableColumn).map(colDef => colDef.id);
|
|
68
|
+
}
|
|
69
|
+
const sortColumnDefinitions = columnOrder => function sortColDefs(colDefA, colDefB) {
|
|
70
|
+
const indexItemA = columnOrder.findIndex(columnIndex => columnIndex === colDefA.id);
|
|
71
|
+
const indexItemB = columnOrder.findIndex(columnIndex => columnIndex === colDefB.id);
|
|
72
|
+
return indexItemA - indexItemB;
|
|
73
|
+
};
|
|
74
|
+
function createColumnsSettingsOption(columnDefinition) {
|
|
75
|
+
return {
|
|
76
|
+
id: columnDefinition.id,
|
|
77
|
+
content: {
|
|
78
|
+
option: columnDefinition.headerConfigLabel
|
|
79
|
+
},
|
|
80
|
+
switch: true,
|
|
81
|
+
showSwitchIcon: true
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function prepareColumnsSettings(_ref3) {
|
|
85
|
+
let {
|
|
86
|
+
columnDefinitions,
|
|
87
|
+
columnOrder,
|
|
88
|
+
columnsSettingsHeader,
|
|
89
|
+
areAllColumnsEnabled,
|
|
90
|
+
t
|
|
91
|
+
} = _ref3;
|
|
92
|
+
const groupedItems = columnDefinitions.filter(isFilterableColumn).sort(sortColumnDefinitions(columnOrder)).reduce((accSettings, colDef) => {
|
|
93
|
+
const item = createColumnsSettingsOption(colDef);
|
|
94
|
+
switch (colDef.pinned) {
|
|
95
|
+
case 'left':
|
|
96
|
+
accSettings.pinTop.push(item);
|
|
97
|
+
break;
|
|
98
|
+
case 'right':
|
|
99
|
+
accSettings.pinBottom.push(item);
|
|
100
|
+
break;
|
|
101
|
+
default:
|
|
102
|
+
accSettings.unpinned.push(item);
|
|
103
|
+
}
|
|
104
|
+
return accSettings;
|
|
105
|
+
}, {
|
|
106
|
+
pinTop: [],
|
|
107
|
+
unpinned: [],
|
|
108
|
+
pinBottom: []
|
|
109
|
+
});
|
|
110
|
+
return [{
|
|
111
|
+
divider: false,
|
|
112
|
+
items: [{
|
|
113
|
+
divider: false,
|
|
114
|
+
items: groupedItems.pinTop,
|
|
115
|
+
type: 'group'
|
|
116
|
+
}, {
|
|
117
|
+
divider: true,
|
|
118
|
+
items: groupedItems.unpinned,
|
|
119
|
+
type: 'group'
|
|
120
|
+
}, {
|
|
121
|
+
divider: true,
|
|
122
|
+
items: groupedItems.pinBottom,
|
|
123
|
+
type: 'group'
|
|
124
|
+
}],
|
|
125
|
+
selectButtonLabel: areAllColumnsEnabled ? t('groupSelectButton.hide') : t('groupSelectButton.show'),
|
|
126
|
+
label: columnsSettingsHeader || 'Display settings',
|
|
127
|
+
mode: 'primary',
|
|
128
|
+
type: 'group-select'
|
|
129
|
+
}];
|
|
59
130
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PaginationState, Row, RowPinningState, RowSelectionOptions, RowSelectionState, SortingState } from '@tanstack/react-table';
|
|
2
2
|
import { ReactNode, RefObject } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import { ToolbarProps } from '@snack-uikit/toolbar';
|
|
3
|
+
import { FiltersState } from '@snack-uikit/chips';
|
|
4
|
+
import { FilterRow, ToolbarProps } from '@snack-uikit/toolbar';
|
|
5
5
|
import { WithSupportProps } from '@snack-uikit/utils';
|
|
6
6
|
import { EmptyStateProps, ExportButtonProps, RowClickHandler } from '../helperComponents';
|
|
7
7
|
import { TreeColumnDefinitionProps } from '../helperComponents/Cells/TreeCell';
|
|
@@ -30,6 +30,15 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
|
|
|
30
30
|
state?: SortingState;
|
|
31
31
|
onChange?(state: SortingState): void;
|
|
32
32
|
};
|
|
33
|
+
/** Параметры отвечают за настройки колонок <br>
|
|
34
|
+
* <strong>enableDrag</strong>: Включение сортировки порядка столбцов вручную перетаскиванием <br>
|
|
35
|
+
* <strong>headerLabel</strong>: Название меню настроек колонок. Наличие включает показ настроек <br>
|
|
36
|
+
* <strong>selectAllButtonLabels</strong>: Значения кнопки включения/отключения всех айтемов ([вкл, выкл]) <br>
|
|
37
|
+
* */
|
|
38
|
+
columnsSettings?: {
|
|
39
|
+
enableDrag?: boolean;
|
|
40
|
+
headerLabel?: string;
|
|
41
|
+
};
|
|
33
42
|
/** Параметр отвечает за общие настройки раскрывающихся строк*/
|
|
34
43
|
expanding?: {
|
|
35
44
|
/** Метод отвечает за получение дочерних строк*/
|
|
@@ -80,7 +89,7 @@ type BaseTableProps<TData extends object, TFilters extends FiltersState = Record
|
|
|
80
89
|
/** Внешний бордер для тулбара и таблицы */
|
|
81
90
|
outline?: boolean;
|
|
82
91
|
/** Фильтры */
|
|
83
|
-
columnFilters?:
|
|
92
|
+
columnFilters?: FilterRow<TFilters>;
|
|
84
93
|
/** Флаг, показывающий что данные были отфильтрованы при пустых данных */
|
|
85
94
|
dataFiltered?: boolean;
|
|
86
95
|
/** Флаг, показывающий что произошла ошибка запроса при пустых данных */
|
package/dist/cjs/constants.d.ts
CHANGED
package/dist/cjs/constants.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.DEFAULT_ROW_SELECTION = exports.DEFAULT_FILTER_VISIBILITY = exports.DEFAULT_SORTING = exports.DEFAULT_PAGE_SIZE = exports.SORT_FN = exports.TEST_IDS = exports.COLUMN_ALIGN = exports.COLUMN_PIN_POSITION = void 0;
|
|
6
|
+
exports.DEFAULT_COLUMNS = exports.DEFAULT_ROW_SELECTION = exports.DEFAULT_FILTER_VISIBILITY = exports.DEFAULT_SORTING = exports.DEFAULT_PAGE_SIZE = exports.SORT_FN = exports.TEST_IDS = exports.COLUMN_ALIGN = exports.COLUMN_PIN_POSITION = void 0;
|
|
7
7
|
exports.COLUMN_PIN_POSITION = {
|
|
8
8
|
Left: 'left',
|
|
9
9
|
Right: 'right'
|
|
@@ -43,4 +43,5 @@ exports.SORT_FN = {
|
|
|
43
43
|
exports.DEFAULT_PAGE_SIZE = 10;
|
|
44
44
|
exports.DEFAULT_SORTING = [];
|
|
45
45
|
exports.DEFAULT_FILTER_VISIBILITY = [];
|
|
46
|
-
exports.DEFAULT_ROW_SELECTION = {};
|
|
46
|
+
exports.DEFAULT_ROW_SELECTION = {};
|
|
47
|
+
exports.DEFAULT_COLUMNS = ['snack_predefined_statusColumn', 'selectionCell', 'rowActions'];
|
|
@@ -3,6 +3,7 @@ import { CellProps } from '../Cell';
|
|
|
3
3
|
type BodyCellProps<TData> = Omit<CellProps, 'style' | 'children'> & {
|
|
4
4
|
cell: TableCell<TData, unknown>;
|
|
5
5
|
rowAutoHeight?: boolean;
|
|
6
|
+
isDraggable?: boolean;
|
|
6
7
|
};
|
|
7
|
-
export declare function BodyCell<TData>({ cell, className, rowAutoHeight, ...props }: BodyCellProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function BodyCell<TData>({ cell, className, rowAutoHeight, isDraggable, ...props }: BodyCellProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
8
9
|
export {};
|
|
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
18
18
|
});
|
|
19
19
|
exports.BodyCell = BodyCell;
|
|
20
20
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
21
|
+
const sortable_1 = require("@dnd-kit/sortable");
|
|
21
22
|
const react_table_1 = require("@tanstack/react-table");
|
|
22
23
|
const classnames_1 = __importDefault(require("classnames"));
|
|
23
24
|
const constants_1 = require("../../../constants");
|
|
@@ -28,12 +29,21 @@ function BodyCell(_a) {
|
|
|
28
29
|
var {
|
|
29
30
|
cell,
|
|
30
31
|
className,
|
|
31
|
-
rowAutoHeight
|
|
32
|
+
rowAutoHeight,
|
|
33
|
+
isDraggable
|
|
32
34
|
} = _a,
|
|
33
|
-
props = __rest(_a, ["cell", "className", "rowAutoHeight"]);
|
|
35
|
+
props = __rest(_a, ["cell", "className", "rowAutoHeight", "isDraggable"]);
|
|
34
36
|
const columnDef = cell.column.columnDef;
|
|
35
|
-
const style = (0, hooks_1.useCellSizes)(cell
|
|
37
|
+
const style = (0, hooks_1.useCellSizes)(cell, {
|
|
38
|
+
isDraggable
|
|
39
|
+
});
|
|
40
|
+
const {
|
|
41
|
+
setNodeRef
|
|
42
|
+
} = (0, sortable_1.useSortable)({
|
|
43
|
+
id: cell.column.id
|
|
44
|
+
});
|
|
36
45
|
return (0, jsx_runtime_1.jsx)(Cell_1.Cell, Object.assign({}, props, {
|
|
46
|
+
ref: setNodeRef,
|
|
37
47
|
style: style,
|
|
38
48
|
className: (0, classnames_1.default)(styles_module_scss_1.default.tableBodyCell, className, columnDef.cellClassName),
|
|
39
49
|
"data-row-auto-height": rowAutoHeight || undefined,
|
|
@@ -5,6 +5,7 @@ type HeaderCellProps<TData> = Omit<CellProps, 'align' | 'children' | 'onClick' |
|
|
|
5
5
|
header: Header<TData, unknown>;
|
|
6
6
|
pinPosition?: ColumnPinPosition;
|
|
7
7
|
rowAutoHeight?: boolean;
|
|
8
|
+
isDraggable?: boolean;
|
|
8
9
|
};
|
|
9
|
-
export declare function HeaderCell<TData>({ header, pinPosition, className, rowAutoHeight }: HeaderCellProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function HeaderCell<TData>({ header, pinPosition, className, rowAutoHeight, isDraggable, }: HeaderCellProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
10
11
|
export {};
|