@cloud-ru/uikit-product-mobile-table 0.16.3 → 1.0.1-preview-b95fca4e.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 (112) hide show
  1. package/CHANGELOG.md +22 -11
  2. package/dist/cjs/components/AdaptiveServerTable/AdaptiveServerTable.js +7 -6
  3. package/dist/{esm/components → cjs/components/AdaptiveServerTable}/constants.d.ts +0 -1
  4. package/dist/cjs/components/{constants.js → AdaptiveServerTable/constants.js} +1 -2
  5. package/dist/cjs/components/{utils.d.ts → AdaptiveServerTable/utils.d.ts} +0 -2
  6. package/dist/cjs/components/{utils.js → AdaptiveServerTable/utils.js} +1 -11
  7. package/dist/cjs/components/MobileTable/MobileTable.d.ts +7 -0
  8. package/dist/cjs/components/{MobileTable.js → MobileTable/MobileTable.js} +33 -10
  9. package/dist/cjs/components/MobileTable/hooks/index.d.ts +2 -0
  10. package/dist/cjs/components/MobileTable/hooks/index.js +18 -0
  11. package/dist/cjs/components/MobileTable/hooks/useFilters/index.d.ts +1 -0
  12. package/dist/cjs/components/MobileTable/hooks/useFilters/index.js +17 -0
  13. package/dist/cjs/components/MobileTable/hooks/useFilters/useFilters.d.ts +78 -0
  14. package/dist/cjs/components/MobileTable/hooks/useFilters/useFilters.js +31 -0
  15. package/dist/cjs/components/MobileTable/hooks/useFilters/utils/getInitialColumnsFiltersOpenValue.d.ts +2 -0
  16. package/dist/cjs/components/MobileTable/hooks/useFilters/utils/getInitialColumnsFiltersOpenValue.js +11 -0
  17. package/dist/cjs/components/MobileTable/hooks/useFilters/utils/index.d.ts +1 -0
  18. package/dist/cjs/components/MobileTable/hooks/useFilters/utils/index.js +17 -0
  19. package/dist/cjs/components/{hooks.d.ts → MobileTable/hooks/useLoadingTable.d.ts} +0 -8
  20. package/dist/cjs/components/{hooks.js → MobileTable/hooks/useLoadingTable.js} +1 -15
  21. package/dist/cjs/components/MobileTable/index.d.ts +3 -0
  22. package/dist/cjs/components/MobileTable/index.js +21 -0
  23. package/dist/cjs/components/MobileTable/types.d.ts +11 -0
  24. package/dist/cjs/components/MobileTable/types.js +2 -0
  25. package/dist/cjs/components/MobileTable/utils/fuzzyFilter.d.ts +2 -0
  26. package/dist/cjs/components/MobileTable/utils/fuzzyFilter.js +13 -0
  27. package/dist/cjs/components/MobileTable/utils/index.d.ts +2 -0
  28. package/dist/cjs/components/MobileTable/utils/index.js +18 -0
  29. package/dist/cjs/components/MobileTable/utils/saveTableState/getPersistedStateValidator.d.ts +4 -0
  30. package/dist/cjs/components/MobileTable/utils/saveTableState/getPersistedStateValidator.js +13 -0
  31. package/dist/cjs/components/MobileTable/utils/saveTableState/index.d.ts +3 -0
  32. package/dist/cjs/components/MobileTable/utils/saveTableState/index.js +19 -0
  33. package/dist/cjs/components/MobileTable/utils/saveTableState/mappers.d.ts +18 -0
  34. package/dist/cjs/components/MobileTable/utils/saveTableState/mappers.js +45 -0
  35. package/dist/cjs/components/MobileTable/utils/saveTableState/validators.d.ts +5 -0
  36. package/dist/cjs/components/MobileTable/utils/saveTableState/validators.js +13 -0
  37. package/dist/cjs/constants.d.ts +1 -0
  38. package/dist/cjs/constants.js +2 -1
  39. package/dist/cjs/index.d.ts +1 -0
  40. package/dist/cjs/index.js +1 -0
  41. package/dist/esm/components/AdaptiveServerTable/AdaptiveServerTable.js +5 -4
  42. package/dist/{cjs/components → esm/components/AdaptiveServerTable}/constants.d.ts +0 -1
  43. package/dist/esm/components/{constants.js → AdaptiveServerTable/constants.js} +0 -1
  44. package/dist/esm/components/{utils.d.ts → AdaptiveServerTable/utils.d.ts} +0 -2
  45. package/dist/esm/components/AdaptiveServerTable/utils.js +5 -0
  46. package/dist/esm/components/MobileTable/MobileTable.d.ts +7 -0
  47. package/dist/esm/components/{MobileTable.js → MobileTable/MobileTable.js} +33 -10
  48. package/dist/esm/components/MobileTable/hooks/index.d.ts +2 -0
  49. package/dist/esm/components/MobileTable/hooks/index.js +2 -0
  50. package/dist/esm/components/MobileTable/hooks/useFilters/index.d.ts +1 -0
  51. package/dist/esm/components/MobileTable/hooks/useFilters/index.js +1 -0
  52. package/dist/esm/components/MobileTable/hooks/useFilters/useFilters.d.ts +78 -0
  53. package/dist/esm/components/MobileTable/hooks/useFilters/useFilters.js +28 -0
  54. package/dist/esm/components/MobileTable/hooks/useFilters/utils/getInitialColumnsFiltersOpenValue.d.ts +2 -0
  55. package/dist/esm/components/MobileTable/hooks/useFilters/utils/getInitialColumnsFiltersOpenValue.js +8 -0
  56. package/dist/esm/components/MobileTable/hooks/useFilters/utils/index.d.ts +1 -0
  57. package/dist/esm/components/MobileTable/hooks/useFilters/utils/index.js +1 -0
  58. package/dist/esm/components/{hooks.d.ts → MobileTable/hooks/useLoadingTable.d.ts} +0 -8
  59. package/dist/esm/components/MobileTable/hooks/useLoadingTable.js +17 -0
  60. package/dist/esm/components/MobileTable/index.d.ts +3 -0
  61. package/dist/esm/components/MobileTable/index.js +3 -0
  62. package/dist/esm/components/MobileTable/types.d.ts +11 -0
  63. package/dist/esm/components/MobileTable/types.js +1 -0
  64. package/dist/esm/components/MobileTable/utils/fuzzyFilter.d.ts +2 -0
  65. package/dist/esm/components/{utils.js → MobileTable/utils/fuzzyFilter.js} +0 -5
  66. package/dist/esm/components/MobileTable/utils/index.d.ts +2 -0
  67. package/dist/esm/components/MobileTable/utils/index.js +2 -0
  68. package/dist/esm/components/MobileTable/utils/saveTableState/getPersistedStateValidator.d.ts +4 -0
  69. package/dist/esm/components/MobileTable/utils/saveTableState/getPersistedStateValidator.js +9 -0
  70. package/dist/esm/components/MobileTable/utils/saveTableState/index.d.ts +3 -0
  71. package/dist/esm/components/MobileTable/utils/saveTableState/index.js +3 -0
  72. package/dist/esm/components/MobileTable/utils/saveTableState/mappers.d.ts +18 -0
  73. package/dist/esm/components/MobileTable/utils/saveTableState/mappers.js +37 -0
  74. package/dist/esm/components/MobileTable/utils/saveTableState/validators.d.ts +5 -0
  75. package/dist/esm/components/MobileTable/utils/saveTableState/validators.js +7 -0
  76. package/dist/esm/constants.d.ts +1 -0
  77. package/dist/esm/constants.js +1 -0
  78. package/dist/esm/index.d.ts +1 -0
  79. package/dist/esm/index.js +1 -0
  80. package/package.json +12 -9
  81. package/src/components/AdaptiveServerTable/AdaptiveServerTable.tsx +5 -4
  82. package/src/components/{constants.ts → AdaptiveServerTable/constants.ts} +0 -1
  83. package/src/components/AdaptiveServerTable/utils.ts +12 -0
  84. package/src/components/{MobileTable.tsx → MobileTable/MobileTable.tsx} +50 -55
  85. package/src/components/MobileTable/hooks/index.ts +2 -0
  86. package/src/components/MobileTable/hooks/useFilters/index.ts +1 -0
  87. package/src/components/MobileTable/hooks/useFilters/useFilters.ts +57 -0
  88. package/src/components/MobileTable/hooks/useFilters/utils/getInitialColumnsFiltersOpenValue.ts +13 -0
  89. package/src/components/MobileTable/hooks/useFilters/utils/index.ts +1 -0
  90. package/src/components/{hooks.tsx → MobileTable/hooks/useLoadingTable.tsx} +1 -22
  91. package/src/components/MobileTable/index.ts +3 -0
  92. package/src/components/{styles.module.scss → MobileTable/styles.module.scss} +1 -1
  93. package/src/components/MobileTable/types.ts +44 -0
  94. package/src/components/{utils.ts → MobileTable/utils/fuzzyFilter.ts} +0 -12
  95. package/src/components/MobileTable/utils/index.ts +2 -0
  96. package/src/components/MobileTable/utils/saveTableState/getPersistedStateValidator.ts +21 -0
  97. package/src/components/MobileTable/utils/saveTableState/index.ts +3 -0
  98. package/src/components/MobileTable/utils/saveTableState/mappers.ts +62 -0
  99. package/src/components/MobileTable/utils/saveTableState/validators.ts +21 -0
  100. package/src/constants.ts +2 -0
  101. package/src/helperComponents/ColumnsSettings/ColumnsSettings.tsx +1 -0
  102. package/src/helperComponents/RowActionsCell/styles.module.scss +1 -1
  103. package/src/helperComponents/TableCard/styles.module.scss +1 -1
  104. package/src/helperComponents/TableEmptyState/styles.module.scss +1 -1
  105. package/src/helperComponents/TablePagination/styles.module.scss +1 -1
  106. package/src/helperComponents/TableSorting/styles.module.scss +1 -1
  107. package/src/index.ts +1 -0
  108. package/dist/cjs/components/MobileTable.d.ts +0 -13
  109. package/dist/esm/components/MobileTable.d.ts +0 -13
  110. package/dist/esm/components/hooks.js +0 -30
  111. /package/dist/cjs/components/{styles.module.css → MobileTable/styles.module.css} +0 -0
  112. /package/dist/esm/components/{styles.module.css → MobileTable/styles.module.css} +0 -0
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPersistedStateValidator = void 0;
4
+ const validators_1 = require("./validators");
5
+ const getPersistedStateValidator = (columnFilters) => (data) => {
6
+ const dataAsSettings = data;
7
+ const isPaginationValid = (0, validators_1.validatePaging)(dataAsSettings === null || dataAsSettings === void 0 ? void 0 : dataAsSettings.pagination);
8
+ const isSortingValid = (0, validators_1.validateSorting)(dataAsSettings === null || dataAsSettings === void 0 ? void 0 : dataAsSettings.ordering);
9
+ const isSearchValid = !(dataAsSettings === null || dataAsSettings === void 0 ? void 0 : dataAsSettings.search) || typeof (dataAsSettings === null || dataAsSettings === void 0 ? void 0 : dataAsSettings.search) === 'string';
10
+ const isFilterValid = Boolean((columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.filters) && (0, validators_1.validateFilter)(dataAsSettings.filter, columnFilters.filters));
11
+ return isPaginationValid && isSortingValid && isSearchValid && isFilterValid;
12
+ };
13
+ exports.getPersistedStateValidator = getPersistedStateValidator;
@@ -0,0 +1,3 @@
1
+ export * from './validators';
2
+ export * from './mappers';
3
+ export * from './getPersistedStateValidator';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./validators"), exports);
18
+ __exportStar(require("./mappers"), exports);
19
+ __exportStar(require("./getPersistedStateValidator"), exports);
@@ -0,0 +1,18 @@
1
+ import { RequestPayloadParams } from '@cloud-ru/ft-request-payload-transform';
2
+ import { PaginationState, SortingState } from '@tanstack/react-table';
3
+ import { FiltersState } from '@snack-uikit/chips';
4
+ import { PersistedFilterState } from '@snack-uikit/toolbar';
5
+ export declare const mapPaginationToTableState: (value?: RequestPayloadParams["pagination"]) => PaginationState;
6
+ export declare const mapSortToTableState: (value?: RequestPayloadParams["ordering"]) => SortingState;
7
+ export declare const mapPaginationToRequestPayload: (value?: PaginationState | RequestPayloadParams["pagination"]) => RequestPayloadParams["pagination"];
8
+ export declare const mapSortToRequestPayload: (value?: SortingState) => RequestPayloadParams["ordering"];
9
+ /** Вспомогательная функция для преобразования состояния таблицы к формату RequestPayloadParams */
10
+ export declare const formatTableStateToRequestPayload: <T extends FiltersState>({ pagination, sorting, search, filter, }: Omit<PersistedFilterState<T>, "pagination" | "sorting"> & {
11
+ pagination?: PaginationState | RequestPayloadParams["pagination"];
12
+ sorting?: SortingState;
13
+ }) => {
14
+ toObject(): Partial<RequestPayloadParams>;
15
+ toString(params?: {
16
+ encode?: boolean;
17
+ }): string;
18
+ };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatTableStateToRequestPayload = exports.mapSortToRequestPayload = exports.mapPaginationToRequestPayload = exports.mapSortToTableState = exports.mapPaginationToTableState = void 0;
4
+ const toolbar_1 = require("@snack-uikit/toolbar");
5
+ const constants_1 = require("../../../../constants");
6
+ const mapPaginationToTableState = (value) => {
7
+ if (!value || value.offset === undefined || value.limit === undefined) {
8
+ return { pageSize: constants_1.DEFAULT_PAGE_SIZE, pageIndex: 0 };
9
+ }
10
+ return {
11
+ pageSize: value.limit || constants_1.DEFAULT_PAGE_SIZE,
12
+ pageIndex: Math.floor(value.offset / value.limit),
13
+ };
14
+ };
15
+ exports.mapPaginationToTableState = mapPaginationToTableState;
16
+ const mapSortToTableState = (value = []) => value.map(column => ({
17
+ id: column.field,
18
+ desc: column.direction === '-',
19
+ }));
20
+ exports.mapSortToTableState = mapSortToTableState;
21
+ const mapPaginationToRequestPayload = (value) => {
22
+ if (!value)
23
+ return undefined;
24
+ if ('limit' in value || 'offset' in value) {
25
+ return value;
26
+ }
27
+ return {
28
+ limit: value.pageSize,
29
+ offset: value.pageSize * value.pageIndex,
30
+ };
31
+ };
32
+ exports.mapPaginationToRequestPayload = mapPaginationToRequestPayload;
33
+ const mapSortToRequestPayload = (value) => value === null || value === void 0 ? void 0 : value.map(column => ({
34
+ field: column.id,
35
+ direction: (column.desc ? '-' : '+'),
36
+ }));
37
+ exports.mapSortToRequestPayload = mapSortToRequestPayload;
38
+ /** Вспомогательная функция для преобразования состояния таблицы к формату RequestPayloadParams */
39
+ const formatTableStateToRequestPayload = ({ pagination, sorting, search, filter, }) => (0, toolbar_1.formatFilterStateToRequestPayload)({
40
+ filter,
41
+ search,
42
+ pagination: (0, exports.mapPaginationToRequestPayload)(pagination),
43
+ ordering: (0, exports.mapSortToRequestPayload)(sorting),
44
+ });
45
+ exports.formatTableStateToRequestPayload = formatTableStateToRequestPayload;
@@ -0,0 +1,5 @@
1
+ import { RequestPayloadParams } from '@cloud-ru/ft-request-payload-transform';
2
+ import { ChipChoiceRowProps } from '@snack-uikit/chips';
3
+ export declare const validatePaging: (value: unknown) => value is RequestPayloadParams["pagination"];
4
+ export declare const validateSorting: (value: unknown) => value is RequestPayloadParams["ordering"];
5
+ export declare const validateFilter: <TFilters extends Record<string, unknown>>(value: unknown, filterSettings: ChipChoiceRowProps<TFilters>["filters"]) => value is TFilters;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateFilter = exports.validateSorting = exports.validatePaging = void 0;
4
+ const validatePaging = (value) => typeof (value === null || value === void 0 ? void 0 : value.limit) === 'number' &&
5
+ typeof (value === null || value === void 0 ? void 0 : value.offset) === 'number';
6
+ exports.validatePaging = validatePaging;
7
+ const validateSorting = (value) => !value ||
8
+ value.every(column => typeof (column === null || column === void 0 ? void 0 : column.field) === 'string' && typeof (column === null || column === void 0 ? void 0 : column.direction) === 'string');
9
+ exports.validateSorting = validateSorting;
10
+ const validateFilter = (value, filterSettings) => typeof value === 'object' &&
11
+ value !== null &&
12
+ Object.keys(value).every(field => Boolean(filterSettings.find(setting => setting.id === field)));
13
+ exports.validateFilter = validateFilter;
@@ -15,3 +15,4 @@ export declare const TEST_IDS: {
15
15
  statusLabel: string;
16
16
  };
