@snack-uikit/table 0.9.0 → 0.10.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 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.10.0 (2024-01-18)
7
+
8
+
9
+ ### Features
10
+
11
+ * **FF-4102:** update toolbar usage, add 'toolbarBeforeSearch' prop ([6acf0ba](https://github.com/cloud-ru-tech/snack-uikit/commit/6acf0ba5bfb1afaaa485857f3058b65a92f6c75c))
12
+
13
+
14
+
15
+
16
+
6
17
  # 0.9.0 (2024-01-16)
7
18
 
8
19
 
package/README.md CHANGED
@@ -123,6 +123,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
123
123
  | noDataState | `TableEmptyStateProps` | { icon: CrossSVG, appearance: 'red', title: 'Data collection error', description: 'Try refreshing the page', } as const | Экран при отстутствии данных |
124
124
  | noResultsState | `TableEmptyStateProps` | { icon: SearchSVG, appearance: 'neutral', title: 'Not found', description: 'Try entering another query', } as const | Экран при отстутствии результатов поиска |
125
125
  | suppressToolbar | `boolean` | - | Отключение тулбара |
126
+ | toolbarBefore | `ReactNode` | - | Дополнительный слот в `Toolbar` перед строкой поиска |
126
127
  | suppressPagination | `boolean` | - | Отключение пагинации |
127
128
  ## Table.getStatusColumnDef
128
129
  Вспомогательная функция для создания ячейки со статусом
@@ -88,11 +88,13 @@ export type TableProps<TData extends object> = WithSupportProps<{
88
88
  noResultsState?: TableEmptyStateProps;
89
89
  /** Отключение тулбара */
90
90
  suppressToolbar?: boolean;
91
+ /** Дополнительный слот в `Toolbar` перед строкой поиска */
92
+ toolbarBefore?: ReactNode;
91
93
  /** Отключение пагинации */
92
94
  suppressPagination?: boolean;
93
95
  }>;
94
96
  /** Компонент таблицы */
95
- export declare function Table<TData extends object>({ data, columnDefinitions, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters: columnFiltersProp, pagination: paginationProp, className, onRowClick, onRefresh, onDelete, pageSize, pageCount, loading, outline, moreActions, exportFileName, noDataState, noResultsState, suppressToolbar, suppressPagination, ...rest }: TableProps<TData>): import("react/jsx-runtime").JSX.Element;
97
+ export declare function Table<TData extends object>({ data, columnDefinitions, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters: columnFiltersProp, pagination: paginationProp, className, onRowClick, onRefresh, onDelete, pageSize, pageCount, loading, outline, moreActions, exportFileName, noDataState, noResultsState, suppressToolbar, toolbarBefore, suppressPagination, ...rest }: TableProps<TData>): import("react/jsx-runtime").JSX.Element;
96
98
  export declare namespace Table {
97
99
  var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
98
100
  var statusAppearances: {
@@ -27,7 +27,7 @@ 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 = 10, pageCount, loading = false, outline = false, moreActions, exportFileName, noDataState = DEFAULT_NO_DATA_TABLE_STATE, noResultsState = DEFAULT_NO_RESULTS_TABLE_STATE, suppressToolbar = false, 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", "suppressPagination"]);
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(() => ({
@@ -140,7 +140,12 @@ export function Table(_a) {
140
140
  const tableRows = table.getRowModel().rows;
141
141
  const loadingTableRows = loadingTable.getRowModel().rows;
142
142
  const tablePagination = table.getState().pagination;
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, { value: globalFilter, onChange: onGlobalFilterChange, checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected(), className: styles.toolbar, onRefresh: onRefresh ? handleOnRefresh : undefined, onDelete: enableSelection && onDelete ? handleOnDelete : undefined, onCheck: enableSelection ? handleOnCheck : undefined, outline: outline, loading: search === null || search === void 0 ? void 0 : search.loading, placeholder: (search === null || search === void 0 ? void 0 : search.placeholder) || 'Search', selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single', actions: exportFileName ? (_jsx(ExportButton, { fileName: exportFileName, columnDefinitions: columnDefinitions, data: data })) : undefined, moreActions: moreActions }), columnFiltersProp && _jsxs("div", { className: styles.filtersWrapper, children: [" ", columnFiltersProp, " "] })] })), _jsx("div", { className: styles.scrollWrapper, "data-outline": outline || undefined, children: _jsx(Scroll, { size: 's', className: styles.table, children: _jsx("div", { className: styles.tableContent, style: columnSizeVars, children: _jsx(TableContext.Provider, { value: { table }, children: loading ? (_jsxs(SkeletonContextProvider, { loading: true, children: [_jsx(HeaderRow, {}), loadingTableRows.map(row => (_jsx(BodyRow, { row: row }, row.id)))] })) : (_jsxs(_Fragment, { children: [tableRows.length ? _jsx(HeaderRow, {}) : null, tableRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick }, row.id))), !tableRows.length && globalFilter && _jsx(TableEmptyState, Object.assign({}, noResultsState)), !tableRows.length && !globalFilter && _jsx(TableEmptyState, Object.assign({}, noDataState))] })) }) }) }) }), !suppressPagination && (_jsx(TablePagination, { table: table, options: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.options, optionsLabel: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsLabel, pageCount: pageCount }))] })) }));
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: {
144
+ value: globalFilter,
145
+ onChange: onGlobalFilterChange,
146
+ loading: search === null || search === void 0 ? void 0 : search.loading,
147
+ placeholder: (search === null || search === void 0 ? void 0 : search.placeholder) || 'Search',
148
+ }, checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected(), className: styles.toolbar, onRefresh: onRefresh ? handleOnRefresh : undefined, onDelete: enableSelection && onDelete ? handleOnDelete : undefined, onCheck: enableSelection ? handleOnCheck : undefined, outline: outline, selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single', before: toolbarBefore, after: exportFileName ? (_jsx(ExportButton, { fileName: exportFileName, columnDefinitions: columnDefinitions, data: data })) : undefined, moreActions: moreActions }), columnFiltersProp && _jsxs("div", { className: styles.filtersWrapper, children: [" ", columnFiltersProp, " "] })] })), _jsx("div", { className: styles.scrollWrapper, "data-outline": outline || undefined, children: _jsx(Scroll, { size: 's', className: styles.table, children: _jsx("div", { className: styles.tableContent, style: columnSizeVars, children: _jsx(TableContext.Provider, { value: { table }, children: loading ? (_jsxs(SkeletonContextProvider, { loading: true, children: [_jsx(HeaderRow, {}), loadingTableRows.map(row => (_jsx(BodyRow, { row: row }, row.id)))] })) : (_jsxs(_Fragment, { children: [tableRows.length ? _jsx(HeaderRow, {}) : null, tableRows.map(row => (_jsx(BodyRow, { row: row, onRowClick: onRowClick }, row.id))), !tableRows.length && globalFilter && _jsx(TableEmptyState, Object.assign({}, noResultsState)), !tableRows.length && !globalFilter && _jsx(TableEmptyState, Object.assign({}, noDataState))] })) }) }) }) }), !suppressPagination && (_jsx(TablePagination, { table: table, options: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.options, optionsLabel: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsLabel, pageCount: pageCount }))] })) }));
144
149
  }
145
150
  Table.getStatusColumnDef = getStatusColumnDef;
146
151
  Table.statusAppearances = STATUS_APPEARANCE;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Table",
7
- "version": "0.9.0",
7
+ "version": "0.10.0",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -41,7 +41,7 @@
41
41
  "@snack-uikit/scroll": "0.5.0",
42
42
  "@snack-uikit/skeleton": "0.3.2",
43
43
  "@snack-uikit/toggles": "0.9.3",
44
- "@snack-uikit/toolbar": "0.5.4",
44
+ "@snack-uikit/toolbar": "0.6.0",
45
45
  "@snack-uikit/truncate-string": "0.4.4",
46
46
  "@snack-uikit/typography": "0.6.1",
47
47
  "@snack-uikit/utils": "3.2.0",
@@ -51,5 +51,5 @@
51
51
  "uncontrollable": "8.0.0",
52
52
  "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz"
53
53
  },
54
- "gitHead": "b8ffb981d1933d3798b28e05095f25538768ffd4"
54
+ "gitHead": "75f118e9d2fa2f38727460ebdd9ac5a1c31cc176"
55
55
  }
@@ -136,6 +136,9 @@ export type TableProps<TData extends object> = WithSupportProps<{
136
136
 
137
137
  /** Отключение тулбара */
138
138
  suppressToolbar?: boolean;
139
+ /** Дополнительный слот в `Toolbar` перед строкой поиска */
140
+ toolbarBefore?: ReactNode;
141
+
139
142
  /** Отключение пагинации */
140
143
  suppressPagination?: boolean;
141
144
  }>;
@@ -170,6 +173,8 @@ export function Table<TData extends object>({
170
173
  noResultsState = DEFAULT_NO_RESULTS_TABLE_STATE,
171
174
 
172
175
  suppressToolbar = false,
176
+ toolbarBefore,
177
+
173
178
  suppressPagination = false,
174
179
 
175
180
  ...rest
@@ -344,8 +349,12 @@ export function Table<TData extends object>({
344
349
  {!suppressToolbar && (
345
350
  <div className={styles.header}>
346
351
  <Toolbar
347
- value={globalFilter}
348
- onChange={onGlobalFilterChange}
352
+ search={{
353
+ value: globalFilter,
354
+ onChange: onGlobalFilterChange,
355
+ loading: search?.loading,
356
+ placeholder: search?.placeholder || 'Search',
357
+ }}
349
358
  checked={table.getIsAllPageRowsSelected()}
350
359
  indeterminate={table.getIsSomePageRowsSelected()}
351
360
  className={styles.toolbar}
@@ -353,10 +362,9 @@ export function Table<TData extends object>({
353
362
  onDelete={enableSelection && onDelete ? handleOnDelete : undefined}
354
363
  onCheck={enableSelection ? handleOnCheck : undefined}
355
364
  outline={outline}
356
- loading={search?.loading}
357
- placeholder={search?.placeholder || 'Search'}
358
365
  selectionMode={rowSelectionProp?.multiRow ? 'multiple' : 'single'}
359
- actions={
366
+ before={toolbarBefore}
367
+ after={
360
368
  exportFileName ? (
361
369
  <ExportButton fileName={exportFileName} columnDefinitions={columnDefinitions} data={data} />
362
370
  ) : undefined