ydb-embedded-ui 6.12.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/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/PDiskInfo/PDiskInfo.d.ts +2 -2
- package/dist/components/PDiskInfo/PDiskInfo.js +9 -6
- package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
- 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 +2 -2
- package/dist/components/VDiskInfo/VDiskInfo.js +4 -2
- 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/ClusterInfo/ClusterInfo.js +6 -6
- package/dist/containers/Clusters/constants.d.ts +1 -1
- package/dist/containers/Heatmap/Heatmap.js +5 -4
- package/dist/containers/Node/Node.js +5 -7
- package/dist/containers/Node/Node.scss +4 -0
- package/dist/containers/Node/NodeStructure/NodeStructure.js +4 -4
- package/dist/containers/Node/NodeStructure/NodeStructure.scss +4 -0
- package/dist/containers/Node/NodeStructure/Pdisk.js +2 -2
- package/dist/containers/Nodes/Nodes.js +6 -8
- package/dist/containers/Nodes/getNodesColumns.js +6 -21
- package/dist/containers/PDiskPage/PDiskPage.js +19 -8
- package/dist/containers/PDiskPage/i18n/en.json +1 -0
- 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/Tablet/Tablet.js +2 -2
- package/dist/containers/Tablet/TabletControls/TabletControls.js +2 -1
- package/dist/containers/Tablets/Tablets.js +3 -5
- package/dist/containers/Tenant/Diagnostics/Consumers/Consumers.js +2 -5
- package/dist/containers/Tenant/Diagnostics/Describe/Describe.js +10 -13
- package/dist/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.scss +1 -0
- 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 +1 -2
- package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +3 -5
- 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/TenantOverviewTableLayout.js +3 -3
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.js +4 -3
- package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.js +4 -3
- 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/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 +91 -95
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.d.ts +4 -6
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js +18 -49
- 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.js +20 -23
- package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.d.ts +123 -7
- package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.js +32 -10
- package/dist/containers/Tenant/Query/i18n/en.json +3 -1
- package/dist/containers/Tenant/Query/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Schema/SchemaTree/SchemaTree.js +6 -6
- package/dist/containers/Tenant/Schema/SchemaViewer/SchemaViewer.js +5 -2
- 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/utils/schemaActions.d.ts +2 -2
- package/dist/containers/Tenant/utils/schemaActions.js +2 -2
- package/dist/containers/Tenants/Tenants.js +4 -7
- package/dist/containers/UserSettings/i18n/en.json +3 -5
- package/dist/containers/UserSettings/i18n/index.d.ts +1 -1
- package/dist/containers/UserSettings/settings.d.ts +2 -3
- package/dist/containers/UserSettings/settings.js +17 -23
- 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/services/api.d.ts +21 -8
- package/dist/services/api.js +29 -42
- package/dist/services/settings.d.ts +11 -4
- package/dist/services/settings.js +7 -6
- 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 +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/explainQuery/explainQuery.d.ts +5 -4
- package/dist/store/reducers/explainQuery/explainQuery.js +14 -4
- 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/hotKeys/hotKeys.d.ts +2 -2
- package/dist/store/reducers/index.d.ts +6 -6
- package/dist/store/reducers/network/network.d.ts +2 -2
- package/dist/store/reducers/node/node.d.ts +3 -3
- package/dist/store/reducers/node/selectors.d.ts +1 -1
- 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 +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/preview.d.ts +2 -2
- package/dist/store/reducers/schema/schema.d.ts +3 -3
- package/dist/store/reducers/schema/schema.js +10 -3
- package/dist/store/reducers/schemaAcl/schemaAcl.d.ts +2 -2
- package/dist/store/reducers/shardsWorkload/shardsWorkload.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/topNodes/topNodes.d.ts +2 -2
- package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.d.ts +2 -2
- 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/viewSchema/viewSchema.d.ts +2 -2
- package/dist/styles/mixins.scss +2 -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/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/store/query.d.ts +7 -0
- 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 -4
- package/dist/utils/constants.js +15 -4
- package/dist/utils/dataFormatters/dataFormatters.d.ts +0 -1
- package/dist/utils/dataFormatters/dataFormatters.js +1 -4
- 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/prepareQueryExplain.d.ts +3 -1
- package/dist/utils/prepareQueryExplain.js +54 -2
- package/dist/utils/query.js +1 -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 +4 -2
- package/dist/containers/Tenant/Query/ExplainResult/utils.d.ts +0 -2
- package/dist/containers/Tenant/Query/ExplainResult/utils.js +0 -4
- 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/{types/api/restartPDisk.js → containers/Tenant/Query/ExplainResult/components/SimplifiedPlan/types.js} +0 -0
@@ -1,2 +1,2 @@
|
|
1
|
-
declare const _default: (key: "
|
1
|
+
declare const _default: (key: "None" | "1 min" | "5 min" | "15 sec" | "2 min" | "Refresh", params?: import("@gravity-ui/i18n").Params) => string;
|
2
2
|
export default _default;
|
@@ -2,9 +2,10 @@ import React from 'react';
|
|
2
2
|
import type { ButtonProps, PopoverProps } from '@gravity-ui/uikit';
|
3
3
|
interface ButtonWithConfirmDialogProps<T, K> {
|
4
4
|
children: React.ReactNode;
|
5
|
-
onConfirmAction: () => Promise<T>;
|
5
|
+
onConfirmAction: (isRetry?: boolean) => Promise<T>;
|
6
6
|
onConfirmActionSuccess?: (() => Promise<K>) | VoidFunction;
|
7
7
|
dialogContent: string;
|
8
|
+
retryButtonText?: string;
|
8
9
|
buttonDisabled?: ButtonProps['disabled'];
|
9
10
|
buttonView?: ButtonProps['view'];
|
10
11
|
buttonClassName?: ButtonProps['className'];
|
@@ -13,5 +14,5 @@ interface ButtonWithConfirmDialogProps<T, K> {
|
|
13
14
|
popoverPlacement?: PopoverProps['placement'];
|
14
15
|
popoverDisabled?: PopoverProps['disabled'];
|
15
16
|
}
|
16
|
-
export declare function ButtonWithConfirmDialog<T, K>({ children, onConfirmAction, onConfirmActionSuccess, dialogContent, buttonDisabled, buttonView, buttonClassName, withPopover, popoverContent, popoverPlacement, popoverDisabled, }: ButtonWithConfirmDialogProps<T, K>): import("react/jsx-runtime").JSX.Element;
|
17
|
+
export declare function ButtonWithConfirmDialog<T, K>({ children, onConfirmAction, onConfirmActionSuccess, dialogContent, retryButtonText, buttonDisabled, buttonView, buttonClassName, withPopover, popoverContent, popoverPlacement, popoverDisabled, }: ButtonWithConfirmDialogProps<T, K>): import("react/jsx-runtime").JSX.Element;
|
17
18
|
export {};
|
@@ -2,15 +2,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
3
3
|
import { Button, Popover } from '@gravity-ui/uikit';
|
4
4
|
import { CriticalActionDialog } from '../CriticalActionDialog';
|
5
|
-
export function ButtonWithConfirmDialog({ children, onConfirmAction, onConfirmActionSuccess, dialogContent, buttonDisabled = false, buttonView = 'action', buttonClassName, withPopover = false, popoverContent, popoverPlacement = 'right', popoverDisabled = true, }) {
|
5
|
+
export function ButtonWithConfirmDialog({ children, onConfirmAction, onConfirmActionSuccess, dialogContent, retryButtonText, buttonDisabled = false, buttonView = 'action', buttonClassName, withPopover = false, popoverContent, popoverPlacement = 'right', popoverDisabled = true, }) {
|
6
6
|
const [isConfirmDialogVisible, setIsConfirmDialogVisible] = React.useState(false);
|
7
7
|
const [buttonLoading, setButtonLoading] = React.useState(false);
|
8
|
-
const
|
8
|
+
const [withRetry, setWithRetry] = React.useState(false);
|
9
|
+
const handleConfirmAction = async (isRetry) => {
|
9
10
|
setButtonLoading(true);
|
10
|
-
await onConfirmAction();
|
11
|
+
await onConfirmAction(isRetry);
|
11
12
|
setButtonLoading(false);
|
12
13
|
};
|
13
14
|
const handleConfirmActionSuccess = async () => {
|
15
|
+
setWithRetry(false);
|
14
16
|
if (onConfirmActionSuccess) {
|
15
17
|
setButtonLoading(true);
|
16
18
|
try {
|
@@ -23,7 +25,9 @@ export function ButtonWithConfirmDialog({ children, onConfirmAction, onConfirmAc
|
|
23
25
|
}
|
24
26
|
}
|
25
27
|
};
|
26
|
-
const handleConfirmActionError = () => {
|
28
|
+
const handleConfirmActionError = (error) => {
|
29
|
+
const isWithRetry = Boolean(error && typeof error === 'object' && 'retryPossible' in error && error.retryPossible);
|
30
|
+
setWithRetry(isWithRetry);
|
27
31
|
setButtonLoading(false);
|
28
32
|
};
|
29
33
|
const renderButton = () => {
|
@@ -35,7 +39,7 @@ export function ButtonWithConfirmDialog({ children, onConfirmAction, onConfirmAc
|
|
35
39
|
}
|
36
40
|
return renderButton();
|
37
41
|
};
|
38
|
-
return (_jsxs(React.Fragment, { children: [_jsx(CriticalActionDialog, { visible: isConfirmDialogVisible, text: dialogContent, onConfirm: handleConfirmAction, onConfirmActionSuccess: handleConfirmActionSuccess, onConfirmActionError: handleConfirmActionError, onClose: () => {
|
42
|
+
return (_jsxs(React.Fragment, { children: [_jsx(CriticalActionDialog, { visible: isConfirmDialogVisible, text: dialogContent, withRetry: withRetry, retryButtonText: retryButtonText, onConfirm: handleConfirmAction, onConfirmActionSuccess: handleConfirmActionSuccess, onConfirmActionError: handleConfirmActionError, onClose: () => {
|
39
43
|
setIsConfirmDialogVisible(false);
|
40
44
|
} }), renderContent()] }));
|
41
45
|
}
|
@@ -2,10 +2,12 @@ import './CriticalActionDialog.scss';
|
|
2
2
|
interface CriticalActionDialogProps<T> {
|
3
3
|
visible: boolean;
|
4
4
|
text: string;
|
5
|
+
withRetry?: boolean;
|
6
|
+
retryButtonText?: string;
|
5
7
|
onClose: VoidFunction;
|
6
|
-
onConfirm: () => Promise<T>;
|
8
|
+
onConfirm: (isRetry?: boolean) => Promise<T>;
|
7
9
|
onConfirmActionSuccess: VoidFunction;
|
8
|
-
onConfirmActionError:
|
10
|
+
onConfirmActionError: (error: unknown) => void;
|
9
11
|
}
|
10
|
-
export declare function CriticalActionDialog<T>({ visible, text, onClose, onConfirm, onConfirmActionSuccess, onConfirmActionError, }: CriticalActionDialogProps<T>): import("react/jsx-runtime").JSX.Element;
|
12
|
+
export declare function CriticalActionDialog<T>({ visible, text, withRetry, retryButtonText, onClose, onConfirm, onConfirmActionSuccess, onConfirmActionError, }: CriticalActionDialogProps<T>): import("react/jsx-runtime").JSX.Element;
|
11
13
|
export {};
|
@@ -15,19 +15,18 @@ const parseError = (error) => {
|
|
15
15
|
}
|
16
16
|
return criticalActionDialogKeyset('default-error');
|
17
17
|
};
|
18
|
-
export function CriticalActionDialog({ visible, text, onClose, onConfirm, onConfirmActionSuccess, onConfirmActionError, }) {
|
18
|
+
export function CriticalActionDialog({ visible, text, withRetry, retryButtonText, onClose, onConfirm, onConfirmActionSuccess, onConfirmActionError, }) {
|
19
19
|
const [isLoading, setIsLoading] = React.useState(false);
|
20
20
|
const [error, setError] = React.useState();
|
21
|
-
const
|
22
|
-
e.preventDefault();
|
21
|
+
const onApply = async (isRetry) => {
|
23
22
|
setIsLoading(true);
|
24
|
-
return onConfirm()
|
23
|
+
return onConfirm(isRetry)
|
25
24
|
.then(() => {
|
26
25
|
onConfirmActionSuccess();
|
27
26
|
onClose();
|
28
27
|
})
|
29
28
|
.catch((err) => {
|
30
|
-
onConfirmActionError();
|
29
|
+
onConfirmActionError(err);
|
31
30
|
setError(err);
|
32
31
|
})
|
33
32
|
.finally(() => {
|
@@ -36,9 +35,11 @@ export function CriticalActionDialog({ visible, text, onClose, onConfirm, onConf
|
|
36
35
|
};
|
37
36
|
const renderDialogContent = () => {
|
38
37
|
if (error) {
|
39
|
-
return (_jsxs(React.Fragment, { children: [_jsxs(Dialog.Body, { className: b('body'), children: [_jsx("span", { className: b('error-icon'), children: _jsx(CircleXmarkFill, { width: "24", height: "22" }) }), parseError(error)] }), _jsx(Dialog.Footer, { loading: false, preset: "default",
|
38
|
+
return (_jsxs(React.Fragment, { children: [_jsxs(Dialog.Body, { className: b('body'), children: [_jsx("span", { className: b('error-icon'), children: _jsx(CircleXmarkFill, { width: "24", height: "22" }) }), parseError(error)] }), _jsx(Dialog.Footer, { loading: false, preset: "default", textButtonApply: withRetry
|
39
|
+
? retryButtonText || criticalActionDialogKeyset('button-retry')
|
40
|
+
: undefined, textButtonCancel: criticalActionDialogKeyset('button-close'), onClickButtonApply: () => onApply(true), onClickButtonCancel: onClose })] }));
|
40
41
|
}
|
41
|
-
return (_jsxs(
|
42
|
+
return (_jsxs(React.Fragment, { children: [_jsxs(Dialog.Body, { className: b('body'), children: [_jsx("span", { className: b('warning-icon'), children: _jsx(Icon, { data: TriangleExclamationFill, size: 24 }) }), text] }), _jsx(Dialog.Footer, { loading: isLoading, preset: "default", textButtonApply: criticalActionDialogKeyset('button-confirm'), textButtonCancel: criticalActionDialogKeyset('button-cancel'), propsButtonApply: { type: 'submit' }, onClickButtonCancel: onClose, onClickButtonApply: () => onApply() })] }));
|
42
43
|
};
|
43
44
|
return (_jsx(Dialog, { open: visible, hasCloseButton: false, className: b(), size: "s", onClose: onClose, onTransitionExited: () => setError(undefined), children: renderDialogContent() }));
|
44
45
|
}
|
@@ -1 +1 @@
|
|
1
|
-
export declare const criticalActionDialogKeyset: (key: "default-error" | "no-rights-error" | "button-confirm" | "button-cancel" | "button-close", params?: import("@gravity-ui/i18n").Params) => string;
|
1
|
+
export declare const criticalActionDialogKeyset: (key: "default-error" | "no-rights-error" | "button-confirm" | "button-retry" | "button-cancel" | "button-close", params?: import("@gravity-ui/i18n").Params) => string;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type { EmptyStateProps } from '../../EmptyState';
|
3
|
+
interface PageErrorProps extends Omit<EmptyStateProps, 'image' | 'title' | 'description'> {
|
4
|
+
title?: string;
|
5
|
+
description?: string;
|
6
|
+
error: unknown;
|
7
|
+
children?: React.ReactNode;
|
8
|
+
}
|
9
|
+
export declare function PageError({ title, description, error, children, ...restProps }: PageErrorProps): import("react/jsx-runtime").JSX.Element;
|
10
|
+
export declare function isAccessError(error: unknown): boolean;
|
11
|
+
export {};
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { EmptyState } from '../../EmptyState';
|
4
|
+
import { Illustration } from '../../Illustration';
|
5
|
+
import { AccessDenied } from '../403';
|
6
|
+
import { ResponseError } from '../ResponseError';
|
7
|
+
import i18n from '../i18n';
|
8
|
+
export function PageError({ title, description, error, children, ...restProps }) {
|
9
|
+
if (isAccessError(error)) {
|
10
|
+
return _jsx(AccessDenied, { title: title, description: description, ...restProps });
|
11
|
+
}
|
12
|
+
if (error || description) {
|
13
|
+
return (_jsx(EmptyState, { image: _jsx(Illustration, { name: "error" }), title: title || i18n('error.title'), description: error ? _jsx(ResponseError, { error: error }) : description, ...restProps }));
|
14
|
+
}
|
15
|
+
return _jsx(React.Fragment, { children: children });
|
16
|
+
}
|
17
|
+
export function isAccessError(error) {
|
18
|
+
return Boolean(error && typeof error === 'object' && 'status' in error && error.status === 403);
|
19
|
+
}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
declare const _default: (key: "403.title" | "403.description" | "responseError.defaultMessage", params?: import("@gravity-ui/i18n").Params) => string;
|
1
|
+
declare const _default: (key: "403.title" | "403.description" | "responseError.defaultMessage" | "error.title", params?: import("@gravity-ui/i18n").Params) => string;
|
2
2
|
export default _default;
|
@@ -4,5 +4,5 @@ interface FullscreenProps {
|
|
4
4
|
children: React.ReactNode;
|
5
5
|
className?: string;
|
6
6
|
}
|
7
|
-
declare function Fullscreen(
|
7
|
+
declare function Fullscreen({ children, className }: FullscreenProps): import("react/jsx-runtime").JSX.Element | null;
|
8
8
|
export default Fullscreen;
|
@@ -1,35 +1,16 @@
|
|
1
|
+
var _a;
|
1
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
3
|
import React from 'react';
|
3
|
-
import { Button, Icon } from '@gravity-ui/uikit';
|
4
|
-
import ReactDOM from 'react-dom';
|
4
|
+
import { Button, Icon, Portal } from '@gravity-ui/uikit';
|
5
5
|
import { disableFullscreen } from '../../store/reducers/fullscreen';
|
6
6
|
import { cn } from '../../utils/cn';
|
7
|
-
import { useTypedDispatch } from '../../utils/hooks';
|
7
|
+
import { useTypedDispatch, useTypedSelector } from '../../utils/hooks';
|
8
8
|
import disableFullscreenIcon from '../../assets/icons/disableFullscreen.svg';
|
9
9
|
import './Fullscreen.scss';
|
10
|
-
const b = cn('
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
this.modalRoot = null;
|
15
|
-
this.el = document.createElement('div');
|
16
|
-
}
|
17
|
-
componentDidMount() {
|
18
|
-
this.modalRoot = document.getElementById('fullscreen-root');
|
19
|
-
if (this.modalRoot) {
|
20
|
-
this.modalRoot.appendChild(this.el);
|
21
|
-
}
|
22
|
-
}
|
23
|
-
componentWillUnmount() {
|
24
|
-
if (this.modalRoot) {
|
25
|
-
this.modalRoot.removeChild(this.el);
|
26
|
-
}
|
27
|
-
}
|
28
|
-
render() {
|
29
|
-
return ReactDOM.createPortal(this.props.children, this.el);
|
30
|
-
}
|
31
|
-
}
|
32
|
-
function Fullscreen(props) {
|
10
|
+
const b = cn('ydb-fullscreen');
|
11
|
+
const fullscreenRoot = (_a = document.getElementById('fullscreen-root')) !== null && _a !== void 0 ? _a : undefined;
|
12
|
+
function Fullscreen({ children, className }) {
|
13
|
+
const isFullscreen = useTypedSelector((state) => state.fullscreen);
|
33
14
|
const dispatch = useTypedDispatch();
|
34
15
|
const onDisableFullScreen = React.useCallback(() => {
|
35
16
|
dispatch(disableFullscreen());
|
@@ -45,6 +26,32 @@ function Fullscreen(props) {
|
|
45
26
|
document.removeEventListener('keydown', escFunction, false);
|
46
27
|
};
|
47
28
|
}, [onDisableFullScreen]);
|
48
|
-
|
29
|
+
const [container, setContainer] = React.useState(null);
|
30
|
+
React.useEffect(() => {
|
31
|
+
const div = document.createElement('div');
|
32
|
+
fullscreenRoot === null || fullscreenRoot === void 0 ? void 0 : fullscreenRoot.appendChild(div);
|
33
|
+
div.style.display = 'contents';
|
34
|
+
setContainer(div);
|
35
|
+
return () => {
|
36
|
+
setContainer(null);
|
37
|
+
div.remove();
|
38
|
+
};
|
39
|
+
}, []);
|
40
|
+
const ref = React.useRef(null);
|
41
|
+
React.useLayoutEffect(() => {
|
42
|
+
var _a;
|
43
|
+
if (container) {
|
44
|
+
if (isFullscreen) {
|
45
|
+
fullscreenRoot === null || fullscreenRoot === void 0 ? void 0 : fullscreenRoot.appendChild(container);
|
46
|
+
}
|
47
|
+
else {
|
48
|
+
(_a = ref.current) === null || _a === void 0 ? void 0 : _a.appendChild(container);
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}, [container, isFullscreen]);
|
52
|
+
if (!container) {
|
53
|
+
return null;
|
54
|
+
}
|
55
|
+
return (_jsx("div", { ref: ref, style: { display: 'contents' }, children: _jsx(Portal, { container: container, children: _jsxs("div", { className: b({ fullscreen: isFullscreen }, className), children: [_jsx(Button, { onClick: onDisableFullScreen, view: "raised", className: b('close-button'), children: _jsx(Icon, { data: disableFullscreenIcon }) }), children] }) }) }));
|
49
56
|
}
|
50
57
|
export default Fullscreen;
|
@@ -1,20 +1,28 @@
|
|
1
|
-
.
|
2
|
-
// should expand to fill the content area, keeping aside navigation visible
|
3
|
-
// counts on .gn-aside-header__content to have position: relative, it is set in App.scss
|
4
|
-
position: absolute;
|
5
|
-
z-index: 10;
|
6
|
-
inset: 0;
|
7
|
-
|
1
|
+
.ydb-fullscreen {
|
8
2
|
display: flex;
|
9
3
|
overflow: hidden;
|
10
4
|
flex-grow: 1;
|
11
5
|
|
12
|
-
|
6
|
+
&_fullscreen {
|
7
|
+
// should expand to fill the content area, keeping aside navigation visible
|
8
|
+
// counts on .gn-aside-header__content to have position: relative, it is set in App.scss
|
9
|
+
position: absolute;
|
10
|
+
z-index: 10;
|
11
|
+
inset: 0;
|
12
|
+
|
13
|
+
background-color: var(--g-color-base-background);
|
14
|
+
}
|
13
15
|
|
14
16
|
&__close-button {
|
15
17
|
position: fixed;
|
16
18
|
z-index: 11;
|
17
19
|
top: 8px;
|
18
20
|
right: 20px;
|
21
|
+
|
22
|
+
display: none;
|
23
|
+
}
|
24
|
+
|
25
|
+
&_fullscreen &__close-button {
|
26
|
+
display: block;
|
19
27
|
}
|
20
28
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import type { Data, GraphNode, Options, Shapes } from '@gravity-ui/paranoid';
|
2
|
+
interface GraphProps<T> {
|
3
|
+
data: Data<T>;
|
4
|
+
opts?: Options;
|
5
|
+
shapes?: Shapes;
|
6
|
+
}
|
7
|
+
export declare function Graph<T>(props: GraphProps<T>): import("react/jsx-runtime").JSX.Element;
|
8
|
+
export declare const renderExplainNode: (node: GraphNode) => string;
|
9
|
+
interface YDBGraphProps<T> {
|
10
|
+
data: Data<T>;
|
11
|
+
}
|
12
|
+
export declare function YDBGraph<T>(props: YDBGraphProps<T>): import("react/jsx-runtime").JSX.Element;
|
13
|
+
export {};
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { getTopology, getYdbPlanNodeShape } from '@gravity-ui/paranoid';
|
4
|
+
export function Graph(props) {
|
5
|
+
const containerRef = React.useRef(null);
|
6
|
+
const containerId = React.useId();
|
7
|
+
const { data, opts, shapes } = props;
|
8
|
+
React.useEffect(() => {
|
9
|
+
const graphRoot = containerRef.current;
|
10
|
+
if (!graphRoot) {
|
11
|
+
return undefined;
|
12
|
+
}
|
13
|
+
graphRoot.innerHTML = '';
|
14
|
+
// set width and height to screen size to make a canvas bigger then the container
|
15
|
+
graphRoot.style.setProperty('width', '100vw');
|
16
|
+
graphRoot.style.setProperty('height', '100vh');
|
17
|
+
const topology = getTopology(graphRoot.id, data, opts, shapes);
|
18
|
+
topology.render();
|
19
|
+
graphRoot.style.setProperty('width', '100%');
|
20
|
+
graphRoot.style.setProperty('height', '100%');
|
21
|
+
return () => {
|
22
|
+
topology.destroy();
|
23
|
+
};
|
24
|
+
}, [data, opts, shapes]);
|
25
|
+
return _jsx("div", { id: containerId, ref: containerRef, style: { overflow: 'auto' } });
|
26
|
+
}
|
27
|
+
export const renderExplainNode = (node) => {
|
28
|
+
const parts = node.name.split('|');
|
29
|
+
return parts.length > 1 ? parts[1] : node.name;
|
30
|
+
};
|
31
|
+
const schemaOptions = {
|
32
|
+
renderNodeTitle: renderExplainNode,
|
33
|
+
textOverflow: 'normal',
|
34
|
+
initialZoomFitsCanvas: true,
|
35
|
+
};
|
36
|
+
const schemaShapes = {
|
37
|
+
node: getYdbPlanNodeShape,
|
38
|
+
};
|
39
|
+
export function YDBGraph(props) {
|
40
|
+
return _jsx(Graph, { ...props, opts: schemaOptions, shapes: schemaShapes });
|
41
|
+
}
|
@@ -1,8 +1,11 @@
|
|
1
|
+
import type { ButtonProps } from '@gravity-ui/uikit';
|
1
2
|
interface LabelWithPopoverProps {
|
2
3
|
text: React.ReactNode;
|
3
4
|
popoverContent: React.ReactNode;
|
5
|
+
popoverClassName?: string;
|
4
6
|
className?: string;
|
5
7
|
contentClassName?: string;
|
8
|
+
buttonProps?: ButtonProps;
|
6
9
|
}
|
7
|
-
export declare const LabelWithPopover: ({ text, popoverContent, className, contentClassName, }: LabelWithPopoverProps) => import("react/jsx-runtime").JSX.Element;
|
10
|
+
export declare const LabelWithPopover: ({ text, popoverContent, popoverClassName, className, contentClassName, buttonProps, }: LabelWithPopoverProps) => import("react/jsx-runtime").JSX.Element;
|
8
11
|
export {};
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import { HelpPopover } from '@gravity-ui/components';
|
3
|
-
export const LabelWithPopover = ({ text, popoverContent, className, contentClassName, }) => (_jsxs("div", { className: className, children: [text, '\u00a0', _jsx(HelpPopover, { content: popoverContent, contentClassName: contentClassName })] }));
|
3
|
+
export const LabelWithPopover = ({ text, popoverContent, popoverClassName, className, contentClassName, buttonProps, }) => (_jsxs("div", { className: className, children: [text, '\u00a0', _jsx(HelpPopover, { className: popoverClassName, buttonProps: buttonProps, content: popoverContent, contentClassName: contentClassName })] }));
|
@@ -2,7 +2,8 @@ import type { LoaderSize } from '@gravity-ui/uikit';
|
|
2
2
|
import './Loader.scss';
|
3
3
|
interface LoaderProps {
|
4
4
|
size?: LoaderSize;
|
5
|
+
delay?: number;
|
5
6
|
className?: string;
|
6
7
|
}
|
7
|
-
export declare const Loader: ({ size, className }: LoaderProps) => import("react/jsx-runtime").JSX.Element;
|
8
|
+
export declare const Loader: ({ size, delay, className }: LoaderProps) => import("react/jsx-runtime").JSX.Element | null;
|
8
9
|
export {};
|
@@ -1,8 +1,13 @@
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
2
2
|
import { Loader as KitLoader } from '@gravity-ui/uikit';
|
3
3
|
import { cn } from '../../utils/cn';
|
4
|
+
import { useDelayed } from '../../utils/hooks/useDelayed';
|
4
5
|
import './Loader.scss';
|
5
6
|
const b = cn('ydb-loader');
|
6
|
-
export const Loader = ({ size = 'm', className }) => {
|
7
|
+
export const Loader = ({ size = 'm', delay = 600, className }) => {
|
8
|
+
const show = useDelayed(delay);
|
9
|
+
if (!show) {
|
10
|
+
return null;
|
11
|
+
}
|
7
12
|
return (_jsx("div", { className: b(null, className), children: _jsx(KitLoader, { size: size }) }));
|
8
13
|
};
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type { LoaderSize } from '@gravity-ui/uikit';
|
3
|
+
interface LoaderWrapperProps {
|
4
|
+
loading?: boolean;
|
5
|
+
size?: LoaderSize;
|
6
|
+
className?: string;
|
7
|
+
children: React.ReactNode;
|
8
|
+
}
|
9
|
+
export declare function LoaderWrapper({ loading, size, className, children }: LoaderWrapperProps): string | number | boolean | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
10
|
+
export {};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import { Loader } from '../Loader/Loader';
|
3
|
+
export function LoaderWrapper({ loading, size = 'm', className, children }) {
|
4
|
+
if (loading) {
|
5
|
+
return _jsx(Loader, { size: size, className: className });
|
6
|
+
}
|
7
|
+
return children;
|
8
|
+
}
|
@@ -1,4 +1,4 @@
|
|
1
1
|
import type { GetChartDataParams } from './getChartData';
|
2
2
|
export declare const chartApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn<void, typeof import("../../store/reducers/api")._NEVER, unknown, {}>, {
|
3
|
-
getChartData: import("@reduxjs/toolkit/query").QueryDefinition<GetChartDataParams, import("@reduxjs/toolkit/query").BaseQueryFn<void, typeof import("../../store/reducers/api")._NEVER, unknown, {}>, "All" | "PDiskData", import("./types").PreparedMetricsData | undefined, "api">;
|
4
|
-
}, "api", "All" | "PDiskData", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/query/react").reactHooksModuleName>;
|
3
|
+
getChartData: import("@reduxjs/toolkit/query").QueryDefinition<GetChartDataParams, import("@reduxjs/toolkit/query").BaseQueryFn<void, typeof import("../../store/reducers/api")._NEVER, unknown, {}>, "All" | "PDiskData" | "UserData", import("./types").PreparedMetricsData | undefined, "api">;
|
4
|
+
}, "api", "All" | "PDiskData" | "UserData", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/query/react").reactHooksModuleName>;
|
@@ -3,11 +3,11 @@ import './PDiskInfo.scss';
|
|
3
3
|
interface GetPDiskInfoOptions<T extends PreparedPDisk> {
|
4
4
|
pDisk?: T;
|
5
5
|
nodeId?: number | string | null;
|
6
|
-
|
6
|
+
withPDiskPageLink?: boolean;
|
7
7
|
isUserAllowedToMakeChanges?: boolean;
|
8
8
|
}
|
9
9
|
interface PDiskInfoProps<T extends PreparedPDisk> extends GetPDiskInfoOptions<T> {
|
10
10
|
className?: string;
|
11
11
|
}
|
12
|
-
export declare function PDiskInfo<T extends PreparedPDisk>({ pDisk, nodeId,
|
12
|
+
export declare function PDiskInfo<T extends PreparedPDisk>({ pDisk, nodeId, withPDiskPageLink, className, }: PDiskInfoProps<T>): import("react/jsx-runtime").JSX.Element;
|
13
13
|
export {};
|
@@ -1,5 +1,7 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import { getPDiskPagePath } from '../../routes';
|
3
|
+
import { selectIsUserAllowedToMakeChanges } from '../../store/reducers/authentication/authentication';
|
4
|
+
import { useDiskPagesAvailable } from '../../store/reducers/capabilities/hooks';
|
3
5
|
import { valueIsDefined } from '../../utils';
|
4
6
|
import { formatBytes } from '../../utils/bytesParsers';
|
5
7
|
import { cn } from '../../utils/cn';
|
@@ -14,7 +16,7 @@ import { pDiskInfoKeyset } from './i18n';
|
|
14
16
|
import './PDiskInfo.scss';
|
15
17
|
const b = cn('ydb-pdisk-info');
|
16
18
|
// eslint-disable-next-line complexity
|
17
|
-
function getPDiskInfo({ pDisk, nodeId,
|
19
|
+
function getPDiskInfo({ pDisk, nodeId, withPDiskPageLink, isUserAllowedToMakeChanges, }) {
|
18
20
|
const { PDiskId, Path, Guid, Category, Type, Device, Realtime, State, SerialNumber, TotalSize, AllocatedSize, DecommitStatus, StatusV2, NumActiveSlots, ExpectedSlotCount, LogUsedSize, LogTotalSize, SystemSize, SharedWithOs, } = pDisk || {};
|
19
21
|
const generalInfo = [];
|
20
22
|
if (valueIsDefined(DecommitStatus)) {
|
@@ -88,7 +90,7 @@ function getPDiskInfo({ pDisk, nodeId, isPDiskPage = false, isUserAllowedToMakeC
|
|
88
90
|
});
|
89
91
|
}
|
90
92
|
const additionalInfo = [];
|
91
|
-
const shouldDisplayLinks = (
|
93
|
+
const shouldDisplayLinks = (withPDiskPageLink || isUserAllowedToMakeChanges) &&
|
92
94
|
valueIsDefined(PDiskId) &&
|
93
95
|
valueIsDefined(nodeId);
|
94
96
|
if (shouldDisplayLinks) {
|
@@ -99,17 +101,18 @@ function getPDiskInfo({ pDisk, nodeId, isPDiskPage = false, isUserAllowedToMakeC
|
|
99
101
|
});
|
100
102
|
additionalInfo.push({
|
101
103
|
label: pDiskInfoKeyset('links'),
|
102
|
-
value: (_jsxs("span", { className: b('links'), children: [
|
104
|
+
value: (_jsxs("span", { className: b('links'), children: [withPDiskPageLink && (_jsx(LinkWithIcon, { title: pDiskInfoKeyset('pdisk-page'), url: pDiskPagePath, external: false })), isUserAllowedToMakeChanges && (_jsx(LinkWithIcon, { title: pDiskInfoKeyset('developer-ui'), url: pDiskInternalViewerPath }))] })),
|
103
105
|
});
|
104
106
|
}
|
105
107
|
return [generalInfo, statusInfo, spaceInfo, additionalInfo];
|
106
108
|
}
|
107
|
-
export function PDiskInfo({ pDisk, nodeId,
|
108
|
-
const
|
109
|
+
export function PDiskInfo({ pDisk, nodeId, withPDiskPageLink, className, }) {
|
110
|
+
const isUserAllowedToMakeChanges = useTypedSelector(selectIsUserAllowedToMakeChanges);
|
111
|
+
const diskPagesAvailable = useDiskPagesAvailable();
|
109
112
|
const [generalInfo, statusInfo, spaceInfo, additionalInfo] = getPDiskInfo({
|
110
113
|
pDisk,
|
111
114
|
nodeId,
|
112
|
-
|
115
|
+
withPDiskPageLink: withPDiskPageLink && diskPagesAvailable,
|
113
116
|
isUserAllowedToMakeChanges,
|
114
117
|
});
|
115
118
|
return (_jsxs("div", { className: b('wrapper', className), children: [_jsxs("div", { className: b('col'), children: [_jsx(InfoViewer, { info: generalInfo, renderEmptyState: () => null }), _jsx(InfoViewer, { info: spaceInfo, renderEmptyState: () => null })] }), _jsxs("div", { className: b('col'), children: [_jsx(InfoViewer, { info: statusInfo, renderEmptyState: () => null }), _jsx(InfoViewer, { info: additionalInfo, renderEmptyState: () => null })] })] }));
|
@@ -1 +1 @@
|
|
1
|
-
export declare const pDiskInfoKeyset: (key: "
|
1
|
+
export declare const pDiskInfoKeyset: (key: "type" | "path" | "space" | "state" | "yes" | "links" | "decomission-status" | "guid" | "serial-number" | "shared-with-os" | "drive-status" | "device" | "realtime" | "slots" | "log-size" | "system-size" | "developer-ui" | "pdisk-page", params?: import("@gravity-ui/i18n").Params) => string;
|
@@ -32,6 +32,9 @@ export function ProgressViewer({ value, capacity, formatValues = defaultFormatVa
|
|
32
32
|
else if (fillWidth > dangerThreshold) {
|
33
33
|
status = inverseColorize ? 'good' : 'danger';
|
34
34
|
}
|
35
|
+
if (!isNumeric(capacity)) {
|
36
|
+
fillWidth = 100;
|
37
|
+
}
|
35
38
|
}
|
36
39
|
const lineStyle = {
|
37
40
|
width: fillWidth + '%',
|
@@ -1,10 +1,20 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
-
import { CircleCheck, CircleQuestionFill, CircleXmark } from '@gravity-ui/icons';
|
3
|
-
import { Icon } from '@gravity-ui/uikit';
|
2
|
+
import { CircleCheck, CircleInfo, CircleQuestionFill, CircleXmark } from '@gravity-ui/icons';
|
3
|
+
import { Icon, Tooltip } from '@gravity-ui/uikit';
|
4
4
|
import { isAxiosError } from 'axios';
|
5
|
+
import i18n from '../../containers/Tenant/Query/i18n';
|
5
6
|
import { cn } from '../../utils/cn';
|
7
|
+
import { useChangedQuerySettings } from '../../utils/hooks/useChangedQuerySettings';
|
8
|
+
import QuerySettingsDescription from '../QuerySettingsDescription/QuerySettingsDescription';
|
6
9
|
import './QueryExecutionStatus.scss';
|
7
10
|
const b = cn('kv-query-execution-status');
|
11
|
+
const QuerySettingsIndicator = () => {
|
12
|
+
const { isIndicatorShown, changedLastExecutionSettingsDescriptions } = useChangedQuerySettings();
|
13
|
+
if (!isIndicatorShown) {
|
14
|
+
return null;
|
15
|
+
}
|
16
|
+
return (_jsx(Tooltip, { openDelay: 0, content: _jsx(QuerySettingsDescription, { prefix: i18n('banner.query-settings.message'), querySettings: changedLastExecutionSettingsDescriptions }), children: _jsx(Icon, { data: CircleInfo, className: b('query-settings-icon') }) }));
|
17
|
+
};
|
8
18
|
export const QueryExecutionStatus = ({ className, error }) => {
|
9
19
|
let icon;
|
10
20
|
let label;
|
@@ -17,5 +27,5 @@ export const QueryExecutionStatus = ({ className, error }) => {
|
|
17
27
|
icon = (_jsx(Icon, { data: hasError ? CircleXmark : CircleCheck, className: b('result-status-icon', { error: hasError }) }));
|
18
28
|
label = hasError ? 'Failed' : 'Completed';
|
19
29
|
}
|
20
|
-
return (_jsxs("div", { className: b(null, className), children: [icon, label] }));
|
30
|
+
return (_jsxs("div", { className: b(null, className), children: [icon, label, _jsx(QuerySettingsIndicator, {})] }));
|
21
31
|
};
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import './QuerySettingsDescription.scss';
|
2
|
+
interface QuerySettingsDescriptionProps {
|
3
|
+
prefix: string;
|
4
|
+
querySettings: Record<string, string>;
|
5
|
+
}
|
6
|
+
declare const QuerySettingsDescription: ({ querySettings, prefix }: QuerySettingsDescriptionProps) => import("react/jsx-runtime").JSX.Element;
|
7
|
+
export default QuerySettingsDescription;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import { cn } from '../../utils/cn';
|
3
|
+
import './QuerySettingsDescription.scss';
|
4
|
+
const b = cn('ydb-query-settings-description');
|
5
|
+
const QuerySettingsDescription = ({ querySettings, prefix }) => {
|
6
|
+
return (_jsxs("div", { className: b('message'), children: [prefix, Object.entries(querySettings).map(([key, value], index, arr) => (_jsxs("span", { className: b('description-item'), children: [`${key}: ${value}`, index < arr.length - 1 ? ', ' : null] }, index)))] }));
|
7
|
+
};
|
8
|
+
export default QuerySettingsDescription;
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './QuerySettingsDescription';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './QuerySettingsDescription';
|