@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
@@ -0,0 +1,36 @@
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.TableCard = TableCard;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_table_1 = require("@tanstack/react-table");
9
+ const react_1 = require("react");
10
+ const toggles_1 = require("@snack-uikit/toggles");
11
+ const constants_1 = require("../../constants");
12
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
13
+ function TableCard({ headlineId, table, row, selection }) {
14
+ const headerGroups = table.getHeaderGroups();
15
+ const headerCell = row._getAllCellsByColumnId()[headlineId !== null && headlineId !== void 0 ? headlineId : ''];
16
+ const headerColumn = table.getFlatHeaders().find(header => header.id === headlineId);
17
+ const actionsCell = row._getAllCellsByColumnId()[constants_1.ROW_ACTIONS_COLUMN_ID];
18
+ const actionsColumn = table.getFlatHeaders().find(header => header.id === constants_1.ROW_ACTIONS_COLUMN_ID);
19
+ const isSelected = row.getIsSelected();
20
+ const handleSelection = (0, react_1.useCallback)(() => {
21
+ if (selection === 'single')
22
+ row.toggleSelected(true);
23
+ if (selection === 'multiple')
24
+ row.toggleSelected(!isSelected);
25
+ }, [isSelected, row, selection]);
26
+ return (
27
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
28
+ (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.card, "data-is-selected": isSelected !== null && isSelected !== void 0 ? isSelected : undefined, "data-selection-mode": selection, onClick: handleSelection, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.content, children: [headerCell && headerColumn && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.headline, children: (0, react_table_1.flexRender)(headerColumn.column.columnDef.cell, headerCell.getContext()) })), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.body, children: headerGroups.map(group => group.headers.map((header, index) => {
29
+ if ([headlineId, constants_1.ROW_ACTIONS_COLUMN_ID].includes(header.id)) {
30
+ return null;
31
+ }
32
+ const column = header.column.columnDef;
33
+ const cell = row._getAllCellsByColumnId()[header.column.id];
34
+ return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.cardRow, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.cardRowHeader, children: (0, react_table_1.flexRender)(column.header, header.getContext()) }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.cardRowContent, children: (0, react_table_1.flexRender)(column.cell, cell.getContext()) })] }, header.id || index));
35
+ })) })] }), selection === 'single' && (0, jsx_runtime_1.jsx)(toggles_1.Radio, { size: 'm', className: styles_module_scss_1.default.selectionController, checked: isSelected }), selection === 'multiple' && (0, jsx_runtime_1.jsx)(toggles_1.Checkbox, { size: 'm', className: styles_module_scss_1.default.selectionController, checked: isSelected }), actionsCell && actionsColumn && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.button, children: (0, react_table_1.flexRender)(actionsColumn.column.columnDef.cell, actionsCell.getContext()) }))] }));
36
+ }
@@ -0,0 +1 @@
1
+ export * from './TableCard';
@@ -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("./TableCard"), exports);
@@ -0,0 +1,79 @@
1
+ .selectionController{
2
+ position:absolute;
3
+ bottom:var(--dimension-2m, 16px);
4
+ right:var(--dimension-2m, 16px);
5
+ }
6
+
7
+ .content{
8
+ position:relative;
9
+ }
10
+
11
+ .card{
12
+ position:relative;
13
+ box-sizing:border-box;
14
+ padding:var(--dimension-2m, 16px);
15
+ display:flex;
16
+ flex-direction:column;
17
+ gap:var(--dimension-2m, 16px);
18
+ }
19
+ .card:not(:last-child){
20
+ border-bottom:var(--border-width-general-xs, 1px) solid var(--sys-neutral-decor-default, #dde0ea);
21
+ }
22
+ .card::before{
23
+ content:"";
24
+ position:absolute;
25
+ top:0;
26
+ right:0;
27
+ bottom:0;
28
+ left:0;
29
+ opacity:0;
30
+ background-color:var(--sys-primary-background1-level, #f5fdf8);
31
+ }
32
+ .card[data-selection-mode=multiple][data-is-selected=true]::before, .card[data-selection-mode=single][data-is-selected=true]::before{
33
+ opacity:1;
34
+ }
35
+
36
+ .button{
37
+ position:absolute;
38
+ top:var(--dimension-1m, 8px);
39
+ right:var(--dimension-1m, 8px);
40
+ }
41
+
42
+ .headline{
43
+ font-family:var(--sans-title-m-font-family, SB Sans Interface);
44
+ font-weight:var(--sans-title-m-font-weight, Semibold);
45
+ line-height:var(--sans-title-m-line-height, 24px);
46
+ font-size:var(--sans-title-m-font-size, 16px);
47
+ letter-spacing:var(--sans-title-m-letter-spacing, 0.15px);
48
+ paragraph-spacing:var(--sans-title-m-paragraph-spacing, 8.8px);
49
+ color:var(--sys-neutral-text-main, #41424e);
50
+ padding-right:var(--dimension-4m, 32px);
51
+ }
52
+
53
+ .body{
54
+ display:flex;
55
+ flex-direction:column;
56
+ gap:var(--dimension-2m, 16px);
57
+ }
58
+
59
+ .cardRow{
60
+ font-family:var(--sans-body-m-font-family, SB Sans Interface);
61
+ font-weight:var(--sans-body-m-font-weight, Regular);
62
+ line-height:var(--sans-body-m-line-height, 20px);
63
+ font-size:var(--sans-body-m-font-size, 14px);
64
+ letter-spacing:var(--sans-body-m-letter-spacing, 0.1px);
65
+ paragraph-spacing:var(--sans-body-m-paragraph-spacing, 7.7px);
66
+ display:flex;
67
+ flex-direction:column;
68
+ gap:var(--dimension-050m, 4px);
69
+ }
70
+
71
+ .cardRowHeader{
72
+ color:var(--sys-neutral-text-light, #8b8e9b);
73
+ word-break:break-word;
74
+ }
75
+
76
+ .cardRowContent{
77
+ color:var(--sys-neutral-text-main, #41424e);
78
+ word-break:break-word;
79
+ }
@@ -0,0 +1,12 @@
1
+ import { EmptyStateProps } from './types';
2
+ export type TableEmptyState = {
3
+ emptyStates: {
4
+ noDataState: EmptyStateProps;
5
+ noResultsState: EmptyStateProps;
6
+ errorDataState: EmptyStateProps;
7
+ };
8
+ dataError?: boolean;
9
+ dataFiltered?: boolean;
10
+ tableRowsLength: number;
11
+ };
12
+ export declare function TableEmptyState({ dataError, dataFiltered, tableRowsLength, emptyStates }: TableEmptyState): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,15 @@
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.TableEmptyState = TableEmptyState;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const info_block_1 = require("@snack-uikit/info-block");
9
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
10
+ function TableEmptyState({ dataError, dataFiltered, tableRowsLength, emptyStates }) {
11
+ if (tableRowsLength) {
12
+ return null;
13
+ }
14
+ return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.tableEmptyStateWrapper, children: [dataError && (0, jsx_runtime_1.jsx)(info_block_1.InfoBlock, Object.assign({}, emptyStates.errorDataState, { size: 'm', align: 'vertical' })), !dataError && dataFiltered && (0, jsx_runtime_1.jsx)(info_block_1.InfoBlock, Object.assign({}, emptyStates.noResultsState, { size: 'm', align: 'vertical' })), !dataError && !dataFiltered && (0, jsx_runtime_1.jsx)(info_block_1.InfoBlock, Object.assign({}, emptyStates.noDataState, { size: 'm', align: 'vertical' }))] }));
15
+ }
@@ -0,0 +1,10 @@
1
+ import { EmptyStateProps } from './types';
2
+ export declare function useEmptyState({ noDataState: noDataStateProp, noResultsState: noResultsStateProp, errorDataState: errorDataStateProp, }: {
3
+ noDataState?: EmptyStateProps;
4
+ noResultsState?: EmptyStateProps;
5
+ errorDataState?: EmptyStateProps;
6
+ }): {
7
+ noDataState: EmptyStateProps;
8
+ noResultsState: EmptyStateProps;
9
+ errorDataState: EmptyStateProps;
10
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useEmptyState = useEmptyState;
4
+ const react_1 = require("react");
5
+ const uikit_product_icons_1 = require("@sbercloud/uikit-product-icons");
6
+ const uikit_product_locale_1 = require("@sbercloud/uikit-product-locale");
7
+ function useEmptyState({ noDataState: noDataStateProp, noResultsState: noResultsStateProp, errorDataState: errorDataStateProp, }) {
8
+ const { t } = (0, uikit_product_locale_1.useLocale)('Table');
9
+ return (0, react_1.useMemo)(() => {
10
+ const noDataState = Object.assign({ icon: { icon: uikit_product_icons_1.SearchSVG, appearance: 'neutral', decor: true }, title: t('noData.title') }, noDataStateProp);
11
+ const noResultsState = Object.assign({ icon: { icon: uikit_product_icons_1.SearchSVG, appearance: 'neutral', decor: true }, title: t('noResults.title'), description: t('noResults.description') }, noResultsStateProp);
12
+ const errorDataState = Object.assign({ icon: { icon: uikit_product_icons_1.CrossSVG, appearance: 'red', decor: true }, title: t('errorData.title'), description: t('errorData.description') }, errorDataStateProp);
13
+ return {
14
+ noDataState,
15
+ noResultsState,
16
+ errorDataState,
17
+ };
18
+ }, [errorDataStateProp, noDataStateProp, noResultsStateProp, t]);
19
+ }
@@ -0,0 +1,2 @@
1
+ export * from './TableEmptyState';
2
+ export * from './hooks';
@@ -0,0 +1,18 @@
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("./TableEmptyState"), exports);
18
+ __exportStar(require("./hooks"), exports);
@@ -0,0 +1,9 @@
1
+ .tableEmptyStateWrapper{
2
+ display:flex;
3
+ flex-direction:column;
4
+ align-items:center;
5
+ justify-content:center;
6
+ box-sizing:border-box;
7
+ height:calc(var(--page-size, 10) * var(--size-table-line-height, 40px) + var(--size-table-line-height, 40px));
8
+ padding:var(--dimension-3m, 24px);
9
+ }
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ import { IconPredefinedProps } from '@snack-uikit/icon-predefined';
3
+ export type EmptyStateProps = {
4
+ title?: string;
5
+ description?: string;
6
+ icon?: Pick<IconPredefinedProps, 'icon' | 'decor' | 'appearance'>;
7
+ footer?: ReactNode;
8
+ className?: string;
9
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ import { Table } from '@tanstack/react-table';
2
+ export type TablePaginationProps<TData> = {
3
+ table: Table<TData>;
4
+ };
5
+ export declare function TablePagination<TData>({ table }: TablePaginationProps<TData>): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,20 @@
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.TablePagination = TablePagination;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const pagination_1 = require("@snack-uikit/pagination");
10
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
11
+ function TablePagination({ table }) {
12
+ const handlePaginationOnChange = (0, react_1.useCallback)((pageIndex) => {
13
+ table.setPageIndex(pageIndex - 1);
14
+ }, [table]);
15
+ const tablePaginationState = table.getState().pagination;
16
+ if (table.getPageCount() <= 1) {
17
+ return null;
18
+ }
19
+ return ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.pagination, children: table.getPageCount() > 1 && ((0, jsx_runtime_1.jsx)(pagination_1.Pagination, { maxLength: 6, total: table.getPageCount(), page: tablePaginationState.pageIndex + 1, onChange: handlePaginationOnChange, size: 's' })) }));
20
+ }
@@ -0,0 +1 @@
1
+ export * from './TablePagination';
@@ -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("./TablePagination"), exports);
@@ -0,0 +1,6 @@
1
+ .pagination{
2
+ display:flex;
3
+ align-items:center;
4
+ justify-content:center;
5
+ padding-top:var(--dimension-1m, 8px);
6
+ }
@@ -0,0 +1,4 @@
1
+ export * from './RowActionsCell';
2
+ export * from './TableCard';
3
+ export * from './TablePagination';
4
+ export * from './TableEmptyState';
@@ -0,0 +1,20 @@
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);
18
+ __exportStar(require("./TableCard"), exports);
19
+ __exportStar(require("./TablePagination"), exports);
20
+ __exportStar(require("./TableEmptyState"), exports);
@@ -0,0 +1 @@
1
+ export * from './components';
@@ -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("./components"), exports);
@@ -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,49 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { useCallback, useEffect, useMemo, useState } from 'react';
14
+ import { ServerTable as DesktopTable } from '@snack-uikit/table';
15
+ import { DEFAULT_PAGE_SIZE, DEFAULT_PAGINATION_LIMIT } from '../constants';
16
+ import { useStateControl } from '../hooks';
17
+ import { MobileTable } from '../MobileTable';
18
+ import { onSearchDebounced } from '../utils';
19
+ export function AdaptiveServerTable(_a) {
20
+ var { layoutType } = _a, props = __rest(_a, ["layoutType"]);
21
+ const isMobile = layoutType === 'mobile';
22
+ 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 [tempSearch, setTempSearch] = useState(search || '');
25
+ useEffect(() => {
26
+ var _a;
27
+ if ((searchProp === null || searchProp === void 0 ? void 0 : searchProp.state) !== tempSearch) {
28
+ setTempSearch((_a = searchProp === null || searchProp === void 0 ? void 0 : searchProp.state) !== null && _a !== void 0 ? _a : '');
29
+ }
30
+ // Needs update only when prop changes
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ }, [searchProp === null || searchProp === void 0 ? void 0 : searchProp.state]);
33
+ const handleSearch = useCallback((newValue) => {
34
+ setTempSearch(newValue);
35
+ onSearchDebounced(newValue.trim(), setSearch);
36
+ }, [setSearch]);
37
+ const handlePageChange = useCallback(({ pageSize, pageIndex }) => onChangePage(pageIndex * pageSize, pageSize), [onChangePage]);
38
+ const pageIndex = useMemo(() => Math.floor(offset / limit), [limit, offset]);
39
+ const pageCount = useMemo(() => Math.ceil(total / limit), [limit, total]);
40
+ return isMobile ? (_jsx(MobileTable, Object.assign({}, rest, { headerBackground: '1-level', data: items || [], pageCount: pageCount, pagination: Object.assign(Object.assign({}, pagination), { state: {
41
+ pageIndex,
42
+ pageSize: DEFAULT_PAGE_SIZE,
43
+ }, onChange: handlePageChange }), search: {
44
+ state: tempSearch,
45
+ onChange: handleSearch,
46
+ loading: searchProp === null || searchProp === void 0 ? void 0 : searchProp.loading,
47
+ placeholder: searchProp === null || searchProp === void 0 ? void 0 : searchProp.placeholder,
48
+ }, manualPagination: true, manualFiltering: true, manualSorting: true }))) : (_jsx(DesktopTable, Object.assign({}, props)));
49
+ }
@@ -0,0 +1 @@
1
+ export * from './AdaptiveServerTable';
@@ -0,0 +1 @@
1
+ export * from './AdaptiveServerTable';
@@ -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,23 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { Table as DesktopTable, Table } from '@snack-uikit/table';
14
+ import { MobileTable } from '../MobileTable';
15
+ export function AdaptiveTable(_a) {
16
+ var { layoutType } = _a, props = __rest(_a, ["layoutType"]);
17
+ const isMobile = layoutType === 'mobile';
18
+ return isMobile ? _jsx(MobileTable, Object.assign({ headerBackground: '1-level' }, props)) : _jsx(Table, Object.assign({}, props));
19
+ }
20
+ export const useAdaptiveGetRowActionsColumnDef = ({ layoutType }) => {
21
+ const isMobile = layoutType === 'mobile';
22
+ return (isMobile ? MobileTable.getRowActionsColumnDef : DesktopTable.getRowActionsColumnDef);
23
+ };
@@ -0,0 +1 @@
1
+ export * from './AdaptiveTable';
@@ -0,0 +1 @@
1
+ export * from './AdaptiveTable';
@@ -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,110 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table';
14
+ import cn from 'classnames';
15
+ import { useCallback, useMemo } from 'react';
16
+ import { useLocale } from '@sbercloud/uikit-product-locale';
17
+ import { MobileToolbar } from '@sbercloud/uikit-product-mobile-toolbar';
18
+ import { extractSupportProps } from '@sbercloud/uikit-product-utils';
19
+ import { SkeletonContextProvider } from '@snack-uikit/skeleton';
20
+ import { getRowActionsColumnDef, TableCard, TableEmptyState, TablePagination, useEmptyState, } from '../helperComponents';
21
+ import { DEFAULT_PAGE_SIZE } from './constants';
22
+ import { useLoadingTable, useStateControl } from './hooks';
23
+ import styles from './styles.module.css';
24
+ import { fuzzyFilter } from './utils';
25
+ export function MobileTable(_a) {
26
+ 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"]);
27
+ const defaultPaginationState = useMemo(() => ({ pageIndex: 0, pageSize: DEFAULT_PAGE_SIZE }), []);
28
+ const { state: sorting, onStateChange: onSortingChange } = useStateControl(sortingProp, []);
29
+ const { state: globalFilter, onStateChange: onGlobalFilterChange } = useStateControl(search, '');
30
+ const { state: pagination, onStateChange: onPaginationChange } = useStateControl(paginationProp, defaultPaginationState);
31
+ const { state: rowSelection, onStateChange: onRowSelectionChange } = useStateControl(rowSelectionProp, {});
32
+ const enableRowSelection = useCallback((row) => {
33
+ const parent = row.getParentRow();
34
+ const isParentSelected = parent ? parent.getCanSelect() : true;
35
+ let isCurrentRowSelected = true;
36
+ if ((rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable) !== undefined) {
37
+ isCurrentRowSelected =
38
+ typeof rowSelectionProp.enable === 'boolean' ? rowSelectionProp.enable : rowSelectionProp.enable(row);
39
+ }
40
+ return isParentSelected && isCurrentRowSelected;
41
+ }, [rowSelectionProp]);
42
+ const table = useReactTable({
43
+ data,
44
+ columns: columnDefinitions,
45
+ getCoreRowModel: getCoreRowModel(),
46
+ getPaginationRowModel: getPaginationRowModel(),
47
+ getFilteredRowModel: getFilteredRowModel(),
48
+ getSortedRowModel: getSortedRowModel(),
49
+ state: { pagination, globalFilter, sorting, rowSelection },
50
+ pageCount,
51
+ onPaginationChange,
52
+ onSortingChange,
53
+ globalFilterFn: enableFuzzySearch ? fuzzyFilter : 'includesString',
54
+ enableFilters: true,
55
+ manualSorting,
56
+ manualPagination,
57
+ manualFiltering,
58
+ getRowId,
59
+ onRowSelectionChange,
60
+ enableGrouping: true,
61
+ enableRowSelection,
62
+ enableMultiRowSelection: (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable) && (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow),
63
+ enableSubRowSelection: true,
64
+ });
65
+ const { loadingTable } = useLoadingTable({
66
+ pageSize: DEFAULT_PAGE_SIZE,
67
+ columnDefinitions,
68
+ });
69
+ const tableRows = table.getRowModel().rows;
70
+ const loadingTableRows = loadingTable.getRowModel().rows;
71
+ const { t } = useLocale('Table');
72
+ const emptyStates = useEmptyState({ noDataState, noResultsState, errorDataState });
73
+ const handleOnRefresh = useCallback(() => {
74
+ table.resetRowSelection();
75
+ onRefresh === null || onRefresh === void 0 ? void 0 : onRefresh();
76
+ }, [onRefresh, table]);
77
+ const enableSelection = Boolean(rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.enable);
78
+ const bulkActions = useMemo(() => enableSelection
79
+ ? 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); } })))
80
+ : undefined, [bulkActionsProp, enableSelection, table]);
81
+ const handleOnToolbarCheck = useCallback(() => {
82
+ if (!loading && table.getTopRows().length) {
83
+ const centerRows = table.getCenterRows();
84
+ const isSomeRowsSelected = table.getIsSomePageRowsSelected();
85
+ const isAllCenterRowsSelected = centerRows.every(row => row.getIsSelected());
86
+ if (isAllCenterRowsSelected) {
87
+ table.resetRowSelection();
88
+ return;
89
+ }
90
+ centerRows.forEach(row => row.toggleSelected(isSomeRowsSelected ? true : undefined));
91
+ return;
92
+ }
93
+ if (!loading && (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow)) {
94
+ table.toggleAllPageRowsSelected();
95
+ return;
96
+ }
97
+ }, [loading, rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow, table]);
98
+ const selectionMode = (rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.multiRow)
99
+ ? 'multiple'
100
+ : 'single';
101
+ return (_jsxs("div", Object.assign({ className: cn(styles.tableWrapper, className) }, extractSupportProps(rest), { children: [(!suppressToolbar || columnFilters) && (_jsx("div", { className: styles.header, "data-background": headerBackground, children: _jsx(MobileToolbar, { search: suppressSearch
102
+ ? undefined
103
+ : {
104
+ value: globalFilter,
105
+ onChange: onGlobalFilterChange,
106
+ loading: search === null || search === void 0 ? void 0 : search.loading,
107
+ placeholder: (search === null || search === void 0 ? void 0 : search.placeholder) || t('searchPlaceholder'),
108
+ }, 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() }) })), _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, 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 })] })));
109
+ }
110
+ MobileTable.getRowActionsColumnDef = 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,3 @@
1
+ export const DEFAULT_PAGE_SIZE = 5;
2
+ export const SEARCH_DELAY = 500;
3
+ export const 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 {};