ydb-embedded-ui 6.11.0 → 6.13.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/components/AutoRefreshControl/i18n/index.d.ts +1 -1
- package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.d.ts +3 -2
- package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js +9 -5
- package/dist/components/CriticalActionDialog/CriticalActionDialog.d.ts +5 -3
- package/dist/components/CriticalActionDialog/CriticalActionDialog.js +8 -7
- package/dist/components/CriticalActionDialog/CriticalActionDialog.scss +1 -1
- package/dist/components/CriticalActionDialog/i18n/en.json +1 -0
- package/dist/components/CriticalActionDialog/i18n/index.d.ts +1 -1
- package/dist/components/DateRange/DateRange.d.ts +4 -4
- package/dist/components/DateRange/DateRange.js +23 -26
- package/dist/components/DateRange/DateRange.scss +14 -13
- package/dist/components/DateRange/__test__/fromDateRangeValues.test.js +80 -0
- package/dist/components/DateRange/__test__/getdatePickerSize.test.d.ts +1 -0
- package/dist/components/DateRange/__test__/getdatePickerSize.test.js +56 -0
- package/dist/components/DateRange/__test__/toDateRangeValues.test.d.ts +1 -0
- package/dist/components/DateRange/__test__/toDateRangeValues.test.js +80 -0
- package/dist/components/DateRange/i18n/en.json +4 -0
- package/dist/components/DateRange/i18n/index.d.ts +2 -0
- package/dist/components/DateRange/i18n/index.js +5 -0
- package/dist/components/DateRange/i18n/ru.json +4 -0
- package/dist/components/DateRange/utils.d.ts +5 -0
- package/dist/components/DateRange/utils.js +41 -0
- package/dist/components/DeveloperUILinkButton/DeveloperUILinkButton.d.ts +8 -0
- package/dist/components/{DeveloperUiLink/DeveloperUiLink.js → DeveloperUILinkButton/DeveloperUILinkButton.js} +3 -3
- package/dist/components/{DeveloperUiLink/DeveloperUiLink.scss → DeveloperUILinkButton/DeveloperUILinkButton.scss} +3 -2
- package/dist/components/DiskStateProgressBar/DiskStateProgressBar.d.ts +6 -1
- package/dist/components/DiskStateProgressBar/DiskStateProgressBar.js +22 -12
- package/dist/components/DiskStateProgressBar/DiskStateProgressBar.scss +45 -45
- package/dist/components/EntityStatus/EntityStatus.js +1 -1
- package/dist/components/EntityStatus/EntityStatus.scss +6 -2
- package/dist/components/Errors/PageError/PageError.d.ts +11 -0
- package/dist/components/Errors/PageError/PageError.js +19 -0
- package/dist/components/Errors/i18n/en.json +2 -1
- package/dist/components/Errors/i18n/index.d.ts +1 -1
- package/dist/components/Errors/i18n/ru.json +2 -1
- package/dist/components/Fullscreen/Fullscreen.d.ts +1 -1
- package/dist/components/Fullscreen/Fullscreen.js +34 -27
- package/dist/components/Fullscreen/Fullscreen.scss +16 -8
- package/dist/components/Graph/Graph.d.ts +13 -0
- package/dist/components/Graph/Graph.js +41 -0
- package/dist/components/LabelWithPopover/LabelWithPopover.d.ts +4 -1
- package/dist/components/LabelWithPopover/LabelWithPopover.js +1 -1
- package/dist/components/Loader/Loader.d.ts +2 -1
- package/dist/components/Loader/Loader.js +6 -1
- package/dist/components/LoaderWrapper/LoaderWrapper.d.ts +10 -0
- package/dist/components/LoaderWrapper/LoaderWrapper.js +8 -0
- package/dist/components/MetricChart/reducer.d.ts +2 -2
- package/dist/components/MonacoEditor/MonacoEditor.js +0 -2
- package/dist/components/NodeHostWrapper/NodeHostWrapper.d.ts +0 -1
- package/dist/components/NodeHostWrapper/NodeHostWrapper.js +3 -6
- package/dist/components/PDiskInfo/PDiskInfo.d.ts +8 -5
- package/dist/components/PDiskInfo/PDiskInfo.js +76 -26
- package/dist/components/PDiskInfo/PDiskInfo.scss +15 -1
- package/dist/components/PDiskInfo/i18n/en.json +11 -5
- package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/PDiskPopup/PDiskPopup.js +8 -2
- package/dist/components/ProgressViewer/ProgressViewer.js +3 -0
- package/dist/components/QueryExecutionStatus/QueryExecutionStatus.js +13 -3
- package/dist/components/QueryExecutionStatus/QueryExecutionStatus.scss +4 -0
- package/dist/components/QuerySettingsDescription/QuerySettingsDescription.d.ts +7 -0
- package/dist/components/QuerySettingsDescription/QuerySettingsDescription.js +8 -0
- package/dist/components/QuerySettingsDescription/QuerySettingsDescription.scss +8 -0
- package/dist/components/QuerySettingsDescription/index.d.ts +1 -0
- package/dist/components/QuerySettingsDescription/index.js +1 -0
- package/dist/components/VDisk/VDisk.js +3 -4
- package/dist/components/VDiskInfo/VDiskInfo.d.ts +4 -3
- package/dist/components/VDiskInfo/VDiskInfo.js +12 -5
- package/dist/components/VDiskInfo/VDiskInfo.scss +7 -1
- package/dist/components/VDiskInfo/i18n/en.json +2 -1
- package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
- package/dist/containers/App/Content.js +15 -19
- package/dist/containers/AsideNavigation/AsideNavigation.js +2 -1
- package/dist/containers/AsideNavigation/YdbInternalUser/YdbInternalUser.js +4 -4
- package/dist/containers/Authentication/Authentication.js +8 -10
- package/dist/containers/Authentication/utils.d.ts +8 -0
- package/dist/containers/Authentication/utils.js +15 -0
- package/dist/containers/Cluster/Cluster.scss +1 -4
- package/dist/containers/Cluster/ClusterInfo/ClusterInfo.js +6 -6
- package/dist/containers/Cluster/ClusterInfo/ClusterInfo.scss +1 -1
- package/dist/containers/Clusters/constants.d.ts +1 -1
- package/dist/containers/Heatmap/Heatmap.d.ts +2 -1
- package/dist/containers/Heatmap/Heatmap.js +7 -6
- package/dist/containers/Node/Node.js +5 -7
- package/dist/containers/Node/Node.scss +5 -4
- package/dist/containers/Node/NodeStructure/NodeStructure.js +4 -4
- package/dist/containers/Node/NodeStructure/NodeStructure.scss +4 -20
- package/dist/containers/Node/NodeStructure/Pdisk.js +3 -3
- package/dist/containers/Nodes/Nodes.js +6 -8
- package/dist/containers/Nodes/getNodesColumns.js +6 -21
- package/dist/containers/PDiskPage/PDiskGroups/PDiskGroups.d.ts +6 -0
- package/dist/containers/PDiskPage/PDiskGroups/PDiskGroups.js +24 -0
- package/dist/containers/PDiskPage/PDiskPage.js +79 -30
- package/dist/containers/PDiskPage/PDiskPage.scss +8 -5
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.d.ts +7 -0
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js +93 -0
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.scss +52 -0
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/utils.d.ts +4 -0
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/utils.js +9 -0
- package/dist/containers/PDiskPage/i18n/en.json +9 -1
- package/dist/containers/PDiskPage/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/PDisk/PDisk.js +3 -4
- package/dist/containers/Storage/Storage.js +4 -6
- package/dist/containers/Storage/StorageGroups/getStorageGroupsColumns.js +16 -6
- package/dist/containers/Tablet/Tablet.js +2 -2
- package/dist/containers/Tablet/TabletControls/TabletControls.js +2 -1
- package/dist/containers/Tablets/Tablets.js +14 -13
- package/dist/containers/Tenant/Acl/Acl.d.ts +2 -1
- package/dist/containers/Tenant/Acl/Acl.js +10 -8
- package/dist/containers/Tenant/Acl/Acl.scss +8 -8
- package/dist/containers/Tenant/Acl/i18n/en.json +6 -0
- package/dist/containers/Tenant/Acl/i18n/index.d.ts +2 -0
- package/dist/containers/Tenant/Acl/i18n/index.js +4 -0
- package/dist/containers/Tenant/Diagnostics/Consumers/Consumers.js +2 -5
- package/dist/containers/Tenant/Diagnostics/Describe/Describe.d.ts +2 -1
- package/dist/containers/Tenant/Diagnostics/Describe/Describe.js +14 -17
- package/dist/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.js +1 -1
- package/dist/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.scss +1 -0
- package/dist/containers/Tenant/Diagnostics/Diagnostics.js +3 -3
- package/dist/containers/Tenant/Diagnostics/Diagnostics.scss +3 -1
- package/dist/containers/Tenant/Diagnostics/HotKeys/HotKeys.d.ts +2 -1
- package/dist/containers/Tenant/Diagnostics/HotKeys/HotKeys.js +3 -3
- package/dist/containers/Tenant/Diagnostics/Network/Network.js +8 -11
- package/dist/containers/Tenant/Diagnostics/Network/Network.scss +1 -0
- package/dist/containers/Tenant/Diagnostics/Overview/Overview.d.ts +2 -2
- package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +8 -10
- package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/i18n/en.json +14 -1
- package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/i18n/index.js +1 -2
- package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/prepareTableInfo.js +36 -17
- package/dist/containers/Tenant/Diagnostics/Overview/TopicStats/TopicStats.js +3 -4
- package/dist/containers/Tenant/Diagnostics/Partitions/Partitions.js +1 -4
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopQueries.js +8 -5
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverviewTableLayout.js +3 -3
- package/dist/containers/Tenant/Diagnostics/TenantOverview/getSectionTitle.d.ts +2 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/getSectionTitle.js +2 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/en.json +3 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.js +6 -5
- package/dist/containers/Tenant/Diagnostics/TopQueries/getTopQueriesColumns.d.ts +2 -2
- package/dist/containers/Tenant/Diagnostics/TopQueries/getTopQueriesColumns.js +14 -14
- package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.js +7 -6
- package/dist/containers/Tenant/Diagnostics/TopShards/getTopShardsColumns.js +4 -4
- package/dist/containers/Tenant/ObjectSummary/ObjectSummary.js +31 -18
- package/dist/containers/Tenant/Query/ExecuteResult/ExecuteResult.d.ts +2 -2
- package/dist/containers/Tenant/Query/ExecuteResult/ExecuteResult.js +56 -20
- package/dist/containers/Tenant/Query/ExecuteResult/ExecuteResult.scss +10 -6
- package/dist/containers/Tenant/Query/ExecuteResult/i18n/en.json +7 -0
- package/dist/containers/Tenant/Query/ExecuteResult/i18n/index.d.ts +2 -0
- package/dist/containers/Tenant/Query/ExecuteResult/i18n/index.js +4 -0
- package/dist/containers/Tenant/Query/ExecuteResult/utils.d.ts +18 -0
- package/dist/containers/Tenant/Query/ExecuteResult/utils.js +36 -0
- package/dist/containers/Tenant/Query/ExplainResult/ExplainResult.d.ts +23 -1
- package/dist/containers/Tenant/Query/ExplainResult/ExplainResult.js +56 -111
- package/dist/containers/Tenant/Query/ExplainResult/ExplainResult.scss +1 -30
- package/dist/containers/Tenant/Query/ExplainResult/components/Ast/Ast.d.ts +7 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/Ast/Ast.js +18 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/Ast/Ast.scss +8 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/Graph/Graph.d.ts +8 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/Graph/Graph.js +14 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/Graph/Graph.scss +14 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/MetricsCell.d.ts +6 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/MetricsCell.js +11 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/OperationCell.d.ts +13 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/OperationCell.js +48 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/OperationParams.d.ts +6 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/OperationParams.js +66 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/SimplifiedPlan.d.ts +7 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/SimplifiedPlan.js +100 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/SimplifiedPlan.scss +128 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/types.d.ts +5 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/types.js +1 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/utils.d.ts +5 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/utils.js +59 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/TextExplain/TextExplain.d.ts +8 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/TextExplain/TextExplain.js +11 -0
- package/dist/containers/Tenant/Query/ExplainResult/components/TextExplain/TextExplain.scss +14 -0
- package/dist/containers/Tenant/Query/ExplainResult/i18n/en.json +8 -0
- package/dist/containers/Tenant/Query/ExplainResult/i18n/index.d.ts +2 -0
- package/dist/containers/Tenant/Query/ExplainResult/i18n/index.js +4 -0
- package/dist/containers/Tenant/Query/Preview/Preview.js +2 -3
- package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.js +1 -19
- package/dist/containers/Tenant/Query/QueryDuration/QueryDuration.js +1 -1
- package/dist/containers/Tenant/Query/QueryDuration/QueryDuration.scss +11 -0
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.d.ts +1 -1
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.js +96 -95
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.d.ts +5 -6
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js +18 -47
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.d.ts +2 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.js +5 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.test.d.ts +1 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.test.js +42 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.d.ts +5 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.js +19 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.test.d.ts +1 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.test.js +56 -0
- package/dist/containers/Tenant/Query/QuerySettingsBanner/QuerySettingsBanner.d.ts +2 -0
- package/dist/containers/Tenant/Query/QuerySettingsBanner/QuerySettingsBanner.js +12 -0
- package/dist/containers/Tenant/Query/QuerySettingsBanner/QuerySettingsBanner.scss +3 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.d.ts +2 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.js +35 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.scss +63 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsSelect.d.ts +15 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsSelect.js +14 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsSelect.scss +19 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.d.ts +215 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.js +131 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/en.json +13 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/index.d.ts +2 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/index.js +5 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/ru.json +13 -0
- package/dist/containers/Tenant/Query/i18n/en.json +17 -1
- package/dist/containers/Tenant/Query/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Schema/CreateDirectoryDialog/CreateDirectoryDialog.d.ts +3 -2
- package/dist/containers/Tenant/Schema/CreateDirectoryDialog/CreateDirectoryDialog.js +2 -2
- package/dist/containers/Tenant/Schema/SchemaTree/SchemaTree.js +8 -8
- package/dist/containers/Tenant/Schema/SchemaViewer/SchemaViewer.js +6 -3
- package/dist/containers/Tenant/Schema/SchemaViewer/columns.d.ts +2 -1
- package/dist/containers/Tenant/Schema/SchemaViewer/columns.js +13 -1
- package/dist/containers/Tenant/Schema/SchemaViewer/i18n/en.json +1 -0
- package/dist/containers/Tenant/Schema/SchemaViewer/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Schema/SchemaViewer/prepareData.js +3 -2
- package/dist/containers/Tenant/Schema/SchemaViewer/types.d.ts +1 -0
- package/dist/containers/Tenant/Tenant.js +4 -8
- package/dist/containers/Tenant/TenantPages.d.ts +12 -1
- package/dist/containers/Tenant/TenantPages.js +1 -1
- package/dist/containers/Tenant/i18n/en.json +2 -2
- package/dist/containers/Tenant/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/utils/schema.js +1 -1
- package/dist/containers/Tenant/utils/schemaActions.d.ts +2 -2
- package/dist/containers/Tenant/utils/schemaActions.js +2 -2
- package/dist/containers/Tenants/Tenants.js +5 -8
- package/dist/containers/Tenants/Tenants.scss +0 -4
- package/dist/containers/UserSettings/i18n/en.json +3 -3
- package/dist/containers/UserSettings/i18n/index.d.ts +1 -1
- package/dist/containers/UserSettings/settings.d.ts +2 -2
- package/dist/containers/UserSettings/settings.js +18 -19
- package/dist/containers/VDiskPage/VDiskPage.js +27 -13
- package/dist/containers/VDiskPage/i18n/en.json +1 -0
- package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
- package/dist/routes.js +2 -2
- package/dist/services/api.d.ts +59 -28
- package/dist/services/api.js +74 -98
- package/dist/services/settings.d.ts +11 -3
- package/dist/services/settings.js +7 -5
- package/dist/store/configureStore.d.ts +7 -7
- package/dist/store/defaultStore.d.ts +3 -3
- package/dist/store/reducers/api.d.ts +1 -1
- package/dist/store/reducers/api.js +1 -1
- package/dist/store/reducers/authentication/authentication.d.ts +37 -24
- package/dist/store/reducers/authentication/authentication.js +77 -57
- package/dist/store/reducers/authentication/types.d.ts +0 -8
- package/dist/store/reducers/capabilities/capabilities.d.ts +106 -0
- package/dist/store/reducers/capabilities/capabilities.js +22 -0
- package/dist/store/reducers/capabilities/hooks.d.ts +2 -0
- package/dist/store/reducers/capabilities/hooks.js +13 -0
- package/dist/store/reducers/cluster/cluster.d.ts +2 -2
- package/dist/store/reducers/clusterNodes/clusterNodes.d.ts +2 -2
- package/dist/store/reducers/clusters/clusters.d.ts +2 -2
- package/dist/store/reducers/describe.d.ts +5 -2
- package/dist/store/reducers/describe.js +2 -2
- package/dist/store/reducers/executeQuery.d.ts +7 -14
- package/dist/store/reducers/executeQuery.js +19 -14
- package/dist/store/reducers/executeTopQueries/executeTopQueries.d.ts +2 -2
- package/dist/store/reducers/executeTopQueries/executeTopQueries.js +19 -14
- package/dist/store/reducers/executeTopQueries/types.d.ts +2 -2
- package/dist/store/reducers/executeTopQueries/utils.js +11 -7
- package/dist/store/reducers/explainQuery/explainQuery.d.ts +5 -4
- package/dist/store/reducers/explainQuery/explainQuery.js +20 -5
- package/dist/store/reducers/explainQuery/types.d.ts +13 -1
- package/dist/store/reducers/explainQuery/utils.js +7 -2
- package/dist/store/reducers/healthcheckInfo/healthcheckInfo.d.ts +58 -58
- package/dist/store/reducers/heatmap.d.ts +2 -2
- package/dist/store/reducers/heatmap.js +3 -3
- package/dist/store/reducers/hotKeys/hotKeys.d.ts +3 -2
- package/dist/store/reducers/hotKeys/hotKeys.js +3 -3
- package/dist/store/reducers/index.d.ts +6 -6
- package/dist/store/reducers/network/network.d.ts +2 -2
- package/dist/store/reducers/network/network.js +1 -1
- package/dist/store/reducers/node/node.d.ts +3 -3
- package/dist/store/reducers/node/selectors.d.ts +1 -1
- package/dist/store/reducers/node/selectors.js +2 -2
- package/dist/store/reducers/nodes/nodes.d.ts +3 -3
- package/dist/store/reducers/nodesList.d.ts +3 -3
- package/dist/store/reducers/overview/overview.d.ts +5 -2
- package/dist/store/reducers/overview/overview.js +2 -2
- package/dist/store/reducers/partitions/partitions.d.ts +2 -2
- package/dist/store/reducers/pdisk/pdisk.d.ts +3 -3
- package/dist/store/reducers/pdisk/pdisk.js +15 -2
- package/dist/store/reducers/pdisk/types.d.ts +17 -1
- package/dist/store/reducers/pdisk/utils.d.ts +2 -2
- package/dist/store/reducers/pdisk/utils.js +68 -8
- package/dist/store/reducers/preview.d.ts +2 -2
- package/dist/store/reducers/preview.js +1 -1
- package/dist/store/reducers/queryActions/types.d.ts +1 -1
- package/dist/store/reducers/schema/schema.d.ts +28 -10
- package/dist/store/reducers/schema/schema.js +20 -14
- package/dist/store/reducers/schemaAcl/schemaAcl.d.ts +4 -2
- package/dist/store/reducers/schemaAcl/schemaAcl.js +9 -3
- package/dist/store/reducers/shardsWorkload/shardsWorkload.d.ts +2 -2
- package/dist/store/reducers/shardsWorkload/shardsWorkload.js +22 -6
- package/dist/store/reducers/shardsWorkload/types.d.ts +2 -2
- package/dist/store/reducers/storage/storage.d.ts +3 -3
- package/dist/store/reducers/tablet.d.ts +3 -3
- package/dist/store/reducers/tablets.d.ts +13 -13
- package/dist/store/reducers/tabletsFilters.d.ts +1 -1
- package/dist/store/reducers/tenant/tenant.d.ts +2 -2
- package/dist/store/reducers/tenantOverview/executeTopTables/executeTopTables.d.ts +2 -2
- package/dist/store/reducers/tenantOverview/executeTopTables/executeTopTables.js +1 -1
- package/dist/store/reducers/tenantOverview/topNodes/topNodes.d.ts +2 -2
- package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.d.ts +2 -2
- package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.js +1 -1
- package/dist/store/reducers/tenantOverview/topStorageGroups/topStorageGroups.d.ts +2 -2
- package/dist/store/reducers/tenants/selectors.d.ts +31 -30
- package/dist/store/reducers/tenants/selectors.js +8 -2
- package/dist/store/reducers/tenants/tenants.d.ts +2 -2
- package/dist/store/reducers/topic.d.ts +44 -44
- package/dist/store/reducers/vdisk/vdisk.d.ts +2 -2
- package/dist/store/reducers/vdisk/vdisk.js +1 -1
- package/dist/store/reducers/viewSchema/viewSchema.d.ts +2 -2
- package/dist/store/reducers/viewSchema/viewSchema.js +1 -1
- package/dist/store/state-url-mapping.d.ts +70 -0
- package/dist/store/state-url-mapping.js +1 -5
- package/dist/styles/mixins.scss +13 -0
- package/dist/types/api/acl.d.ts +1 -0
- package/dist/types/api/capabilities.d.ts +7 -0
- package/dist/types/api/capabilities.js +1 -0
- package/dist/types/api/modifyDisk.d.ts +8 -0
- package/dist/types/api/modifyDisk.js +1 -0
- package/dist/types/api/pdisk.d.ts +65 -2
- package/dist/types/api/query.d.ts +39 -3
- package/dist/types/api/query.js +9 -1
- package/dist/types/api/schema/shared.d.ts +8 -0
- package/dist/types/api/vdisk.d.ts +33 -2
- package/dist/types/common.d.ts +3 -0
- package/dist/types/store/heatmap.d.ts +1 -0
- package/dist/types/store/query.d.ts +11 -1
- package/dist/utils/__test__/prepareQueryExplain.test.d.ts +1 -0
- package/dist/utils/__test__/prepareQueryExplain.test.js +115 -0
- package/dist/utils/constants.d.ts +13 -3
- package/dist/utils/constants.js +15 -3
- package/dist/utils/dataFormatters/dataFormatters.d.ts +0 -5
- package/dist/utils/dataFormatters/dataFormatters.js +3 -12
- package/dist/utils/developerUI/developerUI.d.ts +1 -0
- package/dist/utils/developerUI/developerUI.js +3 -0
- package/dist/utils/disks/getPDiskType.d.ts +3 -3
- package/dist/utils/disks/helpers.d.ts +1 -0
- package/dist/utils/disks/helpers.js +3 -0
- package/dist/utils/disks/prepareDisks.d.ts +2 -2
- package/dist/utils/disks/prepareDisks.js +17 -22
- package/dist/utils/disks/types.d.ts +7 -5
- package/dist/utils/hooks/index.d.ts +2 -1
- package/dist/utils/hooks/index.js +2 -1
- package/dist/utils/hooks/useChangedQuerySettings.d.ts +10 -0
- package/dist/utils/hooks/useChangedQuerySettings.js +46 -0
- package/dist/utils/hooks/useDelayed.d.ts +1 -0
- package/dist/utils/hooks/useDelayed.js +13 -0
- package/dist/utils/hooks/useEventHandler.d.ts +6 -0
- package/dist/utils/hooks/useEventHandler.js +17 -0
- package/dist/utils/hooks/useLastQueryExecutionSettings.d.ts +2 -0
- package/dist/utils/hooks/useLastQueryExecutionSettings.js +5 -0
- package/dist/utils/hooks/useQueryExecutionSettings.d.ts +8 -0
- package/dist/utils/hooks/useQueryExecutionSettings.js +15 -0
- package/dist/utils/monaco/constats.d.ts +2 -0
- package/dist/utils/monaco/constats.js +2 -0
- package/dist/utils/monaco/yql/constants.d.ts +0 -1
- package/dist/utils/monaco/yql/constants.js +0 -1
- package/dist/utils/monaco/yql/yql.completionItemProvider.js +2 -2
- package/dist/utils/prepareQueryExplain.d.ts +3 -1
- package/dist/utils/prepareQueryExplain.js +54 -2
- package/dist/utils/query.d.ts +24 -1
- package/dist/utils/query.js +41 -0
- package/dist/utils/query.test.js +3 -0
- package/dist/utils/utils.d.ts +8 -7
- package/dist/utils/utils.js +23 -11
- package/package.json +8 -2
- package/dist/components/DeveloperUiLink/DeveloperUiLink.d.ts +0 -8
- package/dist/components/NodeHostWrapper/NodeHostWrapper.scss +0 -15
- package/dist/containers/Node/NodeStructure/Vdisk.d.ts +0 -6
- package/dist/containers/Node/NodeStructure/Vdisk.js +0 -13
- package/dist/containers/PDiskPage/PDiskGroups.d.ts +0 -9
- package/dist/containers/PDiskPage/PDiskGroups.js +0 -20
- package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/i18n/ru.json +0 -5
- package/dist/containers/Tenant/Query/ExplainResult/utils.d.ts +0 -2
- package/dist/containers/Tenant/Query/ExplainResult/utils.js +0 -4
- package/dist/store/reducers/tenantOverview/topQueries/tenantOverviewTopQueries.d.ts +0 -5
- package/dist/store/reducers/tenantOverview/topQueries/tenantOverviewTopQueries.js +0 -38
- package/dist/store/utils.d.ts +0 -23
- package/dist/store/utils.js +0 -49
- package/dist/types/api/restartPDisk.d.ts +0 -4
- package/dist/utils/hooks/useQueryModes.d.ts +0 -2
- package/dist/utils/hooks/useQueryModes.js +0 -5
- package/dist/utils/monaco/index.d.ts +0 -1
- package/dist/utils/monaco/index.js +0 -6
- package/dist/utils/monaco/s-expression/constants.d.ts +0 -1
- package/dist/utils/monaco/s-expression/constants.js +0 -1
- package/dist/utils/monaco/s-expression/registerLanguage.d.ts +0 -1
- package/dist/utils/monaco/s-expression/registerLanguage.js +0 -59
- package/dist/utils/monaco/yql/registerLanguage.d.ts +0 -1
- package/dist/utils/monaco/yql/registerLanguage.js +0 -8
- package/dist/utils/monaco/yql/yql.d.ts +0 -7
- package/dist/utils/monaco/yql/yql.js +0 -180
- package/dist/utils/monaco/yql/yql.keywords.d.ts +0 -3
- package/dist/utils/monaco/yql/yql.keywords.js +0 -3
- /package/dist/{types/api/restartPDisk.js → components/DateRange/__test__/fromDateRangeValues.test.d.ts} +0 -0
@@ -28,15 +28,12 @@
|
|
28
28
|
}
|
29
29
|
|
30
30
|
&__tabs {
|
31
|
-
--g-tabs-border-width: 0;
|
32
|
-
|
33
31
|
position: sticky;
|
34
32
|
left: 0;
|
35
33
|
|
36
34
|
display: flex;
|
37
35
|
justify-content: space-between;
|
38
36
|
align-items: center;
|
39
|
-
|
40
|
-
box-shadow: inset 0 -1px 0 0 var(--g-color-line-generic);
|
37
|
+
@include tabs-wrapper-styles();
|
41
38
|
}
|
42
39
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import { ContentWithPopup } from '../../../components/ContentWithPopup/ContentWithPopup';
|
3
3
|
import { ResponseError } from '../../../components/Errors/ResponseError';
|
4
4
|
import InfoViewer from '../../../components/InfoViewer/InfoViewer';
|
@@ -102,14 +102,14 @@ const getInfo = (cluster, versionsValues, groupsStats, additionalInfo, links) =>
|
|
102
102
|
});
|
103
103
|
return info;
|
104
104
|
};
|
105
|
-
export const ClusterInfo = ({ cluster
|
105
|
+
export const ClusterInfo = ({ cluster, versionsValues = [], groupsStats = {}, loading, error, additionalClusterProps = {}, }) => {
|
106
106
|
const singleClusterMode = useTypedSelector((state) => state.singleClusterMode);
|
107
107
|
let internalLink = backend + '/internal';
|
108
108
|
if (singleClusterMode && !customBackend) {
|
109
109
|
internalLink = `/internal`;
|
110
110
|
}
|
111
111
|
const { info = [], links = [] } = additionalClusterProps;
|
112
|
-
const clusterInfo = getInfo(cluster, versionsValues, groupsStats, info, [
|
112
|
+
const clusterInfo = getInfo(cluster !== null && cluster !== void 0 ? cluster : {}, versionsValues, groupsStats, info, [
|
113
113
|
{ title: DEVELOPER_UI_TITLE, url: internalLink },
|
114
114
|
...links,
|
115
115
|
]);
|
@@ -117,10 +117,10 @@ export const ClusterInfo = ({ cluster = {}, versionsValues = [], groupsStats = {
|
|
117
117
|
if (loading) {
|
118
118
|
return _jsx(InfoViewerSkeleton, { className: b('skeleton'), rows: 9 });
|
119
119
|
}
|
120
|
-
if (error) {
|
121
|
-
return
|
120
|
+
if (error && !cluster) {
|
121
|
+
return null;
|
122
122
|
}
|
123
123
|
return _jsx(InfoViewer, { dots: true, info: clusterInfo });
|
124
124
|
};
|
125
|
-
return (
|
125
|
+
return (_jsxs("div", { className: b(), children: [error ? _jsx(ResponseError, { error: error, className: b('error') }) : null, _jsx("div", { className: b('info'), children: getContent() })] }));
|
126
126
|
};
|
@@ -14,7 +14,7 @@ export declare const COLUMNS_NAMES: {
|
|
14
14
|
readonly DESCRIPTION: "description";
|
15
15
|
readonly BALANCER: "balancer";
|
16
16
|
};
|
17
|
-
export declare const DEFAULT_COLUMNS: ("
|
17
|
+
export declare const DEFAULT_COLUMNS: ("status" | "nodes" | "storage" | "tenants" | "versions" | "service" | "load" | "hosts" | "balancer" | "owner" | "title")[];
|
18
18
|
export declare const COLUMNS_TITLES: {
|
19
19
|
readonly title: "Cluster";
|
20
20
|
readonly versions: "Versions";
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import './Heatmap.scss';
|
2
2
|
interface HeatmapProps {
|
3
|
+
database: string;
|
3
4
|
path: string;
|
4
5
|
}
|
5
|
-
export declare const Heatmap: ({ path }: HeatmapProps) => import("react/jsx-runtime").JSX.Element;
|
6
|
+
export declare const Heatmap: ({ path, database }: HeatmapProps) => import("react/jsx-runtime").JSX.Element;
|
6
7
|
export {};
|
@@ -14,11 +14,11 @@ import { COLORS_RANGE_SIZE, getColorIndex, getColorRange, getCurrentMetricLimits
|
|
14
14
|
import './Heatmap.scss';
|
15
15
|
const b = cn('heatmap');
|
16
16
|
const COLORS_RANGE = getColorRange(COLORS_RANGE_SIZE);
|
17
|
-
export const Heatmap = ({ path }) => {
|
17
|
+
export const Heatmap = ({ path, database }) => {
|
18
18
|
const dispatch = useTypedDispatch();
|
19
19
|
const itemsContainer = React.createRef();
|
20
20
|
const [autoRefreshInterval] = useAutoRefreshInterval();
|
21
|
-
const { currentData, isFetching, error } = heatmapApi.useGetHeatmapTabletsInfoQuery({ path }, { pollingInterval: autoRefreshInterval });
|
21
|
+
const { currentData, isFetching, error } = heatmapApi.useGetHeatmapTabletsInfoQuery({ path, database }, { pollingInterval: autoRefreshInterval });
|
22
22
|
const loading = isFetching && currentData === undefined;
|
23
23
|
const { tablets = [], metrics } = currentData || {};
|
24
24
|
const { sort, heatmap, currentMetric } = useTypedSelector((state) => state.heatmap);
|
@@ -68,13 +68,14 @@ export const Heatmap = ({ path }) => {
|
|
68
68
|
};
|
69
69
|
const renderContent = () => {
|
70
70
|
const { min, max } = getCurrentMetricLimits(currentMetric, tablets);
|
71
|
-
|
71
|
+
let content;
|
72
|
+
if (!error || currentData) {
|
73
|
+
content = heatmap ? renderHeatmapCanvas() : renderHistogram();
|
74
|
+
}
|
75
|
+
return (_jsxs("div", { className: b(), children: [_jsxs("div", { className: b('filters'), children: [_jsx(Select, { className: b('heatmap-select'), value: currentMetric ? [currentMetric] : [], options: metrics, onUpdate: handleMetricChange, width: 200 }), _jsx("div", { className: b('sort-checkbox'), children: _jsx(Checkbox, { onUpdate: handleCheckboxChange, checked: sort, children: "Sort" }) }), _jsx("div", { className: b('histogram-checkbox'), children: _jsx(Checkbox, { onUpdate: handleHeatmapChange, checked: heatmap, children: "Heatmap" }) }), _jsxs("div", { className: b('limits'), children: [_jsxs("div", { className: b('limits-block'), children: [_jsx("div", { className: b('limits-title'), children: "min:" }), _jsx("div", { className: b('limits-value'), children: Number.isInteger(min) ? formatNumber(min) : '—' })] }), _jsxs("div", { className: b('limits-block'), children: [_jsx("div", { className: b('limits-title'), children: "max:" }), _jsx("div", { className: b('limits-value'), children: Number.isInteger(max) ? formatNumber(max) : '—' })] }), _jsxs("div", { className: b('limits-block'), children: [_jsx("div", { className: b('limits-title'), children: "count:" }), _jsx("div", { className: b('limits-value'), children: formatNumber(tablets.length) })] })] })] }), error ? _jsx(ResponseError, { error: error }) : null, content] }));
|
72
76
|
};
|
73
77
|
if (loading) {
|
74
78
|
return _jsx(Loader, {});
|
75
79
|
}
|
76
|
-
if (error) {
|
77
|
-
return _jsx(ResponseError, { error: error });
|
78
|
-
}
|
79
80
|
return renderContent();
|
80
81
|
};
|
@@ -80,13 +80,11 @@ export function Node(props) {
|
|
80
80
|
if (loading) {
|
81
81
|
return _jsx(Loader, { size: "l" });
|
82
82
|
}
|
83
|
-
|
84
|
-
return _jsx(ResponseError, { error: error });
|
83
|
+
if (node) {
|
84
|
+
return (_jsxs("div", { className: b(null, props.className), ref: container, children: [_jsx(Helmet, { titleTemplate: `%s — ${node.Host} — YDB Monitoring`, defaultTitle: `${node.Host} — YDB Monitoring`, children: _jsx("title", { children: activeTabVerified.title }) }), _jsx(BasicNodeViewer, { node: node, additionalNodesProps: props.additionalNodesProps, className: b('header') }), error ? _jsx(ResponseError, { error: error, className: b('error') }) : null, renderTabs(), _jsx("div", { className: b('content'), children: renderTabContent() })] }));
|
85
85
|
}
|
86
|
-
|
87
|
-
|
88
|
-
return (_jsxs("div", { className: b(null, props.className), ref: container, children: [_jsx(Helmet, { titleTemplate: `%s — ${node.Host} — YDB Monitoring`, defaultTitle: `${node.Host} — YDB Monitoring`, children: _jsx("title", { children: activeTabVerified.title }) }), _jsx(BasicNodeViewer, { node: node, additionalNodesProps: props.additionalNodesProps, className: b('header') }), renderTabs(), _jsx("div", { className: b('content'), children: renderTabContent() })] }));
|
89
|
-
}
|
90
|
-
return _jsx("div", { className: "error", children: "no node data" });
|
86
|
+
if (error) {
|
87
|
+
return _jsx(ResponseError, { error: error });
|
91
88
|
}
|
89
|
+
return _jsx("div", { className: "error", children: "no node data" });
|
92
90
|
}
|
@@ -23,15 +23,12 @@
|
|
23
23
|
}
|
24
24
|
|
25
25
|
&__tabs {
|
26
|
-
--g-tabs-border-width: 0;
|
27
|
-
|
28
26
|
display: flex;
|
29
27
|
justify-content: space-between;
|
30
28
|
align-items: center;
|
31
29
|
|
32
30
|
padding: 0 20px;
|
33
|
-
|
34
|
-
box-shadow: inset 0 -1px 0 0 var(--g-color-line-generic);
|
31
|
+
@include tabs-wrapper-styles();
|
35
32
|
}
|
36
33
|
|
37
34
|
&__tab {
|
@@ -56,4 +53,8 @@
|
|
56
53
|
height: 100%;
|
57
54
|
padding: 20px;
|
58
55
|
}
|
56
|
+
|
57
|
+
&__error {
|
58
|
+
padding: 0 20px;
|
59
|
+
}
|
59
60
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import url from 'url';
|
3
3
|
import React from 'react';
|
4
4
|
import isEmpty from 'lodash/isEmpty';
|
@@ -59,11 +59,11 @@ function NodeStructure({ nodeId, className }) {
|
|
59
59
|
if (loadingStructure) {
|
60
60
|
return _jsx(Loader, { size: "m" });
|
61
61
|
}
|
62
|
-
if (error) {
|
63
|
-
return
|
62
|
+
if (error && !currentData) {
|
63
|
+
return null;
|
64
64
|
}
|
65
65
|
return renderStructure();
|
66
66
|
};
|
67
|
-
return (
|
67
|
+
return (_jsxs("div", { className: b(), ref: scrollContainerRef, children: [error ? _jsx(ResponseError, { error: error, className: b('error') }) : null, _jsx("div", { className: className, children: renderContent() })] }));
|
68
68
|
}
|
69
69
|
export default NodeStructure;
|
@@ -10,6 +10,10 @@
|
|
10
10
|
@include flex-container();
|
11
11
|
@include body-2-typography();
|
12
12
|
|
13
|
+
&__error {
|
14
|
+
padding: 20px 20px 0;
|
15
|
+
}
|
16
|
+
|
13
17
|
&__pdisk {
|
14
18
|
display: flex;
|
15
19
|
flex-direction: column;
|
@@ -142,26 +146,6 @@
|
|
142
146
|
&__selected-vdisk {
|
143
147
|
animation: onSelectedVdiskAnimation 4s;
|
144
148
|
}
|
145
|
-
|
146
|
-
&__row {
|
147
|
-
display: flex;
|
148
|
-
}
|
149
|
-
|
150
|
-
&__column {
|
151
|
-
display: flex;
|
152
|
-
flex-direction: column;
|
153
|
-
|
154
|
-
margin-bottom: 15px;
|
155
|
-
}
|
156
|
-
|
157
|
-
&__title {
|
158
|
-
margin-right: 16px;
|
159
|
-
|
160
|
-
font-weight: 500;
|
161
|
-
text-transform: uppercase;
|
162
|
-
|
163
|
-
@include body-2-typography();
|
164
|
-
}
|
165
149
|
}
|
166
150
|
|
167
151
|
@keyframes onSelectedVdiskAnimation {
|
@@ -7,6 +7,7 @@ import isEmpty from 'lodash/isEmpty';
|
|
7
7
|
import { EntityStatus } from '../../../components/EntityStatus/EntityStatus';
|
8
8
|
import { PDiskInfo } from '../../../components/PDiskInfo/PDiskInfo';
|
9
9
|
import { ProgressViewer } from '../../../components/ProgressViewer/ProgressViewer';
|
10
|
+
import { VDiskInfo } from '../../../components/VDiskInfo/VDiskInfo';
|
10
11
|
import { EFlag } from '../../../types/api/enums';
|
11
12
|
import { EVDiskState } from '../../../types/api/vdisk';
|
12
13
|
import { valueIsDefined } from '../../../utils';
|
@@ -16,7 +17,6 @@ import { formatStorageValuesToGb } from '../../../utils/dataFormatters/dataForma
|
|
16
17
|
import { createVDiskDeveloperUILink } from '../../../utils/developerUI/developerUI';
|
17
18
|
import i18n from '../i18n';
|
18
19
|
import { PDiskTitleBadge } from './PDiskTitleBadge';
|
19
|
-
import { Vdisk } from './Vdisk';
|
20
20
|
const b = cn('kv-node-structure');
|
21
21
|
var VDiskTableColumnsIds;
|
22
22
|
(function (VDiskTableColumnsIds) {
|
@@ -78,7 +78,7 @@ function getColumns({ pDiskId, selectedVdiskId, nodeId, }) {
|
|
78
78
|
header: vDiskTableColumnsNames[VDiskTableColumnsIds.Info],
|
79
79
|
width: 70,
|
80
80
|
render: ({ row }) => {
|
81
|
-
return (_jsx(Popover, { placement: ['right'], content: _jsx(
|
81
|
+
return (_jsx(Popover, { placement: ['right'], content: _jsx(VDiskInfo, { data: row, withTitle: true, withVDiskPageLink: true }), tooltipContentClassName: b('vdisk-details'), children: _jsx(Button, { view: "flat-secondary", className: b('vdisk-details-button', {
|
82
82
|
selected: row.id === selectedVdiskId,
|
83
83
|
}), children: _jsx(Icon, { data: CircleInfoFill, size: 18 }) }) }));
|
84
84
|
},
|
@@ -107,7 +107,7 @@ export function PDisk({ id, data, selectedVdiskId, nodeId, unfolded: unfoldedFro
|
|
107
107
|
if (isEmpty(data)) {
|
108
108
|
return _jsx("div", { children: "No information about PDisk" });
|
109
109
|
}
|
110
|
-
return (_jsxs("div", { children: [_jsx(PDiskInfo, { pDisk: data, nodeId: nodeId, className: b('pdisk-details') }), _jsxs("div", { className: b('vdisks-container'), children: [_jsx("div", { className: b('vdisks-header'), children: "VDisks" }), renderVDisks()] })] }));
|
110
|
+
return (_jsxs("div", { children: [_jsx(PDiskInfo, { pDisk: data, nodeId: nodeId, className: b('pdisk-details'), withPDiskPageLink: true }), _jsxs("div", { className: b('vdisks-container'), children: [_jsx("div", { className: b('vdisks-header'), children: "VDisks" }), renderVDisks()] })] }));
|
111
111
|
};
|
112
112
|
return (_jsxs("div", { className: b('pdisk'), id: id, children: [_jsxs("div", { className: b('pdisk-header'), children: [_jsxs("div", { className: b('pdisk-title-wrapper'), children: [_jsx(EntityStatus, { status: Device }), _jsx(PDiskTitleBadge, { label: "PDiskID", value: PDiskId, className: b('pdisk-title-id') }), _jsx(PDiskTitleBadge, { value: Type, className: b('pdisk-title-type') }), _jsx(ProgressViewer, { value: total - available, capacity: total, formatValues: formatStorageValuesToGb, colorizeProgress: true, className: b('pdisk-title-size') }), _jsx(PDiskTitleBadge, { label: "VDisks", value: vDisks.length })] }), _jsx(Button, { onClick: unfolded ? onClosePDiskDetails : onOpenPDiskDetails, view: "flat-secondary", children: _jsx(ArrowToggle, { direction: unfolded ? 'top' : 'bottom' }) })] }), unfolded && renderPDiskDetails()] }));
|
113
113
|
}
|
@@ -5,6 +5,7 @@ import { skipToken } from '@reduxjs/toolkit/query';
|
|
5
5
|
import { StringParam, useQueryParams } from 'use-query-params';
|
6
6
|
import { EntitiesCount } from '../../components/EntitiesCount';
|
7
7
|
import { AccessDenied } from '../../components/Errors/403';
|
8
|
+
import { isAccessError } from '../../components/Errors/PageError/PageError';
|
8
9
|
import { ResponseError } from '../../components/Errors/ResponseError';
|
9
10
|
import { Illustration } from '../../components/Illustration';
|
10
11
|
import { ProblemFilter } from '../../components/ProblemFilter';
|
@@ -65,7 +66,7 @@ export const Nodes = ({ path, additionalNodesProps = {} }) => {
|
|
65
66
|
}, [data, searchValue, uptimeFilter, problemFilter]);
|
66
67
|
const totalNodes = (data === null || data === void 0 ? void 0 : data.TotalNodes) || 0;
|
67
68
|
const renderControls = () => {
|
68
|
-
return (_jsxs(React.Fragment, { children: [_jsx(Search, { onChange: handleSearchQueryChange, placeholder: "Host name", className: b('search'), value: searchValue }), _jsx(ProblemFilter, { value: problemFilter, onChange: handleProblemFilterChange }), _jsx(UptimeFilter, { value: uptimeFilter, onChange: handleUptimeFilterChange }), _jsx(EntitiesCount, { total: totalNodes, current:
|
69
|
+
return (_jsxs(React.Fragment, { children: [_jsx(Search, { onChange: handleSearchQueryChange, placeholder: "Host name", className: b('search'), value: searchValue }), _jsx(ProblemFilter, { value: problemFilter, onChange: handleProblemFilterChange }), _jsx(UptimeFilter, { value: uptimeFilter, onChange: handleUptimeFilterChange }), _jsx(EntitiesCount, { total: totalNodes, current: nodes.length, label: 'Nodes', loading: isLoading })] }));
|
69
70
|
};
|
70
71
|
const renderTable = () => {
|
71
72
|
const rawColumns = getNodesColumns({
|
@@ -74,7 +75,7 @@ export const Nodes = ({ path, additionalNodesProps = {} }) => {
|
|
74
75
|
const columns = rawColumns.map((column) => {
|
75
76
|
return { ...column, sortable: isSortableNodesProperty(column.name) };
|
76
77
|
});
|
77
|
-
if (nodes
|
78
|
+
if (nodes.length === 0) {
|
78
79
|
if (problemFilter !== ProblemFilterValues.ALL ||
|
79
80
|
uptimeFilter !== NodesUptimeFilterValues.All) {
|
80
81
|
return _jsx(Illustration, { name: "thumbsUp", width: "200" });
|
@@ -82,11 +83,8 @@ export const Nodes = ({ path, additionalNodesProps = {} }) => {
|
|
82
83
|
}
|
83
84
|
return (_jsx(ResizeableDataTable, { columnsWidthLSKey: NODES_COLUMNS_WIDTH_LS_KEY, data: nodes || [], columns: columns, settings: DEFAULT_TABLE_SETTINGS, sortOrder: sort, onSort: handleSort, emptyDataMessage: i18n('empty.default'), rowClassName: (row) => b('node', { unavailable: isUnavailableNode(row) }) }));
|
84
85
|
};
|
85
|
-
if (error) {
|
86
|
-
|
87
|
-
return _jsx(AccessDenied, {});
|
88
|
-
}
|
89
|
-
return _jsx(ResponseError, { error: error });
|
86
|
+
if (isAccessError(error)) {
|
87
|
+
return _jsx(AccessDenied, {});
|
90
88
|
}
|
91
|
-
return (_jsxs(TableWithControlsLayout, { children: [_jsx(TableWithControlsLayout.Controls, { children: renderControls() }), _jsx(TableWithControlsLayout.Table, { loading: isLoading, children: renderTable() })] }));
|
89
|
+
return (_jsxs(TableWithControlsLayout, { children: [_jsx(TableWithControlsLayout.Controls, { children: renderControls() }), error ? _jsx(ResponseError, { error: error }) : null, _jsx(TableWithControlsLayout.Table, { loading: isLoading, children: data ? renderTable() : null })] }));
|
92
90
|
};
|
@@ -8,7 +8,7 @@ import { TabletsStatistic } from '../../components/TabletsStatistic';
|
|
8
8
|
import { UsageLabel } from '../../components/UsageLabel/UsageLabel';
|
9
9
|
import { getLoadSeverityForNode } from '../../store/reducers/nodes/utils';
|
10
10
|
import { EMPTY_DATA_PLACEHOLDER } from '../../utils/constants';
|
11
|
-
import {
|
11
|
+
import { formatStorageValuesToGb } from '../../utils/dataFormatters/dataFormatters';
|
12
12
|
export const NODES_COLUMNS_WIDTH_LS_KEY = 'nodesTableColumnsWidth';
|
13
13
|
const NODES_COLUMNS_IDS = {
|
14
14
|
NodeId: 'NodeId',
|
@@ -84,14 +84,7 @@ const memoryColumn = {
|
|
84
84
|
header: 'Memory',
|
85
85
|
sortAccessor: ({ MemoryUsed = 0 }) => Number(MemoryUsed),
|
86
86
|
defaultOrder: DataTable.DESCENDING,
|
87
|
-
render: ({ row }) => {
|
88
|
-
if (row.MemoryUsed) {
|
89
|
-
return formatBytesToGigabyte(row.MemoryUsed);
|
90
|
-
}
|
91
|
-
else {
|
92
|
-
return '—';
|
93
|
-
}
|
94
|
-
},
|
87
|
+
render: ({ row }) => (_jsx(ProgressViewer, { value: row.MemoryUsed, capacity: row.MemoryLimit, formatValues: formatStorageValuesToGb, colorizeProgress: true })),
|
95
88
|
align: DataTable.RIGHT,
|
96
89
|
width: 120,
|
97
90
|
};
|
@@ -111,7 +104,9 @@ const loadAverageColumn = {
|
|
111
104
|
header: 'Load average',
|
112
105
|
sortAccessor: ({ LoadAveragePercents = [] }) => LoadAveragePercents[0],
|
113
106
|
defaultOrder: DataTable.DESCENDING,
|
114
|
-
render: ({ row }) =>
|
107
|
+
render: ({ row }) => (_jsx(ProgressViewer, { value: row.LoadAveragePercents && row.LoadAveragePercents.length > 0
|
108
|
+
? row.LoadAveragePercents[0]
|
109
|
+
: undefined, percents: true, colorizeProgress: true, capacity: 100 })),
|
115
110
|
align: DataTable.LEFT,
|
116
111
|
width: 140,
|
117
112
|
resizeMinWidth: 140,
|
@@ -147,22 +142,13 @@ const topNodesMemoryColumn = {
|
|
147
142
|
};
|
148
143
|
const sharedCacheUsageColumn = {
|
149
144
|
name: NODES_COLUMNS_IDS.SharedCacheUsage,
|
150
|
-
header: '
|
145
|
+
header: 'Caches',
|
151
146
|
render: ({ row }) => (_jsx(ProgressViewer, { value: row.SharedCacheUsed, capacity: row.SharedCacheLimit, formatValues: formatStorageValuesToGb, colorizeProgress: true })),
|
152
147
|
align: DataTable.LEFT,
|
153
148
|
width: 140,
|
154
149
|
resizeMinWidth: 140,
|
155
150
|
sortable: false,
|
156
151
|
};
|
157
|
-
const memoryUsedInAllocColumn = {
|
158
|
-
name: NODES_COLUMNS_IDS.MemoryUsedInAlloc,
|
159
|
-
header: 'Query Runtime',
|
160
|
-
render: ({ row }) => (_jsx(ProgressViewer, { value: row.MemoryUsedInAlloc, capacity: row.MemoryLimit, formatValues: formatStorageValuesToGb, colorizeProgress: true })),
|
161
|
-
align: DataTable.LEFT,
|
162
|
-
width: 140,
|
163
|
-
resizeMinWidth: 140,
|
164
|
-
sortable: false,
|
165
|
-
};
|
166
152
|
const sessionsColumn = {
|
167
153
|
name: NODES_COLUMNS_IDS.TotalSessions,
|
168
154
|
header: 'Sessions',
|
@@ -204,7 +190,6 @@ export function getTopNodesByMemoryColumns({ tabletsPath, getNodeRef, }) {
|
|
204
190
|
topNodesLoadAverageColumn,
|
205
191
|
topNodesMemoryColumn,
|
206
192
|
sharedCacheUsageColumn,
|
207
|
-
memoryUsedInAllocColumn,
|
208
193
|
sessionsColumn,
|
209
194
|
getTabletsColumn(tabletsPath),
|
210
195
|
];
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { ResizeableDataTable } from '../../../components/ResizeableDataTable/ResizeableDataTable';
|
4
|
+
import { TableSkeleton } from '../../../components/TableSkeleton/TableSkeleton';
|
5
|
+
import { selectNodesMap } from '../../../store/reducers/nodesList';
|
6
|
+
import { pDiskApi } from '../../../store/reducers/pdisk/pdisk';
|
7
|
+
import { DEFAULT_TABLE_SETTINGS } from '../../../utils/constants';
|
8
|
+
import { useAutoRefreshInterval, useTypedSelector } from '../../../utils/hooks';
|
9
|
+
import { STORAGE_GROUPS_COLUMNS_WIDTH_LS_KEY, getPDiskStorageColumns, } from '../../Storage/StorageGroups/getStorageGroupsColumns';
|
10
|
+
export function PDiskGroups({ pDiskId, nodeId }) {
|
11
|
+
var _a;
|
12
|
+
const nodesMap = useTypedSelector(selectNodesMap);
|
13
|
+
const [autoRefreshInterval] = useAutoRefreshInterval();
|
14
|
+
const pDiskStorageQuery = pDiskApi.useGetStorageInfoQuery({ pDiskId, nodeId }, { pollingInterval: autoRefreshInterval });
|
15
|
+
const loading = pDiskStorageQuery.isFetching && pDiskStorageQuery.currentData === undefined;
|
16
|
+
const data = (_a = pDiskStorageQuery.currentData) !== null && _a !== void 0 ? _a : [];
|
17
|
+
const pDiskStorageColumns = React.useMemo(() => {
|
18
|
+
return getPDiskStorageColumns(nodesMap);
|
19
|
+
}, [nodesMap]);
|
20
|
+
if (loading) {
|
21
|
+
return _jsx(TableSkeleton, {});
|
22
|
+
}
|
23
|
+
return (_jsx(ResizeableDataTable, { columnsWidthLSKey: STORAGE_GROUPS_COLUMNS_WIDTH_LS_KEY, data: data, columns: pDiskStorageColumns, settings: DEFAULT_TABLE_SETTINGS }));
|
24
|
+
}
|
@@ -1,64 +1,90 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import React from 'react';
|
3
3
|
import { ArrowRotateLeft } from '@gravity-ui/icons';
|
4
|
-
import { Icon } from '@gravity-ui/uikit';
|
4
|
+
import { Icon, Tabs } from '@gravity-ui/uikit';
|
5
5
|
import { skipToken } from '@reduxjs/toolkit/query';
|
6
6
|
import { Helmet } from 'react-helmet-async';
|
7
7
|
import { StringParam, useQueryParams } from 'use-query-params';
|
8
|
+
import { z } from 'zod';
|
8
9
|
import { AutoRefreshControl } from '../../components/AutoRefreshControl/AutoRefreshControl';
|
9
10
|
import { ButtonWithConfirmDialog } from '../../components/ButtonWithConfirmDialog/ButtonWithConfirmDialog';
|
10
11
|
import { DiskPageTitle } from '../../components/DiskPageTitle/DiskPageTitle';
|
12
|
+
import { ResponseError } from '../../components/Errors/ResponseError';
|
11
13
|
import { InfoViewerSkeleton } from '../../components/InfoViewerSkeleton/InfoViewerSkeleton';
|
14
|
+
import { InternalLink } from '../../components/InternalLink/InternalLink';
|
12
15
|
import { PDiskInfo } from '../../components/PDiskInfo/PDiskInfo';
|
13
16
|
import { PageMeta } from '../../components/PageMeta/PageMeta';
|
17
|
+
import { getPDiskPagePath } from '../../routes';
|
18
|
+
import { api } from '../../store/reducers/api';
|
19
|
+
import { selectIsUserAllowedToMakeChanges } from '../../store/reducers/authentication/authentication';
|
14
20
|
import { setHeaderBreadcrumbs } from '../../store/reducers/header/header';
|
15
|
-
import { selectNodesMap } from '../../store/reducers/nodesList';
|
16
21
|
import { pDiskApi } from '../../store/reducers/pdisk/pdisk';
|
17
22
|
import { valueIsDefined } from '../../utils';
|
18
|
-
import { getSeverityColor } from '../../utils/disks/helpers';
|
23
|
+
import { getPDiskId, getSeverityColor } from '../../utils/disks/helpers';
|
19
24
|
import { useAutoRefreshInterval, useTypedDispatch, useTypedSelector } from '../../utils/hooks';
|
20
|
-
import { PDiskGroups } from './PDiskGroups';
|
25
|
+
import { PDiskGroups } from './PDiskGroups/PDiskGroups';
|
26
|
+
import { PDiskSpaceDistribution } from './PDiskSpaceDistribution/PDiskSpaceDistribution';
|
21
27
|
import { pDiskPageKeyset } from './i18n';
|
22
28
|
import { pdiskPageCn } from './shared';
|
23
29
|
import './PDiskPage.scss';
|
30
|
+
const PDISK_TABS_IDS = {
|
31
|
+
diskDistribution: 'diskDistribution',
|
32
|
+
groups: 'groups',
|
33
|
+
};
|
34
|
+
const PDISK_PAGE_TABS = [
|
35
|
+
{
|
36
|
+
id: PDISK_TABS_IDS.diskDistribution,
|
37
|
+
get title() {
|
38
|
+
return pDiskPageKeyset('disk-distribution');
|
39
|
+
},
|
40
|
+
},
|
41
|
+
{
|
42
|
+
id: PDISK_TABS_IDS.groups,
|
43
|
+
get title() {
|
44
|
+
return pDiskPageKeyset('groups');
|
45
|
+
},
|
46
|
+
},
|
47
|
+
];
|
48
|
+
const pDiskTabSchema = z.nativeEnum(PDISK_TABS_IDS).catch(PDISK_TABS_IDS.diskDistribution);
|
24
49
|
export function PDiskPage() {
|
25
|
-
var _a;
|
26
50
|
const dispatch = useTypedDispatch();
|
27
|
-
const
|
28
|
-
const {
|
29
|
-
|
51
|
+
const isUserAllowedToMakeChanges = useTypedSelector(selectIsUserAllowedToMakeChanges);
|
52
|
+
const [{ nodeId, pDiskId, activeTab }] = useQueryParams({
|
53
|
+
activeTab: StringParam,
|
30
54
|
nodeId: StringParam,
|
31
55
|
pDiskId: StringParam,
|
32
56
|
});
|
57
|
+
const pDiskParamsDefined = valueIsDefined(nodeId) && valueIsDefined(pDiskId);
|
58
|
+
const pDiskTab = pDiskTabSchema.parse(activeTab);
|
33
59
|
React.useEffect(() => {
|
34
60
|
dispatch(setHeaderBreadcrumbs('pDisk', { nodeId, pDiskId }));
|
35
61
|
}, [dispatch, nodeId, pDiskId]);
|
36
62
|
const [autoRefreshInterval] = useAutoRefreshInterval();
|
37
|
-
const params =
|
63
|
+
const params = pDiskParamsDefined ? { nodeId, pDiskId } : skipToken;
|
38
64
|
const pdiskDataQuery = pDiskApi.useGetPdiskInfoQuery(params, {
|
39
65
|
pollingInterval: autoRefreshInterval,
|
40
66
|
});
|
41
67
|
const pDiskLoading = pdiskDataQuery.isFetching && pdiskDataQuery.currentData === undefined;
|
42
|
-
const pDiskData = pdiskDataQuery.currentData
|
43
|
-
const { NodeHost, NodeId, NodeType, NodeDC, Severity } = pDiskData;
|
44
|
-
const
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
if ((res === null || res === void 0 ? void 0 : res.result) === false) {
|
53
|
-
const err = { statusText: res.error };
|
68
|
+
const pDiskData = pdiskDataQuery.currentData;
|
69
|
+
const { NodeHost, NodeId, NodeType, NodeDC, Severity } = pDiskData || {};
|
70
|
+
const handleRestart = async (isRetry) => {
|
71
|
+
if (pDiskParamsDefined) {
|
72
|
+
return window.api.restartPDisk({ nodeId, pDiskId, force: isRetry }).then((response) => {
|
73
|
+
if ((response === null || response === void 0 ? void 0 : response.result) === false) {
|
74
|
+
const err = {
|
75
|
+
statusText: response.error,
|
76
|
+
retryPossible: response.forceRetryPossible,
|
77
|
+
};
|
54
78
|
throw err;
|
55
79
|
}
|
56
80
|
});
|
57
81
|
}
|
58
82
|
return undefined;
|
59
83
|
};
|
60
|
-
const handleAfterRestart =
|
61
|
-
|
84
|
+
const handleAfterRestart = () => {
|
85
|
+
if (pDiskParamsDefined) {
|
86
|
+
dispatch(api.util.invalidateTags([{ type: 'PDiskData', id: getPDiskId(nodeId, pDiskId) }]));
|
87
|
+
}
|
62
88
|
};
|
63
89
|
const renderHelmet = () => {
|
64
90
|
const pDiskPagePart = pDiskId
|
@@ -70,22 +96,45 @@ export function PDiskPage() {
|
|
70
96
|
const renderPageMeta = () => {
|
71
97
|
const hostItem = NodeHost ? `${pDiskPageKeyset('fqdn')}: ${NodeHost}` : undefined;
|
72
98
|
const nodeIdItem = NodeId ? `${pDiskPageKeyset('node')}: ${NodeId}` : undefined;
|
73
|
-
return (
|
99
|
+
return (_jsxs("div", { className: pdiskPageCn('meta'), children: [_jsx(PageMeta, { loading: pDiskLoading, items: [hostItem, nodeIdItem, NodeType, NodeDC] }), _jsx(AutoRefreshControl, {})] }));
|
74
100
|
};
|
75
101
|
const renderPageTitle = () => {
|
76
|
-
return (_jsx(DiskPageTitle, { entityName: pDiskPageKeyset('pdisk'), status: getSeverityColor(Severity), id: pDiskId, className: pdiskPageCn('title') }));
|
102
|
+
return (_jsx(DiskPageTitle, { entityName: pDiskPageKeyset('pdisk'), status: getSeverityColor(Severity), id: pDiskParamsDefined ? getPDiskId(nodeId, pDiskId) : null, className: pdiskPageCn('title') }));
|
77
103
|
};
|
78
104
|
const renderControls = () => {
|
79
|
-
return (
|
105
|
+
return (_jsx("div", { className: pdiskPageCn('controls'), children: _jsxs(ButtonWithConfirmDialog, { onConfirmAction: handleRestart, onConfirmActionSuccess: handleAfterRestart, buttonDisabled: !nodeId || !pDiskId || !isUserAllowedToMakeChanges, buttonView: "normal", dialogContent: pDiskPageKeyset('restart-pdisk-dialog'), retryButtonText: pDiskPageKeyset('force-restart-pdisk-button'), withPopover: true, popoverContent: pDiskPageKeyset('restart-pdisk-not-allowed'), popoverDisabled: isUserAllowedToMakeChanges, children: [_jsx(Icon, { data: ArrowRotateLeft }), pDiskPageKeyset('restart-pdisk-button')] }) }));
|
80
106
|
};
|
81
107
|
const renderInfo = () => {
|
82
108
|
if (pDiskLoading) {
|
83
109
|
return _jsx(InfoViewerSkeleton, { className: pdiskPageCn('info'), rows: 10 });
|
84
110
|
}
|
85
|
-
return
|
111
|
+
return _jsx(PDiskInfo, { pDisk: pDiskData, nodeId: nodeId, className: pdiskPageCn('info') });
|
112
|
+
};
|
113
|
+
const renderTabs = () => {
|
114
|
+
return (_jsx("div", { className: pdiskPageCn('tabs'), children: _jsx(Tabs, { size: "l", items: PDISK_PAGE_TABS, activeTab: pDiskTab, wrapTo: ({ id }, tabNode) => {
|
115
|
+
const path = pDiskParamsDefined
|
116
|
+
? getPDiskPagePath(pDiskId, nodeId, { activeTab: id })
|
117
|
+
: undefined;
|
118
|
+
return (_jsx(InternalLink, { to: path, children: tabNode }, id));
|
119
|
+
} }) }));
|
86
120
|
};
|
87
|
-
const
|
88
|
-
|
121
|
+
const renderTabsContent = () => {
|
122
|
+
switch (pDiskTab) {
|
123
|
+
case 'diskDistribution': {
|
124
|
+
return pDiskData ? _jsx(PDiskSpaceDistribution, { data: pDiskData }) : null;
|
125
|
+
}
|
126
|
+
case 'groups': {
|
127
|
+
return pDiskParamsDefined ? (_jsx(PDiskGroups, { nodeId: nodeId, pDiskId: pDiskId })) : null;
|
128
|
+
}
|
129
|
+
default:
|
130
|
+
return null;
|
131
|
+
}
|
132
|
+
};
|
133
|
+
const renderError = () => {
|
134
|
+
if (!pdiskDataQuery.error) {
|
135
|
+
return null;
|
136
|
+
}
|
137
|
+
return _jsx(ResponseError, { error: pdiskDataQuery.error });
|
89
138
|
};
|
90
|
-
return (_jsxs("div", { className: pdiskPageCn(null), children: [renderHelmet(), renderPageMeta(), renderPageTitle(), renderControls(), renderInfo(),
|
139
|
+
return (_jsxs("div", { className: pdiskPageCn(null), children: [renderHelmet(), renderPageMeta(), renderPageTitle(), renderControls(), renderError(), renderInfo(), renderTabs(), renderTabsContent()] }));
|
91
140
|
}
|
@@ -15,13 +15,16 @@
|
|
15
15
|
&__title,
|
16
16
|
&__info,
|
17
17
|
&__controls,
|
18
|
-
&
|
18
|
+
&__tabs {
|
19
19
|
position: sticky;
|
20
20
|
left: 0;
|
21
21
|
}
|
22
22
|
|
23
|
-
&
|
24
|
-
|
23
|
+
&__meta {
|
24
|
+
display: flex;
|
25
|
+
justify-content: space-between;
|
26
|
+
align-items: center;
|
27
|
+
gap: var(--g-spacing-4);
|
25
28
|
}
|
26
29
|
|
27
30
|
&__controls {
|
@@ -30,7 +33,7 @@
|
|
30
33
|
gap: var(--g-spacing-2);
|
31
34
|
}
|
32
35
|
|
33
|
-
&
|
34
|
-
|
36
|
+
&__tabs {
|
37
|
+
@include tabs-wrapper-styles();
|
35
38
|
}
|
36
39
|
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import type { PDiskData } from '../../../store/reducers/pdisk/types';
|
2
|
+
import './PDiskSpaceDistribution.scss';
|
3
|
+
interface PDiskSpaceDistributionProps {
|
4
|
+
data: PDiskData;
|
5
|
+
}
|
6
|
+
export declare function PDiskSpaceDistribution({ data }: PDiskSpaceDistributionProps): string | import("react/jsx-runtime").JSX.Element;
|
7
|
+
export {};
|