17
17
  export declare const ROW_ACTIONS_COLUMN_ID = "rowActions";
18
+ export declare const DEFAULT_PAGE_SIZE = 5;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ROW_ACTIONS_COLUMN_ID = exports.TEST_IDS = void 0;
3
+ exports.DEFAULT_PAGE_SIZE = exports.ROW_ACTIONS_COLUMN_ID = exports.TEST_IDS = void 0;
4
4
  exports.TEST_IDS = {
5
5
  headerSortIndicator: 'table__header__sort-indicator',
6
6
  headerRow: 'table__header-row',
@@ -18,3 +18,4 @@ exports.TEST_IDS = {
18
18
  statusLabel: 'table__status-label',
19
19
  };
20
20
  exports.ROW_ACTIONS_COLUMN_ID = 'rowActions';
21
+ exports.DEFAULT_PAGE_SIZE = 5;
@@ -1 +1,2 @@
1
1
  export * from './components';
2
+ export * from './helperComponents';
package/dist/cjs/index.js CHANGED
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./components"), exports);
18
+ __exportStar(require("./helperComponents"), exports);
@@ -12,15 +12,16 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
13
  import { useCallback, useEffect, useMemo, useState } from 'react';
14
14
  import { ServerTable as DesktopTable } from '@snack-uikit/table';
15
- import { DEFAULT_PAGE_SIZE, DEFAULT_PAGINATION_LIMIT } from '../constants';
16
- import { useStateControl } from '../hooks';
15
+ import { useValueControl } from '@snack-uikit/utils';
16
+ import { DEFAULT_PAGE_SIZE } from '../../constants';
17
17
  import { MobileTable } from '../MobileTable';
18
- import { onSearchDebounced } from '../utils';
18
+ import { DEFAULT_PAGINATION_LIMIT } from './constants';
19
+ import { onSearchDebounced } from './utils';
19
20
  export function AdaptiveServerTable(_a) {
20
21
  var { layoutType } = _a, props = __rest(_a, ["layoutType"]);
21
22
  const isMobile = layoutType === 'mobile';
22
23
  const { onChangePage, search: searchProp, pagination, items, total = DEFAULT_PAGINATION_LIMIT, limit = DEFAULT_PAGINATION_LIMIT, offset = 0 } = props, rest = __rest(props, ["onChangePage", "search", "pagination", "items", "total", "limit", "offset"]);
23
- const { state: search, onStateChange: setSearch } = useStateControl(searchProp, '');
24
+ const [search, setSearch] = useValueControl(searchProp !== null && searchProp !== void 0 ? searchProp : { defaultValue: '' });
24
25
  const [tempSearch, setTempSearch] = useState(search || '');
25
26
  useEffect(() => {
26
27
  var _a;
@@ -1,3 +1,2 @@
1
- export declare const DEFAULT_PAGE_SIZE = 5;
2
1
  export declare const SEARCH_DELAY = 500;
3
2
  export declare const DEFAULT_PAGINATION_LIMIT = 10;
@@ -1,3 +1,2 @@
1
- export const DEFAULT_PAGE_SIZE = 5;
2
1
  export const SEARCH_DELAY = 500;
3
2
  export const DEFAULT_PAGINATION_LIMIT = 10;
@@ -1,5 +1,3 @@
1
- import { FilterFn } from '@tanstack/react-table';
2
- export declare const fuzzyFilter: FilterFn<any>;
3
1
  type OnSearchDebouncedType = (newValue: string, onChange: (newValue: string) => void) => void;
4
2
  export declare const onSearchDebounced: OnSearchDebouncedType;
5
3
  export {};
@@ -0,0 +1,5 @@
1
+ import debounce from 'lodash.debounce';
2
+ import { SEARCH_DELAY } from './constants';
3
+ export const onSearchDebounced = debounce((newValue, onChange) => {
4
+ onChange(newValue);
5
+ }, SEARCH_DELAY);
@@ -0,0 +1,7 @@
1
+ import { FiltersState } from '@cloud-ru/uikit-product-mobile-chips';
2
+ import { MobileTableProps } from './types';
3
+ export declare function MobileTable<TData extends object, TFilters extends FiltersState = Record<string, unknown>>({ data, columnDefinitions, headlineId, suppressPagination, suppressToolbar, suppressSearch, enableFuzzySearch, search, onRefresh, toolbarAfter, moreActions, columnFilters, className, headerBackground, noDataState, noResultsState, errorDataState, loading, dataError, dataFiltered, pagination: paginationProp, pageCount, sorting: sortingProp, manualSorting, manualPagination, manualFiltering, autoResetPageIndex, getRowId, rowSelection: rowSelectionProp, bulkActions: bulkActionsProp, columnsSettings: columnsSettingsProp, savedState, ...rest }: MobileTableProps<TData, TFilters>): import("react/jsx-runtime").JSX.Element;
4
+ export declare namespace MobileTable {
5
+ var getRowActionsColumnDef: typeof import("../../helperComponents").getRowActionsColumnDef;
6
+ var getStatusColumnDef: typeof import("../../helperComponents").getStatusColumnDef;
7
+ }
@@ -18,19 +18,19 @@ import { MobileToolbar } from '@cloud-ru/uikit-product-mobile-toolbar';
18
18
  import { extractSupportProps } from '@cloud-ru/uikit-product-utils';
19
19
  import { SkeletonContextProvider } from '@snack-uikit/skeleton';
20
20
  import { getPinnedGroups, useColumnOrderByDrag, useColumnSettings, usePageReset, } from '@snack-uikit/table';
21
- import { getRowActionsColumnDef, getStatusColumnDef, TableCard, TableEmptyState, TablePagination, TableSorting, useEmptyState, } from '../helperComponents';
22
- import { ColumnsSettings } from '../helperComponents/ColumnsSettings';
23
- import { DEFAULT_PAGE_SIZE } from './constants';
24
- import { useLoadingTable, useStateControl } from './hooks';
21
+ import { useValueControl } from '@snack-uikit/utils';
22
+ import { DEFAULT_PAGE_SIZE } from '../../constants';
23
+ import { ColumnsSettings, getRowActionsColumnDef, getStatusColumnDef, TableCard, TableEmptyState, TablePagination, TableSorting, useEmptyState, } from '../../helperComponents';
24
+ import { useFilters, useLoadingTable } from './hooks';
25
25
  import styles from './styles.module.css';
26
- import { fuzzyFilter } from './utils';
26
+ import { fuzzyFilter, getPersistedStateValidator, mapPaginationToRequestPayload, mapPaginationToTableState, mapSortToRequestPayload, mapSortToTableState, } from './utils';
27
27
  export function MobileTable(_a) {
28
28
  var { data, columnDefinitions, headlineId, suppressPagination = false, suppressToolbar = false, suppressSearch = false, enableFuzzySearch = false, search, onRefresh, toolbarAfter, moreActions, columnFilters, className, headerBackground = 'default', noDataState, noResultsState, errorDataState, loading, dataError, dataFiltered, pagination: paginationProp, pageCount, sorting: sortingProp, manualSorting = false, manualPagination = false, manualFiltering = false, autoResetPageIndex = false, getRowId, rowSelection: rowSelectionProp, bulkActions: bulkActionsProp, columnsSettings: columnsSettingsProp, savedState } = _a, rest = __rest(_a, ["data", "columnDefinitions", "headlineId", "suppressPagination", "suppressToolbar", "suppressSearch", "enableFuzzySearch", "search", "onRefresh", "toolbarAfter", "moreActions", "columnFilters", "className", "headerBackground", "noDataState", "noResultsState", "errorDataState", "loading", "dataError", "dataFiltered", "pagination", "pageCount", "sorting", "manualSorting", "manualPagination", "manualFiltering", "autoResetPageIndex", "getRowId", "rowSelection", "bulkActions", "columnsSettings", "savedState"]);
29
29
  const defaultPaginationState = useMemo(() => ({ pageIndex: 0, pageSize: DEFAULT_PAGE_SIZE }), []);
30
- const { state: sorting, onStateChange: onSortingChange } = useStateControl(sortingProp, []);
31
- const { state: globalFilter, onStateChange: onGlobalFilterChange } = useStateControl(search, '');
32
- const { state: pagination, onStateChange: onPaginationChange } = useStateControl(paginationProp, defaultPaginationState);
33
- const { state: rowSelection, onStateChange: onRowSelectionChange } = useStateControl(rowSelectionProp, {});
30
+ const [sorting = [], onSortingChange] = useValueControl(sortingProp !== null && sortingProp !== void 0 ? sortingProp : { defaultValue: [] });
31
+ const [globalFilter = '', onGlobalFilterChange] = useValueControl(search !== null && search !== void 0 ? search : { defaultValue: '' });
32
+ const [pagination = defaultPaginationState, onPaginationChange] = useValueControl(paginationProp !== null && paginationProp !== void 0 ? paginationProp : { defaultValue: defaultPaginationState });
33
+ const [rowSelection = {}, onRowSelectionChange] = useValueControl(rowSelectionProp !== null && rowSelectionProp !== void 0 ? rowSelectionProp : { defaultValue: {} });
34
34
  const enableRowSelection = useCallback((row) => {
35
35
  const parent = row.getParentRow();
36
36
  const isParentSelected = parent ? parent.getCanSelect() : true;
@@ -167,6 +167,8 @@ export function MobileTable(_a) {
167
167
  const hasSortableColumns = useMemo(() => columnDefinitions.some(column => column.enableSorting !== false), [columnDefinitions]);
168
168
  const shouldShowSorting = useMemo(() => Boolean(sortingProp) || hasSortableColumns, [sortingProp, hasSortableColumns]);
169
169
  const tableFilteredRows = table.getFilteredRowModel().rows;
170
+ const { filter, patchedFilter, setFilter, setFilterVisibility } = useFilters({ columnFilters });
171
+ const validatePersistedState = useMemo(() => getPersistedStateValidator(columnFilters), [columnFilters]);
170
172
  usePageReset({
171
173
  manualPagination,
172
174
  maximumAvailablePage: pageCount || tableFilteredRows.length / pagination.pageSize,
@@ -181,7 +183,28 @@ export function MobileTable(_a) {
181
183
  onChange: onGlobalFilterChange,
182
184
  loading: search === null || search === void 0 ? void 0 : search.loading,
183
185
  placeholder: (search === null || search === void 0 ? void 0 : search.placeholder) || t('searchPlaceholder'),
184
- }, onRefresh: onRefresh ? handleOnRefresh : undefined, outline: true, filterRow: columnFilters, after: toolbarAfter || shouldShowSorting || (areColumnsSettingsEnabled && columnsSettings) ? (_jsxs(_Fragment, { children: [toolbarAfter, shouldShowSorting && (_jsx(TableSorting, { table: table, columnDefinitions: columnDefinitions, enabledColumns: areColumnsSettingsEnabled ? enabledColumns : undefined, areColumnsSettingsEnabled: areColumnsSettingsEnabled })), areColumnsSettingsEnabled && columnsSettings && (_jsx(ColumnsSettings, { columnsSettings: columnsSettings, enabledColumns: enabledColumns, setEnabledColumns: setEnabledColumns }))] })) : undefined, moreActions: moreActions, bulkActions: bulkActions, selectedCount: table.getSelectedRowModel().rows.length, selectionMode: selectionMode, onCheck: enableSelection ? handleOnToolbarCheck : undefined, checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected() }) })), _jsx("div", { className: styles.table, children: loading ? (_jsx(SkeletonContextProvider, { loading: true, children: loadingTableRows.map((row, index) => (_jsx(TableCard, { headlineId: headlineId, row: row, table: loadingTable, selection: 'none' }, index))) })) : (_jsxs(_Fragment, { children: [tableRows.map((row, index) => (_jsx(TableCard, { headlineId: headlineId, row: row, table: table, selectionAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance, selection: enableSelection ? selectionMode : 'none' }, index))), _jsx(TableEmptyState, { emptyStates: emptyStates, dataError: dataError, dataFiltered: dataFiltered || Boolean(table.getState().globalFilter), tableRowsLength: tableRows.length })] })) }), !suppressPagination && _jsx(TablePagination, { table: table })] })));
186
+ }, onRefresh: onRefresh ? handleOnRefresh : undefined, outline: true, filterRow: patchedFilter, after: toolbarAfter || shouldShowSorting || (areColumnsSettingsEnabled && columnsSettings) ? (_jsxs(_Fragment, { children: [toolbarAfter, shouldShowSorting && (_jsx(TableSorting, { table: table, columnDefinitions: columnDefinitions, enabledColumns: areColumnsSettingsEnabled ? enabledColumns : undefined, areColumnsSettingsEnabled: areColumnsSettingsEnabled })), areColumnsSettingsEnabled && columnsSettings && (_jsx(ColumnsSettings, { columnsSettings: columnsSettings, enabledColumns: enabledColumns, setEnabledColumns: setEnabledColumns }))] })) : undefined, moreActions: moreActions, bulkActions: bulkActions, selectedCount: table.getSelectedRowModel().rows.length, selectionMode: selectionMode, onCheck: enableSelection ? handleOnToolbarCheck : undefined, checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected(), persist: (savedState === null || savedState === void 0 ? void 0 : savedState.id) && (savedState === null || savedState === void 0 ? void 0 : savedState.filterQueryKey)
187
+ ? {
188
+ id: savedState.id,
189
+ filterQueryKey: savedState.filterQueryKey,
190
+ validateData: data => validatePersistedState(data),
191
+ state: {
192
+ pagination: mapPaginationToRequestPayload(pagination),
193
+ ordering: mapSortToRequestPayload(sorting),
194
+ filter,
195
+ search: globalFilter || '',
196
+ },
197
+ onLoad: state => {
198
+ state.pagination && onPaginationChange(mapPaginationToTableState(state.pagination));
199
+ state.search && onGlobalFilterChange(state.search);
200
+ state.ordering && onSortingChange(mapSortToTableState(state.ordering));
201
+ if (state.filter) {
202
+ setFilter(state.filter);
203
+ setFilterVisibility(Object.keys(state.filter));
204
+ }
205
+ },
206
+ }
207
+ : undefined }) })), _jsx("div", { className: styles.table, children: loading ? (_jsx(SkeletonContextProvider, { loading: true, children: loadingTableRows.map((row, index) => (_jsx(TableCard, { headlineId: headlineId, row: row, table: loadingTable, selection: 'none' }, index))) })) : (_jsxs(_Fragment, { children: [tableRows.map((row, index) => (_jsx(TableCard, { headlineId: headlineId, row: row, table: table, selectionAppearance: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.appearance, selection: enableSelection ? selectionMode : 'none' }, index))), _jsx(TableEmptyState, { emptyStates: emptyStates, dataError: dataError, dataFiltered: dataFiltered || Boolean(table.getState().globalFilter), tableRowsLength: tableRows.length })] })) }), !suppressPagination && _jsx(TablePagination, { table: table })] })));
185
208
  }
