@snack-uikit/table 0.20.5 → 0.20.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 +22 -0
- package/README.md +7 -3
- package/dist/components/ServerTable/ServerTable.d.ts +1 -12
- package/dist/components/ServerTable/utils.d.ts +0 -1
- package/dist/components/Table/Table.d.ts +1 -12
- package/dist/components/Table/Table.js +21 -14
- package/dist/helperComponents/Cells/Cell.d.ts +5 -5
- package/dist/helperComponents/Cells/StatusCell/StatusCell.d.ts +5 -1
- package/dist/helperComponents/Cells/StatusCell/StatusCell.js +3 -2
- package/dist/helperComponents/Cells/StatusCell/constants.d.ts +1 -12
- package/package.json +2 -2
- package/src/components/Table/Table.tsx +24 -15
- package/src/helperComponents/Cells/StatusCell/StatusCell.tsx +9 -2
- package/src/helperComponents/Cells/StatusCell/constants.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
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.20.7 (2024-08-02)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **PDS-227:** fix status column ([b906c30](https://github.com/cloud-ru-tech/snack-uikit/commit/b906c30d574a8cec4b70cfc6b309a2443a41a019))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## 0.20.6 (2024-07-31)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **FF-3788:** updated typescript to v5 ([89e3338](https://github.com/cloud-ru-tech/snack-uikit/commit/89e3338a3ef4df24e4c20d9a9c8cd16e7934ba63))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
## 0.20.5 (2024-07-29)
|
|
7
29
|
|
|
8
30
|
### Only dependencies have been changed
|
package/README.md
CHANGED
|
@@ -154,9 +154,11 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
154
154
|
|------|------|---------------|-------------|
|
|
155
155
|
| mapStatusToAppearance* | `MapStatusToAppearanceFnType` | - | Маппинг значений статуса на цвета |
|
|
156
156
|
| accessorKey* | `string` | - | Имя ключа соответствующее полю в data |
|
|
157
|
-
| enableSorting | `boolean` |
|
|
157
|
+
| enableSorting | `boolean` | true | Включение/выключение сортировки |
|
|
158
158
|
| renderDescription | `(cellValue: string) => string` | - | Функция для отрисовки текста, если не передана, то будет отрисован только индикатор статуса |
|
|
159
159
|
| size | `number` | - | Размер ячейки |
|
|
160
|
+
| minSize | `number` | - | |
|
|
161
|
+
| maxSize | `number` | - | |
|
|
160
162
|
| header | `ColumnDefTemplate<HeaderContext<TData, unknown>> & (string \| ((ctx: HeaderContext<TData, unknown>) => string))` | - | Заголовок колонки |
|
|
161
163
|
| enableResizing | `boolean` | - | Включение/выключение ресайза колонки |
|
|
162
164
|
## Table.getRowActionsColumnDef
|
|
@@ -172,7 +174,6 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
172
174
|
|------|------|---------------|-------------|
|
|
173
175
|
| onChangePage* | `(offset: number, limit: number) => void` | - | |
|
|
174
176
|
| columnDefinitions* | `ColumnDefinition<TData>[]` | - | Определение внешнего вида и функционала колонок |
|
|
175
|
-
| loading | `boolean` | - | Состояние загрузки |
|
|
176
177
|
| keepPinnedRows | `boolean` | false | Параметр отвечает за отображение закрепленных строк на всех страницах таблицы |
|
|
177
178
|
| copyPinnedRows | `boolean` | false | Параметр отвечает за сохранение закрепленных строк в теле таблицы |
|
|
178
179
|
| enableSelectPinned | `boolean` | - | Параметр отвечает за чекбокс выбора закрепленных строк |
|
|
@@ -182,6 +183,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
182
183
|
| autoResetPageIndex | `boolean` | - | Автоматический сброс пагинации к первой странице при изменении данных или состояния (e.g фильтры, сортировки, и т.д) |
|
|
183
184
|
| onRowClick | `RowClickHandler<TData>` | - | Колбэк клика по строке |
|
|
184
185
|
| className | `string` | - | CSS-класс |
|
|
186
|
+
| loading | `boolean` | - | Состояние загрузки |
|
|
185
187
|
| onRefresh | `() => void` | - | Колбек обновления данных |
|
|
186
188
|
| onDelete | `(selectionState: RowSelectionState, resetRowSelection: (defaultState?: boolean) => void) => void` | - | Колбек удаления выбранных |
|
|
187
189
|
| outline | `boolean` | - | Внешний бордер для тулбара и таблицы |
|
|
@@ -224,9 +226,11 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
|
|
|
224
226
|
|------|------|---------------|-------------|
|
|
225
227
|
| mapStatusToAppearance* | `MapStatusToAppearanceFnType` | - | Маппинг значений статуса на цвета |
|
|
226
228
|
| accessorKey* | `string` | - | Имя ключа соответствующее полю в data |
|
|
227
|
-
| enableSorting | `boolean` |
|
|
229
|
+
| enableSorting | `boolean` | true | Включение/выключение сортировки |
|
|
228
230
|
| renderDescription | `(cellValue: string) => string` | - | Функция для отрисовки текста, если не передана, то будет отрисован только индикатор статуса |
|
|
229
231
|
| size | `number` | - | Размер ячейки |
|
|
232
|
+
| minSize | `number` | - | |
|
|
233
|
+
| maxSize | `number` | - | |
|
|
230
234
|
| header | `ColumnDefTemplate<HeaderContext<TData, unknown>> & (string \| ((ctx: HeaderContext<TData, unknown>) => string))` | - | Заголовок колонки |
|
|
231
235
|
| enableResizing | `boolean` | - | Включение/выключение ресайза колонки |
|
|
232
236
|
## exportToCSV
|
|
@@ -2,17 +2,6 @@ import { ServerTableProps } from '../types';
|
|
|
2
2
|
export declare function ServerTable<TData extends object>({ items, total, limit, offset, onChangePage, search: searchProp, pagination, columnFilters, manualSorting, manualPagination, manualFiltering, ...rest }: ServerTableProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export declare namespace ServerTable {
|
|
4
4
|
var getRowActionsColumnDef: typeof import("../../helperComponents").getRowActionsColumnDef;
|
|
5
|
-
var statusAppearances:
|
|
6
|
-
readonly Primary: "primary";
|
|
7
|
-
readonly Neutral: "neutral";
|
|
8
|
-
readonly Red: "red";
|
|
9
|
-
readonly Orange: "orange";
|
|
10
|
-
readonly Yellow: "yellow";
|
|
11
|
-
readonly Green: "green";
|
|
12
|
-
readonly Blue: "blue";
|
|
13
|
-
readonly Violet: "violet";
|
|
14
|
-
readonly Pink: "pink";
|
|
15
|
-
readonly Loading: "loading";
|
|
16
|
-
};
|
|
5
|
+
var statusAppearances: Record<string, string>;
|
|
17
6
|
var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
|
|
18
7
|
}
|
|
@@ -3,17 +3,6 @@ import { TableProps } from '../types';
|
|
|
3
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;
|
|
4
4
|
export declare namespace Table {
|
|
5
5
|
var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
|
|
6
|
-
var statusAppearances:
|
|
7
|
-
readonly Primary: "primary";
|
|
8
|
-
readonly Neutral: "neutral";
|
|
9
|
-
readonly Red: "red";
|
|
10
|
-
readonly Orange: "orange";
|
|
11
|
-
readonly Yellow: "yellow";
|
|
12
|
-
readonly Green: "green";
|
|
13
|
-
readonly Blue: "blue";
|
|
14
|
-
readonly Violet: "violet";
|
|
15
|
-
readonly Pink: "pink";
|
|
16
|
-
readonly Loading: "loading";
|
|
17
|
-
};
|
|
6
|
+
var statusAppearances: Record<string, string>;
|
|
18
7
|
var getRowActionsColumnDef: typeof import("../../helperComponents").getRowActionsColumnDef;
|
|
19
8
|
}
|
|
@@ -143,22 +143,29 @@ export function Table(_a) {
|
|
|
143
143
|
const header = headers[i];
|
|
144
144
|
const { sizeKey, flexKey } = getColumnStyleVars(header.id);
|
|
145
145
|
const originalColDef = originalColumnDefs.find(col => getColumnId(header) === col.id);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
146
|
+
if (header.id === 'snack_predefined_statusColumn' && !(originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.header) && !(originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.enableSorting)) {
|
|
147
|
+
const indicatorSize = 'var(--size-table-cell-status-indicator-horizontal)';
|
|
148
|
+
colSizes[sizeKey] = indicatorSize;
|
|
149
|
+
colSizes[flexKey] = '100%';
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
const originalColumnDefSize = originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.size;
|
|
153
|
+
const initSize = originalColumnDefSize ? `${originalColumnDefSize}px` : '100%';
|
|
154
|
+
const prevSize = (_a = columnSizeVarsRef.current) === null || _a === void 0 ? void 0 : _a[sizeKey];
|
|
155
|
+
let size = initSize;
|
|
156
|
+
if (header.column.getCanResize()) {
|
|
157
|
+
const currentSize = header.getSize();
|
|
158
|
+
const colDefSize = header.column.columnDef.size;
|
|
159
|
+
size = currentSize === colDefSize ? initSize : `${currentSize}px`;
|
|
160
|
+
if (prevSize === '100%' && currentSize !== colDefSize) {
|
|
161
|
+
const realSize = getCurrentlyConfiguredHeaderWidth(header.id);
|
|
162
|
+
table.setColumnSizing(old => (Object.assign(Object.assign({}, old), { [header.id]: realSize })));
|
|
163
|
+
size = `${realSize}px`;
|
|
164
|
+
}
|
|
158
165
|
}
|
|
166
|
+
colSizes[sizeKey] = size;
|
|
167
|
+
colSizes[flexKey] = size === '100%' ? 'unset' : '0';
|
|
159
168
|
}
|
|
160
|
-
colSizes[sizeKey] = size;
|
|
161
|
-
colSizes[flexKey] = size === '100%' ? 'unset' : '0';
|
|
162
169
|
}
|
|
163
170
|
return colSizes;
|
|
164
171
|
/*
|
|
@@ -10,9 +10,9 @@ export type CellProps = {
|
|
|
10
10
|
} & DataAttributes;
|
|
11
11
|
export declare const Cell: import("react").ForwardRefExoticComponent<{
|
|
12
12
|
children: ReactNode;
|
|
13
|
-
onClick?: MouseEventHandler
|
|
14
|
-
onMouseUp?: MouseEventHandler
|
|
15
|
-
className?: string
|
|
16
|
-
style?: CSSProperties
|
|
17
|
-
role?: "cell" | "columnheader"
|
|
13
|
+
onClick?: MouseEventHandler;
|
|
14
|
+
onMouseUp?: MouseEventHandler;
|
|
15
|
+
className?: string;
|
|
16
|
+
style?: CSSProperties;
|
|
17
|
+
role?: "cell" | "columnheader";
|
|
18
18
|
} & DataAttributes & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -15,6 +15,8 @@ type BaseStatusColumnDef = {
|
|
|
15
15
|
type StatusColumnDef = BaseStatusColumnDef & {
|
|
16
16
|
renderDescription?: never;
|
|
17
17
|
size?: never;
|
|
18
|
+
minSize?: never;
|
|
19
|
+
maxSize?: never;
|
|
18
20
|
header?: never;
|
|
19
21
|
enableResizing?: never;
|
|
20
22
|
};
|
|
@@ -23,6 +25,8 @@ type StatusColumnDefWithDescription<TData> = BaseStatusColumnDef & {
|
|
|
23
25
|
renderDescription(cellValue: string): string;
|
|
24
26
|
/** Размер ячейки */
|
|
25
27
|
size: number;
|
|
28
|
+
minSize?: number;
|
|
29
|
+
maxSize?: number;
|
|
26
30
|
/** Заголовок колонки */
|
|
27
31
|
header?: ColumnDefinition<TData>['header'];
|
|
28
32
|
/** Включение/выключение ресайза колонки */
|
|
@@ -30,4 +34,4 @@ type StatusColumnDefWithDescription<TData> = BaseStatusColumnDef & {
|
|
|
30
34
|
};
|
|
31
35
|
export type StatusColumnDefinitionProps<TData> = StatusColumnDef | StatusColumnDefWithDescription<TData>;
|
|
32
36
|
/** Вспомогательная функция для создания ячейки со статусом */
|
|
33
|
-
export declare function getStatusColumnDef<TData>({ header, accessorKey, mapStatusToAppearance, renderDescription, size, enableSorting, enableResizing, }: StatusColumnDefinitionProps<TData>): ColumnDefinition<TData>;
|
|
37
|
+
export declare function getStatusColumnDef<TData>({ header, accessorKey, mapStatusToAppearance, renderDescription, size, maxSize, minSize, enableSorting, enableResizing, }: StatusColumnDefinitionProps<TData>): ColumnDefinition<TData>;
|
|
@@ -10,7 +10,7 @@ function StatusCell({ appearance, label }) {
|
|
|
10
10
|
return (_jsxs("div", { className: styles.statusCell, "data-no-label": !label || undefined, children: [_jsx("div", { "data-appearance": isLoading ? undefined : appearance, className: styles.statusCellIndicator, "data-loading": isLoading || undefined, "data-test-id": TEST_IDS.statusIndicator }), label && (_jsx("div", { className: styles.statusCellLabel, "data-test-id": TEST_IDS.statusLabel, children: _jsx(Typography.LightLabelS, { children: _jsx(TruncateString, { text: label }) }) }))] }));
|
|
11
11
|
}
|
|
12
12
|
/** Вспомогательная функция для создания ячейки со статусом */
|
|
13
|
-
export function getStatusColumnDef({ header, accessorKey, mapStatusToAppearance, renderDescription, size, enableSorting, enableResizing, }) {
|
|
13
|
+
export function getStatusColumnDef({ header, accessorKey, mapStatusToAppearance, renderDescription, size, maxSize, minSize, enableSorting = true, enableResizing, }) {
|
|
14
14
|
const hasDescription = Boolean(renderDescription);
|
|
15
15
|
return {
|
|
16
16
|
id: 'snack_predefined_statusColumn',
|
|
@@ -19,7 +19,8 @@ export function getStatusColumnDef({ header, accessorKey, mapStatusToAppearance,
|
|
|
19
19
|
noHeaderCellPadding: !hasDescription,
|
|
20
20
|
noHeaderCellBorderOffset: hasDescription,
|
|
21
21
|
size: hasDescription ? size : MIN_STATUS_CELL_SIZE,
|
|
22
|
-
minSize: MIN_STATUS_CELL_SIZE,
|
|
22
|
+
minSize: enableSorting || hasDescription ? Math.max(MIN_STATUS_CELL_SIZE, minSize || 0) : 1,
|
|
23
|
+
maxSize: maxSize,
|
|
23
24
|
meta: {
|
|
24
25
|
skipOnExport: true,
|
|
25
26
|
},
|
|
@@ -1,13 +1,2 @@
|
|
|
1
|
-
export declare const STATUS_APPEARANCE:
|
|
2
|
-
readonly Primary: "primary";
|
|
3
|
-
readonly Neutral: "neutral";
|
|
4
|
-
readonly Red: "red";
|
|
5
|
-
readonly Orange: "orange";
|
|
6
|
-
readonly Yellow: "yellow";
|
|
7
|
-
readonly Green: "green";
|
|
8
|
-
readonly Blue: "blue";
|
|
9
|
-
readonly Violet: "violet";
|
|
10
|
-
readonly Pink: "pink";
|
|
11
|
-
readonly Loading: "loading";
|
|
12
|
-
};
|
|
1
|
+
export declare const STATUS_APPEARANCE: Record<string, string>;
|
|
13
2
|
export declare const MIN_STATUS_CELL_SIZE = 16;
|
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.7",
|
|
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": "f60fb892054936167d2744544ceed8ae0c988d67"
|
|
61
61
|
}
|
|
@@ -225,29 +225,38 @@ export function Table<TData extends object>({
|
|
|
225
225
|
for (let i = 0; i < headers.length; i++) {
|
|
226
226
|
const header = headers[i];
|
|
227
227
|
const { sizeKey, flexKey } = getColumnStyleVars(header.id);
|
|
228
|
+
|
|
228
229
|
const originalColDef = originalColumnDefs.find(col => getColumnId(header) === col.id);
|
|
229
|
-
const originalColumnDefSize = originalColDef?.size;
|
|
230
|
-
const initSize = originalColumnDefSize ? `${originalColumnDefSize}px` : '100%';
|
|
231
|
-
const prevSize = columnSizeVarsRef.current?.[sizeKey];
|
|
232
230
|
|
|
233
|
-
|
|
231
|
+
if (header.id === 'snack_predefined_statusColumn' && !originalColDef?.header && !originalColDef?.enableSorting) {
|
|
232
|
+
const indicatorSize = 'var(--size-table-cell-status-indicator-horizontal)';
|
|
233
|
+
|
|
234
|
+
colSizes[sizeKey] = indicatorSize;
|
|
235
|
+
colSizes[flexKey] = '100%';
|
|
236
|
+
} else {
|
|
237
|
+
const originalColumnDefSize = originalColDef?.size;
|
|
238
|
+
const initSize = originalColumnDefSize ? `${originalColumnDefSize}px` : '100%';
|
|
239
|
+
const prevSize = columnSizeVarsRef.current?.[sizeKey];
|
|
240
|
+
|
|
241
|
+
let size = initSize;
|
|
234
242
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
243
|
+
if (header.column.getCanResize()) {
|
|
244
|
+
const currentSize = header.getSize();
|
|
245
|
+
const colDefSize = header.column.columnDef.size;
|
|
238
246
|
|
|
239
|
-
|
|
247
|
+
size = currentSize === colDefSize ? initSize : `${currentSize}px`;
|
|
240
248
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
249
|
+
if (prevSize === '100%' && currentSize !== colDefSize) {
|
|
250
|
+
const realSize = getCurrentlyConfiguredHeaderWidth(header.id);
|
|
251
|
+
table.setColumnSizing(old => ({ ...old, [header.id]: realSize }));
|
|
244
252
|
|
|
245
|
-
|
|
253
|
+
size = `${realSize}px`;
|
|
254
|
+
}
|
|
246
255
|
}
|
|
247
|
-
}
|
|
248
256
|
|
|
249
|
-
|
|
250
|
-
|
|
257
|
+
colSizes[sizeKey] = size;
|
|
258
|
+
colSizes[flexKey] = size === '100%' ? 'unset' : '0';
|
|
259
|
+
}
|
|
251
260
|
}
|
|
252
261
|
|
|
253
262
|
return colSizes;
|
|
@@ -30,6 +30,8 @@ type BaseStatusColumnDef = {
|
|
|
30
30
|
type StatusColumnDef = BaseStatusColumnDef & {
|
|
31
31
|
renderDescription?: never;
|
|
32
32
|
size?: never;
|
|
33
|
+
minSize?: never;
|
|
34
|
+
maxSize?: never;
|
|
33
35
|
header?: never;
|
|
34
36
|
enableResizing?: never;
|
|
35
37
|
};
|
|
@@ -39,6 +41,8 @@ type StatusColumnDefWithDescription<TData> = BaseStatusColumnDef & {
|
|
|
39
41
|
renderDescription(cellValue: string): string;
|
|
40
42
|
/** Размер ячейки */
|
|
41
43
|
size: number;
|
|
44
|
+
minSize?: number;
|
|
45
|
+
maxSize?: number;
|
|
42
46
|
/** Заголовок колонки */
|
|
43
47
|
header?: ColumnDefinition<TData>['header'];
|
|
44
48
|
/** Включение/выключение ресайза колонки */
|
|
@@ -77,7 +81,9 @@ export function getStatusColumnDef<TData>({
|
|
|
77
81
|
mapStatusToAppearance,
|
|
78
82
|
renderDescription,
|
|
79
83
|
size,
|
|
80
|
-
|
|
84
|
+
maxSize,
|
|
85
|
+
minSize,
|
|
86
|
+
enableSorting = true,
|
|
81
87
|
enableResizing,
|
|
82
88
|
}: StatusColumnDefinitionProps<TData>): ColumnDefinition<TData> {
|
|
83
89
|
const hasDescription = Boolean(renderDescription);
|
|
@@ -89,7 +95,8 @@ export function getStatusColumnDef<TData>({
|
|
|
89
95
|
noHeaderCellPadding: !hasDescription,
|
|
90
96
|
noHeaderCellBorderOffset: hasDescription,
|
|
91
97
|
size: hasDescription ? (size as number) : MIN_STATUS_CELL_SIZE,
|
|
92
|
-
minSize: MIN_STATUS_CELL_SIZE,
|
|
98
|
+
minSize: enableSorting || hasDescription ? Math.max(MIN_STATUS_CELL_SIZE, minSize || 0) : 1,
|
|
99
|
+
maxSize: maxSize,
|
|
93
100
|
meta: {
|
|
94
101
|
skipOnExport: true,
|
|
95
102
|
},
|