@cloud-ru/uikit-product-mobile-table 0.11.3 → 0.11.4

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 (100) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/components/AdaptiveServerTable/AdaptiveServerTable.d.ts +9 -0
  3. package/dist/cjs/components/AdaptiveServerTable/AdaptiveServerTable.js +52 -0
  4. package/dist/cjs/components/AdaptiveServerTable/index.d.ts +1 -0
  5. package/dist/cjs/components/AdaptiveServerTable/index.js +17 -0
  6. package/dist/cjs/components/AdaptiveTable/AdaptiveTable.d.ts +8 -0
  7. package/dist/cjs/components/AdaptiveTable/AdaptiveTable.js +28 -0
  8. package/dist/cjs/components/AdaptiveTable/index.d.ts +1 -0
  9. package/dist/cjs/components/AdaptiveTable/index.js +17 -0
  10. package/dist/cjs/components/MobileTable.d.ts +12 -0
  11. package/dist/cjs/components/MobileTable.js +116 -0
  12. package/dist/cjs/components/constants.d.ts +3 -0
  13. package/dist/cjs/components/constants.js +6 -0
  14. package/dist/cjs/components/hooks.d.ts +18 -0
  15. package/dist/cjs/components/hooks.js +34 -0
  16. package/dist/cjs/components/index.d.ts +3 -0
  17. package/dist/cjs/components/index.js +19 -0
  18. package/dist/cjs/components/styles.module.css +42 -0
  19. package/dist/cjs/components/utils.d.ts +3 -0
  20. package/dist/cjs/components/utils.js +21 -0
  21. package/dist/cjs/constants.d.ts +17 -0
  22. package/dist/cjs/constants.js +20 -0
  23. package/dist/cjs/helperComponents/RowActionsCell/RowActionsCell.d.ts +13 -0
  24. package/dist/cjs/helperComponents/RowActionsCell/RowActionsCell.js +44 -0
  25. package/dist/cjs/helperComponents/RowActionsCell/index.d.ts +1 -0
  26. package/dist/cjs/helperComponents/RowActionsCell/index.js +17 -0
  27. package/dist/cjs/helperComponents/RowActionsCell/styles.module.css +29 -0
  28. package/dist/cjs/helperComponents/TableCard/TableCard.d.ts +9 -0
  29. package/dist/cjs/helperComponents/TableCard/TableCard.js +36 -0
  30. package/dist/cjs/helperComponents/TableCard/index.d.ts +1 -0
  31. package/dist/cjs/helperComponents/TableCard/index.js +17 -0
  32. package/dist/cjs/helperComponents/TableCard/styles.module.css +79 -0
  33. package/dist/cjs/helperComponents/TableEmptyState/TableEmptyState.d.ts +12 -0
  34. package/dist/cjs/helperComponents/TableEmptyState/TableEmptyState.js +15 -0
  35. package/dist/cjs/helperComponents/TableEmptyState/hooks.d.ts +10 -0
  36. package/dist/cjs/helperComponents/TableEmptyState/hooks.js +19 -0
  37. package/dist/cjs/helperComponents/TableEmptyState/index.d.ts +2 -0
  38. package/dist/cjs/helperComponents/TableEmptyState/index.js +18 -0
  39. package/dist/cjs/helperComponents/TableEmptyState/styles.module.css +9 -0
  40. package/dist/cjs/helperComponents/TableEmptyState/types.d.ts +9 -0
  41. package/dist/cjs/helperComponents/TableEmptyState/types.js +2 -0
  42. package/dist/cjs/helperComponents/TablePagination/TablePagination.d.ts +5 -0
  43. package/dist/cjs/helperComponents/TablePagination/TablePagination.js +20 -0
  44. package/dist/cjs/helperComponents/TablePagination/index.d.ts +1 -0
  45. package/dist/cjs/helperComponents/TablePagination/index.js +17 -0
  46. package/dist/cjs/helperComponents/TablePagination/styles.module.css +6 -0
  47. package/dist/cjs/helperComponents/index.d.ts +4 -0
  48. package/dist/cjs/helperComponents/index.js +20 -0
  49. package/dist/cjs/index.d.ts +1 -0
  50. package/dist/cjs/index.js +17 -0
  51. package/dist/esm/components/AdaptiveServerTable/AdaptiveServerTable.d.ts +9 -0
  52. package/dist/esm/components/AdaptiveServerTable/AdaptiveServerTable.js +49 -0
  53. package/dist/esm/components/AdaptiveServerTable/index.d.ts +1 -0
  54. package/dist/esm/components/AdaptiveServerTable/index.js +1 -0
  55. package/dist/esm/components/AdaptiveTable/AdaptiveTable.d.ts +8 -0
  56. package/dist/esm/components/AdaptiveTable/AdaptiveTable.js +23 -0
  57. package/dist/esm/components/AdaptiveTable/index.d.ts +1 -0
  58. package/dist/esm/components/AdaptiveTable/index.js +1 -0
  59. package/dist/esm/components/MobileTable.d.ts +12 -0
  60. package/dist/esm/components/MobileTable.js +110 -0
  61. package/dist/esm/components/constants.d.ts +3 -0
  62. package/dist/esm/components/constants.js +3 -0
  63. package/dist/esm/components/hooks.d.ts +18 -0
  64. package/dist/esm/components/hooks.js +30 -0
  65. package/dist/esm/components/index.d.ts +3 -0
  66. package/dist/esm/components/index.js +3 -0
  67. package/dist/esm/components/styles.module.css +42 -0
  68. package/dist/esm/components/utils.d.ts +3 -0
  69. package/dist/esm/components/utils.js +14 -0
  70. package/dist/esm/constants.d.ts +17 -0
  71. package/dist/esm/constants.js +17 -0
  72. package/dist/esm/helperComponents/RowActionsCell/RowActionsCell.d.ts +13 -0
  73. package/dist/esm/helperComponents/RowActionsCell/RowActionsCell.js +38 -0
  74. package/dist/esm/helperComponents/RowActionsCell/index.d.ts +1 -0
  75. package/dist/esm/helperComponents/RowActionsCell/index.js +1 -0
  76. package/dist/esm/helperComponents/RowActionsCell/styles.module.css +29 -0
  77. package/dist/esm/helperComponents/TableCard/TableCard.d.ts +9 -0
  78. package/dist/esm/helperComponents/TableCard/TableCard.js +30 -0
  79. package/dist/esm/helperComponents/TableCard/index.d.ts +1 -0
  80. package/dist/esm/helperComponents/TableCard/index.js +1 -0
  81. package/dist/esm/helperComponents/TableCard/styles.module.css +79 -0
  82. package/dist/esm/helperComponents/TableEmptyState/TableEmptyState.d.ts +12 -0
  83. package/dist/esm/helperComponents/TableEmptyState/TableEmptyState.js +9 -0
  84. package/dist/esm/helperComponents/TableEmptyState/hooks.d.ts +10 -0
  85. package/dist/esm/helperComponents/TableEmptyState/hooks.js +16 -0
  86. package/dist/esm/helperComponents/TableEmptyState/index.d.ts +2 -0
  87. package/dist/esm/helperComponents/TableEmptyState/index.js +2 -0
  88. package/dist/esm/helperComponents/TableEmptyState/styles.module.css +9 -0
  89. package/dist/esm/helperComponents/TableEmptyState/types.d.ts +9 -0
  90. package/dist/esm/helperComponents/TableEmptyState/types.js +1 -0
  91. package/dist/esm/helperComponents/TablePagination/TablePagination.d.ts +5 -0
  92. package/dist/esm/helperComponents/TablePagination/TablePagination.js +14 -0
  93. package/dist/esm/helperComponents/TablePagination/index.d.ts +1 -0
  94. package/dist/esm/helperComponents/TablePagination/index.js +1 -0
  95. package/dist/esm/helperComponents/TablePagination/styles.module.css +6 -0
  96. package/dist/esm/helperComponents/index.d.ts +4 -0
  97. package/dist/esm/helperComponents/index.js +4 -0
  98. package/dist/esm/index.d.ts +1 -0
  99. package/dist/esm/index.js +1 -0
  100. package/package.json +8 -7
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.11.4 (2025-11-12)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **PD-3377:** contributors update to publish all packages ([719fd3e](https://gitverse.ru/cloud-ru-tech/uikit-product/commits/719fd3e1249e247443b125c47ea408d92c8395c3))
12
+
13
+
14
+
15
+
16
+
6
17
  ## 0.11.3 (2025-11-12)
7
18
 
8
19
  ### Only dependencies have been changed
@@ -0,0 +1,9 @@
1
+ import { FiltersState } from '@sbercloud/uikit-product-mobile-chips';
2
+ import { WithLayoutType } from '@sbercloud/uikit-product-utils';
3
+ import { ServerTableProps } from '@snack-uikit/table';
4
+ import { MobileTableProps } from '../MobileTable';
5
+ export type AdaptiveServerTableProps<TData extends object, TFilters extends FiltersState> = Omit<ServerTableProps<TData, TFilters>, 'columnsSettings'> & Omit<MobileTableProps<TData, TFilters>, 'data'> & {
6
+ columnsSettings?: ServerTableProps<TData, TFilters>['columnsSettings'];
7
+ };
8
+ export declare function AdaptiveServerTable<TData extends object, TFilters extends FiltersState>({ layoutType, ...props }: WithLayoutType<AdaptiveServerTableProps<TData, TFilters>>): import("react/jsx-runtime").JSX.Element;
9
+ export type { ServerTableProps, FiltersState };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.AdaptiveServerTable = AdaptiveServerTable;
15
+ const jsx_runtime_1 = require("react/jsx-runtime");
16
+ const react_1 = require("react");
17
+ const table_1 = require("@snack-uikit/table");
18
+ const constants_1 = require("../constants");
19
+ const hooks_1 = require("../hooks");
20
+ const MobileTable_1 = require("../MobileTable");
21
+ const utils_1 = require("../utils");
22
+ function AdaptiveServerTable(_a) {
23
+ var { layoutType } = _a, props = __rest(_a, ["layoutType"]);
24
+ const isMobile = layoutType === 'mobile';
25
+ const { onChangePage, search: searchProp, pagination, items, total = constants_1.DEFAULT_PAGINATION_LIMIT, limit = constants_1.DEFAULT_PAGINATION_LIMIT, offset = 0 } = props, rest = __rest(props, ["onChangePage", "search", "pagination", "items", "total", "limit", "offset"]);
26
+ const { state: search, onStateChange: setSearch } = (0, hooks_1.useStateControl)(searchProp, '');
27
+ const [tempSearch, setTempSearch] = (0, react_1.useState)(search || '');
28
+ (0, react_1.useEffect)(() => {
29
+ var _a;
30
+ if ((searchProp === null || searchProp === void 0 ? void 0 : searchProp.state) !== tempSearch) {
31
+ setTempSearch((_a = searchProp === null || searchProp === void 0 ? void 0 : searchProp.state) !== null && _a !== void 0 ? _a : '');
32
+ }
33
+ // Needs update only when prop changes
34
+ // eslint-disable-next-line react-hooks/exhaustive-deps
35
+ }, [searchProp === null || searchProp === void 0 ? void 0 : searchProp.state]);
36
+ const handleSearch = (0, react_1.useCallback)((newValue) => {
37
+ setTempSearch(newValue);
38
+ (0, utils_1.onSearchDebounced)(newValue.trim(), setSearch);
39
+ }, [setSearch]);
40
+ const handlePageChange = (0, react_1.useCallback)(({ pageSize, pageIndex }) => onChangePage(pageIndex * pageSize, pageSize), [onChangePage]);
41
+ const pageIndex = (0, react_1.useMemo)(() => Math.floor(offset / limit), [limit, offset]);
42
+ const pageCount = (0, react_1.useMemo)(() => Math.ceil(total / limit), [limit, total]);
43
+ return isMobile ? ((0, jsx_runtime_1.jsx)(MobileTable_1.MobileTable, Object.assign({}, rest, { headerBackground: '1-level', data: items || [], pageCount: pageCount, pagination: Object.assign(Object.assign({}, pagination), { state: {
44
+ pageIndex,
45
+ pageSize: constants_1.DEFAULT_PAGE_SIZE,
46
+ }, onChange: handlePageChange }), search: {
47
+ state: tempSearch,
48
+ onChange: handleSearch,
49
+ loading: searchProp === null || searchProp === void 0 ? void 0 : searchProp.loading,
50
+ placeholder: searchProp === null || searchProp === void 0 ? void 0 : searchProp.placeholder,
51
+ }, manualPagination: true, manualFiltering: true, manualSorting: true }))) : ((0, jsx_runtime_1.jsx)(table_1.ServerTable, Object.assign({}, props)));
52
+ }
@@ -0,0 +1 @@
1
+ export * from './AdaptiveServerTable';
@@ -0,0 +1,17 @@
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("./AdaptiveServerTable"), exports);
@@ -0,0 +1,8 @@
1
+ import { FiltersState } from '@sbercloud/uikit-product-mobile-chips';
2
+ import { WithLayoutType } from '@sbercloud/uikit-product-utils';
3
+ import { CellContext, ColumnDefinition, Table as DesktopTable, TableProps } from '@snack-uikit/table';
4
+ import { MobileTableProps } from '../MobileTable';
5
+ export type AdaptiveTableProps<TData extends object, TFilters extends FiltersState> = TableProps<TData, TFilters> & MobileTableProps<TData, TFilters>;
6
+ export declare function AdaptiveTable<TState extends object, TFilters extends FiltersState>({ layoutType, ...props }: WithLayoutType<AdaptiveTableProps<TState, TFilters>>): import("react/jsx-runtime").JSX.Element;
7
+ export declare const useAdaptiveGetRowActionsColumnDef: ({ layoutType }: WithLayoutType) => typeof DesktopTable.getRowActionsColumnDef;
8
+ export type { TableProps, ColumnDefinition, CellContext };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.useAdaptiveGetRowActionsColumnDef = void 0;
15
+ exports.AdaptiveTable = AdaptiveTable;
16
+ const jsx_runtime_1 = require("react/jsx-runtime");
17
+ const table_1 = require("@snack-uikit/table");
18
+ const MobileTable_1 = require("../MobileTable");
19
+ function AdaptiveTable(_a) {
20
+ var { layoutType } = _a, props = __rest(_a, ["layoutType"]);
21
+ const isMobile = layoutType === 'mobile';
22
+ return isMobile ? (0, jsx_runtime_1.jsx)(MobileTable_1.MobileTable, Object.assign({ headerBackground: '1-level' }, props)) : (0, jsx_runtime_1.jsx)(table_1.Table, Object.assign({}, props));
23
+ }
24
+ const useAdaptiveGetRowActionsColumnDef = ({ layoutType }) => {
25
+ const isMobile = layoutType === 'mobile';
26
+ return (isMobile ? MobileTable_1.MobileTable.getRowActionsColumnDef : table_1.Table.getRowActionsColumnDef);
27
+ };
28
+ exports.useAdaptiveGetRowActionsColumnDef = useAdaptiveGetRowActionsColumnDef;
@@ -0,0 +1 @@
1
+ export * from './AdaptiveTable';
@@ -0,0 +1,17 @@
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("./AdaptiveTable"), exports);
@@ -0,0 +1,12 @@
1
+ import { FiltersState, MobileChipChoiceRowProps } from '@sbercloud/uikit-product-mobile-chips';
2
+ import { WithSupportProps } from '@sbercloud/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' | 'toolbarAfter' | 'moreActions' | 'className' | 'enableFuzzySearch' | 'loading' | 'dataError' | 'dataFiltered' | 'noDataState' | 'noResultsState' | 'errorDataState' | 'sorting' | 'pagination' | 'pageCount' | 'manualFiltering' | 'manualPagination' | 'manualSorting' | 'getRowId' | 'rowSelection' | 'bulkActions'> & WithSupportProps<{
5
+ headlineId?: string;
6
+ headerBackground?: 'default' | '1-level' | '2-level';
7
+ columnFilters?: MobileChipChoiceRowProps<FiltersState>;
8
+ }>;
9
+ 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, getRowId, rowSelection: rowSelectionProp, bulkActions: bulkActionsProp, ...rest }: MobileTableProps<TData, TFilters>): import("react/jsx-runtime").JSX.Element;
10
+ export declare namespace MobileTable {
11
+ var getRowActionsColumnDef: typeof import("../helperComponents").getRowActionsColumnDef;
12
+ }
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.MobileTable = MobileTable;
18
+ const jsx_runtime_1 = require("react/jsx-runtime");
19
+ const react_table_1 = require("@tanstack/react-table");
20
+ const classnames_1 = __importDefault(require("classnames"));
21
+ const react_1 = require("react");
22
+ const uikit_product_locale_1 = require("@sbercloud/uikit-product-locale");
23
+ const uikit_product_mobile_toolbar_1 = require("@sbercloud/uikit-product-mobile-toolbar");
24
+ const uikit_product_utils_1 = require("@sbercloud/uikit-product-utils");
25
+ const skeleton_1 = require("@snack-uikit/skeleton");
26
+ const helperComponents_1 = require("../helperComponents");
27
+ const constants_1 = require("./constants");
28
+ const hooks_1 = require("./hooks");
29
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
30
+ const utils_1 = require("./utils");
31
+ function MobileTable(_a) {
32
+ 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, getRowId, rowSelection: rowSelectionProp, bulkActions: bulkActionsProp } = _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", "getRowId", "rowSelection", "bulkActions"]);
33
+ const defaultPaginationState = (0, react_1.useMemo)(() => ({ pageIndex: 0, pageSize: constants_1.DEFAULT_PAGE_SIZE }), []);
34
+ const { state: sorting, onStateChange: onSortingChange } = (0, hooks_1.useStateControl)(sortingProp, []);
35
+ const { state: globalFilter, onStateChange: onGlobalFilterChange } = (0, hooks_1.useStateControl)(search, '');
36
+ const { state: pagination, onStateChange: onPaginationChange } = (0, hooks_1.useStateControl)(paginationProp, defaultPaginationState);
37
+ const { state: rowSelection, onStateChange: onRowSelectionChange } = (0, hooks_1.useStateControl)(rowSelectionProp, {});
38
+ const enableRowSelection = (0, react_1.useCallback)((row) => {
39
+ const parent = row.getParentRow();
40
+ const isParentSelected = parent ? parent.getCanSelect() : true;
41
+ let isCurrentRowSelected = true;
42
+ if ((rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable) !== undefined) {
43
+ isCurrentRowSelected =
44
+ typeof rowSelectionProp.enable === 'boolean' ? rowSelectionProp.enable : rowSelectionProp.enable(row);
45
+ }
46
+ return isParentSelected && isCurrentRowSelected;
47
+ }, [rowSelectionProp]);
48
+ const table = (0, react_table_1.useReactTable)({
49
+ data,
50
+ columns: columnDefinitions,
51
+ getCoreRowModel: (0, react_table_1.getCoreRowModel)(),
52
+ getPaginationRowModel: (0, react_table_1.getPaginationRowModel)(),
53
+ getFilteredRowModel: (0, react_table_1.getFilteredRowModel)(),
54
+ getSortedRowModel: (0, react_table_1.getSortedRowModel)(),
55
+ state: { pagination, globalFilter, sorting, rowSelection },
56
+ pageCount,
57
+ onPaginationChange,
58
+ onSortingChange,
59
+ globalFilterFn: enableFuzzySearch ? utils_1.fuzzyFilter : 'includesString',
60
+ enableFilters: true,
61
+ manualSorting,
62
+ manualPagination,
63
+ manualFiltering,
64
+ getRowId,
65
+ onRowSelectionChange,
66
+ enableGrouping: true,
67
+ enableRowSelection,
68
+ enableMultiRowSelection: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable) && (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow),
69
+ enableSubRowSelection: true,
70
+ });
71
+ const { loadingTable } = (0, hooks_1.useLoadingTable)({
72
+ pageSize: constants_1.DEFAULT_PAGE_SIZE,
73
+ columnDefinitions,
74
+ });
75
+ const tableRows = table.getRowModel().rows;
76
+ const loadingTableRows = loadingTable.getRowModel().rows;
77
+ const { t } = (0, uikit_product_locale_1.useLocale)('Table');
78
+ const emptyStates = (0, helperComponents_1.useEmptyState)({ noDataState, noResultsState, errorDataState });
79
+ const handleOnRefresh = (0, react_1.useCallback)(() => {
80
+ table.resetRowSelection();
81
+ onRefresh === null || onRefresh === void 0 ? void 0 : onRefresh();
82
+ }, [onRefresh, table]);
83
+ const enableSelection = Boolean(rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable);
84
+ const bulkActions = (0, react_1.useMemo)(() => enableSelection
85
+ ? bulkActionsProp === null || bulkActionsProp === void 0 ? void 0 : bulkActionsProp.map(action => (Object.assign(Object.assign({}, action), { onClick: () => { var _a; return (_a = action.onClick) === null || _a === void 0 ? void 0 : _a.call(action, table.getState().rowSelection, table.resetRowSelection); } })))
86
+ : undefined, [bulkActionsProp, enableSelection, table]);
87
+ const handleOnToolbarCheck = (0, react_1.useCallback)(() => {
88
+ if (!loading && table.getTopRows().length) {
89
+ const centerRows = table.getCenterRows();
90
+ const isSomeRowsSelected = table.getIsSomePageRowsSelected();
91
+ const isAllCenterRowsSelected = centerRows.every(row => row.getIsSelected());
92
+ if (isAllCenterRowsSelected) {
93
+ table.resetRowSelection();
94
+ return;
95
+ }
96
+ centerRows.forEach(row => row.toggleSelected(isSomeRowsSelected ? true : undefined));
97
+ return;
98
+ }
99
+ if (!loading && (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow)) {
100
+ table.toggleAllPageRowsSelected();
101
+ return;
102
+ }
103
+ }, [loading, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow, table]);
104
+ const selectionMode = (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow)
105
+ ? 'multiple'
106
+ : 'single';
107
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, classnames_1.default)(styles_module_scss_1.default.tableWrapper, className) }, (0, uikit_product_utils_1.extractSupportProps)(rest), { children: [(!suppressToolbar || columnFilters) && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.header, "data-background": headerBackground, children: (0, jsx_runtime_1.jsx)(uikit_product_mobile_toolbar_1.MobileToolbar, { search: suppressSearch
108
+ ? undefined
109
+ : {
110
+ value: globalFilter,
111
+ onChange: onGlobalFilterChange,
112
+ loading: search === null || search === void 0 ? void 0 : search.loading,
113
+ placeholder: (search === null || search === void 0 ? void 0 : search.placeholder) || t('searchPlaceholder'),
114
+ }, onRefresh: onRefresh ? handleOnRefresh : undefined, outline: true, filterRow: columnFilters, after: toolbarAfter, moreActions: moreActions, bulkActions: bulkActions, selectedCount: table.getSelectedRowModel().rows.length, selectionMode: selectionMode, onCheck: enableSelection ? handleOnToolbarCheck : undefined, checked: table.getIsAllPageRowsSelected(), indeterminate: table.getIsSomePageRowsSelected() }) })), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.table, children: loading ? ((0, jsx_runtime_1.jsx)(skeleton_1.SkeletonContextProvider, { loading: true, children: loadingTableRows.map((row, index) => ((0, jsx_runtime_1.jsx)(helperComponents_1.TableCard, { headlineId: headlineId, row: row, table: loadingTable, selection: 'none' }, index))) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [tableRows.map((row, index) => ((0, jsx_runtime_1.jsx)(helperComponents_1.TableCard, { headlineId: headlineId, row: row, table: table, selection: enableSelection ? selectionMode : 'none' }, index))), (0, jsx_runtime_1.jsx)(helperComponents_1.TableEmptyState, { emptyStates: emptyStates, dataError: dataError, dataFiltered: dataFiltered || Boolean(table.getState().globalFilter), tableRowsLength: tableRows.length })] })) }), !suppressPagination && (0, jsx_runtime_1.jsx)(helperComponents_1.TablePagination, { table: table })] })));
115
+ }
116
+ MobileTable.getRowActionsColumnDef = helperComponents_1.getRowActionsColumnDef;
@@ -0,0 +1,3 @@
1
+ export declare const DEFAULT_PAGE_SIZE = 5;
2
+ export declare const SEARCH_DELAY = 500;
3
+ export declare const DEFAULT_PAGINATION_LIMIT = 10;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PAGINATION_LIMIT = exports.SEARCH_DELAY = exports.DEFAULT_PAGE_SIZE = void 0;
4
+ exports.DEFAULT_PAGE_SIZE = 5;
5
+ exports.SEARCH_DELAY = 500;
6
+ exports.DEFAULT_PAGINATION_LIMIT = 10;
@@ -0,0 +1,18 @@
1
+ import { FiltersState } from '@sbercloud/uikit-product-mobile-chips';
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
+ type UseLoadingTableProps<TData extends object, TFilters extends FiltersState> = {
12
+ columnDefinitions: TableProps<TData, TFilters>['columnDefinitions'];
13
+ pageSize: number;
14
+ };
15
+ export declare function useLoadingTable<TData extends object, TFilters extends FiltersState>({ pageSize, columnDefinitions, }: UseLoadingTableProps<TData, TFilters>): {
16
+ loadingTable: import("@tanstack/react-table").Table<TData>;
17
+ };
18
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useStateControl = useStateControl;
4
+ exports.useLoadingTable = useLoadingTable;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_table_1 = require("@tanstack/react-table");
7
+ const react_1 = require("react");
8
+ const uncontrollable_1 = require("uncontrollable");
9
+ const skeleton_1 = require("@snack-uikit/skeleton");
10
+ const constants_1 = require("../constants");
11
+ function useStateControl(control, defaultState) {
12
+ var _a, _b;
13
+ const [state, onStateChange] = (0, uncontrollable_1.useUncontrolledProp)(control === null || control === void 0 ? void 0 : control.state, (_b = (_a = control === null || control === void 0 ? void 0 : control.state) !== null && _a !== void 0 ? _a : control === null || control === void 0 ? void 0 : control.initialState) !== null && _b !== void 0 ? _b : defaultState, (controlState) => {
14
+ var _a;
15
+ const newState = typeof controlState === 'function' ? controlState(state) : controlState;
16
+ (_a = control === null || control === void 0 ? void 0 : control.onChange) === null || _a === void 0 ? void 0 : _a.call(control, newState);
17
+ });
18
+ return {
19
+ state,
20
+ onStateChange,
21
+ };
22
+ }
23
+ function useLoadingTable({ pageSize, columnDefinitions, }) {
24
+ const data = (0, react_1.useMemo)(() => (Array.from({ length: pageSize }).map(() => ({})) || []), [pageSize]);
25
+ const columns = (0, react_1.useMemo)(() => columnDefinitions
26
+ .filter(column => column.id !== constants_1.ROW_ACTIONS_COLUMN_ID)
27
+ .map(column => (Object.assign(Object.assign({}, column), { cell: () => (0, jsx_runtime_1.jsx)(skeleton_1.SkeletonText, { lines: 1, width: '100%' }) }))), [columnDefinitions]);
28
+ const loadingTable = (0, react_table_1.useReactTable)({
29
+ data,
30
+ columns,
31
+ getCoreRowModel: (0, react_table_1.getCoreRowModel)(),
32
+ });
33
+ return { loadingTable };
34
+ }
@@ -0,0 +1,3 @@
1
+ export * from './AdaptiveTable';
2
+ export * from './AdaptiveServerTable';
3
+ export * from './MobileTable';
@@ -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("./AdaptiveTable"), exports);
18
+ __exportStar(require("./AdaptiveServerTable"), exports);
19
+ __exportStar(require("./MobileTable"), exports);
@@ -0,0 +1,42 @@
1
+ .tableWrapper{
2
+ position:relative;
3
+ z-index:0;
4
+ margin-top:calc(-1 * var(--dimension-1m, 8px));
5
+ }
6
+
7
+ .header{
8
+ display:flex;
9
+ flex-direction:column;
10
+ gap:var(--dimension-1m, 8px);
11
+ position:sticky;
12
+ z-index:1;
13
+ top:0;
14
+ padding-top:var(--dimension-1m, 8px);
15
+ padding-bottom:var(--dimension-1m, 8px);
16
+ margin-bottom:calc(-1 * var(--dimension-1m, 8px));
17
+ }
18
+ .header[data-background=default]{
19
+ background-color:var(--sys-neutral-background, #eeeff3);
20
+ }
21
+ .header[data-background="1-level"]{
22
+ background-color:var(--sys-neutral-background1-level, #fdfdfd);
23
+ }
24
+ .header[data-background="2-level"]{
25
+ background-color:var(--sys-neutral-background2-level, #ffffff);
26
+ }
27
+
28
+ .table{
29
+ box-sizing:border-box;
30
+ border:var(--border-width-012m, 1px) solid var(--sys-neutral-decor-default, #dde0ea);
31
+ border-radius:var(--dimension-050m, 4px);
32
+ background:var(--sys-neutral-background1-level, #fdfdfd);
33
+ margin-top:var(--dimension-1m, 8px);
34
+ }
35
+
36
+ .filtersWrapper{
37
+ display:flex;
38
+ flex-wrap:wrap;
39
+ gap:var(--dimension-050m, 4px);
40
+ align-items:center;
41
+ justify-content:flex-start;
42
+ }
@@ -0,0 +1,3 @@
1
+ import { FilterFn } from '@tanstack/react-table';
2
+ export declare const fuzzyFilter: FilterFn<any>;
3
+ export declare const onSearchDebounced: import("lodash").DebouncedFunc<(newValue: string, onChange: (newValue: string) => void) => void>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.onSearchDebounced = exports.fuzzyFilter = void 0;
7
+ const match_sorter_utils_1 = require("@tanstack/match-sorter-utils");
8
+ const lodash_debounce_1 = __importDefault(require("lodash.debounce"));
9
+ const constants_1 = require("./constants");
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ const fuzzyFilter = (row, columnId, value, addMeta) => {
12
+ const itemRank = (0, match_sorter_utils_1.rankItem)(row.getValue(columnId), value);
13
+ addMeta({
14
+ itemRank,
15
+ });
16
+ return itemRank.passed;
17
+ };
18
+ exports.fuzzyFilter = fuzzyFilter;
19
+ exports.onSearchDebounced = (0, lodash_debounce_1.default)((newValue, onChange) => {
20
+ onChange(newValue);
21
+ }, constants_1.SEARCH_DELAY);
@@ -0,0 +1,17 @@
1
+ export declare const TEST_IDS: {
2
+ headerSortIndicator: string;
3
+ headerRow: string;
4
+ headerCell: string;
5
+ bodyRow: string;
6
+ bodyCell: string;
7
+ pinnedCells: string;
8
+ rowSelect: string;
9
+ rowActions: {
10
+ droplistTrigger: string;
11
+ droplist: string;
12
+ option: string;
13
+ };
14
+ statusIndicator: string;
15
+ statusLabel: string;
16
+ };
17
+ export declare const ROW_ACTIONS_COLUMN_ID = "rowActions";
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ROW_ACTIONS_COLUMN_ID = exports.TEST_IDS = void 0;
4
+ exports.TEST_IDS = {
5
+ headerSortIndicator: 'table__header__sort-indicator',
6
+ headerRow: 'table__header-row',
7
+ headerCell: 'table__header-cell',
8
+ bodyRow: 'table__body-row',
9
+ bodyCell: 'table__body-cell',
10
+ pinnedCells: 'table__pinned-cells',
11
+ rowSelect: 'table__row-select',
12
+ rowActions: {
13
+ droplistTrigger: 'table__body-row__droplistTrigger',
14
+ droplist: 'table__body-row__actions-droplist',
15
+ option: 'list__base-item-option',
16
+ },
17
+ statusIndicator: 'table__status-indicator',
18
+ statusLabel: 'table__status-label',
19
+ };
20
+ exports.ROW_ACTIONS_COLUMN_ID = 'rowActions';
@@ -0,0 +1,13 @@
1
+ import { CellContext } from '@tanstack/react-table';
2
+ import { FiltersState } from '@sbercloud/uikit-product-mobile-chips';
3
+ import { MobileDroplistProps } from '@sbercloud/uikit-product-mobile-dropdown';
4
+ import { MobileTableProps } from '../../components';
5
+ export type ActionsGenerator<TData> = (cell: CellContext<TData, unknown>) => MobileDroplistProps['items'];
6
+ export type RowActionsColumnDefProps<TData> = {
7
+ /** Действия для строки */
8
+ actionsGenerator: ActionsGenerator<TData>;
9
+ /** Закрепление колонки справа в таблице */
10
+ pinned?: boolean;
11
+ };
12
+ /** Вспомогательная функция для создания ячейки с дополнительными действиями у строки */
13
+ export declare function getRowActionsColumnDef<TData extends object, TFilters extends FiltersState>({ actionsGenerator, }: RowActionsColumnDefProps<TData>): MobileTableProps<TData, TFilters>['columnDefinitions'][0];
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getRowActionsColumnDef = getRowActionsColumnDef;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const uikit_product_icons_1 = require("@sbercloud/uikit-product-icons");
10
+ const uikit_product_mobile_dropdown_1 = require("@sbercloud/uikit-product-mobile-dropdown");
11
+ const button_1 = require("@snack-uikit/button");
12
+ const constants_1 = require("../../constants");
13
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
14
+ function RowActionsCell({ row, actions }) {
15
+ const [dropListOpened, setDropListOpen] = (0, react_1.useState)(false);
16
+ const patchItem = (0, react_1.useCallback)((item, cb) => {
17
+ if ((0, uikit_product_mobile_dropdown_1.isBaseItemProps)(item)) {
18
+ return Object.assign(Object.assign({}, item), { onClick(e) {
19
+ var _a;
20
+ (_a = item.onClick) === null || _a === void 0 ? void 0 : _a.call(item, e);
21
+ cb(e);
22
+ } });
23
+ }
24
+ return Object.assign(Object.assign({}, item), { items: item.items.map(i => patchItem(i, cb)) });
25
+ }, []);
26
+ const disabled = !row.getCanSelect();
27
+ const stopPropagationClick = (e) => {
28
+ e.stopPropagation();
29
+ };
30
+ const patchedItems = (0, react_1.useMemo)(() => actions.map(item => patchItem(item, () => setDropListOpen(false))), [actions, patchItem, setDropListOpen]);
31
+ return (
32
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
33
+ (0, jsx_runtime_1.jsx)("div", { onClick: stopPropagationClick, className: styles_module_scss_1.default.rowActionsCellWrap, "data-open": dropListOpened || undefined, children: !disabled && Boolean(actions.length) && ((0, jsx_runtime_1.jsx)(uikit_product_mobile_dropdown_1.MobileDroplist, { open: dropListOpened, onOpenChange: setDropListOpen, "data-test-id": constants_1.TEST_IDS.rowActions.droplist, items: patchedItems, children: (0, jsx_runtime_1.jsx)(button_1.ButtonFunction, { icon: (0, jsx_runtime_1.jsx)(uikit_product_icons_1.MoreSVG, { size: 24 }), "data-test-id": constants_1.TEST_IDS.rowActions.droplistTrigger }) })) }));
34
+ }
35
+ /** Вспомогательная функция для создания ячейки с дополнительными действиями у строки */
36
+ function getRowActionsColumnDef({ actionsGenerator, }) {
37
+ return {
38
+ id: constants_1.ROW_ACTIONS_COLUMN_ID,
39
+ meta: {
40
+ skipOnExport: true,
41
+ },
42
+ cell: cell => (0, jsx_runtime_1.jsx)(RowActionsCell, { row: cell.row, actions: actionsGenerator(cell) }),
43
+ };
44
+ }
@@ -0,0 +1 @@
1
+ export * from './RowActionsCell';
@@ -0,0 +1,17 @@
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("./RowActionsCell"), exports);
@@ -0,0 +1,29 @@
1
+ .rowActionsCell{
2
+ position:relative;
3
+ border-color:inherit;
4
+ }
5
+ .rowActionsCell::after{
6
+ pointer-events:none;
7
+ content:"";
8
+ position:absolute;
9
+ top:calc(0px - var(--border-width-table, 1px));
10
+ bottom:calc(0px - var(--border-width-table, 1px));
11
+ left:0;
12
+ box-sizing:border-box;
13
+ width:100%;
14
+ border-left:var(--border-width-table, 1px) solid;
15
+ border-color:inherit;
16
+ }
17
+
18
+ .rowActionsCellWrap{
19
+ --offset:0px;
20
+ cursor:pointer;
21
+ box-sizing:border-box;
22
+ width:100%;
23
+ height:100%;
24
+ padding-left:var(--space-table-cell-action-padding, 4px);
25
+ padding-right:var(--space-table-cell-action-padding, 4px);
26
+ display:flex;
27
+ align-items:center;
28
+ justify-content:center;
29
+ }
@@ -0,0 +1,9 @@
1
+ import { Row, Table } from '@tanstack/react-table';
2
+ type TableCardProps<TData extends object> = {
3
+ headlineId?: string;
4
+ row: Row<TData>;
5
+ table: Table<TData>;
6
+ selection: 'multiple' | 'single' | 'none';
7
+ };
8
+ export declare function TableCard<TData extends object>({ headlineId, table, row, selection }: TableCardProps<TData>): import("react/jsx-runtime").JSX.Element;
9
+ export {};