186
209
  MobileTable.getRowActionsColumnDef = getRowActionsColumnDef;
187
210
  MobileTable.getStatusColumnDef = getStatusColumnDef;
@@ -0,0 +1,2 @@
1
+ export * from './useLoadingTable';
2
+ export * from './useFilters';
@@ -0,0 +1,2 @@
1
+ export * from './useLoadingTable';
2
+ export * from './useFilters';
@@ -0,0 +1 @@
1
+ export * from './useFilters';
@@ -0,0 +1 @@
1
+ export * from './useFilters';
@@ -0,0 +1,78 @@
1
+ import { FiltersState } from '@cloud-ru/uikit-product-mobile-chips';
2
+ import { MobileTableProps } from '../../types';
3
+ type useFiltersProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = Pick<MobileTableProps<TData, TFilters>, 'columnFilters'>;
4
+ export declare function useFilters<TData extends object, TFilters extends FiltersState = Record<string, unknown>>({ columnFilters, }: useFiltersProps<TData, TFilters>): {
5
+ filter: TFilters | undefined;
6
+ setFilter: (value: any, ...args: any[]) => any;
7
+ patchedFilter: {
8
+ value: TFilters | undefined;
9
+ onChange: (filter: TFilters) => void;
10
+ visibleFilters: string[];
11
+ onVisibleFiltersChange: (value: any, ...args: any[]) => any;
12
+ 'data-test-id'?: string;
13
+ "aria-activedescendant"?: string | undefined;
14
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
15
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
16
+ "aria-braillelabel"?: string | undefined;
17
+ "aria-brailleroledescription"?: string | undefined;
18
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
19
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
20
+ "aria-colcount"?: number | undefined;
21
+ "aria-colindex"?: number | undefined;
22
+ "aria-colindextext"?: string | undefined;
23
+ "aria-colspan"?: number | undefined;
24
+ "aria-controls"?: string | undefined;
25
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
26
+ "aria-describedby"?: string | undefined;
27
+ "aria-description"?: string | undefined;
28
+ "aria-details"?: string | undefined;
29
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
30
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
31
+ "aria-errormessage"?: string | undefined;
32
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
33
+ "aria-flowto"?: string | undefined;
34
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
35
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
36
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
37
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
38
+ "aria-keyshortcuts"?: string | undefined;
39
+ "aria-label"?: string | undefined;
40
+ "aria-labelledby"?: string | undefined;
41
+ "aria-level"?: number | undefined;
42
+ "aria-live"?: "off" | "assertive" | "polite" | undefined;
43
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
44
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
45
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
46
+ "aria-orientation"?: "horizontal" | "vertical" | undefined;
47
+ "aria-owns"?: string | undefined;
48
+ "aria-placeholder"?: string | undefined;
49
+ "aria-posinset"?: number | undefined;
50
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
51
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
52
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
53
+ "aria-required"?: (boolean | "true" | "false") | undefined;
54
+ "aria-roledescription"?: string | undefined;
55
+ "aria-rowcount"?: number | undefined;
56
+ "aria-rowindex"?: number | undefined;
57
+ "aria-rowindextext"?: string | undefined;
58
+ "aria-rowspan"?: number | undefined;
59
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
60
+ "aria-setsize"?: number | undefined;
61
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
62
+ "aria-valuemax"?: number | undefined;
63
+ "aria-valuemin"?: number | undefined;
64
+ "aria-valuenow"?: number | undefined;
65
+ "aria-valuetext"?: string | undefined;
66
+ defaultValue?: Partial<TFilters> | undefined;
67
+ filters: import("@cloud-ru/uikit-product-mobile-chips").MobileChipChoiceRowFilter[];
68
+ size?: import("@cloud-ru/uikit-product-mobile-chips/dist/esm/components/MobileChipChoiceRow/types").ChipChoiceRowSize;
69
+ className?: string;
70
+ showClearButton?: boolean;
71
+ showAddButton?: boolean;
72
+ initialOpen?: boolean;
73
+ open: boolean;
74
+ onOpenChange: import("react").Dispatch<import("react").SetStateAction<boolean>>;
75
+ } | undefined;
76
+ setFilterVisibility: (value: any, ...args: any[]) => any;
77
+ };
78
+ export {};
@@ -0,0 +1,28 @@
1
+ import { useMemo, useState } from 'react';
2
+ import { useValueControl } from '@snack-uikit/utils';
3
+ import { getInitialColumnsFiltersOpenValue } from './utils';
4
+ export function useFilters({ columnFilters, }) {
5
+ const [areColumnFiltersOpen, setAreColumnFiltersOpen] = useState(() => getInitialColumnsFiltersOpenValue(columnFilters));
6
+ const [filter, setFilter] = useValueControl({
7
+ value: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.value,
8
+ defaultValue: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.defaultValue,
9
+ onChange: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.onChange,
10
+ });
11
+ const [filterVisibility = [], setFilterVisibility] = useValueControl({
12
+ value: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.visibleFilters,
13
+ defaultValue: [],
14
+ onChange: columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.onVisibleFiltersChange,
15
+ });
16
+ const patchedFilter = useMemo(() => {
17
+ if (!columnFilters) {
18
+ return undefined;
19
+ }
20
+ return Object.assign(Object.assign({ open: areColumnFiltersOpen, onOpenChange: setAreColumnFiltersOpen }, columnFilters), { value: filter, onChange: setFilter, visibleFilters: filterVisibility, onVisibleFiltersChange: setFilterVisibility });
21
+ }, [columnFilters, areColumnFiltersOpen, filter, setFilter, filterVisibility, setFilterVisibility]);
22
+ return {
23
+ filter,
24
+ setFilter,
25
+ patchedFilter,
26
+ setFilterVisibility,
27
+ };
28
+ }
@@ -0,0 +1,2 @@
1
+ import { MobileTableProps } from '../../../types';
2
+ export declare function getInitialColumnsFiltersOpenValue<TData extends object>(columnFilters: MobileTableProps<TData>['columnFilters']): boolean;
@@ -0,0 +1,8 @@
1
+ export function getInitialColumnsFiltersOpenValue(columnFilters) {
2
+ if (!columnFilters) {
3
+ return false;
4
+ }
5
+ return 'initialOpen' in columnFilters && typeof columnFilters.initialOpen === 'boolean'
6
+ ? columnFilters.initialOpen
7
+ : true;
8
+ }
@@ -0,0 +1 @@
1
+ export * from './getInitialColumnsFiltersOpenValue';
@@ -0,0 +1 @@
1
+ export * from './getInitialColumnsFiltersOpenValue';
@@ -1,13 +1,5 @@
1
1
  import { FiltersState } from '@cloud-ru/uikit-product-mobile-chips';
