@snack-uikit/table 0.20.6 → 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 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.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
+
6
17
  ## 0.20.6 (2024-07-31)
7
18
 
8
19
 
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
@@ -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
@@ -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
- const originalColumnDefSize = originalColDef === null || originalColDef === void 0 ? void 0 : originalColDef.size;
147
- const initSize = originalColumnDefSize ? `${originalColumnDefSize}px` : '100%';
148
- const prevSize = (_a = columnSizeVarsRef.current) === null || _a === void 0 ? void 0 : _a[sizeKey];
149
- let size = initSize;
150
- if (header.column.getCanResize()) {
151
- const currentSize = header.getSize();
152
- const colDefSize = header.column.columnDef.size;
153
- size = currentSize === colDefSize ? initSize : `${currentSize}px`;
154
- if (prevSize === '100%' && currentSize !== colDefSize) {
155
- const realSize = getCurrentlyConfiguredHeaderWidth(header.id);
156
- table.setColumnSizing(old => (Object.assign(Object.assign({}, old), { [header.id]: realSize })));
157
- size = `${realSize}px`;
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
  /*
@@ -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
  },
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Table",
7
- "version": "0.20.6",
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": "0e8748072eba72660edad8aa462b762922e33c10"
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
- let size = initSize;
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
- if (header.column.getCanResize()) {
236
- const currentSize = header.getSize();
237
- const colDefSize = header.column.columnDef.size;
243
+ if (header.column.getCanResize()) {
244
+ const currentSize = header.getSize();
245
+ const colDefSize = header.column.columnDef.size;
238
246
 
239
- size = currentSize === colDefSize ? initSize : `${currentSize}px`;
247
+ size = currentSize === colDefSize ? initSize : `${currentSize}px`;
240
248
 
241
- if (prevSize === '100%' && currentSize !== colDefSize) {
242
- const realSize = getCurrentlyConfiguredHeaderWidth(header.id);
243
- table.setColumnSizing(old => ({ ...old, [header.id]: realSize }));
249
+ if (prevSize === '100%' && currentSize !== colDefSize) {
250
+ const realSize = getCurrentlyConfiguredHeaderWidth(header.id);
251
+ table.setColumnSizing(old => ({ ...old, [header.id]: realSize }));
244
252
 
245
- size = `${realSize}px`;
253
+ size = `${realSize}px`;
254
+ }
246
255
  }
247
- }
248
256
 
249
- colSizes[sizeKey] = size;
250
- colSizes[flexKey] = size === '100%' ? 'unset' : '0';
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
- enableSorting,
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
  },