@snack-uikit/table 0.20.10 → 0.20.11-preview-1d8237d6.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/README.md +2 -0
- package/dist/components/Table/Table.d.ts +1 -1
- package/dist/components/Table/Table.js +13 -3
- package/dist/components/Table/utils.d.ts +12 -0
- package/dist/components/Table/utils.js +14 -0
- package/dist/components/types.d.ts +5 -0
- package/package.json +2 -2
- package/src/components/Table/Table.tsx +22 -2
- package/src/components/Table/utils.ts +31 -0
- package/src/components/types.ts +6 -0
package/README.md
CHANGED
|
@@ -147,6 +147,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
147
147
|
| scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
|
|
148
148
|
| scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
|
|
149
149
|
| rowPinning | `Pick<RowPinningState, "top">` | { top: [], } | Определение какие строки должны быть закреплены в таблице |
|
|
150
|
+
| savedState | `{ id: string; resize?: boolean; }` | - | Конфиг для сохранения состояния в localStorage |
|
|
150
151
|
## Table.getStatusColumnDef
|
|
151
152
|
Вспомогательная функция для создания ячейки со статусом
|
|
152
153
|
### Props
|
|
@@ -206,6 +207,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
206
207
|
| scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
|
|
207
208
|
| scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
|
|
208
209
|
| rowPinning | `Pick<RowPinningState, "top">` | - | Определение какие строки должны быть закреплены в таблице |
|
|
210
|
+
| savedState | `{ id: string; resize?: boolean; }` | - | Конфиг для сохранения состояния в localStorage |
|
|
209
211
|
| items | `TData[]` | - | Данные для отрисовки |
|
|
210
212
|
| total | `number` | 10 | Общее кол-во строк |
|
|
211
213
|
| limit | `number` | 10 | Кол-во строк на страницу |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TableProps } from '../types';
|
|
2
2
|
/** Компонент таблицы */
|
|
3
|
-
export declare function Table<TData extends object>({ data, rowPinning, columnDefinitions, keepPinnedRows, copyPinnedRows, enableSelectPinned, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, onDelete, pageSize, pageCount, loading, outline, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar, toolbarBefore, toolbarAfter, suppressPagination, manualSorting, manualPagination, manualFiltering, autoResetPageIndex, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, ...rest }: TableProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare function Table<TData extends object>({ data, rowPinning, columnDefinitions, keepPinnedRows, copyPinnedRows, enableSelectPinned, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, onDelete, pageSize, pageCount, loading, outline, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar, toolbarBefore, toolbarAfter, suppressPagination, manualSorting, manualPagination, manualFiltering, autoResetPageIndex, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, ...rest }: TableProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
export declare namespace Table {
|
|
5
5
|
var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
|
|
6
6
|
var statusAppearances: Record<string, string>;
|
|
@@ -25,12 +25,12 @@ import { fuzzyFilter } from '../../utils';
|
|
|
25
25
|
import { useLoadingTable, useStateControl } from './hooks';
|
|
26
26
|
import { usePageReset } from './hooks/usePageReset';
|
|
27
27
|
import styles from './styles.module.css';
|
|
28
|
-
import { getColumnStyleVars, getCurrentlyConfiguredHeaderWidth } from './utils';
|
|
28
|
+
import { getColumnStyleVars, getCurrentlyConfiguredHeaderWidth, getInitColumnSizeFromLocalStorage, saveStateToLocalStorage, } from './utils';
|
|
29
29
|
/** Компонент таблицы */
|
|
30
30
|
export function Table(_a) {
|
|
31
31
|
var { data, rowPinning = {
|
|
32
32
|
top: [],
|
|
33
|
-
}, columnDefinitions, keepPinnedRows = false, copyPinnedRows = false, enableSelectPinned = false, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, onDelete, pageSize = DEFAULT_PAGE_SIZE, pageCount, loading = false, outline = false, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar = false, toolbarBefore, toolbarAfter, suppressPagination = false, manualSorting = false, manualPagination = false, manualFiltering = false, autoResetPageIndex = false, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch } = _a, rest = __rest(_a, ["data", "rowPinning", "columnDefinitions", "keepPinnedRows", "copyPinnedRows", "enableSelectPinned", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "onDelete", "pageSize", "pageCount", "loading", "outline", "moreActions", "exportSettings", "dataFiltered", "dataError", "noDataState", "noResultsState", "errorDataState", "suppressToolbar", "toolbarBefore", "toolbarAfter", "suppressPagination", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "scrollRef", "scrollContainerRef", "getRowId", "enableFuzzySearch"]);
|
|
33
|
+
}, columnDefinitions, keepPinnedRows = false, copyPinnedRows = false, enableSelectPinned = false, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, onDelete, pageSize = DEFAULT_PAGE_SIZE, pageCount, loading = false, outline = false, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar = false, toolbarBefore, toolbarAfter, suppressPagination = false, manualSorting = false, manualPagination = false, manualFiltering = false, autoResetPageIndex = false, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState } = _a, rest = __rest(_a, ["data", "rowPinning", "columnDefinitions", "keepPinnedRows", "copyPinnedRows", "enableSelectPinned", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "onDelete", "pageSize", "pageCount", "loading", "outline", "moreActions", "exportSettings", "dataFiltered", "dataError", "noDataState", "noResultsState", "errorDataState", "suppressToolbar", "toolbarBefore", "toolbarAfter", "suppressPagination", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "scrollRef", "scrollContainerRef", "getRowId", "enableFuzzySearch", "savedState"]);
|
|
34
34
|
const { state: globalFilter, onStateChange: onGlobalFilterChange } = useStateControl(search, '');
|
|
35
35
|
const { state: rowSelection, onStateChange: onRowSelectionChange } = useStateControl(rowSelectionProp, {});
|
|
36
36
|
const defaultPaginationState = useMemo(() => ({
|
|
@@ -150,8 +150,15 @@ export function Table(_a) {
|
|
|
150
150
|
}
|
|
151
151
|
else {
|
|
152
152
|
const originalColumnDefSize = originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.size;
|
|
153
|
-
|
|
153
|
+
let initSize = originalColumnDefSize ? `${originalColumnDefSize}px` : '100%';
|
|
154
154
|
const prevSize = (_a = columnSizeVarsRef.current) === null || _a === void 0 ? void 0 : _a[sizeKey];
|
|
155
|
+
const withSaveResizeToStore = (originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.enableResizing) && (savedState === null || savedState === void 0 ? void 0 : savedState.resize);
|
|
156
|
+
if (withSaveResizeToStore) {
|
|
157
|
+
const savedSize = getInitColumnSizeFromLocalStorage({ id: savedState.id, columnId: header.id });
|
|
158
|
+
if (savedSize) {
|
|
159
|
+
initSize = savedSize;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
155
162
|
let size = initSize;
|
|
156
163
|
if (header.column.getCanResize()) {
|
|
157
164
|
const currentSize = header.getSize();
|
|
@@ -163,6 +170,9 @@ export function Table(_a) {
|
|
|
163
170
|
size = `${realSize}px`;
|
|
164
171
|
}
|
|
165
172
|
}
|
|
173
|
+
if (withSaveResizeToStore) {
|
|
174
|
+
saveStateToLocalStorage({ id: savedState.id, columnId: header.id, size });
|
|
175
|
+
}
|
|
166
176
|
colSizes[sizeKey] = size;
|
|
167
177
|
colSizes[flexKey] = size === '100%' ? 'unset' : '0';
|
|
168
178
|
}
|
|
@@ -3,3 +3,15 @@ export declare function getColumnStyleVars(id: string): {
|
|
|
3
3
|
sizeKey: string;
|
|
4
4
|
flexKey: string;
|
|
5
5
|
};
|
|
6
|
+
type GetSavedStateFromLocalStorageProps = {
|
|
7
|
+
id: string;
|
|
8
|
+
columnId: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function getInitColumnSizeFromLocalStorage({ id, columnId }: GetSavedStateFromLocalStorageProps): string | undefined;
|
|
11
|
+
type SaveStateToLocalStorageProps = {
|
|
12
|
+
id: string;
|
|
13
|
+
columnId: string;
|
|
14
|
+
size: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function saveStateToLocalStorage({ id, columnId, size }: SaveStateToLocalStorageProps): void;
|
|
17
|
+
export {};
|
|
@@ -14,3 +14,17 @@ export function getColumnStyleVars(id) {
|
|
|
14
14
|
flexKey: `--table-column-${id}-flex`,
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
+
const RESIZED_KEY = 'RESIZED_COLUMN_KEY';
|
|
18
|
+
export function getInitColumnSizeFromLocalStorage({ id, columnId }) {
|
|
19
|
+
const savedStateFromStorage = JSON.parse(localStorage.getItem(id || '') || 'null');
|
|
20
|
+
if (savedStateFromStorage) {
|
|
21
|
+
const currentSize = savedStateFromStorage[`${RESIZED_KEY}-${columnId}`];
|
|
22
|
+
return currentSize;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function saveStateToLocalStorage({ id, columnId, size }) {
|
|
26
|
+
const savedStateFromStorage = JSON.parse(localStorage.getItem(id) || 'null');
|
|
27
|
+
const newItem = savedStateFromStorage || {};
|
|
28
|
+
newItem[`${RESIZED_KEY}-${columnId}`] = size;
|
|
29
|
+
localStorage.setItem(id, JSON.stringify(newItem));
|
|
30
|
+
}
|
|
@@ -121,6 +121,11 @@ export type TableProps<TData extends object> = WithSupportProps<{
|
|
|
121
121
|
scrollContainerRef?: RefObject<HTMLElement>;
|
|
122
122
|
/** Определение какие строки должны быть закреплены в таблице */
|
|
123
123
|
rowPinning?: Pick<RowPinningState, 'top'>;
|
|
124
|
+
/** Конфиг для сохранения состояния в localStorage */
|
|
125
|
+
savedState?: {
|
|
126
|
+
id: string;
|
|
127
|
+
resize?: boolean;
|
|
128
|
+
};
|
|
124
129
|
}>;
|
|
125
130
|
export type ServerTableProps<TData extends object> = Omit<TableProps<TData>, 'pageSize' | 'pageCount' | 'pagination' | 'search' | 'data'> & {
|
|
126
131
|
/** Данные для отрисовки */
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"title": "Table",
|
|
7
|
-
"version": "0.20.
|
|
7
|
+
"version": "0.20.11-preview-1d8237d6.0",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"*.css",
|
|
10
10
|
"*.woff",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"peerDependencies": {
|
|
58
58
|
"@snack-uikit/locale": "*"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "b60ec0a02d34700cb646b61e0dc34860f6dd1280"
|
|
61
61
|
}
|
|
@@ -41,7 +41,12 @@ import { TableProps } from '../types';
|
|
|
41
41
|
import { useLoadingTable, useStateControl } from './hooks';
|
|
42
42
|
import { usePageReset } from './hooks/usePageReset';
|
|
43
43
|
import styles from './styles.module.scss';
|
|
44
|
-
import {
|
|
44
|
+
import {
|
|
45
|
+
getColumnStyleVars,
|
|
46
|
+
getCurrentlyConfiguredHeaderWidth,
|
|
47
|
+
getInitColumnSizeFromLocalStorage,
|
|
48
|
+
saveStateToLocalStorage,
|
|
49
|
+
} from './utils';
|
|
45
50
|
|
|
46
51
|
/** Компонент таблицы */
|
|
47
52
|
export function Table<TData extends object>({
|
|
@@ -85,6 +90,7 @@ export function Table<TData extends object>({
|
|
|
85
90
|
scrollContainerRef,
|
|
86
91
|
getRowId,
|
|
87
92
|
enableFuzzySearch,
|
|
93
|
+
savedState,
|
|
88
94
|
|
|
89
95
|
...rest
|
|
90
96
|
}: TableProps<TData>) {
|
|
@@ -235,9 +241,18 @@ export function Table<TData extends object>({
|
|
|
235
241
|
colSizes[flexKey] = '100%';
|
|
236
242
|
} else {
|
|
237
243
|
const originalColumnDefSize = originalColDef?.size;
|
|
238
|
-
|
|
244
|
+
let initSize = originalColumnDefSize ? `${originalColumnDefSize}px` : '100%';
|
|
239
245
|
const prevSize = columnSizeVarsRef.current?.[sizeKey];
|
|
240
246
|
|
|
247
|
+
const withSaveResizeToStore = originalColDef?.enableResizing && savedState?.resize;
|
|
248
|
+
|
|
249
|
+
if (withSaveResizeToStore) {
|
|
250
|
+
const savedSize = getInitColumnSizeFromLocalStorage({ id: savedState.id, columnId: header.id });
|
|
251
|
+
if (savedSize) {
|
|
252
|
+
initSize = savedSize;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
241
256
|
let size = initSize;
|
|
242
257
|
|
|
243
258
|
if (header.column.getCanResize()) {
|
|
@@ -254,6 +269,11 @@ export function Table<TData extends object>({
|
|
|
254
269
|
}
|
|
255
270
|
}
|
|
256
271
|
|
|
272
|
+
if (withSaveResizeToStore) {
|
|
273
|
+
saveStateToLocalStorage({ id: savedState.id, columnId: header.id, size });
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
|
|
257
277
|
colSizes[sizeKey] = size;
|
|
258
278
|
colSizes[flexKey] = size === '100%' ? 'unset' : '0';
|
|
259
279
|
}
|
|
@@ -19,3 +19,34 @@ export function getColumnStyleVars(id: string) {
|
|
|
19
19
|
flexKey: `--table-column-${id}-flex`,
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
+
|
|
23
|
+
const RESIZED_KEY = 'RESIZED_COLUMN_KEY';
|
|
24
|
+
|
|
25
|
+
type GetSavedStateFromLocalStorageProps = {
|
|
26
|
+
id: string;
|
|
27
|
+
columnId: string;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export function getInitColumnSizeFromLocalStorage({ id, columnId }: GetSavedStateFromLocalStorageProps) {
|
|
31
|
+
const savedStateFromStorage = JSON.parse(localStorage.getItem(id || '') || 'null');
|
|
32
|
+
|
|
33
|
+
if (savedStateFromStorage) {
|
|
34
|
+
const currentSize = savedStateFromStorage[`${RESIZED_KEY}-${columnId}`] as string | undefined;
|
|
35
|
+
return currentSize;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type SaveStateToLocalStorageProps = {
|
|
40
|
+
id: string;
|
|
41
|
+
columnId: string;
|
|
42
|
+
size: string;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export function saveStateToLocalStorage({ id, columnId, size }: SaveStateToLocalStorageProps) {
|
|
46
|
+
const savedStateFromStorage = JSON.parse(localStorage.getItem(id) || 'null');
|
|
47
|
+
|
|
48
|
+
const newItem: Record<string, string> = savedStateFromStorage || {};
|
|
49
|
+
newItem[`${RESIZED_KEY}-${columnId}`] = size;
|
|
50
|
+
|
|
51
|
+
localStorage.setItem(id, JSON.stringify(newItem));
|
|
52
|
+
}
|
package/src/components/types.ts
CHANGED
|
@@ -152,6 +152,12 @@ export type TableProps<TData extends object> = WithSupportProps<{
|
|
|
152
152
|
scrollContainerRef?: RefObject<HTMLElement>;
|
|
153
153
|
/** Определение какие строки должны быть закреплены в таблице */
|
|
154
154
|
rowPinning?: Pick<RowPinningState, 'top'>;
|
|
155
|
+
|
|
156
|
+
/** Конфиг для сохранения состояния в localStorage */
|
|
157
|
+
savedState?: {
|
|
158
|
+
id: string;
|
|
159
|
+
resize?: boolean;
|
|
160
|
+
};
|
|
155
161
|
}>;
|
|
156
162
|
|
|
157
163
|
export type ServerTableProps<TData extends object> = Omit<
|