2
2
  import { TableProps } from '@snack-uikit/table';
3
- export declare function useStateControl<TState>(control: {
4
- initialState?: TState;
5
- state?: TState;
6
- onChange?(state: TState): void;
7
- } | undefined, defaultState: TState): {
8
- state: TState;
9
- onStateChange: import("uncontrollable").Handler;
10
- };
11
3
  type UseLoadingTableProps<TData extends object, TFilters extends FiltersState> = {
12
4
  columnDefinitions: TableProps<TData, TFilters>['columnDefinitions'];
13
5
  pageSize: number;
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { getCoreRowModel, useReactTable } from '@tanstack/react-table';
3
+ import { useMemo } from 'react';
4
+ import { SkeletonText } from '@snack-uikit/skeleton';
5
+ import { ROW_ACTIONS_COLUMN_ID } from '../../../constants';
6
+ export function useLoadingTable({ pageSize, columnDefinitions, }) {
7
+ const data = useMemo(() => (Array.from({ length: pageSize }).map(() => ({})) || []), [pageSize]);
8
+ const columns = useMemo(() => columnDefinitions
9
+ .filter(column => column.id !== ROW_ACTIONS_COLUMN_ID)
10
+ .map(column => (Object.assign(Object.assign({}, column), { cell: () => _jsx(SkeletonText, { lines: 1, width: '100%' }) }))), [columnDefinitions]);
11
+ const loadingTable = useReactTable({
12
+ data,
13
+ columns,
14
+ getCoreRowModel: getCoreRowModel(),
15
+ });
16
+ return { loadingTable };
17
+ }
@@ -0,0 +1,3 @@
1
+ export * from './MobileTable';
2
+ export * from './types';
3
+ export { formatTableStateToRequestPayload } from './utils/saveTableState/mappers';
@@ -0,0 +1,3 @@
1
+ export * from './MobileTable';
2
+ export * from './types';
3
+ export { formatTableStateToRequestPayload } from './utils/saveTableState/mappers';
@@ -0,0 +1,11 @@
1
+ import { FiltersState, MobileChipChoiceRowProps } from '@cloud-ru/uikit-product-mobile-chips';
2
+ import { WithSupportProps } from '@cloud-ru/uikit-product-utils';
3
+ import { TableProps } from '@snack-uikit/table';
4
+ export type MobileTableProps<TData extends object, TFilters extends FiltersState = Record<string, unknown>> = Pick<TableProps<TData, TFilters>, 'data' | 'columnDefinitions' | 'suppressPagination' | 'suppressToolbar' | 'suppressSearch' | 'search' | 'onRefresh' | 'moreActions' | 'className' | 'enableFuzzySearch' | 'loading' | 'dataError' | 'dataFiltered' | 'noDataState' | 'noResultsState' | 'errorDataState' | 'sorting' | 'pagination' | 'pageCount' | 'manualFiltering' | 'manualPagination' | 'manualSorting' | 'getRowId' | 'rowSelection' | 'bulkActions' | 'columnsSettings' | 'savedState' | 'autoResetPageIndex' | 'toolbarAfter'> & WithSupportProps<{
5
+ headlineId?: string;
6
+ headerBackground?: 'default' | '1-level' | '2-level';
7
+ /** Фильтры */
8
+ columnFilters?: MobileChipChoiceRowProps<TFilters> & {
9
+ initialOpen?: boolean;
10
+ };
11
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { FilterFn } from '@tanstack/react-table';
2
+ export declare const fuzzyFilter: FilterFn<any>;
@@ -1,6 +1,4 @@
1
1
  import { rankItem } from '@tanstack/match-sorter-utils';
2
- import debounce from 'lodash.debounce';
3
- import { SEARCH_DELAY } from './constants';
4
2
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
3
  export const fuzzyFilter = (row, columnId, value, addMeta) => {
6
4
  const itemRank = rankItem(row.getValue(columnId), value);
@@ -9,6 +7,3 @@ export const fuzzyFilter = (row, columnId, value, addMeta) => {
9
7
  });
10
8
  return itemRank.passed;
11
9
  };
12
- export const onSearchDebounced = debounce((newValue, onChange) => {
13
- onChange(newValue);
14
- }, SEARCH_DELAY);
@@ -0,0 +1,2 @@
1
+ export * from './fuzzyFilter';
2
+ export * from './saveTableState';
@@ -0,0 +1,2 @@
1
+ export * from './fuzzyFilter';
2
+ export * from './saveTableState';
@@ -0,0 +1,4 @@
1
+ import { FiltersState } from '@snack-uikit/chips';
2
+ import { PersistedFilterState } from '@snack-uikit/toolbar';
3
+ import { MobileTableProps } from '../../types';
4
+ export declare const getPersistedStateValidator: <TData extends object, TFilters extends FiltersState = Record<string, unknown>>(columnFilters: MobileTableProps<TData, TFilters>["columnFilters"]) => (data: unknown) => data is PersistedFilterState<TFilters>;
@@ -0,0 +1,9 @@
1
+ import { validateFilter, validatePaging, validateSorting } from './validators';
2
+ export const getPersistedStateValidator = (columnFilters) => (data) => {
3
+ const dataAsSettings = data;
4
+ const isPaginationValid = validatePaging(dataAsSettings === null || dataAsSettings === void 0 ? void 0 : dataAsSettings.pagination);
5
+ const isSortingValid = validateSorting(dataAsSettings === null || dataAsSettings === void 0 ? void 0 : dataAsSettings.ordering);
6
+ const isSearchValid = !(dataAsSettings === null || dataAsSettings === void 0 ? void 0 : dataAsSettings.search) || typeof (dataAsSettings === null || dataAsSettings === void 0 ? void 0 : dataAsSettings.search) === 'string';
7
+ const isFilterValid = Boolean((columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.filters) && validateFilter(dataAsSettings.filter, columnFilters.filters));
8
+ return isPaginationValid && isSortingValid && isSearchValid && isFilterValid;
9
+ };
@@ -0,0 +1,3 @@
1
+ export * from './validators';
2
+ export * from './mappers';
3
+ export * from './getPersistedStateValidator';
@@ -0,0 +1,3 @@
1
+ export * from './validators';
2
+ export * from './mappers';
3
+ export * from './getPersistedStateValidator';
@@ -0,0 +1,18 @@
1
+ import { RequestPayloadParams } from '@cloud-ru/ft-request-payload-transform';
2
+ import { PaginationState, SortingState } from '@tanstack/react-table';
3
+ import { FiltersState } from '@snack-uikit/chips';
4
+ import { PersistedFilterState } from '@snack-uikit/toolbar';
5
+ export declare const mapPaginationToTableState: (value?: RequestPayloadParams["pagination"]) => PaginationState;
6
+ export declare const mapSortToTableState: (value?: RequestPayloadParams["ordering"]) => SortingState;
7
+ export declare const mapPaginationToRequestPayload: (value?: PaginationState | RequestPayloadParams["pagination"]) => RequestPayloadParams["pagination"];
8
+ export declare const mapSortToRequestPayload: (value?: SortingState) => RequestPayloadParams["ordering"];
9
+ /** Вспомогательная функция для преобразования состояния таблицы к формату RequestPayloadParams */
10
+ export declare const formatTableStateToRequestPayload: <T extends FiltersState>({ pagination, sorting, search, filter, }: Omit<PersistedFilterState<T>, "pagination" | "sorting"> & {
11
+ pagination?: PaginationState | RequestPayloadParams["pagination"];
12
+ sorting?: SortingState;
13
+ }) => {
14
+ toObject(): Partial<RequestPayloadParams>;
15
+ toString(params?: {
16
+ encode?: boolean;
17
+ }): string;
18
+ };