@cloud-ru/uikit-product-mobile-table 0.16.3 → 0.17.1

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 (107) hide show
  1. package/CHANGELOG.md +23 -0
  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 +11 -8
  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/MobileTable/types.ts +44 -0
  93. package/src/components/{utils.ts → MobileTable/utils/fuzzyFilter.ts} +0 -12
  94. package/src/components/MobileTable/utils/index.ts +2 -0
  95. package/src/components/MobileTable/utils/saveTableState/getPersistedStateValidator.ts +21 -0
  96. package/src/components/MobileTable/utils/saveTableState/index.ts +3 -0
  97. package/src/components/MobileTable/utils/saveTableState/mappers.ts +62 -0
  98. package/src/components/MobileTable/utils/saveTableState/validators.ts +21 -0
  99. package/src/constants.ts +2 -0
  100. package/src/helperComponents/ColumnsSettings/ColumnsSettings.tsx +1 -0
  101. package/src/index.ts +1 -0
  102. package/dist/cjs/components/MobileTable.d.ts +0 -13
  103. package/dist/esm/components/MobileTable.d.ts +0 -13
  104. package/dist/esm/components/hooks.js +0 -30
  105. /package/dist/cjs/components/{styles.module.css → MobileTable/styles.module.css} +0 -0
  106. /package/dist/esm/components/{styles.module.css → MobileTable/styles.module.css} +0 -0
  107. /package/src/components/{styles.module.scss → MobileTable/styles.module.scss} +0 -0
@@ -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
+ };
@@ -0,0 +1,37 @@
1
+ import { formatFilterStateToRequestPayload } from '@snack-uikit/toolbar';
2
+ import { DEFAULT_PAGE_SIZE } from '../../../../constants';
3
+ export const mapPaginationToTableState = (value) => {
4
+ if (!value || value.offset === undefined || value.limit === undefined) {
5
+ return { pageSize: DEFAULT_PAGE_SIZE, pageIndex: 0 };
6
+ }
7
+ return {
8
+ pageSize: value.limit || DEFAULT_PAGE_SIZE,
9
+ pageIndex: Math.floor(value.offset / value.limit),
10
+ };
11
+ };
12
+ export const mapSortToTableState = (value = []) => value.map(column => ({
13
+ id: column.field,
14
+ desc: column.direction === '-',
15
+ }));
16
+ export const mapPaginationToRequestPayload = (value) => {
17
+ if (!value)
18
+ return undefined;
19
+ if ('limit' in value || 'offset' in value) {
20
+ return value;
21
+ }
22
+ return {
23
+ limit: value.pageSize,
24
+ offset: value.pageSize * value.pageIndex,
25
+ };
26
+ };
27
+ export const mapSortToRequestPayload = (value) => value === null || value === void 0 ? void 0 : value.map(column => ({
28
+ field: column.id,
29
+ direction: (column.desc ? '-' : '+'),
30
+ }));
31
+ /** Вспомогательная функция для преобразования состояния таблицы к формату RequestPayloadParams */
32
+ export const formatTableStateToRequestPayload = ({ pagination, sorting, search, filter, }) => formatFilterStateToRequestPayload({
33
+ filter,
34
+ search,
35
+ pagination: mapPaginationToRequestPayload(pagination),
36
+ ordering: mapSortToRequestPayload(sorting),
37
+ });
@@ -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,7 @@
1
+ export const validatePaging = (value) => typeof (value === null || value === void 0 ? void 0 : value.limit) === 'number' &&
2
+ typeof (value === null || value === void 0 ? void 0 : value.offset) === 'number';
3
+ export const validateSorting = (value) => !value ||
4
+ 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');
5
+ export const validateFilter = (value, filterSettings) => typeof value === 'object' &&
6
+ value !== null &&
7
+ Object.keys(value).every(field => Boolean(filterSettings.find(setting => setting.id === field)));
@@ -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;
@@ -15,3 +15,4 @@ export const TEST_IDS = {
15
15
  statusLabel: 'table__status-label',
16
16
  };
17
17
  export const ROW_ACTIONS_COLUMN_ID = 'rowActions';
18
+ export const DEFAULT_PAGE_SIZE = 5;
@@ -1 +1,2 @@
1
1
  export * from './components';
2
+ export * from './helperComponents';
package/dist/esm/index.js CHANGED
@@ -1 +1,2 @@
1
1
  export * from './components';
2
+ export * from './helperComponents';