ydb-embedded-ui 9.2.0 → 9.2.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.
- package/dist/components/PaginatedTable/PaginatedTable.d.ts +3 -4
- package/dist/components/PaginatedTable/PaginatedTable.js +30 -24
- package/dist/components/PaginatedTable/PaginatedTable.js.map +1 -1
- package/dist/components/PaginatedTable/PaginatedTableContext.d.ts +17 -0
- package/dist/components/PaginatedTable/PaginatedTableContext.js +51 -0
- package/dist/components/PaginatedTable/PaginatedTableContext.js.map +1 -0
- package/dist/components/PaginatedTable/PaginatedTableWithLayout.d.ts +12 -0
- package/dist/components/PaginatedTable/PaginatedTableWithLayout.js +5 -0
- package/dist/components/PaginatedTable/PaginatedTableWithLayout.js.map +1 -0
- package/dist/components/PaginatedTable/types.d.ts +4 -3
- package/dist/components/PaginatedTable/useScrollBasedChunks.d.ts +2 -2
- package/dist/components/PaginatedTable/useScrollBasedChunks.js +5 -5
- package/dist/components/PaginatedTable/useScrollBasedChunks.js.map +1 -1
- package/dist/components/TableWithControlsLayout/TableWithControlsLayout.d.ts +8 -4
- package/dist/components/TableWithControlsLayout/TableWithControlsLayout.js +14 -4
- package/dist/components/TableWithControlsLayout/TableWithControlsLayout.js.map +1 -1
- package/dist/components/TableWithControlsLayout/TableWithControlsLayout.scss +8 -3
- package/dist/components/TableWithControlsLayout/useTableScroll.d.ts +43 -0
- package/dist/components/TableWithControlsLayout/useTableScroll.js +87 -0
- package/dist/components/TableWithControlsLayout/useTableScroll.js.map +1 -0
- package/dist/containers/Cluster/Cluster.js +3 -3
- package/dist/containers/Cluster/Cluster.js.map +1 -1
- package/dist/containers/Cluster/Cluster.scss +4 -1
- package/dist/containers/Node/Node.js +2 -2
- package/dist/containers/Node/Node.js.map +1 -1
- package/dist/containers/Nodes/Nodes.d.ts +2 -2
- package/dist/containers/Nodes/Nodes.js +5 -86
- package/dist/containers/Nodes/Nodes.js.map +1 -1
- package/dist/containers/Nodes/NodesTable.d.ts +2 -4
- package/dist/containers/Nodes/NodesTable.js +2 -2
- package/dist/containers/Nodes/NodesTable.js.map +1 -1
- package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.d.ts +18 -0
- package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +60 -0
- package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -0
- package/dist/containers/Nodes/PaginatedNodes/NodesComponent.d.ts +18 -0
- package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js +20 -0
- package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js.map +1 -0
- package/dist/containers/Nodes/PaginatedNodes/NodesControlsWithTableState.d.ts +11 -0
- package/dist/containers/Nodes/PaginatedNodes/NodesControlsWithTableState.js +8 -0
- package/dist/containers/Nodes/PaginatedNodes/NodesControlsWithTableState.js.map +1 -0
- package/dist/containers/Nodes/PaginatedNodes/PaginatedNodes.d.ts +18 -0
- package/dist/containers/Nodes/PaginatedNodes/PaginatedNodes.js +39 -0
- package/dist/containers/Nodes/PaginatedNodes/PaginatedNodes.js.map +1 -0
- package/dist/containers/Nodes/PaginatedNodes/index.d.ts +1 -0
- package/dist/containers/Nodes/PaginatedNodes/index.js +2 -0
- package/dist/containers/Nodes/PaginatedNodes/index.js.map +1 -0
- package/dist/containers/PDiskPage/PDiskPage.js +1 -1
- package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
- package/dist/containers/Storage/PaginatedStorage.d.ts +1 -1
- package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.d.ts +23 -0
- package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.js +64 -0
- package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.js.map +1 -0
- package/dist/containers/Storage/{PaginatedStorageGroups.d.ts → PaginatedStorageGroups/PaginatedStorageGroups.d.ts} +2 -2
- package/dist/containers/Storage/PaginatedStorageGroups/PaginatedStorageGroups.js +28 -0
- package/dist/containers/Storage/PaginatedStorageGroups/PaginatedStorageGroups.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsComponent.d.ts +2 -0
- package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsComponent.js +21 -0
- package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsComponent.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.d.ts +18 -0
- package/dist/containers/Storage/{StorageControls/StorageControls.js → PaginatedStorageGroups/StorageGroupsControls.js} +6 -10
- package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroups/index.d.ts +1 -0
- package/dist/containers/Storage/PaginatedStorageGroups/index.js +2 -0
- package/dist/containers/Storage/PaginatedStorageGroups/index.js.map +1 -0
- package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/PaginatedStorageGroupsTable.d.ts +3 -4
- package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/PaginatedStorageGroupsTable.js +2 -2
- package/dist/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/StorageGroupsEmptyDataMessage.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/columns.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/constants.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/hooks.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/types.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/getGroups.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/i18n/index.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/index.d.ts +1 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/index.js +2 -0
- package/dist/containers/Storage/PaginatedStorageGroupsTable/index.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.d.ts +22 -0
- package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js +66 -0
- package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodes/PaginatedStorageNodes.d.ts +3 -0
- package/dist/containers/Storage/PaginatedStorageNodes/PaginatedStorageNodes.js +30 -0
- package/dist/containers/Storage/PaginatedStorageNodes/PaginatedStorageNodes.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.d.ts +2 -0
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js +24 -0
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js.map +1 -0
- package/dist/containers/Storage/{StorageControls/StorageControls.d.ts → PaginatedStorageNodes/StorageNodesControls.d.ts} +6 -1
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js +25 -0
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodes/index.d.ts +1 -0
- package/dist/containers/Storage/PaginatedStorageNodes/index.js +2 -0
- package/dist/containers/Storage/PaginatedStorageNodes/index.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodes/useStorageNodesColumnsToSelect.d.ts +11 -0
- package/dist/containers/Storage/PaginatedStorageNodes/useStorageNodesColumnsToSelect.js +15 -0
- package/dist/containers/Storage/PaginatedStorageNodes/useStorageNodesColumnsToSelect.js.map +1 -0
- package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/PaginatedStorageNodesTable.d.ts +3 -4
- package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/PaginatedStorageNodesTable.js +2 -2
- package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/StorageNodesEmptyDataMessage.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/columns/columns.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/columns/constants.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/columns/hooks.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/columns/types.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/getNodes.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/i18n/index.js.map +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/index.d.ts +1 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/index.js +2 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/index.js.map +1 -0
- package/dist/containers/Storage/TableGroup/TableGroup.d.ts +4 -1
- package/dist/containers/Storage/TableGroup/TableGroup.js +3 -2
- package/dist/containers/Storage/TableGroup/TableGroup.js.map +1 -1
- package/dist/containers/Storage/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/useStorageQueryParams.js +2 -2
- package/dist/containers/Storage/useStorageQueryParams.js.map +1 -1
- package/dist/containers/Storage/utils/useStorageColumnsSettings.d.ts +1 -1
- package/dist/containers/StorageGroupPage/StorageGroupPage.js +1 -1
- package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
- package/dist/containers/Tablets/Tablets.d.ts +2 -1
- package/dist/containers/Tablets/Tablets.js +2 -2
- package/dist/containers/Tablets/Tablets.js.map +1 -1
- package/dist/containers/Tablets/TabletsTable.d.ts +3 -1
- package/dist/containers/Tablets/TabletsTable.js +2 -2
- package/dist/containers/Tablets/TabletsTable.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/Diagnostics.js +5 -5
- package/dist/containers/Tenant/Diagnostics/Diagnostics.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/Network/NetworkWrapper.d.ts +2 -2
- package/dist/containers/Tenant/Diagnostics/Network/NetworkWrapper.js +2 -2
- package/dist/containers/Tenant/Diagnostics/Network/NetworkWrapper.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.js +2 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.d.ts +2 -2
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js +35 -15
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js.map +1 -1
- package/dist/containers/Tenants/Tenants.d.ts +3 -1
- package/dist/containers/Tenants/Tenants.js +2 -2
- package/dist/containers/Tenants/Tenants.js.map +1 -1
- package/dist/containers/Tenants/Tenants.scss +2 -0
- package/dist/containers/VDiskPage/VDiskPage.js +1 -1
- package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
- package/package.json +1 -1
- package/dist/containers/Storage/PaginatedStorageGroups.js +0 -86
- package/dist/containers/Storage/PaginatedStorageGroups.js.map +0 -1
- package/dist/containers/Storage/PaginatedStorageNodes.d.ts +0 -3
- package/dist/containers/Storage/PaginatedStorageNodes.js +0 -110
- package/dist/containers/Storage/PaginatedStorageNodes.js.map +0 -1
- package/dist/containers/Storage/StorageControls/StorageControls.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/PaginatedStorageGroupsTable.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/StorageGroupsEmptyDataMessage.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/columns/columns.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/columns/constants.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/columns/hooks.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/columns/i18n/index.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/columns/types.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/getGroups.js.map +0 -1
- package/dist/containers/Storage/StorageGroups/i18n/index.js.map +0 -1
- package/dist/containers/Storage/StorageNodes/PaginatedStorageNodesTable.js.map +0 -1
- package/dist/containers/Storage/StorageNodes/StorageNodesEmptyDataMessage.js.map +0 -1
- package/dist/containers/Storage/StorageNodes/columns/columns.js.map +0 -1
- package/dist/containers/Storage/StorageNodes/columns/constants.js.map +0 -1
- package/dist/containers/Storage/StorageNodes/columns/hooks.js.map +0 -1
- package/dist/containers/Storage/StorageNodes/columns/types.js.map +0 -1
- package/dist/containers/Storage/StorageNodes/getNodes.js.map +0 -1
- package/dist/containers/Storage/StorageNodes/i18n/index.js.map +0 -1
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/StorageGroupsEmptyDataMessage.d.ts +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/StorageGroupsEmptyDataMessage.js +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/StorageGroupsColumns.scss +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/columns.d.ts +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/columns.js +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/constants.d.ts +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/constants.js +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/hooks.d.ts +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/hooks.js +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/i18n/en.json +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/i18n/index.d.ts +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/i18n/index.js +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/types.d.ts +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/columns/types.js +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/getGroups.d.ts +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/getGroups.js +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/i18n/en.json +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/i18n/index.d.ts +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/i18n/index.js +0 -0
- /package/dist/containers/Storage/{StorageGroups → PaginatedStorageGroupsTable}/i18n/ru.json +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/StorageNodes.scss +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/StorageNodesEmptyDataMessage.d.ts +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/StorageNodesEmptyDataMessage.js +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/StorageNodesColumns.scss +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/columns.d.ts +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/columns.js +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/constants.d.ts +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/constants.js +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/hooks.d.ts +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/hooks.js +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/types.d.ts +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/columns/types.js +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/getNodes.d.ts +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/getNodes.js +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/i18n/en.json +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/i18n/index.d.ts +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/i18n/index.js +0 -0
- /package/dist/containers/Storage/{StorageNodes → PaginatedStorageNodesTable}/i18n/ru.json +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import type { Column, FetchData, GetRowClassName, HandleTableColumnsResize, PaginatedTableData,
|
2
|
+
import type { Column, FetchData, GetRowClassName, HandleTableColumnsResize, PaginatedTableData, RenderEmptyDataMessage, RenderErrorMessage, SortParams } from './types';
|
3
3
|
import './PaginatedTable.scss';
|
4
4
|
export interface PaginatedTableProps<T, F> {
|
5
5
|
limit?: number;
|
@@ -10,14 +10,13 @@ export interface PaginatedTableProps<T, F> {
|
|
10
10
|
columns: Column<T>[];
|
11
11
|
getRowClassName?: GetRowClassName<T>;
|
12
12
|
rowHeight?: number;
|
13
|
-
|
13
|
+
scrollContainerRef: React.RefObject<HTMLElement>;
|
14
14
|
initialSortParams?: SortParams;
|
15
15
|
onColumnsResize?: HandleTableColumnsResize;
|
16
|
-
renderControls?: RenderControls;
|
17
16
|
renderEmptyDataMessage?: RenderEmptyDataMessage;
|
18
17
|
renderErrorMessage?: RenderErrorMessage;
|
19
18
|
containerClassName?: string;
|
20
19
|
onDataFetched?: (data: PaginatedTableData<T>) => void;
|
21
20
|
keepCache?: boolean;
|
22
21
|
}
|
23
|
-
export declare const PaginatedTable: <T, F>({ limit: chunkSize, initialEntitiesCount, fetchData, filters: rawFilters, tableName, columns, getRowClassName, rowHeight,
|
22
|
+
export declare const PaginatedTable: <T, F>({ limit: chunkSize, initialEntitiesCount, fetchData, filters: rawFilters, tableName, columns, getRowClassName, rowHeight, scrollContainerRef, initialSortParams, onColumnsResize, renderErrorMessage, renderEmptyDataMessage, containerClassName, onDataFetched, keepCache, }: PaginatedTableProps<T, F>) => import("react/jsx-runtime").JSX.Element;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import React from 'react';
|
3
|
-
import {
|
3
|
+
import { usePaginatedTableState } from './PaginatedTableContext';
|
4
4
|
import { TableChunk } from './TableChunk';
|
5
5
|
import { TableHead } from './TableHead';
|
6
6
|
import { DEFAULT_TABLE_ROW_HEIGHT } from './constants';
|
@@ -8,16 +8,29 @@ import { b } from './shared';
|
|
8
8
|
import { useScrollBasedChunks } from './useScrollBasedChunks';
|
9
9
|
import './PaginatedTable.scss';
|
10
10
|
const DEFAULT_PAGINATION_LIMIT = 20;
|
11
|
-
export const PaginatedTable = ({ limit: chunkSize = DEFAULT_PAGINATION_LIMIT, initialEntitiesCount, fetchData, filters: rawFilters, tableName, columns, getRowClassName, rowHeight = DEFAULT_TABLE_ROW_HEIGHT,
|
12
|
-
|
13
|
-
const
|
14
|
-
const
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
export const PaginatedTable = ({ limit: chunkSize = DEFAULT_PAGINATION_LIMIT, initialEntitiesCount, fetchData, filters: rawFilters, tableName, columns, getRowClassName, rowHeight = DEFAULT_TABLE_ROW_HEIGHT, scrollContainerRef, initialSortParams, onColumnsResize, renderErrorMessage, renderEmptyDataMessage, containerClassName, onDataFetched, keepCache = true, }) => {
|
12
|
+
// Get state and setters from context
|
13
|
+
const { tableState, setSortParams, setTotalEntities, setFoundEntities, setIsInitialLoad } = usePaginatedTableState();
|
14
|
+
const { sortParams, foundEntities } = tableState;
|
15
|
+
// Initialize state with props if available
|
16
|
+
React.useEffect(() => {
|
17
|
+
if (initialSortParams) {
|
18
|
+
setSortParams(initialSortParams);
|
19
|
+
}
|
20
|
+
if (initialEntitiesCount) {
|
21
|
+
setTotalEntities(initialEntitiesCount);
|
22
|
+
setFoundEntities(initialEntitiesCount);
|
23
|
+
}
|
24
|
+
}, [
|
25
|
+
setSortParams,
|
26
|
+
setTotalEntities,
|
27
|
+
setFoundEntities,
|
28
|
+
initialSortParams,
|
29
|
+
initialEntitiesCount,
|
30
|
+
]);
|
18
31
|
const tableRef = React.useRef(null);
|
19
32
|
const activeChunks = useScrollBasedChunks({
|
20
|
-
|
33
|
+
scrollContainerRef,
|
21
34
|
tableRef,
|
22
35
|
totalItems: foundEntities,
|
23
36
|
rowHeight,
|
@@ -43,26 +56,19 @@ export const PaginatedTable = ({ limit: chunkSize = DEFAULT_PAGINATION_LIMIT, in
|
|
43
56
|
setIsInitialLoad(false);
|
44
57
|
onDataFetched === null || onDataFetched === void 0 ? void 0 : onDataFetched(data);
|
45
58
|
}
|
46
|
-
}, [onDataFetched]);
|
47
|
-
//
|
59
|
+
}, [onDataFetched, setFoundEntities, setIsInitialLoad, setTotalEntities]);
|
60
|
+
// Reset table on filters change
|
48
61
|
React.useLayoutEffect(() => {
|
49
|
-
|
50
|
-
|
62
|
+
const defaultTotal = initialEntitiesCount || 0;
|
63
|
+
const defaultFound = initialEntitiesCount || 1;
|
64
|
+
setTotalEntities(defaultTotal);
|
65
|
+
setFoundEntities(defaultFound);
|
51
66
|
setIsInitialLoad(true);
|
52
|
-
|
53
|
-
parentRef.current.scrollTo(0, 0);
|
54
|
-
}
|
55
|
-
}, [rawFilters, initialFound, initialTotal, parentRef]);
|
67
|
+
}, [initialEntitiesCount, setTotalEntities, setFoundEntities, setIsInitialLoad]);
|
56
68
|
const renderChunks = () => {
|
57
69
|
return activeChunks.map((isActive, index) => (_jsx(TableChunk, { id: index, calculatedCount: index === activeChunks.length - 1 ? lastChunkSize : chunkSize, chunkSize: chunkSize, rowHeight: rowHeight, columns: columns, fetchData: fetchData, filters: filters, tableName: tableName, sortParams: sortParams, getRowClassName: getRowClassName, renderErrorMessage: renderErrorMessage, renderEmptyDataMessage: renderEmptyDataMessage, onDataFetched: handleDataFetched, isActive: isActive, keepCache: keepCache }, index)));
|
58
70
|
};
|
59
71
|
const renderTable = () => (_jsxs("table", { className: b('table'), children: [_jsx(TableHead, { columns: columns, onSort: setSortParams, onColumnsResize: onColumnsResize }), renderChunks()] }));
|
60
|
-
|
61
|
-
if (renderControls) {
|
62
|
-
return (_jsxs(TableWithControlsLayout, { children: [_jsx(TableWithControlsLayout.Controls, { children: renderControls({ inited: !isInitialLoad, totalEntities, foundEntities }) }), _jsx(TableWithControlsLayout.Table, { children: renderTable() })] }));
|
63
|
-
}
|
64
|
-
return renderTable();
|
65
|
-
};
|
66
|
-
return (_jsx("div", { ref: tableRef, className: b(null, containerClassName), children: renderContent() }));
|
72
|
+
return (_jsx("div", { ref: tableRef, className: b(null, containerClassName), children: renderTable() }));
|
67
73
|
};
|
68
74
|
//# sourceMappingURL=PaginatedTable.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PaginatedTable.js","sourceRoot":"","sources":["../../../src/components/PaginatedTable/PaginatedTable.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,
|
1
|
+
{"version":3,"file":"PaginatedTable.js","sourceRoot":"","sources":["../../../src/components/PaginatedTable/PaginatedTable.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type { PaginatedTableState } from './types';
|
3
|
+
interface PaginatedTableStateContextType {
|
4
|
+
tableState: PaginatedTableState;
|
5
|
+
setSortParams: (params: PaginatedTableState['sortParams']) => void;
|
6
|
+
setTotalEntities: (total: number) => void;
|
7
|
+
setFoundEntities: (found: number) => void;
|
8
|
+
setIsInitialLoad: (isInitial: boolean) => void;
|
9
|
+
}
|
10
|
+
export declare const PaginatedTableStateContext: React.Context<PaginatedTableStateContextType>;
|
11
|
+
interface PaginatedTableStateProviderProps {
|
12
|
+
children: React.ReactNode;
|
13
|
+
initialState?: Partial<PaginatedTableState>;
|
14
|
+
}
|
15
|
+
export declare const PaginatedTableProvider: ({ children, initialState, }: PaginatedTableStateProviderProps) => import("react/jsx-runtime").JSX.Element;
|
16
|
+
export declare const usePaginatedTableState: () => PaginatedTableStateContextType;
|
17
|
+
export {};
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
// Default state for the table
|
4
|
+
const defaultTableState = {
|
5
|
+
sortParams: undefined,
|
6
|
+
totalEntities: 0,
|
7
|
+
foundEntities: 0,
|
8
|
+
isInitialLoad: true,
|
9
|
+
};
|
10
|
+
// Creating the context with default values
|
11
|
+
export const PaginatedTableStateContext = React.createContext({
|
12
|
+
tableState: defaultTableState,
|
13
|
+
setSortParams: () => undefined,
|
14
|
+
setTotalEntities: () => undefined,
|
15
|
+
setFoundEntities: () => undefined,
|
16
|
+
setIsInitialLoad: () => undefined,
|
17
|
+
});
|
18
|
+
// Provider component
|
19
|
+
export const PaginatedTableProvider = ({ children, initialState = {}, }) => {
|
20
|
+
var _a, _b, _c, _d;
|
21
|
+
// Use individual state variables for each field
|
22
|
+
const [sortParams, setSortParams] = React.useState((_a = initialState.sortParams) !== null && _a !== void 0 ? _a : defaultTableState.sortParams);
|
23
|
+
const [totalEntities, setTotalEntities] = React.useState((_b = initialState.totalEntities) !== null && _b !== void 0 ? _b : defaultTableState.totalEntities);
|
24
|
+
const [foundEntities, setFoundEntities] = React.useState((_c = initialState.foundEntities) !== null && _c !== void 0 ? _c : defaultTableState.foundEntities);
|
25
|
+
const [isInitialLoad, setIsInitialLoad] = React.useState((_d = initialState.isInitialLoad) !== null && _d !== void 0 ? _d : defaultTableState.isInitialLoad);
|
26
|
+
// Construct tableState from individual state variables
|
27
|
+
const tableState = React.useMemo(() => ({
|
28
|
+
sortParams,
|
29
|
+
totalEntities,
|
30
|
+
foundEntities,
|
31
|
+
isInitialLoad,
|
32
|
+
}), [sortParams, totalEntities, foundEntities, isInitialLoad]);
|
33
|
+
// Create the context value with the constructed tableState and direct setters
|
34
|
+
const contextValue = React.useMemo(() => ({
|
35
|
+
tableState,
|
36
|
+
setSortParams,
|
37
|
+
setTotalEntities,
|
38
|
+
setFoundEntities,
|
39
|
+
setIsInitialLoad,
|
40
|
+
}), [tableState, setSortParams, setTotalEntities, setFoundEntities, setIsInitialLoad]);
|
41
|
+
return (_jsx(PaginatedTableStateContext.Provider, { value: contextValue, children: children }));
|
42
|
+
};
|
43
|
+
// Custom hook for consuming the context
|
44
|
+
export const usePaginatedTableState = () => {
|
45
|
+
const context = React.useContext(PaginatedTableStateContext);
|
46
|
+
if (context === undefined) {
|
47
|
+
throw new Error('usePaginatedTableState must be used within a PaginatedTableStateProvider');
|
48
|
+
}
|
49
|
+
return context;
|
50
|
+
};
|
51
|
+
//# sourceMappingURL=PaginatedTableContext.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"PaginatedTableContext.js","sourceRoot":"","sources":["../../../src/components/PaginatedTable/PaginatedTableContext.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,8BAA8B;AAC9B,MAAM,iBAAiB,GAAwB;IAC3C,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,IAAI;CACtB,CAAC;AAcF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC,aAAa,CAAiC;IAC1F,UAAU,EAAE,iBAAiB;IAC7B,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS;IAC9B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;IACjC,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;IACjC,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;CACpC,CAAC,CAAC;AAQH,qBAAqB;AACrB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACnC,QAAQ,EACR,YAAY,GAAG,EAAE,GACc,EAAE,EAAE;;IACnC,gDAAgD;IAChD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAC9C,MAAA,YAAY,CAAC,UAAU,mCAAI,iBAAiB,CAAC,UAAU,CAC1D,CAAC;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CACpD,MAAA,YAAY,CAAC,aAAa,mCAAI,iBAAiB,CAAC,aAAa,CAChE,CAAC;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CACpD,MAAA,YAAY,CAAC,aAAa,mCAAI,iBAAiB,CAAC,aAAa,CAChE,CAAC;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CACpD,MAAA,YAAY,CAAC,aAAa,mCAAI,iBAAiB,CAAC,aAAa,CAChE,CAAC;IAEF,uDAAuD;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CAAC,CAAC;QACH,UAAU;QACV,aAAa;QACb,aAAa;QACb,aAAa;KAChB,CAAC,EACF,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAC5D,CAAC;IAEF,8EAA8E;IAC9E,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAC9B,GAAG,EAAE,CAAC,CAAC;QACH,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;KACnB,CAAC,EACF,CAAC,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CACpF,CAAC;IAEF,OAAO,CACH,KAAC,0BAA0B,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YACnD,QAAQ,GACyB,CACzC,CAAC;AACN,CAAC,CAAC;AAEF,wCAAwC;AACxC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;IAE7D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type { TableProps } from '../TableWithControlsLayout/TableWithControlsLayout';
|
3
|
+
import type { PaginatedTableState } from './types';
|
4
|
+
export interface PaginatedTableWithLayoutProps {
|
5
|
+
controls: React.ReactNode;
|
6
|
+
table: React.ReactNode;
|
7
|
+
tableProps?: TableProps;
|
8
|
+
error?: React.ReactNode;
|
9
|
+
initialState?: Partial<PaginatedTableState>;
|
10
|
+
fullHeight?: boolean;
|
11
|
+
}
|
12
|
+
export declare const PaginatedTableWithLayout: ({ controls, table, tableProps, error, initialState, fullHeight, }: PaginatedTableWithLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
@@ -0,0 +1,5 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import { TableWithControlsLayout } from '../TableWithControlsLayout/TableWithControlsLayout';
|
3
|
+
import { PaginatedTableProvider } from './PaginatedTableContext';
|
4
|
+
export const PaginatedTableWithLayout = ({ controls, table, tableProps, error, initialState, fullHeight = true, }) => (_jsx(PaginatedTableProvider, { initialState: initialState, children: _jsxs(TableWithControlsLayout, { fullHeight: fullHeight, children: [_jsx(TableWithControlsLayout.Controls, { children: controls }), error, _jsx(TableWithControlsLayout.Table, { ...(tableProps || {}), children: table })] }) }));
|
5
|
+
//# sourceMappingURL=PaginatedTableWithLayout.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"PaginatedTableWithLayout.js","sourceRoot":"","sources":["../../../src/components/PaginatedTable/PaginatedTableWithLayout.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,oDAAoD,CAAC;AAG3F,OAAO,EAAC,sBAAsB,EAAC,MAAM,yBAAyB,CAAC;AAY/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACrC,QAAQ,EACR,KAAK,EACL,UAAU,EACV,KAAK,EACL,YAAY,EACZ,UAAU,GAAG,IAAI,GACW,EAAE,EAAE,CAAC,CACjC,KAAC,sBAAsB,IAAC,YAAY,EAAE,YAAY,YAC9C,MAAC,uBAAuB,IAAC,UAAU,EAAE,UAAU,aAC3C,KAAC,uBAAuB,CAAC,QAAQ,cAAE,QAAQ,GAAoC,EAC9E,KAAK,EACN,KAAC,uBAAuB,CAAC,KAAK,OAAK,CAAC,UAAU,IAAI,EAAE,CAAC,YAChD,KAAK,GACsB,IACV,GACL,CAC5B,CAAC"}
|
@@ -48,12 +48,13 @@ type FetchDataParams<F, E = {}> = {
|
|
48
48
|
} & E;
|
49
49
|
export type FetchData<T, F = undefined, E = {}> = (params: FetchDataParams<F, E>) => Promise<PaginatedTableData<T>>;
|
50
50
|
export type OnError = (error?: IResponseError) => void;
|
51
|
-
interface
|
51
|
+
export interface PaginatedTableState {
|
52
|
+
sortParams?: SortParams;
|
52
53
|
totalEntities: number;
|
53
54
|
foundEntities: number;
|
54
|
-
|
55
|
+
isInitialLoad: boolean;
|
55
56
|
}
|
56
|
-
export type RenderControls = (
|
57
|
+
export type RenderControls = () => React.ReactNode;
|
57
58
|
export type RenderEmptyDataMessage = () => React.ReactNode;
|
58
59
|
export type RenderErrorMessage = (error: IResponseError) => React.ReactNode;
|
59
60
|
export type GetRowClassName<T> = (row: T) => string;
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
interface UseScrollBasedChunksProps {
|
3
|
-
|
3
|
+
scrollContainerRef: React.RefObject<HTMLElement>;
|
4
4
|
tableRef: React.RefObject<HTMLElement>;
|
5
5
|
totalItems: number;
|
6
6
|
rowHeight: number;
|
7
7
|
chunkSize: number;
|
8
8
|
overscanCount?: number;
|
9
9
|
}
|
10
|
-
export declare const useScrollBasedChunks: ({
|
10
|
+
export declare const useScrollBasedChunks: ({ scrollContainerRef, tableRef, totalItems, rowHeight, chunkSize, overscanCount, }: UseScrollBasedChunksProps) => boolean[];
|
11
11
|
export {};
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { calculateElementOffsetTop, rafThrottle } from './utils';
|
3
3
|
const DEFAULT_OVERSCAN_COUNT = 1;
|
4
|
-
export const useScrollBasedChunks = ({
|
4
|
+
export const useScrollBasedChunks = ({ scrollContainerRef, tableRef, totalItems, rowHeight, chunkSize, overscanCount = DEFAULT_OVERSCAN_COUNT, }) => {
|
5
5
|
const chunksCount = React.useMemo(() => Math.ceil(totalItems / chunkSize), [chunkSize, totalItems]);
|
6
6
|
const [startChunk, setStartChunk] = React.useState(0);
|
7
7
|
const [endChunk, setEndChunk] = React.useState(Math.min(overscanCount, Math.max(chunksCount - 1, 0)));
|
8
8
|
const calculateVisibleRange = React.useCallback(() => {
|
9
|
-
const container =
|
9
|
+
const container = scrollContainerRef === null || scrollContainerRef === void 0 ? void 0 : scrollContainerRef.current;
|
10
10
|
const table = tableRef.current;
|
11
11
|
if (!container || !table) {
|
12
12
|
return null;
|
@@ -18,7 +18,7 @@ export const useScrollBasedChunks = ({ parentRef, tableRef, totalItems, rowHeigh
|
|
18
18
|
const start = Math.max(Math.floor(visibleStart / rowHeight / chunkSize) - overscanCount, 0);
|
19
19
|
const end = Math.min(Math.floor(visibleEnd / rowHeight / chunkSize) + overscanCount, Math.max(chunksCount - 1, 0));
|
20
20
|
return { start, end };
|
21
|
-
}, [
|
21
|
+
}, [scrollContainerRef, tableRef, rowHeight, chunkSize, overscanCount, chunksCount]);
|
22
22
|
const updateVisibleChunks = React.useCallback(() => {
|
23
23
|
const newRange = calculateVisibleRange();
|
24
24
|
if (newRange) {
|
@@ -42,7 +42,7 @@ export const useScrollBasedChunks = ({ parentRef, tableRef, totalItems, rowHeigh
|
|
42
42
|
};
|
43
43
|
}, [updateVisibleChunks]);
|
44
44
|
React.useEffect(() => {
|
45
|
-
const container =
|
45
|
+
const container = scrollContainerRef === null || scrollContainerRef === void 0 ? void 0 : scrollContainerRef.current;
|
46
46
|
if (!container) {
|
47
47
|
return undefined;
|
48
48
|
}
|
@@ -51,7 +51,7 @@ export const useScrollBasedChunks = ({ parentRef, tableRef, totalItems, rowHeigh
|
|
51
51
|
return () => {
|
52
52
|
container.removeEventListener('scroll', throttledHandleScroll);
|
53
53
|
};
|
54
|
-
}, [handleScroll,
|
54
|
+
}, [handleScroll, scrollContainerRef]);
|
55
55
|
return React.useMemo(() => {
|
56
56
|
// boolean array that represents active chunks
|
57
57
|
const activeChunks = Array(chunksCount).fill(false);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useScrollBasedChunks.js","sourceRoot":"","sources":["../../../src/components/PaginatedTable/useScrollBasedChunks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,yBAAyB,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AAW/D,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACjC,
|
1
|
+
{"version":3,"file":"useScrollBasedChunks.js","sourceRoot":"","sources":["../../../src/components/PaginatedTable/useScrollBasedChunks.ts"],"names":[],"mappings":"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"}
|
@@ -1,15 +1,19 @@
|
|
1
|
+
import React from 'react';
|
1
2
|
import './TableWithControlsLayout.scss';
|
2
3
|
interface TableWithControlsLayoutItemProps {
|
3
|
-
children
|
4
|
+
children?: React.ReactNode;
|
4
5
|
renderExtraControls?: () => React.ReactNode;
|
5
6
|
className?: string;
|
7
|
+
fullHeight?: boolean;
|
6
8
|
}
|
7
|
-
interface TableProps extends TableWithControlsLayoutItemProps {
|
9
|
+
export interface TableProps extends TableWithControlsLayoutItemProps {
|
8
10
|
loading?: boolean;
|
11
|
+
scrollContainerRef?: React.RefObject<HTMLElement>;
|
12
|
+
scrollDependencies?: any[];
|
9
13
|
}
|
10
14
|
export declare const TableWithControlsLayout: {
|
11
|
-
({ children, className, }: TableWithControlsLayoutItemProps): import("react/jsx-runtime").JSX.Element;
|
15
|
+
({ children, className, fullHeight, }: TableWithControlsLayoutItemProps): import("react/jsx-runtime").JSX.Element;
|
12
16
|
Controls({ children, renderExtraControls, className, }: TableWithControlsLayoutItemProps): import("react/jsx-runtime").JSX.Element;
|
13
|
-
Table({ children, loading, className }: TableProps): import("react/jsx-runtime").JSX.Element;
|
17
|
+
Table({ children, loading, className, scrollContainerRef, scrollDependencies, }: TableProps): import("react/jsx-runtime").JSX.Element;
|
14
18
|
};
|
15
19
|
export {};
|
@@ -1,19 +1,29 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
2
3
|
import { Flex } from '@gravity-ui/uikit';
|
3
4
|
import { cn } from '../../utils/cn';
|
4
5
|
import { TableSkeleton } from '../TableSkeleton/TableSkeleton';
|
6
|
+
import { useTableScroll } from './useTableScroll';
|
5
7
|
import './TableWithControlsLayout.scss';
|
6
8
|
const b = cn('ydb-table-with-controls-layout');
|
7
|
-
export const TableWithControlsLayout = ({ children, className, }) => {
|
8
|
-
return _jsx("div", { className: b(
|
9
|
+
export const TableWithControlsLayout = ({ children, className, fullHeight, }) => {
|
10
|
+
return _jsx("div", { className: b({ 'full-height': fullHeight }, className), children: children });
|
9
11
|
};
|
10
12
|
TableWithControlsLayout.Controls = function TableControls({ children, renderExtraControls, className, }) {
|
11
13
|
return (_jsxs(Flex, { justifyContent: "space-between", alignItems: "center", className: b('controls-wrapper'), gap: 2, children: [_jsx("div", { className: b('controls', className), children: children }), renderExtraControls === null || renderExtraControls === void 0 ? void 0 : renderExtraControls()] }));
|
12
14
|
};
|
13
|
-
TableWithControlsLayout.Table = function Table({ children, loading, className }) {
|
15
|
+
TableWithControlsLayout.Table = function Table({ children, loading, className, scrollContainerRef, scrollDependencies = [], }) {
|
16
|
+
// Create an internal ref for the table container
|
17
|
+
const tableContainerRef = React.useRef(null);
|
18
|
+
// Use the internal ref for scrolling
|
19
|
+
useTableScroll({
|
20
|
+
tableContainerRef,
|
21
|
+
scrollContainerRef,
|
22
|
+
dependencies: scrollDependencies,
|
23
|
+
});
|
14
24
|
if (loading) {
|
15
25
|
return _jsx(TableSkeleton, { className: b('loader') });
|
16
26
|
}
|
17
|
-
return _jsx("div", { className: b('table', className), children: children });
|
27
|
+
return (_jsx("div", { ref: tableContainerRef, className: b('table', className), children: children }));
|
18
28
|
};
|
19
29
|
//# sourceMappingURL=TableWithControlsLayout.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"TableWithControlsLayout.js","sourceRoot":"","sources":["../../../src/components/TableWithControlsLayout/TableWithControlsLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,gCAAgC,CAAC;AAE7D,OAAO,gCAAgC,CAAC;AAExC,MAAM,CAAC,GAAG,EAAE,CAAC,gCAAgC,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"TableWithControlsLayout.js","sourceRoot":"","sources":["../../../src/components/TableWithControlsLayout/TableWithControlsLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAEhD,OAAO,gCAAgC,CAAC;AAExC,MAAM,CAAC,GAAG,EAAE,CAAC,gCAAgC,CAAC,CAAC;AAe/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EACpC,QAAQ,EACR,SAAS,EACT,UAAU,GACqB,EAAE,EAAE;IACnC,OAAO,cAAK,SAAS,EAAE,CAAC,CAAC,EAAC,aAAa,EAAE,UAAU,EAAC,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,CAAC;AACvF,CAAC,CAAC;AAEF,uBAAuB,CAAC,QAAQ,GAAG,SAAS,aAAa,CAAC,EACtD,QAAQ,EACR,mBAAmB,EACnB,SAAS,GACsB;IAC/B,OAAO,CACH,MAAC,IAAI,IACD,cAAc,EAAC,eAAe,EAC9B,UAAU,EAAC,QAAQ,EACnB,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAChC,GAAG,EAAE,CAAC,aAEN,cAAK,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,EACzD,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,EAAI,IACrB,CACV,CAAC;AACN,CAAC,CAAC;AAEF,uBAAuB,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,EAC3C,QAAQ,EACR,OAAO,EACP,SAAS,EACT,kBAAkB,EAClB,kBAAkB,GAAG,EAAE,GACd;IACT,iDAAiD;IACjD,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE7D,qCAAqC;IACrC,cAAc,CAAC;QACX,iBAAiB;QACjB,kBAAkB;QAClB,YAAY,EAAE,kBAAkB;KACnC,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,KAAC,aAAa,IAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAI,CAAC;IACrD,CAAC;IAED,OAAO,CACH,cAAK,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,YACxD,QAAQ,GACP,CACT,CAAC;AACN,CAAC,CAAC"}
|
@@ -1,13 +1,18 @@
|
|
1
1
|
@use '../../styles/mixins.scss';
|
2
2
|
|
3
3
|
.ydb-table-with-controls-layout {
|
4
|
-
|
4
|
+
// Total height of all fixed elements above table for sticky header positioning
|
5
|
+
--data-table-sticky-header-offset: 62px;
|
5
6
|
|
6
7
|
display: inline-block;
|
7
8
|
|
8
9
|
box-sizing: border-box;
|
9
10
|
min-width: 100%;
|
10
11
|
|
12
|
+
&_full-height {
|
13
|
+
min-height: calc(100% - var(--sticky-tabs-height, 0px));
|
14
|
+
}
|
15
|
+
|
11
16
|
&__controls-wrapper {
|
12
17
|
z-index: 3;
|
13
18
|
|
@@ -33,11 +38,11 @@
|
|
33
38
|
}
|
34
39
|
|
35
40
|
.ydb-paginated-table__head {
|
36
|
-
top: var(--data-table-sticky-
|
41
|
+
top: var(--data-table-sticky-header-offset, 62px);
|
37
42
|
}
|
38
43
|
|
39
44
|
.data-table__sticky_moving {
|
40
45
|
// Place table head right after controls
|
41
|
-
top: var(--data-table-sticky-
|
46
|
+
top: var(--data-table-sticky-header-offset, 62px) !important;
|
42
47
|
}
|
43
48
|
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
interface UseTableScrollProps {
|
3
|
+
/**
|
4
|
+
* Reference to the table container element. This is the element that contains
|
5
|
+
* the table and whose position will be adjusted.
|
6
|
+
*/
|
7
|
+
tableContainerRef?: React.RefObject<HTMLDivElement>;
|
8
|
+
/**
|
9
|
+
* Reference to the scrollable container element. This is the parent element
|
10
|
+
* that has scrolling capabilities.
|
11
|
+
*/
|
12
|
+
scrollContainerRef?: React.RefObject<HTMLElement>;
|
13
|
+
/**
|
14
|
+
* Array of values that, when changed, will trigger the scroll adjustment.
|
15
|
+
* Include all values that might affect table height or position to ensure
|
16
|
+
* proper scroll adjustment (e.g., filters, sorting, pagination state).
|
17
|
+
*/
|
18
|
+
dependencies?: unknown[];
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* A hook that manages scrolling behavior for tables within a scrollable container.
|
22
|
+
*
|
23
|
+
* This hook ensures proper positioning of tables when their content changes,
|
24
|
+
* particularly when using sticky headers, by automatically adjusting the scroll position.
|
25
|
+
* It reads the `--data-table-sticky-header-offset` CSS variable from the table container
|
26
|
+
* to determine the sticky header offset for correct positioning.
|
27
|
+
*
|
28
|
+
* The scroll adjustment is triggered whenever any of the dependencies change,
|
29
|
+
* but is skipped on the first render to prevent unwanted initial scrolling.
|
30
|
+
*
|
31
|
+
*
|
32
|
+
* @param props - The hook parameters
|
33
|
+
* @returns An object containing the handleTableScroll function that can be called manually
|
34
|
+
*/
|
35
|
+
export declare const useTableScroll: ({ tableContainerRef, scrollContainerRef, dependencies, }: UseTableScrollProps) => {
|
36
|
+
/**
|
37
|
+
* Function to manually trigger the table scroll adjustment.
|
38
|
+
* This can be useful in cases where you need to adjust the scroll
|
39
|
+
* position outside of the dependency changes.
|
40
|
+
*/
|
41
|
+
handleTableScroll: () => void;
|
42
|
+
};
|
43
|
+
export {};
|
@@ -0,0 +1,87 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
/**
|
3
|
+
* A hook that manages scrolling behavior for tables within a scrollable container.
|
4
|
+
*
|
5
|
+
* This hook ensures proper positioning of tables when their content changes,
|
6
|
+
* particularly when using sticky headers, by automatically adjusting the scroll position.
|
7
|
+
* It reads the `--data-table-sticky-header-offset` CSS variable from the table container
|
8
|
+
* to determine the sticky header offset for correct positioning.
|
9
|
+
*
|
10
|
+
* The scroll adjustment is triggered whenever any of the dependencies change,
|
11
|
+
* but is skipped on the first render to prevent unwanted initial scrolling.
|
12
|
+
*
|
13
|
+
*
|
14
|
+
* @param props - The hook parameters
|
15
|
+
* @returns An object containing the handleTableScroll function that can be called manually
|
16
|
+
*/
|
17
|
+
export const useTableScroll = ({ tableContainerRef, scrollContainerRef, dependencies = [], }) => {
|
18
|
+
/**
|
19
|
+
* Retrieves the sticky header offset from CSS variables.
|
20
|
+
*
|
21
|
+
* Reads the `--data-table-sticky-header-offset` CSS variable from the table container
|
22
|
+
* element and converts it to a number. This value is used to adjust the scroll position
|
23
|
+
* to account for sticky headers.
|
24
|
+
*
|
25
|
+
* @returns The sticky header offset in pixels, or 0 if not defined
|
26
|
+
*/
|
27
|
+
const getStickyTopOffset = React.useCallback(() => {
|
28
|
+
// Try to get the variable from parent elements
|
29
|
+
if (tableContainerRef === null || tableContainerRef === void 0 ? void 0 : tableContainerRef.current) {
|
30
|
+
const computedStyle = window.getComputedStyle(tableContainerRef.current);
|
31
|
+
// Read the sticky header offset variable for correct scroll positioning
|
32
|
+
const stickyTopOffset = computedStyle.getPropertyValue('--data-table-sticky-header-offset');
|
33
|
+
return stickyTopOffset ? parseInt(stickyTopOffset, 10) : 0;
|
34
|
+
}
|
35
|
+
return 0;
|
36
|
+
}, [tableContainerRef]);
|
37
|
+
/**
|
38
|
+
* Adjusts the scroll position of the container to properly position the table.
|
39
|
+
*
|
40
|
+
* This function calculates the correct scroll position based on:
|
41
|
+
* - The relative position of the table within the scroll container
|
42
|
+
* - The sticky header offset (if any)
|
43
|
+
*
|
44
|
+
* It only adjusts the scroll position if the table would be partially hidden
|
45
|
+
* behind the sticky header.
|
46
|
+
*/
|
47
|
+
const handleTableScroll = React.useCallback(() => {
|
48
|
+
// Only proceed if both refs and their current properties are available
|
49
|
+
if ((tableContainerRef === null || tableContainerRef === void 0 ? void 0 : tableContainerRef.current) && (scrollContainerRef === null || scrollContainerRef === void 0 ? void 0 : scrollContainerRef.current)) {
|
50
|
+
// Get the sticky top offset value
|
51
|
+
const stickyTopOffset = getStickyTopOffset();
|
52
|
+
// Scroll the parent container to the position of the table container
|
53
|
+
const tableRect = tableContainerRef.current.getBoundingClientRect();
|
54
|
+
const scrollContainerRect = scrollContainerRef.current.getBoundingClientRect();
|
55
|
+
const scrollTop = tableRect.top - scrollContainerRect.top + scrollContainerRef.current.scrollTop;
|
56
|
+
if (tableRect.top - stickyTopOffset < scrollContainerRect.top) {
|
57
|
+
// Adjust scroll position to account for sticky offset
|
58
|
+
scrollContainerRef.current.scrollTo(0, scrollTop - stickyTopOffset);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}, [scrollContainerRef, tableContainerRef, getStickyTopOffset]);
|
62
|
+
/**
|
63
|
+
* Triggers the scroll adjustment when dependencies change.
|
64
|
+
*
|
65
|
+
* Uses useLayoutEffect to adjust the scroll position before browser paint,
|
66
|
+
* preventing visual jumps. The adjustment is only performed if both refs
|
67
|
+
* are available.
|
68
|
+
*/
|
69
|
+
React.useLayoutEffect(() => {
|
70
|
+
// Only proceed if both refs are available
|
71
|
+
if (!tableContainerRef || !scrollContainerRef) {
|
72
|
+
return;
|
73
|
+
}
|
74
|
+
// Only scroll on subsequent renders when dependencies change
|
75
|
+
handleTableScroll();
|
76
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
77
|
+
}, [handleTableScroll, tableContainerRef, scrollContainerRef, ...dependencies]);
|
78
|
+
return {
|
79
|
+
/**
|
80
|
+
* Function to manually trigger the table scroll adjustment.
|
81
|
+
* This can be useful in cases where you need to adjust the scroll
|
82
|
+
* position outside of the dependency changes.
|
83
|
+
*/
|
84
|
+
handleTableScroll,
|
85
|
+
};
|
86
|
+
};
|
87
|
+
//# sourceMappingURL=useTableScroll.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"useTableScroll.js","sourceRoot":"","sources":["../../../src/components/TableWithControlsLayout/useTableScroll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAuB1B;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC3B,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GAAG,EAAE,GACC,EAAE,EAAE;IACtB;;;;;;;;OAQG;IACH,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC9C,+CAA+C;QAC/C,IAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,OAAO,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACzE,wEAAwE;YACxE,MAAM,eAAe,GAAG,aAAa,CAAC,gBAAgB,CAClD,mCAAmC,CACtC,CAAC;YAEF,OAAO,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB;;;;;;;;;OASG;IACH,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,uEAAuE;QACvE,IAAI,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,OAAO,MAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,OAAO,CAAA,EAAE,CAAC;YAC5D,kCAAkC;YAClC,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;YAE7C,qEAAqE;YACrE,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACpE,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC/E,MAAM,SAAS,GACX,SAAS,CAAC,GAAG,GAAG,mBAAmB,CAAC,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC;YACnF,IAAI,SAAS,CAAC,GAAG,GAAG,eAAe,GAAG,mBAAmB,CAAC,GAAG,EAAE,CAAC;gBAC5D,sDAAsD;gBACtD,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;YACxE,CAAC;QACL,CAAC;IACL,CAAC,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEhE;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACvB,0CAA0C;QAC1C,IAAI,CAAC,iBAAiB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5C,OAAO;QACX,CAAC;QAED,6DAA6D;QAC7D,iBAAiB,EAAE,CAAC;QACpB,uDAAuD;IAC3D,CAAC,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;IAEhF,OAAO;QACH;;;;WAIG;QACH,iBAAiB;KACpB,CAAC;AACN,CAAC,CAAC"}
|
@@ -59,9 +59,9 @@ export function Cluster({ additionalClusterProps, additionalTenantsProps, additi
|
|
59
59
|
dispatch(updateDefaultClusterTab(id));
|
60
60
|
}, children: node }, id));
|
61
61
|
} }) }), _jsx("div", { className: b('content'), children: _jsxs(Switch, { children: [_jsx(Route, { path: getLocationObjectFromHref(getClusterPath(clusterTabsIds.tablets))
|
62
|
-
.pathname, children: _jsx(TabletsTable, { loading: infoLoading, tablets: clusterTablets }) }), _jsx(Route, { path: getLocationObjectFromHref(getClusterPath(clusterTabsIds.tenants))
|
63
|
-
.pathname, children: _jsx(Tenants, { additionalTenantsProps: additionalTenantsProps }) }), _jsx(Route, { path: getLocationObjectFromHref(getClusterPath(clusterTabsIds.nodes)).pathname, children: _jsx(Nodes, {
|
64
|
-
.pathname, children: _jsx(PaginatedStorage, {
|
62
|
+
.pathname, children: _jsx(TabletsTable, { loading: infoLoading, tablets: clusterTablets, scrollContainerRef: container }) }), _jsx(Route, { path: getLocationObjectFromHref(getClusterPath(clusterTabsIds.tenants))
|
63
|
+
.pathname, children: _jsx(Tenants, { additionalTenantsProps: additionalTenantsProps, scrollContainerRef: container }) }), _jsx(Route, { path: getLocationObjectFromHref(getClusterPath(clusterTabsIds.nodes)).pathname, children: _jsx(Nodes, { scrollContainerRef: container, additionalNodesProps: additionalNodesProps }) }), _jsx(Route, { path: getLocationObjectFromHref(getClusterPath(clusterTabsIds.storage))
|
64
|
+
.pathname, children: _jsx(PaginatedStorage, { scrollContainerRef: container }) }), _jsx(Route, { path: getLocationObjectFromHref(getClusterPath(clusterTabsIds.versions))
|
65
65
|
.pathname, children: _jsx(VersionsContainer, { cluster: cluster, loading: infoLoading }) }), _jsx(Route, { render: () => (_jsx(Redirect, { to: getLocationObjectFromHref(getClusterPath(activeTabId)) })) })] }) })] }));
|
66
66
|
}
|
67
67
|
function useClusterTab() {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Cluster.js","sourceRoot":"","sources":["../../../src/containers/Cluster/Cluster.tsx"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"Cluster.js","sourceRoot":"","sources":["../../../src/containers/Cluster/Cluster.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAC,WAAW,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAC,kBAAkB,EAAC,MAAM,wDAAwD,CAAC;AAC1F,OAAO,EAAC,YAAY,EAAC,MAAM,+CAA+C,CAAC;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAC3D,OAAO,MAAM,EAAE,EAAC,yBAAyB,EAAC,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAC,4BAA4B,EAAC,MAAM,yCAAyC,CAAC;AACrF,OAAO,EACH,UAAU,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AAMxE,OAAO,EAAC,KAAK,EAAC,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAClC,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAC,eAAe,EAAC,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAC,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAElF,OAAO,gBAAgB,CAAC;AAExB,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;AAQ5B,MAAM,UAAU,OAAO,CAAC,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,GACT;IACX,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,2BAA2B,GAAG,4BAA4B,EAAE,CAAC;IAEnE,MAAM,CAAC,mBAAmB,CAAC,GAAG,sBAAsB,EAAE,CAAC;IAEvD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;IAEpC,MAAM,CAAC,EAAC,WAAW,EAAE,OAAO,EAAC,CAAC,GAAG,cAAc,CAAC;QAC5C,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,WAAW;KACvB,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAClD,kBAAkB,CAAC,KAAK,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,SAAS,CAAC,CACtD,CAAC;IAEF,MAAM,EAAC,KAAK,EAAE,gBAAgB,EAAC,GAAG,kBAAkB,EAAE,CAAC;IAEvD,MAAM,YAAY,GAAG,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,kBAAkB,CAAC;IAE5D,MAAM,EACF,IAAI,EAAE,EAAC,WAAW,EAAE,OAAO,EAAE,WAAW,EAAC,GAAG,EAAE,EAC9C,SAAS,EAAE,WAAW,EACtB,KAAK,GACR,GAAG,UAAU,CAAC,sBAAsB,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,SAAS,EAAE;QAC5D,eAAe,EAAE,mBAAmB;KACvC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5E,MAAM,cAAc,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9C,4BAA4B,CAAC,KAAK,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,SAAS,CAAC,CAChE,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,QAAQ,CAAC,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,eAAe,GAAG,GAAG,EAAE;QACzB,IAAI,WAAW,EAAE,CAAC;YACd,OAAO,KAAC,QAAQ,IAAC,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAI,CAAC;QACxD,CAAC;QACD,MAAM,aAAa,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,KAAI,KAAK,CAAC,IAAI,CAAC;QAErD,OAAO,CACH,MAAC,YAAY,IAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,aAC9B,YAAY,EACb,KAAC,YAAY,CAAC,KAAK,IACf,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,kBAAkB,CAAC,aAAa,CAAC,GACzC,IACS,CAClB,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAC3B,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC,EACpD,CAAC,WAAW,CAAC,CAChB,CAAC;IAEF,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,aAC/B,KAAC,MAAM,IACH,YAAY,EAAE,GAAG,YAAY,mBAAmB,EAChD,aAAa,EAAE,QAAQ,YAAY,mBAAmB,YAErD,SAAS,CAAC,CAAC,CAAC,0BAAQ,SAAS,CAAC,KAAK,GAAS,CAAC,CAAC,CAAC,IAAI,GAC/C,EACT,cAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAG,eAAe,EAAE,GAAO,EACtD,cAAK,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,YAC/B,KAAC,kBAAkB,IAAC,SAAS,EAAE,CAAC,CAAC,sBAAsB,CAAC,GAAI,GAC1D,EACL,2BAA2B,IAAI,CAC5B,cAAK,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,YAC1B,KAAC,eAAe,IACZ,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,EACtB,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,YAAY,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,EACrC,sBAAsB,EAAE,sBAAsB,GAChD,GACA,CACT,EACD,cAAK,SAAS,EAAE,CAAC,CAAC,qBAAqB,CAAC,YACpC,KAAC,IAAI,IACD,IAAI,EAAC,GAAG,EACR,gBAAgB,EAAE,IAAI,EACtB,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,CAAC,EAAC,EAAE,EAAC,EAAE,IAAI,EAAE,EAAE;wBACnB,MAAM,IAAI,GAAG,cAAc,CAAC,EAAgB,EAAE,EAAC,WAAW,EAAE,OAAO,EAAC,CAAC,CAAC;wBACtE,OAAO,CACH,KAAC,YAAY,IACT,EAAE,EAAE,IAAI,EAER,OAAO,EAAE,GAAG,EAAE;gCACV,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC1C,CAAC,YAEA,IAAI,IALA,EAAE,CAMI,CAClB,CAAC;oBACN,CAAC,GACH,GACA,EACN,cAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,YACxB,MAAC,MAAM,eACH,KAAC,KAAK,IACF,IAAI,EACA,yBAAyB,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;iCAC5D,QAAQ,YAGjB,KAAC,YAAY,IACT,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,cAAc,EACvB,kBAAkB,EAAE,SAAS,GAC/B,GACE,EACR,KAAC,KAAK,IACF,IAAI,EACA,yBAAyB,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;iCAC5D,QAAQ,YAGjB,KAAC,OAAO,IACJ,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,SAAS,GAC/B,GACE,EACR,KAAC,KAAK,IACF,IAAI,EACA,yBAAyB,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,YAG5E,KAAC,KAAK,IACF,kBAAkB,EAAE,SAAS,EAC7B,oBAAoB,EAAE,oBAAoB,GAC5C,GACE,EACR,KAAC,KAAK,IACF,IAAI,EACA,yBAAyB,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;iCAC5D,QAAQ,YAGjB,KAAC,gBAAgB,IAAC,kBAAkB,EAAE,SAAS,GAAI,GAC/C,EACR,KAAC,KAAK,IACF,IAAI,EACA,yBAAyB,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;iCAC7D,QAAQ,YAGjB,KAAC,iBAAiB,IAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAI,GACzD,EACR,KAAC,KAAK,IACF,MAAM,EAAE,GAAG,EAAE,CAAC,CACV,KAAC,QAAQ,IAAC,EAAE,EAAE,yBAAyB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,GAAI,CAC3E,GACH,IACG,GACP,IACJ,CACT,CAAC;AACN,CAAC;AAED,SAAS,aAAa;IAClB,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IAEpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,aAAa,CAAsB,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjE,MAAM,EAAC,SAAS,EAAE,mBAAmB,EAAC,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,KAAI,EAAE,CAAC;IAC7D,IAAI,SAAqB,CAAC;IAC1B,IAAI,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpC,SAAS,GAAG,mBAAmB,CAAC;IACpC,CAAC;SAAM,CAAC;QACJ,SAAS,GAAG,UAAU,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3B,QAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtC,OAAO,SAAS,CAAC;AACrB,CAAC"}
|