@snack-uikit/table 0.11.6-preview-a0815a00.0 → 0.11.7
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 +28 -0
- package/README.md +1 -47
- package/dist/components/Table/Table.d.ts +0 -1
- package/dist/components/Table/Table.js +6 -8
- package/dist/components/Table/constants.d.ts +0 -1
- package/dist/components/Table/constants.js +0 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.js +0 -1
- package/package.json +11 -12
- package/src/components/Table/Table.tsx +6 -14
- package/src/components/Table/constants.ts +0 -2
- package/src/components/index.ts +0 -1
- package/dist/components/ServerTable/ServerTable.d.ts +0 -93
- package/dist/components/ServerTable/ServerTable.js +0 -43
- package/dist/components/ServerTable/constants.d.ts +0 -2
- package/dist/components/ServerTable/constants.js +0 -2
- package/dist/components/ServerTable/index.d.ts +0 -1
- package/dist/components/ServerTable/index.js +0 -1
- package/src/components/ServerTable/ServerTable.tsx +0 -182
- package/src/components/ServerTable/constants.ts +0 -2
- package/src/components/ServerTable/index.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,34 @@
|
|
|
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.11.7 (2024-02-05)
|
|
7
|
+
|
|
8
|
+
### Only dependencies have been changed
|
|
9
|
+
* [@snack-uikit/chips@0.10.11](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/chips/CHANGELOG.md)
|
|
10
|
+
* [@snack-uikit/icons@0.20.1](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/icons/CHANGELOG.md)
|
|
11
|
+
* [@snack-uikit/list@0.2.1](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/list/CHANGELOG.md)
|
|
12
|
+
* [@snack-uikit/pagination@0.6.3](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/pagination/CHANGELOG.md)
|
|
13
|
+
* [@snack-uikit/tag@0.7.2](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/tag/CHANGELOG.md)
|
|
14
|
+
* [@snack-uikit/toggles@0.9.5](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/toggles/CHANGELOG.md)
|
|
15
|
+
* [@snack-uikit/toolbar@0.7.6](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/toolbar/CHANGELOG.md)
|
|
16
|
+
* [@snack-uikit/truncate-string@0.4.7](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/truncate-string/CHANGELOG.md)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## 0.11.6 (2024-02-05)
|
|
23
|
+
|
|
24
|
+
### Only dependencies have been changed
|
|
25
|
+
* [@snack-uikit/button@0.16.0](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/button/CHANGELOG.md)
|
|
26
|
+
* [@snack-uikit/chips@0.10.10](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/chips/CHANGELOG.md)
|
|
27
|
+
* [@snack-uikit/pagination@0.6.2](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/pagination/CHANGELOG.md)
|
|
28
|
+
* [@snack-uikit/toolbar@0.7.5](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/toolbar/CHANGELOG.md)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
6
34
|
## 0.11.5 (2024-02-02)
|
|
7
35
|
|
|
8
36
|
### Only dependencies have been changed
|
package/README.md
CHANGED
|
@@ -107,7 +107,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
107
107
|
| data* | `TData[]` | - | Данные для отрисовки |
|
|
108
108
|
| sorting | `{ initialState?: SortingState; state?: SortingState; onChange?(state: SortingState): void; }` | - | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br> <strong>initialState</strong>: Начальное состояние сортировки <br> <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br> <strong>onChange</strong>: Колбэк на изменение сортировки |
|
|
109
109
|
| 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>: Колбэк на выбор строк |
|
|
110
|
-
| search | `{ initialValue?: string; state?: string; placeholder?: string; loading?: boolean; onChange?(value: string): void;
|
|
110
|
+
| search | `{ initialValue?: 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 строки поиска |
|
|
111
111
|
| pageSize | `number` | 10 | Максимальное кол-во строк на страницу |
|
|
112
112
|
| pagination | `{ state?: PaginationState; options?: number[]; optionsLabel?: string; onChange?(state: PaginationState): void; }` | 'Rows volume: ' <br> <strong>onChange</strong>: Колбэк на изменение пагинации | Параметры отвечают за пагинацию в таблице <br> <strong>state</strong>: Состояние строки поиска, жестко устанавливаемое снаружи <br> <strong>options</strong>: Варианты в выпадающем селекторе для установки кол-ва строк на страницу <br> <strong>optionsLabel</strong>: Текст для селектора кол-ва строк на страницу |
|
|
113
113
|
| pageCount | `number` | - | Кол-во страниц (используется для внешнего управления) |
|
|
@@ -144,52 +144,6 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
144
144
|
|------|------|---------------|-------------|
|
|
145
145
|
| actionsGenerator* | `ActionsGenerator<TData>` | - | Действия для строки |
|
|
146
146
|
| pinned | `boolean` | - | Закрепление колонки справа в таблице |
|
|
147
|
-
## ServerTable
|
|
148
|
-
### Props
|
|
149
|
-
| name | type | default value | description |
|
|
150
|
-
|------|------|---------------|-------------|
|
|
151
|
-
| onRefresh* | `() => void` | - | Колбек обновления данных |
|
|
152
|
-
| search* | `{ initialValue?: 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 строки поиска |
|
|
153
|
-
| columnDefinitions* | `ColumnDefinition<TData>[]` | - | Определение внешнего вида и функционала колонок |
|
|
154
|
-
| onChangePage* | `(offset: number, limit: number) => void` | - | |
|
|
155
|
-
| items | `TData[]` | - | Данные для отрисовки |
|
|
156
|
-
| total | `number` | 10 | Общее кол-во строк |
|
|
157
|
-
| limit | `number` | 10 | Кол-во строк на страницу |
|
|
158
|
-
| offset | `number` | - | Смещение |
|
|
159
|
-
| sorting | `{ initialState?: SortingState; state: SortingState; onChange(state: SortingState): void; }` | - | Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br> <strong>initialState</strong>: Начальное состояние сортировки <br> <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br> <strong>onChange</strong>: Колбэк на изменение сортировки |
|
|
160
|
-
| 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>: Колбэк на выбор строк |
|
|
161
|
-
| pagination | `{ options?: number[]; optionsLabel?: string; }` | 'Rows volume' <br> | Параметры отвечают за пагинацию в таблице <br> <strong>options</strong>: Варианты в выпадающем селекторе для установки кол-ва строк на страницу<br> <strong>optionsLabel</strong>: Текст для селектора кол-ва строк на страницу |
|
|
162
|
-
| onRowClick | `RowClickHandler<TData>` | - | Колбэк клика по строке |
|
|
163
|
-
| className | `string` | - | CSS-класс |
|
|
164
|
-
| loading | `boolean` | - | Состояние загрузки |
|
|
165
|
-
| onDelete | `(selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void) => void` | - | Колбек удаления выбранных |
|
|
166
|
-
| outline | `boolean` | - | Внешний бордер для тулбара и таблицы |
|
|
167
|
-
| columnFilters | `ReactNode` | - | Фильтры |
|
|
168
|
-
| exportFileName | `string` | - | Название файла при экспорте CSV/XLSX |
|
|
169
|
-
| moreActions | `Action[]` | - | Элементы выпадающего списка кнопки с действиями |
|
|
170
|
-
| noDataState | `TableEmptyStateProps` | - | Экран при отстутствии данных |
|
|
171
|
-
| noResultsState | `TableEmptyStateProps` | - | Экран при отстутствии результатов поиска |
|
|
172
|
-
| suppressToolbar | `boolean` | - | Отключение тулбара |
|
|
173
|
-
| suppressPagination | `boolean` | - | Отключение пагинации |
|
|
174
|
-
## ServerTable.getRowActionsColumnDef
|
|
175
|
-
Вспомогательная функция для создания ячейки с дополнительными действиями у строки
|
|
176
|
-
### Props
|
|
177
|
-
| name | type | default value | description |
|
|
178
|
-
|------|------|---------------|-------------|
|
|
179
|
-
| actionsGenerator* | `ActionsGenerator<TData>` | - | Действия для строки |
|
|
180
|
-
| pinned | `boolean` | - | Закрепление колонки справа в таблице |
|
|
181
|
-
## ServerTable.getStatusColumnDef
|
|
182
|
-
Вспомогательная функция для создания ячейки со статусом
|
|
183
|
-
### Props
|
|
184
|
-
| name | type | default value | description |
|
|
185
|
-
|------|------|---------------|-------------|
|
|
186
|
-
| mapStatusToAppearance* | `(value: string \| number) => StatusAppearance` | - | Маппинг значений статуса на цвета |
|
|
187
|
-
| accessorKey* | `string` | - | Имя ключа соответствующее полю в data |
|
|
188
|
-
| enableSorting | `boolean` | - | Включение/выключение сортировки |
|
|
189
|
-
| renderDescription | `(cellValue: string) => string` | - | Функция для отрисовки текста, если не передана, то будет отрисован только индикатор статуса |
|
|
190
|
-
| size | `number` | - | Размер ячейки |
|
|
191
|
-
| header | `ColumnDefTemplate<HeaderContext<TData, unknown>> & (string \| ((ctx: HeaderContext<TData, unknown>) => string))` | - | Заголовок колонки |
|
|
192
|
-
| enableResizing | `boolean` | - | Включение/выключение ресайза колонки |
|
|
193
147
|
## exportToCSV
|
|
194
148
|
### Props
|
|
195
149
|
| name | type | default value | description |
|
|
@@ -47,7 +47,6 @@ export type TableProps<TData extends object> = WithSupportProps<{
|
|
|
47
47
|
placeholder?: string;
|
|
48
48
|
loading?: boolean;
|
|
49
49
|
onChange?(value: string): void;
|
|
50
|
-
disableDefaultSearch?: boolean;
|
|
51
50
|
};
|
|
52
51
|
/** Максимальное кол-во строк на страницу @default 10 */
|
|
53
52
|
pageSize?: number;
|
|
@@ -22,12 +22,12 @@ import { BodyRow, ExportButton, getColumnId, getRowActionsColumnDef, getSelectio
|
|
|
22
22
|
import { fuzzyFilter } from '../../utils';
|
|
23
23
|
import { TableEmptyState } from '../TableEmptyState';
|
|
24
24
|
import { TablePagination } from '../TablePagination';
|
|
25
|
-
import { DEFAULT_NO_DATA_TABLE_STATE, DEFAULT_NO_RESULTS_TABLE_STATE
|
|
25
|
+
import { DEFAULT_NO_DATA_TABLE_STATE, DEFAULT_NO_RESULTS_TABLE_STATE } from './constants';
|
|
26
26
|
import { useLoadingTable, useStateControl } from './hooks';
|
|
27
27
|
import styles from './styles.module.css';
|
|
28
28
|
/** Компонент таблицы */
|
|
29
29
|
export function Table(_a) {
|
|
30
|
-
var { data, columnDefinitions, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters: columnFiltersProp, pagination: paginationProp, className, onRowClick, onRefresh, onDelete, pageSize =
|
|
30
|
+
var { data, columnDefinitions, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters: columnFiltersProp, pagination: paginationProp, className, onRowClick, onRefresh, onDelete, pageSize = 10, pageCount, loading = false, outline = false, moreActions, exportFileName, noDataState = DEFAULT_NO_DATA_TABLE_STATE, noResultsState = DEFAULT_NO_RESULTS_TABLE_STATE, suppressToolbar = false, toolbarBefore, suppressPagination = false } = _a, rest = __rest(_a, ["data", "columnDefinitions", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "onDelete", "pageSize", "pageCount", "loading", "outline", "moreActions", "exportFileName", "noDataState", "noResultsState", "suppressToolbar", "toolbarBefore", "suppressPagination"]);
|
|
31
31
|
const { state: globalFilter, onStateChange: onGlobalFilterChange } = useStateControl(search, '');
|
|
32
32
|
const { state: rowSelection, onStateChange: onRowSelectionChange } = useStateControl(rowSelectionProp, {});
|
|
33
33
|
const defaultPaginationState = useMemo(() => ({
|
|
@@ -73,9 +73,6 @@ export function Table(_a) {
|
|
|
73
73
|
enableResizing: false,
|
|
74
74
|
minSize: 40,
|
|
75
75
|
},
|
|
76
|
-
manualSorting: Boolean(pageCount),
|
|
77
|
-
manualPagination: pageCount !== undefined,
|
|
78
|
-
manualFiltering: Boolean(pageCount),
|
|
79
76
|
globalFilterFn: fuzzyFilter,
|
|
80
77
|
onGlobalFilterChange,
|
|
81
78
|
onRowSelectionChange,
|
|
@@ -85,7 +82,9 @@ export function Table(_a) {
|
|
|
85
82
|
getFilteredRowModel: getFilteredRowModel(),
|
|
86
83
|
enableColumnResizing: true,
|
|
87
84
|
enableSorting: true,
|
|
88
|
-
|
|
85
|
+
manualSorting: false,
|
|
86
|
+
enableMultiSort: false,
|
|
87
|
+
manualPagination: pageCount !== undefined,
|
|
89
88
|
onSortingChange,
|
|
90
89
|
getSortedRowModel: getSortedRowModel(),
|
|
91
90
|
onPaginationChange,
|
|
@@ -141,8 +140,7 @@ export function Table(_a) {
|
|
|
141
140
|
const tableRows = table.getRowModel().rows;
|
|
142
141
|
const loadingTableRows = loadingTable.getRowModel().rows;
|
|
143
142
|
const tablePagination = table.getState().pagination;
|
|
144
|
-
|
|
145
|
-
return (_jsx(_Fragment, { children: _jsxs("div", Object.assign({ style: { '--page-size': !tableRows.length ? Math.min(prePageSize, DEFAULT_PAGE_SIZE) : prePageSize }, className: cn(styles.wrapper, className) }, extractSupportProps(rest), { children: [!suppressToolbar && (_jsxs("div", { className: styles.header, children: [_jsx(Toolbar, { search: {
|
|
143
|
+
return (_jsx(_Fragment, { children: _jsxs("div", Object.assign({ style: { '--page-size': !suppressPagination ? tablePagination === null || tablePagination === void 0 ? void 0 : tablePagination.pageSize : pageSize }, className: cn(styles.wrapper, className) }, extractSupportProps(rest), { children: [!suppressToolbar && (_jsxs("div", { className: styles.header, children: [_jsx(Toolbar, { search: {
|
|
146
144
|
value: globalFilter,
|
|
147
145
|
onChange: onGlobalFilterChange,
|
|
148
146
|
loading: search === null || search === void 0 ? void 0 : search.loading,
|
package/dist/components/index.js
CHANGED
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"title": "Table",
|
|
7
|
-
"version": "0.11.
|
|
7
|
+
"version": "0.11.7",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"*.css",
|
|
10
10
|
"*.woff",
|
|
@@ -32,26 +32,25 @@
|
|
|
32
32
|
"license": "Apache-2.0",
|
|
33
33
|
"scripts": {},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@snack-uikit/button": "0.
|
|
36
|
-
"@snack-uikit/chips": "0.10.
|
|
35
|
+
"@snack-uikit/button": "0.16.0",
|
|
36
|
+
"@snack-uikit/chips": "0.10.11",
|
|
37
37
|
"@snack-uikit/icon-predefined": "0.4.1",
|
|
38
|
-
"@snack-uikit/icons": "0.20.
|
|
39
|
-
"@snack-uikit/list": "0.2.1
|
|
40
|
-
"@snack-uikit/pagination": "0.6.
|
|
38
|
+
"@snack-uikit/icons": "0.20.1",
|
|
39
|
+
"@snack-uikit/list": "0.2.1",
|
|
40
|
+
"@snack-uikit/pagination": "0.6.3",
|
|
41
41
|
"@snack-uikit/scroll": "0.5.0",
|
|
42
42
|
"@snack-uikit/skeleton": "0.3.2",
|
|
43
|
-
"@snack-uikit/tag": "0.7.
|
|
44
|
-
"@snack-uikit/toggles": "0.9.
|
|
45
|
-
"@snack-uikit/toolbar": "0.7.
|
|
46
|
-
"@snack-uikit/truncate-string": "0.4.
|
|
43
|
+
"@snack-uikit/tag": "0.7.2",
|
|
44
|
+
"@snack-uikit/toggles": "0.9.5",
|
|
45
|
+
"@snack-uikit/toolbar": "0.7.6",
|
|
46
|
+
"@snack-uikit/truncate-string": "0.4.7",
|
|
47
47
|
"@snack-uikit/typography": "0.6.1",
|
|
48
48
|
"@snack-uikit/utils": "3.2.0",
|
|
49
49
|
"@tanstack/match-sorter-utils": "8.8.4",
|
|
50
50
|
"@tanstack/react-table": "8.11.6",
|
|
51
51
|
"classnames": "2.3.2",
|
|
52
|
-
"lodash.debounce": "4.0.8",
|
|
53
52
|
"uncontrollable": "8.0.0",
|
|
54
53
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz"
|
|
55
54
|
},
|
|
56
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "b1acc8128bdab6f23b534d7c464208069e59ed8c"
|
|
57
56
|
}
|
|
@@ -36,7 +36,7 @@ import { ColumnDefinition } from '../../types';
|
|
|
36
36
|
import { fuzzyFilter } from '../../utils';
|
|
37
37
|
import { TableEmptyState, TableEmptyStateProps } from '../TableEmptyState';
|
|
38
38
|
import { TablePagination } from '../TablePagination';
|
|
39
|
-
import { DEFAULT_NO_DATA_TABLE_STATE, DEFAULT_NO_RESULTS_TABLE_STATE
|
|
39
|
+
import { DEFAULT_NO_DATA_TABLE_STATE, DEFAULT_NO_RESULTS_TABLE_STATE } from './constants';
|
|
40
40
|
import { useLoadingTable, useStateControl } from './hooks';
|
|
41
41
|
import styles from './styles.module.scss';
|
|
42
42
|
|
|
@@ -82,7 +82,6 @@ export type TableProps<TData extends object> = WithSupportProps<{
|
|
|
82
82
|
placeholder?: string;
|
|
83
83
|
loading?: boolean;
|
|
84
84
|
onChange?(value: string): void;
|
|
85
|
-
disableDefaultSearch?: boolean;
|
|
86
85
|
};
|
|
87
86
|
|
|
88
87
|
/** Максимальное кол-во строк на страницу @default 10 */
|
|
@@ -162,7 +161,7 @@ export function Table<TData extends object>({
|
|
|
162
161
|
onRefresh,
|
|
163
162
|
onDelete,
|
|
164
163
|
|
|
165
|
-
pageSize =
|
|
164
|
+
pageSize = 10,
|
|
166
165
|
pageCount,
|
|
167
166
|
loading = false,
|
|
168
167
|
outline = false,
|
|
@@ -253,10 +252,6 @@ export function Table<TData extends object>({
|
|
|
253
252
|
minSize: 40,
|
|
254
253
|
},
|
|
255
254
|
|
|
256
|
-
manualSorting: Boolean(pageCount),
|
|
257
|
-
manualPagination: pageCount !== undefined,
|
|
258
|
-
manualFiltering: Boolean(pageCount),
|
|
259
|
-
|
|
260
255
|
globalFilterFn: fuzzyFilter,
|
|
261
256
|
onGlobalFilterChange,
|
|
262
257
|
|
|
@@ -270,12 +265,11 @@ export function Table<TData extends object>({
|
|
|
270
265
|
enableColumnResizing: true,
|
|
271
266
|
|
|
272
267
|
enableSorting: true,
|
|
273
|
-
|
|
274
|
-
enableMultiSort:
|
|
275
|
-
|
|
268
|
+
manualSorting: false,
|
|
269
|
+
enableMultiSort: false,
|
|
270
|
+
manualPagination: pageCount !== undefined,
|
|
276
271
|
onSortingChange,
|
|
277
272
|
getSortedRowModel: getSortedRowModel(),
|
|
278
|
-
|
|
279
273
|
onPaginationChange,
|
|
280
274
|
getPaginationRowModel: getPaginationRowModel(),
|
|
281
275
|
|
|
@@ -345,12 +339,10 @@ export function Table<TData extends object>({
|
|
|
345
339
|
const loadingTableRows = loadingTable.getRowModel().rows;
|
|
346
340
|
const tablePagination = table.getState().pagination;
|
|
347
341
|
|
|
348
|
-
const prePageSize = !suppressPagination ? tablePagination?.pageSize : pageSize;
|
|
349
|
-
|
|
350
342
|
return (
|
|
351
343
|
<>
|
|
352
344
|
<div
|
|
353
|
-
style={{ '--page-size': !
|
|
345
|
+
style={{ '--page-size': !suppressPagination ? tablePagination?.pageSize : pageSize }}
|
|
354
346
|
className={cn(styles.wrapper, className)}
|
|
355
347
|
{...extractSupportProps(rest)}
|
|
356
348
|
>
|
package/src/components/index.ts
CHANGED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { WithSupportProps } from '@snack-uikit/utils';
|
|
3
|
-
import { ColumnDefinition, RowClickHandler, RowSelectionOptions, RowSelectionState, SortingState, TableEmptyStateProps, ToolbarProps } from '../../types';
|
|
4
|
-
export type ServerTableProps<TData extends object> = WithSupportProps<{
|
|
5
|
-
/** Данные для отрисовки */
|
|
6
|
-
items?: TData[];
|
|
7
|
-
/** Общее кол-во строк @default 10 */
|
|
8
|
-
total?: number;
|
|
9
|
-
/** Кол-во строк на страницу @default 10 */
|
|
10
|
-
limit?: number;
|
|
11
|
-
/** Смещение @default 0 */
|
|
12
|
-
offset?: number;
|
|
13
|
-
onChangePage(offset: number, limit: number): void;
|
|
14
|
-
/** Определение внешнего вида и функционала колонок */
|
|
15
|
-
columnDefinitions: ColumnDefinition<TData>[];
|
|
16
|
-
/** Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br>
|
|
17
|
-
* <strong>initialState</strong>: Начальное состояние сортировки <br>
|
|
18
|
-
* <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br>
|
|
19
|
-
* <strong>onChange</strong>: Колбэк на изменение сортировки
|
|
20
|
-
* */
|
|
21
|
-
sorting?: {
|
|
22
|
-
initialState?: SortingState;
|
|
23
|
-
state: SortingState;
|
|
24
|
-
onChange(state: SortingState): void;
|
|
25
|
-
};
|
|
26
|
-
/** Параметры отвечают за возможность выбора строк <br>
|
|
27
|
-
* <strong>initialState</strong>: Начальное состояние выбора строк <br>
|
|
28
|
-
* <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br>
|
|
29
|
-
* <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br>
|
|
30
|
-
* <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br>
|
|
31
|
-
* <strong>onChange</strong>: Колбэк на выбор строк
|
|
32
|
-
* */
|
|
33
|
-
rowSelection?: {
|
|
34
|
-
initialState?: RowSelectionState;
|
|
35
|
-
state: RowSelectionState;
|
|
36
|
-
enable?: RowSelectionOptions<TData>['enableRowSelection'];
|
|
37
|
-
multiRow?: boolean;
|
|
38
|
-
onChange(state: RowSelectionState): void;
|
|
39
|
-
};
|
|
40
|
-
/** Параметры отвечают за глобальный поиск в таблице <br>
|
|
41
|
-
* <strong>initialState</strong>: Начальное состояние строки поиска <br>
|
|
42
|
-
* <strong>state</strong>: Состояние строки поиска, жестко устанавливаемое снаружи <br>
|
|
43
|
-
* <strong>placeholder</strong>: Placeholder строки поиска @default 'Search...'<br>
|
|
44
|
-
* <strong>loading</strong>: Состояние загрузки в строке поиска <br>
|
|
45
|
-
* <strong>onChange</strong>: Колбэк на изменение данных в строке поиска
|
|
46
|
-
* */
|
|
47
|
-
search: {
|
|
48
|
-
initialValue?: string;
|
|
49
|
-
state: string;
|
|
50
|
-
placeholder?: string;
|
|
51
|
-
loading?: boolean;
|
|
52
|
-
onChange(value: string): void;
|
|
53
|
-
};
|
|
54
|
-
/** Параметры отвечают за пагинацию в таблице <br>
|
|
55
|
-
* <strong>options</strong>: Варианты в выпадающем селекторе для установки кол-ва строк на страницу<br>
|
|
56
|
-
* <strong>optionsLabel</strong>: Текст для селектора кол-ва строк на страницу @default 'Rows volume' <br>
|
|
57
|
-
* */
|
|
58
|
-
pagination?: {
|
|
59
|
-
options?: number[];
|
|
60
|
-
optionsLabel?: string;
|
|
61
|
-
};
|
|
62
|
-
/** Колбэк клика по строке */
|
|
63
|
-
onRowClick?: RowClickHandler<TData>;
|
|
64
|
-
/** CSS-класс */
|
|
65
|
-
className?: string;
|
|
66
|
-
/** Состояние загрузки */
|
|
67
|
-
loading?: boolean;
|
|
68
|
-
/** Колбек обновления данных */
|
|
69
|
-
onRefresh(): void;
|
|
70
|
-
/** Колбек удаления выбранных */
|
|
71
|
-
onDelete?(selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void): void;
|
|
72
|
-
/** Внешний бордер для тулбара и таблицы*/
|
|
73
|
-
outline?: boolean;
|
|
74
|
-
/** Фильтры*/
|
|
75
|
-
columnFilters?: ReactNode;
|
|
76
|
-
/** Название файла при экспорте CSV/XLSX*/
|
|
77
|
-
exportFileName?: string;
|
|
78
|
-
/** Элементы выпадающего списка кнопки с действиями */
|
|
79
|
-
moreActions?: ToolbarProps['moreActions'];
|
|
80
|
-
/** Экран при отстутствии данных */
|
|
81
|
-
noDataState?: TableEmptyStateProps;
|
|
82
|
-
/** Экран при отстутствии результатов поиска */
|
|
83
|
-
noResultsState?: TableEmptyStateProps;
|
|
84
|
-
/** Отключение тулбара */
|
|
85
|
-
suppressToolbar?: boolean;
|
|
86
|
-
/** Отключение пагинации */
|
|
87
|
-
suppressPagination?: boolean;
|
|
88
|
-
}>;
|
|
89
|
-
export declare function ServerTable<TData extends object>({ items, total, limit, offset, onChangePage, search, pagination, columnFilters, ...rest }: ServerTableProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
90
|
-
export declare namespace ServerTable {
|
|
91
|
-
var getRowActionsColumnDef: typeof import("../../helperComponents").getRowActionsColumnDef;
|
|
92
|
-
var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
|
|
93
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
-
var t = {};
|
|
3
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
-
t[p] = s[p];
|
|
5
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
-
t[p[i]] = s[p[i]];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
-
import debounce from 'lodash.debounce';
|
|
14
|
-
import { useCallback, useMemo, useState } from 'react';
|
|
15
|
-
import { Table } from '../Table';
|
|
16
|
-
import { DEFAULT_PAGINATION_LIMIT, SEARCH_DELAY } from './constants';
|
|
17
|
-
export function ServerTable(_a) {
|
|
18
|
-
var { items, total = DEFAULT_PAGINATION_LIMIT, limit = DEFAULT_PAGINATION_LIMIT, offset = 0, onChangePage, search, pagination, columnFilters } = _a, rest = __rest(_a, ["items", "total", "limit", "offset", "onChangePage", "search", "pagination", "columnFilters"]);
|
|
19
|
-
const [tempSearch, setTempSearch] = useState(search.initialValue || '');
|
|
20
|
-
const onSearchDebounced = useMemo(() => debounce((newValue, onChange) => {
|
|
21
|
-
onChange(newValue);
|
|
22
|
-
}, SEARCH_DELAY), []);
|
|
23
|
-
const handleSearch = useCallback((newValue) => {
|
|
24
|
-
setTempSearch(newValue);
|
|
25
|
-
onSearchDebounced(newValue.trim(), search.onChange);
|
|
26
|
-
},
|
|
27
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
28
|
-
[limit, onSearchDebounced]);
|
|
29
|
-
const handlePageChange = useCallback(({ pageSize, pageIndex }) => onChangePage(pageIndex * pageSize, pageSize), [onChangePage]);
|
|
30
|
-
const pageIndex = useMemo(() => Math.floor(offset / limit), [limit, offset]);
|
|
31
|
-
const pageCount = useMemo(() => Math.ceil(total / limit), [limit, total]);
|
|
32
|
-
return (_jsx(Table, Object.assign({ data: items || [], search: {
|
|
33
|
-
state: tempSearch,
|
|
34
|
-
onChange: handleSearch,
|
|
35
|
-
loading: search.loading,
|
|
36
|
-
placeholder: search.placeholder,
|
|
37
|
-
}, columnFilters: columnFilters, pageCount: pageCount, pagination: Object.assign(Object.assign({}, pagination), { state: {
|
|
38
|
-
pageIndex,
|
|
39
|
-
pageSize: limit,
|
|
40
|
-
}, onChange: handlePageChange }), pageSize: limit }, rest)));
|
|
41
|
-
}
|
|
42
|
-
ServerTable.getRowActionsColumnDef = Table.getRowActionsColumnDef;
|
|
43
|
-
ServerTable.getStatusColumnDef = Table.getStatusColumnDef;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './ServerTable';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './ServerTable';
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import debounce from 'lodash.debounce';
|
|
2
|
-
import { ReactNode, useCallback, useMemo, useState } from 'react';
|
|
3
|
-
|
|
4
|
-
import { WithSupportProps } from '@snack-uikit/utils';
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
ColumnDefinition,
|
|
8
|
-
PaginationState,
|
|
9
|
-
RowClickHandler,
|
|
10
|
-
RowSelectionOptions,
|
|
11
|
-
RowSelectionState,
|
|
12
|
-
SortingState,
|
|
13
|
-
TableEmptyStateProps,
|
|
14
|
-
ToolbarProps,
|
|
15
|
-
} from '../../types';
|
|
16
|
-
import { Table } from '../Table';
|
|
17
|
-
import { DEFAULT_PAGINATION_LIMIT, SEARCH_DELAY } from './constants';
|
|
18
|
-
|
|
19
|
-
export type ServerTableProps<TData extends object> = WithSupportProps<{
|
|
20
|
-
/** Данные для отрисовки */
|
|
21
|
-
items?: TData[];
|
|
22
|
-
/** Общее кол-во строк @default 10 */
|
|
23
|
-
total?: number;
|
|
24
|
-
/** Кол-во строк на страницу @default 10 */
|
|
25
|
-
limit?: number;
|
|
26
|
-
/** Смещение @default 0 */
|
|
27
|
-
offset?: number;
|
|
28
|
-
|
|
29
|
-
onChangePage(offset: number, limit: number): void;
|
|
30
|
-
|
|
31
|
-
/** Определение внешнего вида и функционала колонок */
|
|
32
|
-
columnDefinitions: ColumnDefinition<TData>[];
|
|
33
|
-
/** Параметры отвечают за возможность сортировки, их стоит использовать если нужно отслеживать состояние <br>
|
|
34
|
-
* <strong>initialState</strong>: Начальное состояние сортировки <br>
|
|
35
|
-
* <strong>state</strong>: Состояние сортировки, жестко устанавливаемое снаружи <br>
|
|
36
|
-
* <strong>onChange</strong>: Колбэк на изменение сортировки
|
|
37
|
-
* */
|
|
38
|
-
sorting?: {
|
|
39
|
-
initialState?: SortingState;
|
|
40
|
-
state: SortingState;
|
|
41
|
-
onChange(state: SortingState): void;
|
|
42
|
-
};
|
|
43
|
-
/** Параметры отвечают за возможность выбора строк <br>
|
|
44
|
-
* <strong>initialState</strong>: Начальное состояние выбора строк <br>
|
|
45
|
-
* <strong>state</strong>: Состояние выбора строк, жестко устанавливаемое снаружи <br>
|
|
46
|
-
* <strong>enable</strong>: Колбэк определяющий можно ли выбрать строку <br>
|
|
47
|
-
* <strong>multiRow</strong>: Мульти-выбор строк (включен по-умолчанию, когда включается выбор) <br>
|
|
48
|
-
* <strong>onChange</strong>: Колбэк на выбор строк
|
|
49
|
-
* */
|
|
50
|
-
rowSelection?: {
|
|
51
|
-
initialState?: RowSelectionState;
|
|
52
|
-
state: RowSelectionState;
|
|
53
|
-
enable?: RowSelectionOptions<TData>['enableRowSelection'];
|
|
54
|
-
multiRow?: boolean;
|
|
55
|
-
onChange(state: RowSelectionState): void;
|
|
56
|
-
};
|
|
57
|
-
/** Параметры отвечают за глобальный поиск в таблице <br>
|
|
58
|
-
* <strong>initialState</strong>: Начальное состояние строки поиска <br>
|
|
59
|
-
* <strong>state</strong>: Состояние строки поиска, жестко устанавливаемое снаружи <br>
|
|
60
|
-
* <strong>placeholder</strong>: Placeholder строки поиска @default 'Search...'<br>
|
|
61
|
-
* <strong>loading</strong>: Состояние загрузки в строке поиска <br>
|
|
62
|
-
* <strong>onChange</strong>: Колбэк на изменение данных в строке поиска
|
|
63
|
-
* */
|
|
64
|
-
search: {
|
|
65
|
-
initialValue?: string;
|
|
66
|
-
state: string;
|
|
67
|
-
placeholder?: string;
|
|
68
|
-
loading?: boolean;
|
|
69
|
-
onChange(value: string): void;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
/** Параметры отвечают за пагинацию в таблице <br>
|
|
73
|
-
* <strong>options</strong>: Варианты в выпадающем селекторе для установки кол-ва строк на страницу<br>
|
|
74
|
-
* <strong>optionsLabel</strong>: Текст для селектора кол-ва строк на страницу @default 'Rows volume' <br>
|
|
75
|
-
* */
|
|
76
|
-
pagination?: {
|
|
77
|
-
options?: number[];
|
|
78
|
-
optionsLabel?: string;
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
/** Колбэк клика по строке */
|
|
82
|
-
onRowClick?: RowClickHandler<TData>;
|
|
83
|
-
/** CSS-класс */
|
|
84
|
-
className?: string;
|
|
85
|
-
|
|
86
|
-
/** Состояние загрузки */
|
|
87
|
-
loading?: boolean;
|
|
88
|
-
|
|
89
|
-
/** Колбек обновления данных */
|
|
90
|
-
onRefresh(): void;
|
|
91
|
-
|
|
92
|
-
/** Колбек удаления выбранных */
|
|
93
|
-
onDelete?(selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void): void;
|
|
94
|
-
|
|
95
|
-
/** Внешний бордер для тулбара и таблицы*/
|
|
96
|
-
outline?: boolean;
|
|
97
|
-
|
|
98
|
-
/** Фильтры*/
|
|
99
|
-
columnFilters?: ReactNode;
|
|
100
|
-
|
|
101
|
-
/** Название файла при экспорте CSV/XLSX*/
|
|
102
|
-
exportFileName?: string;
|
|
103
|
-
|
|
104
|
-
/** Элементы выпадающего списка кнопки с действиями */
|
|
105
|
-
moreActions?: ToolbarProps['moreActions'];
|
|
106
|
-
|
|
107
|
-
/** Экран при отстутствии данных */
|
|
108
|
-
noDataState?: TableEmptyStateProps;
|
|
109
|
-
/** Экран при отстутствии результатов поиска */
|
|
110
|
-
noResultsState?: TableEmptyStateProps;
|
|
111
|
-
|
|
112
|
-
/** Отключение тулбара */
|
|
113
|
-
suppressToolbar?: boolean;
|
|
114
|
-
/** Отключение пагинации */
|
|
115
|
-
suppressPagination?: boolean;
|
|
116
|
-
}>;
|
|
117
|
-
|
|
118
|
-
export function ServerTable<TData extends object>({
|
|
119
|
-
items,
|
|
120
|
-
total = DEFAULT_PAGINATION_LIMIT,
|
|
121
|
-
limit = DEFAULT_PAGINATION_LIMIT,
|
|
122
|
-
offset = 0,
|
|
123
|
-
onChangePage,
|
|
124
|
-
search,
|
|
125
|
-
pagination,
|
|
126
|
-
columnFilters,
|
|
127
|
-
...rest
|
|
128
|
-
}: ServerTableProps<TData>) {
|
|
129
|
-
const [tempSearch, setTempSearch] = useState(search.initialValue || '');
|
|
130
|
-
|
|
131
|
-
const onSearchDebounced = useMemo(
|
|
132
|
-
() =>
|
|
133
|
-
debounce((newValue: string, onChange: (newValue: string) => void) => {
|
|
134
|
-
onChange(newValue);
|
|
135
|
-
}, SEARCH_DELAY),
|
|
136
|
-
[],
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
const handleSearch = useCallback(
|
|
140
|
-
(newValue: string) => {
|
|
141
|
-
setTempSearch(newValue);
|
|
142
|
-
onSearchDebounced(newValue.trim(), search.onChange);
|
|
143
|
-
},
|
|
144
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
145
|
-
[limit, onSearchDebounced],
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
const handlePageChange = useCallback(
|
|
149
|
-
({ pageSize, pageIndex }: PaginationState) => onChangePage(pageIndex * pageSize, pageSize),
|
|
150
|
-
[onChangePage],
|
|
151
|
-
);
|
|
152
|
-
|
|
153
|
-
const pageIndex = useMemo(() => Math.floor(offset / limit), [limit, offset]);
|
|
154
|
-
const pageCount = useMemo(() => Math.ceil(total / limit), [limit, total]);
|
|
155
|
-
|
|
156
|
-
return (
|
|
157
|
-
<Table
|
|
158
|
-
data={items || []}
|
|
159
|
-
search={{
|
|
160
|
-
state: tempSearch,
|
|
161
|
-
onChange: handleSearch,
|
|
162
|
-
loading: search.loading,
|
|
163
|
-
placeholder: search.placeholder,
|
|
164
|
-
}}
|
|
165
|
-
columnFilters={columnFilters}
|
|
166
|
-
pageCount={pageCount}
|
|
167
|
-
pagination={{
|
|
168
|
-
...pagination,
|
|
169
|
-
state: {
|
|
170
|
-
pageIndex,
|
|
171
|
-
pageSize: limit,
|
|
172
|
-
},
|
|
173
|
-
onChange: handlePageChange,
|
|
174
|
-
}}
|
|
175
|
-
pageSize={limit}
|
|
176
|
-
{...rest}
|
|
177
|
-
/>
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
ServerTable.getRowActionsColumnDef = Table.getRowActionsColumnDef;
|
|
182
|
-
ServerTable.getStatusColumnDef = Table.getStatusColumnDef;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './ServerTable';
|