@snack-uikit/table 0.31.1 → 0.32.1-preview-d479ae3f.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.
Files changed (124) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +4 -2
  3. package/dist/cjs/components/ServerTable/ServerTable.js +1 -4
  4. package/dist/cjs/components/Table/Table.d.ts +1 -1
  5. package/dist/cjs/components/Table/Table.js +144 -116
  6. package/dist/cjs/components/Table/hooks/useSaveTableSettings/index.d.ts +1 -0
  7. package/dist/cjs/components/Table/hooks/useSaveTableSettings/index.js +25 -0
  8. package/dist/cjs/components/Table/hooks/useSaveTableSettings/types.d.ts +7 -0
  9. package/dist/cjs/components/Table/hooks/useSaveTableSettings/types.js +5 -0
  10. package/dist/cjs/components/Table/hooks/useSaveTableSettings/useSaveTableSettings.d.ts +11 -0
  11. package/dist/cjs/components/Table/hooks/useSaveTableSettings/useSaveTableSettings.js +42 -0
  12. package/dist/cjs/components/Table/hooks/useSaveTableSettings/utils/index.d.ts +2 -0
  13. package/dist/cjs/components/Table/hooks/useSaveTableSettings/utils/index.js +26 -0
  14. package/dist/cjs/components/Table/hooks/useSaveTableSettings/utils/parser.d.ts +3 -0
  15. package/dist/cjs/components/Table/hooks/useSaveTableSettings/utils/parser.js +42 -0
  16. package/dist/cjs/components/Table/hooks/useSaveTableSettings/utils/serializer.d.ts +3 -0
  17. package/dist/cjs/components/Table/hooks/useSaveTableSettings/utils/serializer.js +43 -0
  18. package/dist/cjs/components/Table/hooks/useSaveTableSettings/vallidators.d.ts +3 -0
  19. package/dist/cjs/components/Table/hooks/useSaveTableSettings/vallidators.js +10 -0
  20. package/dist/cjs/components/Table/hooks/useStateControl.d.ts +1 -4
  21. package/dist/cjs/components/Table/hooks/useStateControl.js +7 -9
  22. package/dist/cjs/components/Table/styles.module.css +4 -3
  23. package/dist/cjs/components/types.d.ts +3 -1
  24. package/dist/cjs/constants.d.ts +3 -0
  25. package/dist/cjs/constants.js +5 -2
  26. package/dist/cjs/helperComponents/Cells/BodyCell/BodyCell.d.ts +2 -1
  27. package/dist/cjs/helperComponents/Cells/BodyCell/BodyCell.js +4 -2
  28. package/dist/cjs/helperComponents/Cells/BodyCell/styles.module.css +8 -2
  29. package/dist/cjs/helperComponents/Cells/CopyCell/CopyCell.js +1 -1
  30. package/dist/cjs/helperComponents/Cells/HeaderCell/HeaderCell.d.ts +2 -1
  31. package/dist/cjs/helperComponents/Cells/HeaderCell/HeaderCell.js +4 -2
  32. package/dist/cjs/helperComponents/Cells/HeaderCell/styles.module.css +10 -1
  33. package/dist/cjs/helperComponents/Cells/StatusCell/styles.module.css +3 -3
  34. package/dist/cjs/helperComponents/Cells/TreeCell/TreeCell.d.ts +1 -1
  35. package/dist/cjs/helperComponents/Cells/TreeCell/TreeCell.js +28 -30
  36. package/dist/cjs/helperComponents/Cells/TreeCell/TreeLine/styles.module.css +2 -2
  37. package/dist/cjs/helperComponents/Cells/TreeCell/styles.module.css +16 -34
  38. package/dist/cjs/helperComponents/Rows/BodyRow.d.ts +3 -2
  39. package/dist/cjs/helperComponents/Rows/BodyRow.js +9 -4
  40. package/dist/cjs/helperComponents/Rows/HeaderRow.d.ts +2 -1
  41. package/dist/cjs/helperComponents/Rows/HeaderRow.js +11 -4
  42. package/dist/cjs/helperComponents/Rows/Row.d.ts +3 -3
  43. package/dist/cjs/helperComponents/Rows/Row.js +4 -2
  44. package/dist/cjs/helperComponents/Rows/styles.module.css +14 -6
  45. package/dist/cjs/helperComponents/TableEmptyState/styles.module.css +1 -1
  46. package/dist/cjs/utils.d.ts +1 -0
  47. package/dist/cjs/utils.js +14 -2
  48. package/dist/esm/components/ServerTable/ServerTable.js +1 -1
  49. package/dist/esm/components/Table/Table.d.ts +1 -1
  50. package/dist/esm/components/Table/Table.js +48 -24
  51. package/dist/esm/components/Table/hooks/useSaveTableSettings/index.d.ts +1 -0
  52. package/dist/esm/components/Table/hooks/useSaveTableSettings/index.js +1 -0
  53. package/dist/esm/components/Table/hooks/useSaveTableSettings/types.d.ts +7 -0
  54. package/dist/esm/components/Table/hooks/useSaveTableSettings/types.js +1 -0
  55. package/dist/esm/components/Table/hooks/useSaveTableSettings/useSaveTableSettings.d.ts +11 -0
  56. package/dist/esm/components/Table/hooks/useSaveTableSettings/useSaveTableSettings.js +26 -0
  57. package/dist/esm/components/Table/hooks/useSaveTableSettings/utils/index.d.ts +2 -0
  58. package/dist/esm/components/Table/hooks/useSaveTableSettings/utils/index.js +2 -0
  59. package/dist/esm/components/Table/hooks/useSaveTableSettings/utils/parser.d.ts +3 -0
  60. package/dist/esm/components/Table/hooks/useSaveTableSettings/utils/parser.js +30 -0
  61. package/dist/esm/components/Table/hooks/useSaveTableSettings/utils/serializer.d.ts +3 -0
  62. package/dist/esm/components/Table/hooks/useSaveTableSettings/utils/serializer.js +34 -0
  63. package/dist/esm/components/Table/hooks/useSaveTableSettings/vallidators.d.ts +3 -0
  64. package/dist/esm/components/Table/hooks/useSaveTableSettings/vallidators.js +2 -0
  65. package/dist/esm/components/Table/hooks/useStateControl.d.ts +1 -4
  66. package/dist/esm/components/Table/hooks/useStateControl.js +7 -9
  67. package/dist/esm/components/Table/styles.module.css +4 -3
  68. package/dist/esm/components/types.d.ts +3 -1
  69. package/dist/esm/constants.d.ts +3 -0
  70. package/dist/esm/constants.js +3 -0
  71. package/dist/esm/helperComponents/Cells/BodyCell/BodyCell.d.ts +2 -1
  72. package/dist/esm/helperComponents/Cells/BodyCell/BodyCell.js +2 -2
  73. package/dist/esm/helperComponents/Cells/BodyCell/styles.module.css +8 -2
  74. package/dist/esm/helperComponents/Cells/CopyCell/CopyCell.js +1 -1
  75. package/dist/esm/helperComponents/Cells/HeaderCell/HeaderCell.d.ts +2 -1
  76. package/dist/esm/helperComponents/Cells/HeaderCell/HeaderCell.js +2 -2
  77. package/dist/esm/helperComponents/Cells/HeaderCell/styles.module.css +10 -1
  78. package/dist/esm/helperComponents/Cells/StatusCell/styles.module.css +3 -3
  79. package/dist/esm/helperComponents/Cells/TreeCell/TreeCell.d.ts +1 -1
  80. package/dist/esm/helperComponents/Cells/TreeCell/TreeCell.js +26 -28
  81. package/dist/esm/helperComponents/Cells/TreeCell/TreeLine/TreeLine.js +2 -2
  82. package/dist/esm/helperComponents/Cells/TreeCell/TreeLine/styles.module.css +2 -2
  83. package/dist/esm/helperComponents/Cells/TreeCell/styles.module.css +16 -34
  84. package/dist/esm/helperComponents/Rows/BodyRow.d.ts +3 -2
  85. package/dist/esm/helperComponents/Rows/BodyRow.js +2 -2
  86. package/dist/esm/helperComponents/Rows/HeaderRow.d.ts +2 -1
  87. package/dist/esm/helperComponents/Rows/HeaderRow.js +2 -2
  88. package/dist/esm/helperComponents/Rows/Row.d.ts +3 -3
  89. package/dist/esm/helperComponents/Rows/Row.js +2 -2
  90. package/dist/esm/helperComponents/Rows/styles.module.css +14 -6
  91. package/dist/esm/helperComponents/TableEmptyState/styles.module.css +1 -1
  92. package/dist/esm/utils.d.ts +1 -0
  93. package/dist/esm/utils.js +10 -0
  94. package/package.json +17 -16
  95. package/src/components/ServerTable/ServerTable.tsx +1 -1
  96. package/src/components/Table/Table.tsx +176 -127
  97. package/src/components/Table/hooks/useSaveTableSettings/index.ts +1 -0
  98. package/src/components/Table/hooks/useSaveTableSettings/types.ts +8 -0
  99. package/src/components/Table/hooks/useSaveTableSettings/useSaveTableSettings.ts +58 -0
  100. package/src/components/Table/hooks/useSaveTableSettings/utils/index.ts +2 -0
  101. package/src/components/Table/hooks/useSaveTableSettings/utils/parser.ts +40 -0
  102. package/src/components/Table/hooks/useSaveTableSettings/utils/serializer.ts +53 -0
  103. package/src/components/Table/hooks/useSaveTableSettings/vallidators.ts +7 -0
  104. package/src/components/Table/hooks/useStateControl.ts +12 -10
  105. package/src/components/Table/styles.module.scss +4 -8
  106. package/src/components/types.ts +5 -1
  107. package/src/constants.tsx +3 -0
  108. package/src/helperComponents/Cells/BodyCell/BodyCell.tsx +3 -1
  109. package/src/helperComponents/Cells/BodyCell/styles.module.scss +6 -1
  110. package/src/helperComponents/Cells/CopyCell/CopyCell.tsx +1 -1
  111. package/src/helperComponents/Cells/CopyCell/styles.module.scss +1 -1
  112. package/src/helperComponents/Cells/HeaderCell/HeaderCell.tsx +8 -2
  113. package/src/helperComponents/Cells/HeaderCell/styles.module.scss +9 -0
  114. package/src/helperComponents/Cells/StatusCell/styles.module.scss +9 -7
  115. package/src/helperComponents/Cells/TreeCell/TreeCell.tsx +51 -42
  116. package/src/helperComponents/Cells/TreeCell/TreeLine/TreeLine.tsx +2 -2
  117. package/src/helperComponents/Cells/TreeCell/TreeLine/styles.module.scss +8 -8
  118. package/src/helperComponents/Cells/TreeCell/styles.module.scss +36 -55
  119. package/src/helperComponents/Rows/BodyRow.tsx +7 -6
  120. package/src/helperComponents/Rows/HeaderRow.tsx +15 -6
  121. package/src/helperComponents/Rows/Row.tsx +10 -3
  122. package/src/helperComponents/Rows/styles.module.scss +30 -19
  123. package/src/helperComponents/TableEmptyState/styles.module.scss +1 -1
  124. package/src/utils.ts +14 -0
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.32.0 (2025-03-03)
7
+
8
+
9
+ ### Features
10
+
11
+ * **PDS-483:** table rowAutoHeight prop, removed default truncate when auto-height enabled ([0da9a86](https://github.com/cloud-ru-tech/snack-uikit/commit/0da9a861737fc35ba873a1795419d49c6cae51d1))
12
+
13
+
14
+
15
+
16
+
6
17
  ## 0.31.1 (2025-03-03)
7
18
 
8
19
  ### Only dependencies have been changed
package/README.md CHANGED
@@ -119,6 +119,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
119
119
  | 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>: Колбэк на выбор строк |
120
120
  | search | `{ initialState?: 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 строки поиска |
121
121
  | enableFuzzySearch | `boolean` | - | Включить нечеткий поиск |
122
+ | rowAutoHeight | `boolean` | - | |
122
123
  | pageSize | `number` | 10 | Максимальное кол-во строк на страницу |
123
124
  | onRowClick | `RowClickHandler<TData>` | - | Колбэк клика по строке |
124
125
  | className | `string` | - | CSS-класс |
@@ -143,7 +144,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
143
144
  | scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
144
145
  | scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
145
146
  | rowPinning | `Pick<RowPinningState, "top">` | { top: [], } | Определение какие строки должны быть закреплены в таблице |
146
- | savedState | `{ id: string; resize?: boolean; }` | - | Конфиг для сохранения состояния в localStorage. <br> Поле id должно быть уникальным для разных таблиц в рамках приложения. <br> Для корректной работы необходимо наличие id в конфиге columnDefinitions |
147
+ | savedState | `{ id: string; filter?: Omit<FilterStateOptions<TFilters>, "filterLocalStorageKey">; resize?: boolean; }` | - | Конфиг для сохранения состояния в localStorage. <br> Поле id должно быть уникальным для разных таблиц в рамках приложения. <br> Для корректной работы необходимо наличие id в конфиге columnDefinitions |
147
148
  | pagination | `{ state?: PaginationState; options?: number[]; optionsLabel?: string; onChange?(state: PaginationState): void; optionsRender?(value: string \| number, idx: number): string \| number; }` | 'Rows volume: ' <br> <strong>onChange</strong>: Колбэк на изменение пагинации | Параметры отвечают за пагинацию в таблице <br> <strong>state</strong>: Состояние строки поиска, жестко устанавливаемое снаружи <br> <strong>options</strong>: Варианты в выпадающем селекторе для установки кол-ва строк на страницу <br> <strong>optionsLabel</strong>: Текст для селектора кол-ва строк на страницу |
148
149
  | autoResetPageIndex | `boolean` | - | Автоматический сброс пагинации к первой странице при изменении данных или состояния (e.g фильтры, сортировки, и т.д) |
149
150
  | pageCount | `number` | - | Кол-во страниц (используется для внешнего управления) |
@@ -187,6 +188,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
187
188
  | expanding | `{ getSubRows: (element: TData) => TData[]; expandingColumnDefinition: TreeColumnDefinitionProps<TData>; }` | - | Параметр отвечает за общие настройки раскрывающихся строк |
188
189
  | 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>: Колбэк на выбор строк |
189
190
  | enableFuzzySearch | `boolean` | - | Включить нечеткий поиск |
191
+ | rowAutoHeight | `boolean` | - | |
190
192
  | onRowClick | `RowClickHandler<TData>` | - | Колбэк клика по строке |
191
193
  | className | `string` | - | CSS-класс |
192
194
  | loading | `boolean` | - | Состояние загрузки |
@@ -207,7 +209,7 @@ const columnDefinitions: ColumnDefinition<TableData>[] = [
207
209
  | scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
208
210
  | scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
209
211
  | rowPinning | `Pick<RowPinningState, "top">` | - | Определение какие строки должны быть закреплены в таблице |
210
- | savedState | `{ id: string; resize?: boolean; }` | - | Конфиг для сохранения состояния в localStorage. <br> Поле id должно быть уникальным для разных таблиц в рамках приложения. <br> Для корректной работы необходимо наличие id в конфиге columnDefinitions |
212
+ | savedState | `{ id: string; filter?: Omit<FilterStateOptions<TFilters>, "filterLocalStorageKey">; resize?: boolean; }` | - | Конфиг для сохранения состояния в localStorage. <br> Поле id должно быть уникальным для разных таблиц в рамках приложения. <br> Для корректной работы необходимо наличие id в конфиге columnDefinitions |
211
213
  | autoResetPageIndex | `boolean` | - | Автоматический сброс пагинации к первой странице при изменении данных или состояния (e.g фильтры, сортировки, и т.д) |
212
214
  | suppressPagination | `boolean` | - | Отключение пагинации |
213
215
  | manualPagination | `boolean` | true | |
@@ -34,10 +34,7 @@ function ServerTable(_a) {
34
34
  manualFiltering = true
35
35
  } = _a,
36
36
  rest = __rest(_a, ["items", "total", "limit", "offset", "onChangePage", "search", "pagination", "columnFilters", "manualSorting", "manualPagination", "manualFiltering"]);
37
- const {
38
- state: search,
39
- onStateChange: setSearch
40
- } = (0, hooks_1.useStateControl)(searchProp, '');
37
+ const [search, setSearch] = (0, hooks_1.useStateControl)(searchProp, '');
41
38
  const [tempSearch, setTempSearch] = (0, react_1.useState)(search || '');
42
39
  (0, react_1.useEffect)(() => {
43
40
  var _a;
@@ -1,7 +1,7 @@
1
1
  import { FiltersState } from '@snack-uikit/chips';
2
2
  import { TableProps } from '../types';
3
3
  /** Компонент таблицы */
4
- export declare function Table<TData extends object, TFilters extends FiltersState = Record<string, unknown>>({ data, rowPinning, columnDefinitions, keepPinnedRows, copyPinnedRows, enableSelectPinned, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, pageSize, pageCount, loading, infiniteLoading, outline, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar, suppressSearch, toolbarAfter, suppressPagination, manualSorting, manualPagination: manualPaginationProp, manualFiltering, autoResetPageIndex, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, expanding, bulkActions: bulkActionsProp, ...rest }: TableProps<TData, TFilters>): import("react/jsx-runtime").JSX.Element;
4
+ export declare function Table<TData extends object, TFilters extends FiltersState = Record<string, unknown>>({ data, rowPinning, columnDefinitions, keepPinnedRows, copyPinnedRows, enableSelectPinned, rowSelection: rowSelectionProp, search, sorting: sortingProp, columnFilters, pagination: paginationProp, className, onRowClick, onRefresh, pageSize, pageCount, loading, infiniteLoading, outline, moreActions, exportSettings, dataFiltered, dataError, noDataState, noResultsState, errorDataState, suppressToolbar, suppressSearch, toolbarAfter, suppressPagination, manualSorting, manualPagination: manualPaginationProp, manualFiltering, autoResetPageIndex, scrollRef, scrollContainerRef, getRowId, enableFuzzySearch, savedState, expanding, bulkActions: bulkActionsProp, rowAutoHeight, ...rest }: TableProps<TData, TFilters>): import("react/jsx-runtime").JSX.Element;
5
5
  export declare namespace Table {
6
6
  var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
7
7
  var statusAppearances: Record<string, string>;
@@ -34,6 +34,7 @@ const TreeCell_1 = require("../../helperComponents/Cells/TreeCell");
34
34
  const utils_2 = require("../../utils");
35
35
  const hooks_1 = require("./hooks");
36
36
  const usePageReset_1 = require("./hooks/usePageReset");
37
+ const useSaveTableSettings_1 = require("./hooks/useSaveTableSettings");
37
38
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
38
39
  const utils_3 = require("./utils");
39
40
  /** Компонент таблицы */
@@ -81,29 +82,57 @@ function Table(_a) {
81
82
  enableFuzzySearch,
82
83
  savedState,
83
84
  expanding,
84
- bulkActions: bulkActionsProp
85
+ bulkActions: bulkActionsProp,
86
+ rowAutoHeight
85
87
  } = _a,
86
- rest = __rest(_a, ["data", "rowPinning", "columnDefinitions", "keepPinnedRows", "copyPinnedRows", "enableSelectPinned", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "pageSize", "pageCount", "loading", "infiniteLoading", "outline", "moreActions", "exportSettings", "dataFiltered", "dataError", "noDataState", "noResultsState", "errorDataState", "suppressToolbar", "suppressSearch", "toolbarAfter", "suppressPagination", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "scrollRef", "scrollContainerRef", "getRowId", "enableFuzzySearch", "savedState", "expanding", "bulkActions"]);
88
+ rest = __rest(_a, ["data", "rowPinning", "columnDefinitions", "keepPinnedRows", "copyPinnedRows", "enableSelectPinned", "rowSelection", "search", "sorting", "columnFilters", "pagination", "className", "onRowClick", "onRefresh", "pageSize", "pageCount", "loading", "infiniteLoading", "outline", "moreActions", "exportSettings", "dataFiltered", "dataError", "noDataState", "noResultsState", "errorDataState", "suppressToolbar", "suppressSearch", "toolbarAfter", "suppressPagination", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "scrollRef", "scrollContainerRef", "getRowId", "enableFuzzySearch", "savedState", "expanding", "bulkActions", "rowAutoHeight"]);
87
89
  const {
88
- state: globalFilter,
89
- onStateChange: onGlobalFilterChange
90
- } = (0, hooks_1.useStateControl)(search, '');
91
- const {
92
- state: rowSelection,
93
- onStateChange: onRowSelectionChange
94
- } = (0, hooks_1.useStateControl)(rowSelectionProp, {});
90
+ setDataToStorages,
91
+ defaultFilter
92
+ } = (0, useSaveTableSettings_1.useSaveTableSettings)({
93
+ options: savedState
94
+ });
95
+ const [globalFilter, onGlobalFilterChange] = (0, hooks_1.useStateControl)(search, '');
96
+ const [rowSelection, onRowSelectionChange] = (0, hooks_1.useStateControl)(rowSelectionProp, constants_1.DEFAULT_ROW_SELECTION);
95
97
  const defaultPaginationState = (0, react_1.useMemo)(() => ({
96
98
  pageIndex: 0,
97
99
  pageSize
98
100
  }), [pageSize]);
99
- const {
100
- state: sorting,
101
- onStateChange: onSortingChange
102
- } = (0, hooks_1.useStateControl)(sortingProp, []);
103
- const {
104
- state: pagination,
105
- onStateChange: onPaginationChange
106
- } = (0, hooks_1.useStateControl)(paginationProp, defaultPaginationState);
101
+ const [sorting, onSortingChange] = (0, hooks_1.useStateControl)(sortingProp, constants_1.DEFAULT_SORTING);
102
+ const [pagination, onPaginationChange] = (0, hooks_1.useStateControl)(paginationProp, defaultPaginationState);
103
+ const [filter, setFilter] = (0, hooks_1.useStateControl)({
104
+ state: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.value,
105
+ initialState: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.defaultValue,
106
+ onChange: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.onChange
107
+ }, undefined);
108
+ const [filterVisibility, setFilterVisibility] = (0, hooks_1.useStateControl)({
109
+ state: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.visibleFilters,
110
+ initialState: [],
111
+ onChange: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.onVisibleFiltersChange
112
+ }, constants_1.DEFAULT_FILTER_VISIBILITY);
113
+ (0, react_1.useEffect)(() => {
114
+ setDataToStorages({
115
+ pagination,
116
+ sorting,
117
+ filter,
118
+ search: (search === null || search === void 0 ? void 0 : search.state) || ''
119
+ });
120
+ }, [pagination, sorting, globalFilter, filter, setDataToStorages, search === null || search === void 0 ? void 0 : search.state]);
121
+ (0, utils_1.useLayoutEffect)(() => {
122
+ if (defaultFilter) {
123
+ defaultFilter.pagination && onPaginationChange(defaultFilter.pagination);
124
+ defaultFilter.search && onGlobalFilterChange(defaultFilter.search);
125
+ defaultFilter.sorting && onSortingChange(defaultFilter.sorting);
126
+ defaultFilter.filter && setFilter((0, utils_2.customDateParser)(defaultFilter.filter));
127
+ defaultFilter.filter && setFilterVisibility(Object.keys(defaultFilter.filter));
128
+ }
129
+ }, [defaultFilter, onGlobalFilterChange, onPaginationChange, onSortingChange, setFilter, setFilterVisibility]);
130
+ const patchedFilter = (0, react_1.useMemo)(() => columnFilters ? Object.assign(Object.assign({}, columnFilters), {
131
+ value: filter,
132
+ onChange: setFilter,
133
+ visibleFilters: filterVisibility,
134
+ onVisibleFiltersChange: setFilterVisibility
135
+ }) : undefined, [columnFilters, filter, setFilter, filterVisibility, setFilterVisibility]);
107
136
  const enableSelection = Boolean(rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable);
108
137
  const manualPagination = infiniteLoading || manualPaginationProp;
109
138
  const tableColumns = (0, react_1.useMemo)(() => {
@@ -157,10 +186,15 @@ function Table(_a) {
157
186
  enableSorting: false,
158
187
  enableResizing: false,
159
188
  minSize: 40,
160
- cell: cell => (0, jsx_runtime_1.jsx)(truncate_string_1.TruncateString, {
161
- text: String(cell.getValue()),
162
- maxLines: 1
163
- })
189
+ cell: cell => {
190
+ if (rowAutoHeight) {
191
+ return cell.getValue();
192
+ }
193
+ return (0, jsx_runtime_1.jsx)(truncate_string_1.TruncateString, {
194
+ text: String(cell.getValue()),
195
+ maxLines: 1
196
+ });
197
+ }
164
198
  },
165
199
  manualSorting,
166
200
  manualPagination,
@@ -311,7 +345,6 @@ function Table(_a) {
311
345
  const tableFilteredRowsIds = tableFilteredRows.map(row => row.id);
312
346
  const topRows = table.getTopRows();
313
347
  const loadingTableRows = loadingTable.getRowModel().rows;
314
- const tablePagination = table.getState().pagination;
315
348
  const filteredTopRows = table.getState().globalFilter ? topRows.filter(tr => tableFilteredRowsIds.includes(tr.id)) : topRows;
316
349
  const centerRows = copyPinnedRows ? tableRows : tableCenterRows;
317
350
  const {
@@ -322,10 +355,6 @@ function Table(_a) {
322
355
  noResultsState,
323
356
  errorDataState
324
357
  });
325
- const cssPageSize = (0, react_1.useMemo)(() => {
326
- const tempPageSize = (!suppressPagination ? tablePagination === null || tablePagination === void 0 ? void 0 : tablePagination.pageSize : pageSize) + filteredTopRows.length;
327
- return !tableRows.length ? Math.min(Math.max(tempPageSize, 5), constants_1.DEFAULT_PAGE_SIZE) : tempPageSize;
328
- }, [filteredTopRows.length, pageSize, suppressPagination, tablePagination === null || tablePagination === void 0 ? void 0 : tablePagination.pageSize, tableRows.length]);
329
358
  (0, usePageReset_1.usePageReset)({
330
359
  manualPagination,
331
360
  maximumAvailablePage: pageCount || tableFilteredRows.length / pagination.pageSize,
@@ -337,102 +366,101 @@ function Table(_a) {
337
366
  updateCellMap
338
367
  } = (0, contexts_1.useCellAutoResizeController)(table);
339
368
  const showToolbar = !suppressToolbar;
340
- return (0, jsx_runtime_1.jsx)(contexts_1.CellAutoResizeContext.Provider, {
341
- value: {
342
- updateCellMap
343
- },
344
- children: (0, jsx_runtime_1.jsxs)("div", Object.assign({
345
- style: {
346
- '--page-size': cssPageSize
347
- },
348
- className: (0, classnames_1.default)(styles_module_scss_1.default.wrapper, className)
349
- }, (0, utils_1.extractSupportProps)(rest), {
350
- children: [showToolbar && (0, jsx_runtime_1.jsx)("div", {
351
- className: styles_module_scss_1.default.header,
352
- children: (0, jsx_runtime_1.jsx)(toolbar_1.Toolbar, {
353
- search: suppressSearch ? undefined : {
354
- value: globalFilter,
355
- onChange: onGlobalFilterChange,
356
- loading: search === null || search === void 0 ? void 0 : search.loading,
357
- placeholder: (search === null || search === void 0 ? void 0 : search.placeholder) || t('searchPlaceholder')
369
+ return (0, jsx_runtime_1.jsxs)("div", Object.assign({
370
+ className: (0, classnames_1.default)(styles_module_scss_1.default.wrapper, className)
371
+ }, (0, utils_1.extractSupportProps)(rest), {
372
+ children: [showToolbar && (0, jsx_runtime_1.jsx)("div", {
373
+ className: styles_module_scss_1.default.header,
374
+ children: (0, jsx_runtime_1.jsx)(toolbar_1.Toolbar, {
375
+ search: suppressSearch ? undefined : {
376
+ value: globalFilter,
377
+ onChange: onGlobalFilterChange,
378
+ loading: search === null || search === void 0 ? void 0 : search.loading,
379
+ placeholder: (search === null || search === void 0 ? void 0 : search.placeholder) || t('searchPlaceholder')
380
+ },
381
+ className: styles_module_scss_1.default.toolbar,
382
+ onRefresh: onRefresh ? handleOnRefresh : undefined,
383
+ bulkActions: bulkActions,
384
+ selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single',
385
+ checked: table.getIsAllPageRowsSelected(),
386
+ indeterminate: table.getIsSomePageRowsSelected(),
387
+ onCheck: enableSelection ? handleOnToolbarCheck : undefined,
388
+ outline: outline,
389
+ after: toolbarAfter || exportSettings ? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
390
+ children: [toolbarAfter, exportSettings && (0, jsx_runtime_1.jsx)(helperComponents_1.ExportButton, {
391
+ settings: exportSettings,
392
+ columnDefinitions: columnDefinitions,
393
+ data: data,
394
+ topRows: filteredTopRows,
395
+ centerRows: centerRows
396
+ })]
397
+ }) : undefined,
398
+ moreActions: moreActions,
399
+ filterRow: patchedFilter,
400
+ "data-test-id": constants_1.TEST_IDS.toolbar
401
+ })
402
+ }), (0, jsx_runtime_1.jsxs)(scroll_1.Scroll, {
403
+ size: 's',
404
+ className: styles_module_scss_1.default.table,
405
+ ref: scrollContainerRef,
406
+ "data-outline": outline || undefined,
407
+ children: [(0, jsx_runtime_1.jsx)("div", {
408
+ className: styles_module_scss_1.default.tableContent,
409
+ style: columnSizes.vars,
410
+ children: (0, jsx_runtime_1.jsx)(contexts_1.CellAutoResizeContext.Provider, {
411
+ value: {
412
+ updateCellMap
358
413
  },
359
- className: styles_module_scss_1.default.toolbar,
360
- onRefresh: onRefresh ? handleOnRefresh : undefined,
361
- bulkActions: bulkActions,
362
- selectionMode: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow) ? 'multiple' : 'single',
363
- checked: table.getIsAllPageRowsSelected(),
364
- indeterminate: table.getIsSomePageRowsSelected(),
365
- onCheck: enableSelection ? handleOnToolbarCheck : undefined,
366
- outline: outline,
367
- after: toolbarAfter || exportSettings ? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
368
- children: [toolbarAfter, exportSettings && (0, jsx_runtime_1.jsx)(helperComponents_1.ExportButton, {
369
- settings: exportSettings,
370
- columnDefinitions: columnDefinitions,
371
- data: data,
372
- topRows: filteredTopRows,
373
- centerRows: centerRows
374
- })]
375
- }) : undefined,
376
- moreActions: moreActions,
377
- filterRow: columnFilters,
378
- "data-test-id": constants_1.TEST_IDS.toolbar
379
- })
380
- }), (0, jsx_runtime_1.jsx)("div", {
381
- className: styles_module_scss_1.default.scrollWrapper,
382
- "data-outline": outline || undefined,
383
- children: (0, jsx_runtime_1.jsxs)(scroll_1.Scroll, {
384
- size: 's',
385
- className: styles_module_scss_1.default.table,
386
- ref: scrollContainerRef,
387
- children: [(0, jsx_runtime_1.jsx)("div", {
388
- className: styles_module_scss_1.default.tableContent,
389
- style: columnSizes.vars,
390
- children: (0, jsx_runtime_1.jsx)(helperComponents_1.TableContext.Provider, {
391
- value: {
392
- table
393
- },
394
- children: (!infiniteLoading || !data.length) && loading ? (0, jsx_runtime_1.jsxs)(skeleton_1.SkeletonContextProvider, {
414
+ children: (0, jsx_runtime_1.jsx)(helperComponents_1.TableContext.Provider, {
415
+ value: {
416
+ table
417
+ },
418
+ children: (!infiniteLoading || !data.length) && loading ? (0, jsx_runtime_1.jsxs)(skeleton_1.SkeletonContextProvider, {
419
+ loading: true,
420
+ children: [(0, jsx_runtime_1.jsx)(helperComponents_1.HeaderRow, {
421
+ rowAutoHeight: rowAutoHeight
422
+ }), loadingTableRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
423
+ row: row,
424
+ rowAutoHeight: rowAutoHeight
425
+ }, row.id))]
426
+ }) : (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
427
+ children: [centerRows.length || filteredTopRows.length ? (0, jsx_runtime_1.jsx)(helperComponents_1.HeaderRow, {}) : null, filteredTopRows.length ? (0, jsx_runtime_1.jsx)("div", {
428
+ className: styles_module_scss_1.default.topRowWrapper,
429
+ children: filteredTopRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
430
+ row: row,
431
+ onRowClick: onRowClick,
432
+ rowAutoHeight: rowAutoHeight
433
+ }, row.id))
434
+ }) : null, centerRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
435
+ row: row,
436
+ onRowClick: onRowClick,
437
+ rowAutoHeight: rowAutoHeight
438
+ }, row.id)), data.length > 0 && infiniteLoading && loading && !dataError && (0, jsx_runtime_1.jsx)(skeleton_1.SkeletonContextProvider, {
395
439
  loading: true,
396
- children: [(0, jsx_runtime_1.jsx)(helperComponents_1.HeaderRow, {}), loadingTableRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
440
+ children: loadingTableRows.slice(0, 3).map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
397
441
  row: row
398
- }, row.id))]
399
- }) : (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, {
400
- children: [centerRows.length || filteredTopRows.length ? (0, jsx_runtime_1.jsx)(helperComponents_1.HeaderRow, {}) : null, filteredTopRows.length ? (0, jsx_runtime_1.jsx)("div", {
401
- className: styles_module_scss_1.default.topRowWrapper,
402
- children: filteredTopRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
403
- row: row,
404
- onRowClick: onRowClick
405
- }, row.id))
406
- }) : null, centerRows.map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
407
- row: row,
408
- onRowClick: onRowClick
409
- }, row.id)), data.length > 0 && infiniteLoading && loading && (0, jsx_runtime_1.jsx)(skeleton_1.SkeletonContextProvider, {
410
- loading: true,
411
- children: loadingTableRows.slice(0, 3).map(row => (0, jsx_runtime_1.jsx)(helperComponents_1.BodyRow, {
412
- row: row
413
- }, row.id))
414
- }), (0, jsx_runtime_1.jsx)(helperComponents_1.TableEmptyState, {
415
- emptyStates: emptyStates,
416
- dataError: dataError,
417
- dataFiltered: dataFiltered || Boolean(table.getState().globalFilter),
418
- tableRowsLength: tableRows.length + filteredTopRows.length
419
- })]
420
- })
442
+ }, row.id))
443
+ }), (0, jsx_runtime_1.jsx)(helperComponents_1.TableEmptyState, {
444
+ emptyStates: emptyStates,
445
+ dataError: dataError,
446
+ dataFiltered: dataFiltered || Boolean(table.getState().globalFilter),
447
+ tableRowsLength: tableRows.length + filteredTopRows.length
448
+ })]
421
449
  })
422
- }), (0, jsx_runtime_1.jsx)("div", {
423
- className: styles_module_scss_1.default.scrollStub,
424
- ref: scrollRef
425
- })]
450
+ })
426
451
  })
427
- }), !infiniteLoading && !suppressPagination && (0, jsx_runtime_1.jsx)(helperComponents_1.TablePagination, {
428
- table: table,
429
- options: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.options,
430
- optionsLabel: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsLabel,
431
- pageCount: pageCount,
432
- optionsRender: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsRender
452
+ }), (0, jsx_runtime_1.jsx)("div", {
453
+ className: styles_module_scss_1.default.scrollStub,
454
+ ref: scrollRef
433
455
  })]
434
- }))
435
- });
456
+ }), !infiniteLoading && !suppressPagination && (0, jsx_runtime_1.jsx)(helperComponents_1.TablePagination, {
457
+ table: table,
458
+ options: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.options,
459
+ optionsLabel: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsLabel,
460
+ pageCount: pageCount,
461
+ optionsRender: paginationProp === null || paginationProp === void 0 ? void 0 : paginationProp.optionsRender
462
+ })]
463
+ }));
436
464
  }
437
465
  Table.getStatusColumnDef = helperComponents_1.getStatusColumnDef;
438
466
  Table.statusAppearances = helperComponents_1.STATUS_APPEARANCE;
@@ -0,0 +1 @@
1
+ export * from './useSaveTableSettings';
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = {
8
+ enumerable: true,
9
+ get: function () {
10
+ return m[k];
11
+ }
12
+ };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ } : function (o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ });
19
+ var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", {
23
+ value: true
24
+ });
25
+ __exportStar(require("./useSaveTableSettings"), exports);
@@ -0,0 +1,7 @@
1
+ import { PaginationState, SortingState } from '@tanstack/react-table';
2
+ export type Settings<TFilter> = {
3
+ filter?: TFilter;
4
+ pagination: PaginationState;
5
+ search: string;
6
+ sorting: SortingState;
7
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,11 @@
1
+ import { FiltersState } from '@snack-uikit/chips';
2
+ import { TableProps } from '../../../types';
3
+ import { Settings } from './types';
4
+ type TableSettings<TFilter extends FiltersState = Record<string, unknown>> = {
5
+ options?: TableProps<TFilter>['savedState'];
6
+ };
7
+ export declare const useSaveTableSettings: <TFilter extends FiltersState = Record<string, unknown>>({ options, }: TableSettings<TFilter>) => {
8
+ defaultFilter: Settings<TFilter> | null | undefined;
9
+ setDataToStorages: (data: Settings<TFilter>) => void;
10
+ };
11
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSaveTableSettings = void 0;
7
+ const react_1 = require("react");
8
+ const utils_1 = require("@snack-uikit/utils");
9
+ const utils_2 = require("./utils");
10
+ const vallidators_1 = require("./vallidators");
11
+ const useSaveTableSettings = _ref => {
12
+ let {
13
+ options
14
+ } = _ref;
15
+ const saveFilterOptions = (0, react_1.useMemo)(() => (options === null || options === void 0 ? void 0 : options.filter) ? Object.assign(Object.assign({}, options.filter), {
16
+ filterLocalStorageKey: `${options.id}__filterState`
17
+ }) : undefined, [options]);
18
+ const validate = (0, react_1.useCallback)(data => {
19
+ const isPaginationValid = (0, vallidators_1.validatePaging)(data === null || data === void 0 ? void 0 : data.pagination);
20
+ const isSortingValid = (0, vallidators_1.validateSorting)(data === null || data === void 0 ? void 0 : data.sorting);
21
+ const isSearchValid = typeof (data === null || data === void 0 ? void 0 : data.search) === 'string';
22
+ const isFilterValid = Boolean(saveFilterOptions === null || saveFilterOptions === void 0 ? void 0 : saveFilterOptions.validateData(data === null || data === void 0 ? void 0 : data.filter));
23
+ return isPaginationValid && isSortingValid && isSearchValid && isFilterValid;
24
+ }, [saveFilterOptions]);
25
+ const filterStateOptions = (0, react_1.useMemo)(() => saveFilterOptions ? Object.assign(Object.assign({}, saveFilterOptions), {
26
+ validateData: validate
27
+ }) : undefined, [saveFilterOptions, validate]);
28
+ const {
29
+ getDefaultFilter,
30
+ setDataToStorages
31
+ } = (0, utils_1.useSaveFilterState)({
32
+ options: filterStateOptions,
33
+ serializer: utils_2.serializer,
34
+ parser: utils_2.parser
35
+ });
36
+ const defaultFilter = (0, react_1.useMemo)(getDefaultFilter, [getDefaultFilter]);
37
+ return {
38
+ defaultFilter,
39
+ setDataToStorages
40
+ };
41
+ };
42
+ exports.useSaveTableSettings = useSaveTableSettings;
@@ -0,0 +1,2 @@
1
+ export * from './serializer';
2
+ export * from './parser';
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = {
8
+ enumerable: true,
9
+ get: function () {
10
+ return m[k];
11
+ }
12
+ };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ } : function (o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ });
19
+ var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", {
23
+ value: true
24
+ });
25
+ __exportStar(require("./serializer"), exports);
26
+ __exportStar(require("./parser"), exports);
@@ -0,0 +1,3 @@
1
+ import { FiltersState } from '@snack-uikit/chips';
2
+ import { Settings } from '../types';
3
+ export declare const parser: <TFilter extends FiltersState = Record<string, unknown>>(value: string) => Settings<TFilter>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parser = void 0;
7
+ const ft_request_payload_transform_1 = require("@cloud-ru/ft-request-payload-transform");
8
+ const constants_1 = require("../../../../../constants");
9
+ const mapPagination = value => {
10
+ if (!value || !value.offset || !value.limit) return {
11
+ pageSize: constants_1.DEFAULT_PAGE_SIZE,
12
+ pageIndex: 0
13
+ };
14
+ return {
15
+ pageSize: value.limit || constants_1.DEFAULT_PAGE_SIZE,
16
+ pageIndex: Math.floor(value.offset / value.limit)
17
+ };
18
+ };
19
+ const mapSort = function () {
20
+ let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
21
+ return value.map(column => ({
22
+ id: column.field,
23
+ desc: column.direction === 'd'
24
+ }));
25
+ };
26
+ const mapFilter = value => {
27
+ if (!value) {
28
+ return undefined;
29
+ }
30
+ return Object.fromEntries(value.map(filter => [filter.field, filter.value]));
31
+ };
32
+ const parser = value => {
33
+ var _a;
34
+ const parsedValue = (0, ft_request_payload_transform_1.parseQueryParamsString)(value);
35
+ return {
36
+ pagination: mapPagination(parsedValue === null || parsedValue === void 0 ? void 0 : parsedValue.pagination),
37
+ search: ((_a = parsedValue === null || parsedValue === void 0 ? void 0 : parsedValue.search) === null || _a === void 0 ? void 0 : _a.toString()) || '',
38
+ sorting: mapSort(parsedValue === null || parsedValue === void 0 ? void 0 : parsedValue.sort),
39
+ filter: mapFilter(parsedValue === null || parsedValue === void 0 ? void 0 : parsedValue.filter)
40
+ };
41
+ };
42
+ exports.parser = parser;
@@ -0,0 +1,3 @@
1
+ import { FiltersState } from '@snack-uikit/chips';
2
+ import { Settings } from '../types';
3
+ export declare const serializer: <TFilter extends FiltersState = Record<string, unknown>>(value: Settings<TFilter>) => string;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.serializer = void 0;
7
+ const ft_request_payload_transform_1 = require("@cloud-ru/ft-request-payload-transform");
8
+ const mapPagination = value => ({
9
+ limit: value.pageSize,
10
+ offset: value.pageSize * value.pageIndex
11
+ });
12
+ const mapSort = value => value.map(column => ({
13
+ field: column.id,
14
+ direction: column.desc ? 'd' : 'a'
15
+ }));
16
+ const mapDateToString = filter => filter instanceof Date ? filter.toISOString() : filter;
17
+ const mapFilter = value => {
18
+ if (!value) {
19
+ return undefined;
20
+ }
21
+ return Object.entries(value).filter(_ref => {
22
+ let [_, value] = _ref;
23
+ return value !== undefined;
24
+ }).map(_ref2 => {
25
+ let [key, value] = _ref2;
26
+ return Array.isArray(value) ? {
27
+ value: value.map(mapDateToString),
28
+ condition: 'in',
29
+ field: key
30
+ } : {
31
+ value: mapDateToString(value),
32
+ condition: 'eq',
33
+ field: key
34
+ };
35
+ });
36
+ };
37
+ const serializer = value => (0, ft_request_payload_transform_1.createRequestPayload)({
38
+ pagination: mapPagination(value.pagination),
39
+ search: value.search,
40
+ sort: mapSort(value.sorting),
41
+ filter: mapFilter(value.filter)
42
+ }).toString();
43
+ exports.serializer = serializer;