ydb-embedded-ui 11.2.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/DoughnutMetrics/DoughnutMetrics.d.ts +5 -3
- package/dist/components/DoughnutMetrics/DoughnutMetrics.js +18 -8
- package/dist/components/DoughnutMetrics/DoughnutMetrics.js.map +1 -1
- package/dist/components/DoughnutMetrics/DoughnutMetrics.scss +38 -27
- package/dist/components/MetricChart/MetricChart.d.ts +4 -9
- package/dist/components/MetricChart/MetricChart.js +10 -6
- package/dist/components/MetricChart/MetricChart.js.map +1 -1
- package/dist/components/MetricChart/MetricChart.scss +5 -7
- package/dist/components/QueriesActivityBar/QueriesActivityBar.js +5 -2
- package/dist/components/QueriesActivityBar/QueriesActivityBar.js.map +1 -1
- package/dist/components/QueriesActivityBar/QueriesActivityBar.scss +18 -21
- package/dist/components/QueriesActivityBar/QueriesActivityCharts.js +1 -13
- package/dist/components/QueriesActivityBar/QueriesActivityCharts.js.map +1 -1
- package/dist/components/SpeedMultiMeter/SpeedMultiMeter.scss +3 -0
- package/dist/components/VDiskInfo/VDiskInfo.js +43 -2
- package/dist/components/VDiskInfo/VDiskInfo.js.map +1 -1
- package/dist/components/VDiskInfo/i18n/en.json +3 -0
- package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/VDiskPopup/VDiskPopup.js +21 -2
- package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
- package/dist/containers/App/App.d.ts +3 -10
- package/dist/containers/App/App.js +11 -8
- package/dist/containers/App/App.js.map +1 -1
- package/dist/containers/App/App.scss +1 -1
- package/dist/containers/App/AppTitleContext.d.ts +11 -0
- package/dist/containers/App/AppTitleContext.js +14 -0
- package/dist/containers/App/AppTitleContext.js.map +1 -0
- package/dist/containers/App/Providers.d.ts +2 -1
- package/dist/containers/App/Providers.js +3 -2
- package/dist/containers/App/Providers.js.map +1 -1
- package/dist/containers/AppWithClusters/AppWithClusters.d.ts +2 -1
- package/dist/containers/AppWithClusters/AppWithClusters.js +2 -2
- package/dist/containers/AppWithClusters/AppWithClusters.js.map +1 -1
- package/dist/containers/Cluster/Cluster.js +3 -1
- package/dist/containers/Cluster/Cluster.js.map +1 -1
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsCores.js +1 -11
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsCores.js.map +1 -1
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsMemory.js +1 -5
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsMemory.js.map +1 -1
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsStorage.js +1 -5
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsStorage.js.map +1 -1
- package/dist/containers/Node/Node.js +3 -1
- package/dist/containers/Node/Node.js.map +1 -1
- package/dist/containers/PDiskPage/PDiskPage.js +3 -1
- package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
- package/dist/containers/StorageGroupPage/StorageGroupPage.js +3 -1
- package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.js +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.scss +1 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.d.ts +0 -8
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js +26 -93
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.scss +219 -5
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.d.ts +16 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.js +16 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.js.map +1 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.scss +29 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js +3 -11
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.scss +0 -8
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +2 -6
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss +13 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/en.json +11 -3
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Tenant.js +3 -1
- package/dist/containers/Tenant/Tenant.js.map +1 -1
- package/dist/containers/VDiskPage/VDiskPage.js +3 -1
- package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
- package/dist/store/reducers/tenant/tenant.d.ts +1 -0
- package/dist/store/reducers/tenant/tenant.js +7 -2
- package/dist/store/reducers/tenant/tenant.js.map +1 -1
- package/dist/store/reducers/tenant/types.d.ts +1 -1
- package/dist/store/state-url-mapping.d.ts +1 -0
- package/dist/store/state-url-mapping.js +2 -0
- package/dist/store/state-url-mapping.js.map +1 -1
- package/dist/utils/disks/prepareDisks.js +20 -1
- package/dist/utils/disks/prepareDisks.js.map +1 -1
- package/dist/utils/metrics/formatMetricLegend.d.ts +6 -0
- package/dist/utils/metrics/formatMetricLegend.js +17 -0
- package/dist/utils/metrics/formatMetricLegend.js.map +1 -0
- package/dist/utils/metrics/i18n/en.json +4 -0
- package/dist/utils/metrics/i18n/index.d.ts +2 -0
- package/dist/utils/metrics/i18n/index.js +5 -0
- package/dist/utils/metrics/i18n/index.js.map +1 -0
- package/dist/utils/metrics.d.ts +42 -0
- package/dist/utils/metrics.js +58 -0
- package/dist/utils/metrics.js.map +1 -0
- package/package.json +1 -1
- package/dist/components/DiagnosticCard/DiagnosticCard.d.ts +0 -9
- package/dist/components/DiagnosticCard/DiagnosticCard.js +0 -8
- package/dist/components/DiagnosticCard/DiagnosticCard.js.map +0 -1
- package/dist/components/DiagnosticCard/DiagnosticCard.scss +0 -35
- package/dist/components/TimeFrameSelector/TimeFrameSelector.d.ts +0 -9
- package/dist/components/TimeFrameSelector/TimeFrameSelector.js +0 -12
- package/dist/components/TimeFrameSelector/TimeFrameSelector.js.map +0 -1
- package/dist/components/TimeFrameSelector/TimeFrameSelector.scss +0 -4
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.d.ts +0 -5
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.js +0 -7
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.d.ts +0 -16
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js +0 -37
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.scss +0 -48
@@ -1,5 +1,5 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import type { TextProps } from '@gravity-ui/uikit';
|
2
|
+
import type { HelpMarkProps, TextProps } from '@gravity-ui/uikit';
|
3
3
|
import type { ProgressStatus } from '../../utils/progress';
|
4
4
|
import './DoughnutMetrics.scss';
|
5
5
|
interface LegendProps {
|
@@ -7,16 +7,18 @@ interface LegendProps {
|
|
7
7
|
variant?: TextProps['variant'];
|
8
8
|
color?: TextProps['color'];
|
9
9
|
note?: React.ReactNode;
|
10
|
+
noteIconSize?: HelpMarkProps['iconSize'];
|
10
11
|
}
|
11
12
|
interface DoughnutProps {
|
12
13
|
status: ProgressStatus;
|
13
14
|
fillWidth: number;
|
14
15
|
children?: React.ReactNode;
|
15
16
|
className?: string;
|
17
|
+
size?: 'small' | 'medium' | 'large';
|
16
18
|
}
|
17
|
-
export declare function DoughnutMetrics({ status, fillWidth, children, className }: DoughnutProps): import("react/jsx-runtime").JSX.Element;
|
19
|
+
export declare function DoughnutMetrics({ status, fillWidth, children, className, size, }: DoughnutProps): import("react/jsx-runtime").JSX.Element;
|
18
20
|
export declare namespace DoughnutMetrics {
|
19
|
-
var Legend: ({ children, variant, color, note }: LegendProps) => import("react/jsx-runtime").JSX.Element;
|
21
|
+
var Legend: ({ children, variant, color, note, noteIconSize, }: LegendProps) => import("react/jsx-runtime").JSX.Element;
|
20
22
|
var Value: ({ children, variant }: LegendProps) => import("react/jsx-runtime").JSX.Element;
|
21
23
|
}
|
22
24
|
export {};
|
@@ -1,15 +1,24 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
2
3
|
import { Flex, HelpMark, Text } from '@gravity-ui/uikit';
|
3
4
|
import { cn } from '../../utils/cn';
|
4
5
|
import './DoughnutMetrics.scss';
|
5
6
|
const b = cn('ydb-doughnut-metrics');
|
6
|
-
|
7
|
-
|
7
|
+
const SizeContext = React.createContext('medium');
|
8
|
+
function Legend({ children, variant = 'subheader-3', color = 'primary', note, noteIconSize, }) {
|
9
|
+
return (_jsxs(Flex, { gap: 1, alignItems: "center", children: [_jsx(Text, { variant: variant, color: color, className: b('legend'), as: "div", children: children }), note && (_jsx(HelpMark, { iconSize: noteIconSize || 'm', className: b('legend-note'), popoverProps: { placement: 'right' }, children: note }))] }));
|
8
10
|
}
|
9
|
-
function Value({ children, variant
|
10
|
-
|
11
|
+
function Value({ children, variant }) {
|
12
|
+
const size = React.useContext(SizeContext);
|
13
|
+
const sizeVariantMap = {
|
14
|
+
small: 'subheader-1',
|
15
|
+
medium: 'subheader-2',
|
16
|
+
large: 'subheader-3',
|
17
|
+
};
|
18
|
+
const finalVariant = variant || sizeVariantMap[size];
|
19
|
+
return (_jsx(Text, { variant: finalVariant, className: b('value'), children: children }));
|
11
20
|
}
|
12
|
-
export function DoughnutMetrics({ status, fillWidth, children, className }) {
|
21
|
+
export function DoughnutMetrics({ status, fillWidth, children, className, size = 'medium', }) {
|
13
22
|
let filledDegrees = fillWidth * 3.6;
|
14
23
|
let doughnutFillVar = 'var(--doughnut-color)';
|
15
24
|
let doughnutBackdropVar = 'var(--doughnut-backdrop-color)';
|
@@ -18,9 +27,10 @@ export function DoughnutMetrics({ status, fillWidth, children, className }) {
|
|
18
27
|
doughnutBackdropVar = 'var(--doughnut-color)';
|
19
28
|
doughnutFillVar = 'var(--doughnut-overlap-color)';
|
20
29
|
}
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
const doughnutStyle = {
|
31
|
+
background: `conic-gradient(${doughnutFillVar} 0deg ${filledDegrees}deg, ${doughnutBackdropVar} ${filledDegrees}deg 360deg)`,
|
32
|
+
};
|
33
|
+
return (_jsx(SizeContext.Provider, { value: size, children: _jsxs("div", { className: b({ status }, className), style: { position: 'relative' }, children: [_jsx("div", { style: doughnutStyle, className: b('doughnut', { size }) }), _jsx("div", { className: b('text-wrapper'), children: children })] }) }));
|
24
34
|
}
|
25
35
|
DoughnutMetrics.Legend = Legend;
|
26
36
|
DoughnutMetrics.Value = Value;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DoughnutMetrics.js","sourceRoot":"","sources":["../../../src/components/DoughnutMetrics/DoughnutMetrics.tsx"],"names":[],"mappings":";
|
1
|
+
{"version":3,"file":"DoughnutMetrics.js","sourceRoot":"","sources":["../../../src/components/DoughnutMetrics/DoughnutMetrics.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAGlC,OAAO,wBAAwB,CAAC;AAEhC,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC;AAErC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAA+B,QAAQ,CAAC,CAAC;AAUhF,SAAS,MAAM,CAAC,EACZ,QAAQ,EACR,OAAO,GAAG,aAAa,EACvB,KAAK,GAAG,SAAS,EACjB,IAAI,EACJ,YAAY,GACF;IACV,OAAO,CACH,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,aAC7B,KAAC,IAAI,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAC,KAAK,YACjE,QAAQ,GACN,EACN,IAAI,IAAI,CACL,KAAC,QAAQ,IACL,QAAQ,EAAE,YAAY,IAAI,GAAG,EAC7B,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,EAC3B,YAAY,EAAE,EAAC,SAAS,EAAE,OAAO,EAAC,YAEjC,IAAI,GACE,CACd,IACE,CACV,CAAC;AACN,CAAC;AACD,SAAS,KAAK,CAAC,EAAC,QAAQ,EAAE,OAAO,EAAc;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,cAAc,GAAG;QACnB,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,aAAa;KACd,CAAC;IAEX,MAAM,YAAY,GAAG,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAErD,OAAO,CACH,KAAC,IAAI,IAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,YAC7C,QAAQ,GACN,CACV,CAAC;AACN,CAAC;AAUD,MAAM,UAAU,eAAe,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,QAAQ,EACR,SAAS,EACT,IAAI,GAAG,QAAQ,GACH;IACZ,IAAI,aAAa,GAAG,SAAS,GAAG,GAAG,CAAC;IACpC,IAAI,eAAe,GAAG,uBAAuB,CAAC;IAC9C,IAAI,mBAAmB,GAAG,gCAAgC,CAAC;IAE3D,IAAI,aAAa,GAAG,GAAG,EAAE,CAAC;QACtB,aAAa,IAAI,GAAG,CAAC;QACrB,mBAAmB,GAAG,uBAAuB,CAAC;QAC9C,eAAe,GAAG,+BAA+B,CAAC;IACtD,CAAC;IAED,MAAM,aAAa,GAAwB;QACvC,UAAU,EAAE,kBAAkB,eAAe,SAAS,aAAa,QAAQ,mBAAmB,IAAI,aAAa,aAAa;KAC/H,CAAC;IAEF,OAAO,CACH,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YAC7B,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,MAAM,EAAC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAC,QAAQ,EAAE,UAAU,EAAC,aACjE,cAAK,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,EAAC,IAAI,EAAC,CAAC,GAAQ,EACnE,cAAK,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,YAAG,QAAQ,GAAO,IACjD,GACa,CAC1B,CAAC;AACN,CAAC;AAED,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC"}
|
@@ -1,64 +1,75 @@
|
|
1
1
|
.ydb-doughnut-metrics {
|
2
2
|
--doughnut-border: 16px;
|
3
|
-
--doughnut-
|
4
|
-
--doughnut-
|
3
|
+
--doughnut-width: 100px;
|
4
|
+
--doughnut-wrapper-indent: calc(var(--doughnut-border) + 5px);
|
5
|
+
--doughnut-color: var(--g-color-base-positive-heavy);
|
6
|
+
--doughnut-backdrop-color: var(--g-color-base-generic);
|
5
7
|
--doughnut-overlap-color: var(--g-color-base-positive-heavy-hover);
|
8
|
+
--doughnut-text-color: var(--g-color-text-positive-heavy);
|
9
|
+
|
6
10
|
&__doughnut {
|
7
11
|
position: relative;
|
8
12
|
|
9
|
-
width:
|
13
|
+
width: var(--doughnut-width);
|
10
14
|
aspect-ratio: 1;
|
11
15
|
|
12
16
|
border-radius: 50%;
|
17
|
+
mask: radial-gradient(circle at center, transparent 46%, #000 46.5%);
|
13
18
|
|
14
19
|
transform: rotate(180deg);
|
15
|
-
|
16
|
-
display: block;
|
17
|
-
|
18
|
-
height: calc(100% - calc(var(--doughnut-border) * 2));
|
20
|
+
}
|
19
21
|
|
20
|
-
|
22
|
+
// Size modifiers - using visually centered values
|
23
|
+
&__doughnut_size_small {
|
24
|
+
--doughnut-border: 12px;
|
25
|
+
--doughnut-width: 65px;
|
26
|
+
--doughnut-wrapper-indent: 15px;
|
27
|
+
}
|
21
28
|
|
22
|
-
|
23
|
-
|
29
|
+
&__doughnut_size_medium {
|
30
|
+
--doughnut-border: 16px;
|
31
|
+
--doughnut-width: 100px;
|
32
|
+
--doughnut-wrapper-indent: calc(var(--doughnut-border) + 5px);
|
33
|
+
}
|
24
34
|
|
25
|
-
|
26
|
-
|
27
|
-
|
35
|
+
&__doughnut_size_large {
|
36
|
+
--doughnut-border: 20px;
|
37
|
+
--doughnut-width: 130px;
|
38
|
+
--doughnut-wrapper-indent: 25px;
|
28
39
|
}
|
29
|
-
|
30
|
-
|
31
|
-
--doughnut-
|
40
|
+
|
41
|
+
&_status_warning {
|
42
|
+
--doughnut-color: var(--g-color-base-warning-heavy);
|
32
43
|
--doughnut-overlap-color: var(--g-color-base-warning-heavy-hover);
|
44
|
+
--doughnut-text-color: var(--g-color-text-warning);
|
33
45
|
}
|
34
|
-
&
|
35
|
-
--doughnut-color: var(--
|
36
|
-
--doughnut-backdrop-color: var(--g-color-base-danger-light);
|
46
|
+
&_status_danger {
|
47
|
+
--doughnut-color: var(--g-color-base-danger-heavy);
|
37
48
|
--doughnut-overlap-color: var(--g-color-base-danger-heavy-hover);
|
49
|
+
--doughnut-text-color: var(--g-color-base-danger-heavy);
|
38
50
|
}
|
39
51
|
&__text-wrapper {
|
40
|
-
--wrapper-indent: calc(var(--doughnut-border) + 5px);
|
41
|
-
|
42
52
|
position: absolute;
|
43
|
-
|
44
|
-
|
53
|
+
z-index: 1;
|
54
|
+
top: var(--doughnut-wrapper-indent);
|
55
|
+
left: var(--doughnut-wrapper-indent);
|
45
56
|
|
46
57
|
display: flex;
|
47
58
|
flex-direction: column;
|
48
59
|
justify-content: center;
|
49
60
|
align-items: center;
|
50
61
|
|
51
|
-
width: calc(100% - calc(var(--wrapper-indent) * 2));
|
62
|
+
width: calc(100% - calc(var(--doughnut-wrapper-indent) * 2));
|
52
63
|
|
53
64
|
text-align: center;
|
54
65
|
|
55
|
-
transform: rotate(180deg);
|
56
66
|
aspect-ratio: 1;
|
57
67
|
}
|
68
|
+
|
58
69
|
&__value {
|
59
|
-
|
60
|
-
bottom: 20px;
|
70
|
+
color: var(--doughnut-text-color);
|
61
71
|
}
|
72
|
+
|
62
73
|
&__legend-note {
|
63
74
|
display: flex;
|
64
75
|
}
|
@@ -1,11 +1,10 @@
|
|
1
|
-
import React from 'react';
|
2
1
|
import type { TimeFrame } from '../../utils/timeframes';
|
3
2
|
import type { ChartOptions, MetricDescription, OnChartDataStatusChange } from './types';
|
4
3
|
import './MetricChart.scss';
|
5
4
|
interface DiagnosticsChartProps {
|
6
5
|
database: string;
|
7
6
|
metrics: MetricDescription[];
|
8
|
-
|
7
|
+
defaultTimeFrame?: TimeFrame;
|
9
8
|
autorefresh?: number;
|
10
9
|
height?: number;
|
11
10
|
width?: number;
|
@@ -17,12 +16,8 @@ interface DiagnosticsChartProps {
|
|
17
16
|
* Pass isChartVisible prop to ensure proper chart render
|
18
17
|
*/
|
19
18
|
isChartVisible?: boolean;
|
20
|
-
/**
|
21
|
-
|
22
|
-
/** Make chart take full width of container */
|
23
|
-
fullWidth?: boolean;
|
24
|
-
/** Render custom toolbar content to the right of chart title */
|
25
|
-
renderChartToolbar?: () => React.ReactNode;
|
19
|
+
/** Chart title displayed in the toolbar */
|
20
|
+
title: string;
|
26
21
|
}
|
27
|
-
export declare const MetricChart: ({ database, metrics,
|
22
|
+
export declare const MetricChart: ({ database, metrics, defaultTimeFrame, autorefresh, width, height, chartOptions, onChartDataStatusChange, isChartVisible, title, }: DiagnosticsChartProps) => import("react/jsx-runtime").JSX.Element;
|
28
23
|
export {};
|
@@ -2,14 +2,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
3
3
|
import ChartKit, { settings } from '@gravity-ui/chartkit';
|
4
4
|
import { YagrPlugin } from '@gravity-ui/chartkit/yagr';
|
5
|
+
import { Flex } from '@gravity-ui/uikit';
|
5
6
|
import { cn } from '../../utils/cn';
|
6
7
|
import { ResponseError } from '../Errors/ResponseError';
|
7
8
|
import { Loader } from '../Loader';
|
9
|
+
import { TimeFrameDropdown } from '../TimeFrameDropdown/TimeFrameDropdown';
|
8
10
|
import { colorToRGBA, colors } from './colors';
|
9
11
|
import { getDefaultDataFormatter } from './getDefaultDataFormatter';
|
10
12
|
import { chartApi } from './reducer';
|
11
13
|
import './MetricChart.scss';
|
12
14
|
const b = cn('ydb-metric-chart');
|
15
|
+
// Constants
|
16
|
+
const DEFAULT_EFFECTIVE_WIDTH = 600; // Used for maxDataPoints calculation when using fullWidth
|
13
17
|
settings.set({ plugins: [YagrPlugin] });
|
14
18
|
const prepareWidgetData = (data, options = {}) => {
|
15
19
|
const { dataType, scaleRange, showLegend } = options;
|
@@ -75,10 +79,10 @@ const prepareWidgetData = (data, options = {}) => {
|
|
75
79
|
};
|
76
80
|
};
|
77
81
|
const emptyChartData = { timeline: [], metrics: [] };
|
78
|
-
export const MetricChart = ({ database, metrics,
|
82
|
+
export const MetricChart = ({ database, metrics, defaultTimeFrame = '1h', autorefresh, width = 400, height = width / 1.5, chartOptions, onChartDataStatusChange, isChartVisible, title, }) => {
|
83
|
+
const [timeFrame, setTimeFrame] = React.useState(defaultTimeFrame);
|
79
84
|
// Use a reasonable default for maxDataPoints when fullWidth is true
|
80
|
-
const
|
81
|
-
const maxDataPoints = effectiveWidth / 2;
|
85
|
+
const maxDataPoints = DEFAULT_EFFECTIVE_WIDTH / 2;
|
82
86
|
const { currentData, error, isFetching, status } = chartApi.useGetChartDataQuery(
|
83
87
|
// maxDataPoints param is calculated based on width
|
84
88
|
// should be width > maxDataPoints to prevent points that cannot be selected
|
@@ -94,6 +98,7 @@ export const MetricChart = ({ database, metrics, timeFrame = '1h', autorefresh,
|
|
94
98
|
return onChartDataStatusChange === null || onChartDataStatusChange === void 0 ? void 0 : onChartDataStatusChange(status === 'fulfilled' ? 'success' : 'loading');
|
95
99
|
}, [status, onChartDataStatusChange]);
|
96
100
|
const convertedData = prepareWidgetData(currentData || emptyChartData, chartOptions);
|
101
|
+
const renderToolbar = () => (_jsxs(Flex, { className: b('toolbar'), justifyContent: "space-between", alignItems: "center", children: [_jsx("div", { children: title }), _jsx(TimeFrameDropdown, { value: timeFrame, onChange: setTimeFrame })] }));
|
97
102
|
const renderContent = () => {
|
98
103
|
if (loading) {
|
99
104
|
return _jsx(Loader, {});
|
@@ -103,9 +108,8 @@ export const MetricChart = ({ database, metrics, timeFrame = '1h', autorefresh,
|
|
103
108
|
}
|
104
109
|
return (_jsxs("div", { className: b('chart'), children: [_jsx(ChartKit, { type: "yagr", data: convertedData }), error ? _jsx(ResponseError, { className: b('error'), error: error }) : null] }));
|
105
110
|
};
|
106
|
-
return (_jsxs("div", { className: b(
|
111
|
+
return (_jsxs("div", { className: b(), style: {
|
107
112
|
height,
|
108
|
-
|
109
|
-
}, children: [renderChartToolbar === null || renderChartToolbar === void 0 ? void 0 : renderChartToolbar(), renderContent()] }));
|
113
|
+
}, children: [renderToolbar(), renderContent()] }));
|
110
114
|
};
|
111
115
|
//# sourceMappingURL=MetricChart.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MetricChart.js","sourceRoot":"","sources":["../../../src/components/MetricChart/MetricChart.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,QAAQ,EAAE,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAC;
|
1
|
+
{"version":3,"file":"MetricChart.js","sourceRoot":"","sources":["../../../src/components/MetricChart/MetricChart.tsx"],"names":[],"mappings":"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"}
|
@@ -2,15 +2,13 @@
|
|
2
2
|
display: flex;
|
3
3
|
flex-direction: column;
|
4
4
|
|
5
|
-
|
5
|
+
width: 100%;
|
6
|
+
padding: 0;
|
6
7
|
|
7
|
-
border:
|
8
|
-
border-radius: 8px;
|
8
|
+
border: none;
|
9
9
|
|
10
|
-
&
|
11
|
-
|
12
|
-
|
13
|
-
border: none;
|
10
|
+
&__toolbar {
|
11
|
+
margin-bottom: 10px;
|
14
12
|
}
|
15
13
|
|
16
14
|
&__chart {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import React from 'react';
|
3
3
|
import { CirclePlay, Clock, Display, Person, Rocket } from '@gravity-ui/icons';
|
4
|
-
import { ArrowToggle, Button,
|
4
|
+
import { ArrowToggle, Button, Card, Flex, Icon, Label, Text } from '@gravity-ui/uikit';
|
5
5
|
import { useHistory, useLocation } from 'react-router-dom';
|
6
6
|
import { TenantTabsGroups, getTenantPath } from '../../containers/Tenant/TenantPages';
|
7
7
|
import { parseQuery } from '../../routes';
|
@@ -92,6 +92,9 @@ export function QueriesActivityBar({ tenantName }) {
|
|
92
92
|
});
|
93
93
|
history.push(path);
|
94
94
|
};
|
95
|
-
|
95
|
+
const handleToggleExpanded = () => {
|
96
|
+
setExpanded(!expanded);
|
97
|
+
};
|
98
|
+
return (_jsx("div", { className: b({ expanded }), style: { display: isActivityBarHidden ? 'none' : undefined }, children: _jsxs(Card, { className: b('card'), type: "container", view: expanded ? 'outlined' : 'raised', children: [_jsxs("div", { className: b('header'), onClick: handleToggleExpanded, children: [_jsxs(Flex, { justifyContent: "space-between", className: b('content-wrapper'), children: [_jsxs(Flex, { direction: "column", className: b('title-section'), children: [_jsx(Text, { variant: "subheader-2", className: b('title'), children: i18n('title_queries-activity') }), _jsx(Text, { color: "secondary", variant: "caption-2", className: b('subtitle'), children: i18n('context_monitor-changes-realtime') })] }), _jsxs("div", { className: b('metrics'), children: [_jsx(Label, { theme: runningQueriesCount > 0 ? 'success' : 'unknown', size: "s", icon: _jsx(Icon, { data: CirclePlay, size: 14 }), children: runningQueriesCount }), _jsx(Label, { theme: "clear", size: "s", icon: _jsx(Icon, { data: Rocket, size: 14 }), value: formatTrendValue(qps.trend.value), children: i18n('value_per-sec', { count: qps.value }) }), _jsx(Label, { theme: "clear", size: "s", icon: _jsx(Icon, { data: Clock, size: 14 }), value: formatTrendValue(latency.trend.value), children: i18n('value_ms', { time: latency.value }) })] })] }), _jsx(ArrowToggle, { direction: expanded ? 'top' : 'bottom' })] }), expanded && (_jsx("div", { className: b('content'), children: _jsxs("div", { className: b('stats'), children: [_jsx(Label, { theme: "unknown", icon: _jsx(Icon, { data: CirclePlay }), size: "s", value: String(runningQueriesCount), children: i18n('field_running-queries') }), _jsx(Label, { theme: "unknown", icon: _jsx(Icon, { data: Display }), size: "s", value: String(uniqueApplications), children: i18n('field_applications') }), _jsx(Label, { theme: "unknown", icon: _jsx(Icon, { data: Person }), size: "s", value: String(uniqueUsers), children: i18n('field_users') }), _jsx(Button, { view: "outlined", size: "s", onClick: handleOpenRunningQueries, className: b('open-queries-button'), children: i18n('action_open-running-queries') })] }) })), _jsx(QueriesActivityCharts, { tenantName: tenantName, expanded: expanded, onChartDataStatusChange: handleChartDataStatusChange })] }) }));
|
96
99
|
}
|
97
100
|
//# sourceMappingURL=QueriesActivityBar.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QueriesActivityBar.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/QueriesActivityBar.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAC,WAAW,EAAE,MAAM,EAAE,
|
1
|
+
{"version":3,"file":"QueriesActivityBar.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/QueriesActivityBar.tsx"],"names":[],"mappings":"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"}
|
@@ -3,22 +3,15 @@
|
|
3
3
|
.queries-activity-bar {
|
4
4
|
$b: &;
|
5
5
|
|
6
|
-
|
6
|
+
border-radius: var(--g-border-radius-s);
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
&__card {
|
9
|
+
width: 100%;
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
// Override Card's default padding for custom content layout
|
12
|
+
padding: 0;
|
13
13
|
|
14
|
-
|
15
|
-
border: 1px solid var(--g-color-base-generic);
|
16
|
-
border-radius: var(--g-border-radius-m);
|
17
|
-
background-color: transparent;
|
18
|
-
}
|
19
|
-
|
20
|
-
&__disclosure {
|
21
|
-
width: 100%;
|
14
|
+
border-radius: var(--g-border-radius-s);
|
22
15
|
}
|
23
16
|
|
24
17
|
&__header {
|
@@ -31,15 +24,21 @@
|
|
31
24
|
|
32
25
|
cursor: pointer;
|
33
26
|
|
34
|
-
border
|
27
|
+
border: 1px solid transparent;
|
28
|
+
border-radius: var(--g-border-radius-s);
|
35
29
|
|
36
30
|
transition: background-color 0.15s ease;
|
37
31
|
|
38
32
|
&:hover {
|
39
|
-
background-color: var(--g-color-base-
|
33
|
+
background-color: var(--g-color-base-float-hover);
|
34
|
+
}
|
35
|
+
|
36
|
+
#{$b}_expanded & {
|
37
|
+
border: none;
|
38
|
+
border-bottom-right-radius: 0;
|
39
|
+
border-bottom-left-radius: 0;
|
40
40
|
}
|
41
41
|
|
42
|
-
// When expanded, only round top corners
|
43
42
|
#{$b}_expanded &:hover {
|
44
43
|
background-color: transparent;
|
45
44
|
}
|
@@ -62,6 +61,9 @@
|
|
62
61
|
display: flex;
|
63
62
|
flex-direction: column;
|
64
63
|
gap: var(--g-spacing-4);
|
64
|
+
|
65
|
+
padding-top: var(--g-spacing-3);
|
66
|
+
padding-bottom: var(--g-spacing-3);
|
65
67
|
}
|
66
68
|
|
67
69
|
&__stats {
|
@@ -82,7 +84,6 @@
|
|
82
84
|
gap: var(--g-spacing-4);
|
83
85
|
|
84
86
|
padding: 0 var(--g-spacing-4);
|
85
|
-
padding-top: var(--g-spacing-4);
|
86
87
|
|
87
88
|
@media (max-width: 1200px) {
|
88
89
|
flex-direction: column;
|
@@ -96,10 +97,6 @@
|
|
96
97
|
gap: var(--g-spacing-3);
|
97
98
|
}
|
98
99
|
|
99
|
-
&__toolbar {
|
100
|
-
margin-bottom: 10px;
|
101
|
-
}
|
102
|
-
|
103
100
|
// Focus states for accessibility
|
104
101
|
&__header:focus-visible,
|
105
102
|
&__open-queries-button:focus-visible {
|
@@ -1,17 +1,13 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import React from 'react';
|
3
|
-
import { Flex } from '@gravity-ui/uikit';
|
4
3
|
import { defaultDashboardConfig } from '../../containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig';
|
5
4
|
import { cn } from '../../utils/cn';
|
6
5
|
import { useAutoRefreshInterval } from '../../utils/hooks';
|
7
6
|
import { MetricChart } from '../MetricChart/MetricChart';
|
8
|
-
import { TimeFrameDropdown } from '../TimeFrameDropdown/TimeFrameDropdown';
|
9
7
|
const b = cn('queries-activity-bar');
|
10
8
|
const ACTIVITY_CHART_HEIGHT = 292;
|
11
9
|
export function QueriesActivityCharts({ tenantName, expanded, onChartDataStatusChange, }) {
|
12
10
|
const [autoRefreshInterval] = useAutoRefreshInterval();
|
13
|
-
const [queriesTimeFrame, setQueriesTimeFrame] = React.useState('1h');
|
14
|
-
const [latenciesTimeFrame, setLatenciesTimeFrame] = React.useState('1h');
|
15
11
|
const [hasChartsLoaded, setHasChartsLoaded] = React.useState(false);
|
16
12
|
// Extract chart configurations from defaultDashboardConfig
|
17
13
|
const getChartByTarget = (target) => {
|
@@ -33,20 +29,12 @@ export function QueriesActivityCharts({ tenantName, expanded, onChartDataStatusC
|
|
33
29
|
// Also call parent callback if provided
|
34
30
|
onChartDataStatusChange === null || onChartDataStatusChange === void 0 ? void 0 : onChartDataStatusChange(status);
|
35
31
|
}, [onChartDataStatusChange]);
|
36
|
-
const handleQueriesTimeFrameChange = React.useCallback((newTimeFrame) => {
|
37
|
-
setQueriesTimeFrame(newTimeFrame);
|
38
|
-
}, []);
|
39
|
-
const handleLatenciesTimeFrameChange = React.useCallback((newTimeFrame) => {
|
40
|
-
setLatenciesTimeFrame(newTimeFrame);
|
41
|
-
}, []);
|
42
|
-
const renderQueriesChartToolbar = React.useCallback(() => (_jsxs(Flex, { className: b('toolbar'), justifyContent: "space-between", alignItems: "center", children: [_jsx("div", { children: queriesChartConfig.title }), _jsx(TimeFrameDropdown, { value: queriesTimeFrame, onChange: handleQueriesTimeFrameChange })] })), [queriesChartConfig.title, queriesTimeFrame]);
|
43
|
-
const renderLatenciesChartToolbar = React.useCallback(() => (_jsxs(Flex, { className: b('toolbar'), justifyContent: "space-between", alignItems: "center", children: [_jsx("div", { children: latenciesChartConfig.title }), _jsx(TimeFrameDropdown, { value: latenciesTimeFrame, onChange: handleLatenciesTimeFrameChange })] })), [latenciesChartConfig.title, latenciesTimeFrame]);
|
44
32
|
// WORKAROUND: Charts are rendered outside Disclosure component due to YAGR tooltip bug
|
45
33
|
// Issue: https://github.com/gravity-ui/yagr/issues/262
|
46
34
|
// Problem: YAGR tooltips don't work when charts are mounted inside collapsible containers
|
47
35
|
// that use CSS transforms or have complex nested DOM structures. The tooltip initialization
|
48
36
|
// fails when the chart is not immediately visible during mounting.
|
49
37
|
// TODO: Remove this workaround once the upstream issue is fixed
|
50
|
-
return (_jsxs("div", { className: b('charts'), style: { display: expanded ? undefined : 'none' }, children: [_jsx("div", { className: b('chart-container'), children: _jsx(MetricChart, { database: tenantName, metrics: queriesChartConfig.metrics,
|
38
|
+
return (_jsxs("div", { className: b('charts'), style: { display: expanded ? undefined : 'none' }, children: [_jsx("div", { className: b('chart-container'), children: _jsx(MetricChart, { database: tenantName, metrics: queriesChartConfig.metrics, autorefresh: shouldRefresh, height: ACTIVITY_CHART_HEIGHT, chartOptions: queriesChartConfig.options, onChartDataStatusChange: handleChartDataStatusChange, isChartVisible: hasChartsLoaded && expanded, title: queriesChartConfig.title }) }), _jsx("div", { className: b('chart-container'), children: _jsx(MetricChart, { database: tenantName, metrics: latenciesChartConfig.metrics, autorefresh: shouldRefresh, height: ACTIVITY_CHART_HEIGHT, chartOptions: latenciesChartConfig.options, onChartDataStatusChange: handleChartDataStatusChange, isChartVisible: hasChartsLoaded && expanded, title: latenciesChartConfig.title }) })] }));
|
51
39
|
}
|
52
40
|
//# sourceMappingURL=QueriesActivityCharts.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QueriesActivityCharts.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/QueriesActivityCharts.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,
|
1
|
+
{"version":3,"file":"QueriesActivityCharts.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/QueriesActivityCharts.tsx"],"names":[],"mappings":"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"}
|
@@ -1,14 +1,16 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import { Flex } from '@gravity-ui/uikit';
|
3
3
|
import { getVDiskPagePath } from '../../routes';
|
4
|
+
import { EVDiskState } from '../../types/api/vdisk';
|
4
5
|
import { valueIsDefined } from '../../utils';
|
5
6
|
import { cn } from '../../utils/cn';
|
6
|
-
import { formatStorageValuesToGb } from '../../utils/dataFormatters/dataFormatters';
|
7
|
+
import { formatStorageValuesToGb, formatUptimeInSeconds, } from '../../utils/dataFormatters/dataFormatters';
|
7
8
|
import { createVDiskDeveloperUILink } from '../../utils/developerUI/developerUI';
|
8
9
|
import { getSeverityColor } from '../../utils/disks/helpers';
|
9
10
|
import { useIsUserAllowedToMakeChanges } from '../../utils/hooks/useIsUserAllowedToMakeChanges';
|
10
11
|
import { bytesToSpeed } from '../../utils/utils';
|
11
12
|
import { InfoViewer } from '../InfoViewer';
|
13
|
+
import { InternalLink } from '../InternalLink';
|
12
14
|
import { LinkWithIcon } from '../LinkWithIcon/LinkWithIcon';
|
13
15
|
import { ProgressViewer } from '../ProgressViewer/ProgressViewer';
|
14
16
|
import { StatusIcon } from '../StatusIcon/StatusIcon';
|
@@ -19,7 +21,7 @@ const b = cn('ydb-vdisk-info');
|
|
19
21
|
export function VDiskInfo({ data, withVDiskPageLink, withTitle, className, wrap, }) {
|
20
22
|
var _a, _b, _c, _d;
|
21
23
|
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();
|
22
|
-
const { AllocatedSize, DiskSpace, FrontQueues, Guid, Replicated, VDiskState, VDiskSlotId, Kind, SatisfactionRank, AvailableSize, HasUnreadableBlobs, IncarnationGuid, InstanceGuid, StoragePoolName, ReadThroughput, WriteThroughput, PDiskId, NodeId, } = data || {};
|
24
|
+
const { AllocatedSize, DiskSpace, FrontQueues, Guid, Replicated, ReplicationProgress, ReplicationSecondsRemaining, Donors, VDiskState, VDiskSlotId, Kind, SatisfactionRank, AvailableSize, HasUnreadableBlobs, IncarnationGuid, InstanceGuid, StoragePoolName, ReadThroughput, WriteThroughput, PDiskId, NodeId, } = data || {};
|
23
25
|
const leftColumn = [];
|
24
26
|
if (valueIsDefined(StoragePoolName)) {
|
25
27
|
leftColumn.push({ label: vDiskInfoKeyset('pool-name'), value: StoragePoolName });
|
@@ -79,6 +81,24 @@ export function VDiskInfo({ data, withVDiskPageLink, withTitle, className, wrap,
|
|
79
81
|
value: Replicated ? vDiskInfoKeyset('yes') : vDiskInfoKeyset('no'),
|
80
82
|
});
|
81
83
|
}
|
84
|
+
// Only show replication progress and time remaining when disk is not replicated and state is OK
|
85
|
+
if (Replicated === false && VDiskState === EVDiskState.OK) {
|
86
|
+
if (valueIsDefined(ReplicationProgress)) {
|
87
|
+
rightColumn.push({
|
88
|
+
label: vDiskInfoKeyset('replication-progress'),
|
89
|
+
value: (_jsx(ProgressViewer, { value: Math.round(ReplicationProgress * 100), percents: true, colorizeProgress: true, capacity: 100 })),
|
90
|
+
});
|
91
|
+
}
|
92
|
+
if (valueIsDefined(ReplicationSecondsRemaining)) {
|
93
|
+
const timeRemaining = formatUptimeInSeconds(ReplicationSecondsRemaining);
|
94
|
+
if (timeRemaining) {
|
95
|
+
rightColumn.push({
|
96
|
+
label: vDiskInfoKeyset('replication-time-remaining'),
|
97
|
+
value: timeRemaining,
|
98
|
+
});
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
82
102
|
if (valueIsDefined(VDiskSlotId)) {
|
83
103
|
rightColumn.push({ label: vDiskInfoKeyset('slot-id'), value: VDiskSlotId });
|
84
104
|
}
|
@@ -100,6 +120,27 @@ export function VDiskInfo({ data, withVDiskPageLink, withTitle, className, wrap,
|
|
100
120
|
value: HasUnreadableBlobs ? vDiskInfoKeyset('yes') : vDiskInfoKeyset('no'),
|
101
121
|
});
|
102
122
|
}
|
123
|
+
// Show donors list when replication is in progress
|
124
|
+
if (Replicated === false && VDiskState === EVDiskState.OK && (Donors === null || Donors === void 0 ? void 0 : Donors.length)) {
|
125
|
+
const donorLinks = Donors.map((donor, index) => {
|
126
|
+
const { StringifiedId: id, NodeId: dNodeId, PDiskId: dPDiskId, VDiskSlotId: dVSlotId, } = donor;
|
127
|
+
if (!id || !dVSlotId || !dNodeId || !dPDiskId) {
|
128
|
+
return null;
|
129
|
+
}
|
130
|
+
const vDiskPath = getVDiskPagePath({
|
131
|
+
nodeId: dNodeId,
|
132
|
+
pDiskId: dPDiskId,
|
133
|
+
vDiskSlotId: dVSlotId,
|
134
|
+
});
|
135
|
+
return (_jsx(InternalLink, { to: vDiskPath, children: id }, index));
|
136
|
+
}).filter(Boolean);
|
137
|
+
if (donorLinks.length) {
|
138
|
+
rightColumn.push({
|
139
|
+
label: vDiskInfoKeyset('donors'),
|
140
|
+
value: (_jsx(Flex, { direction: "column", gap: 1, children: donorLinks })),
|
141
|
+
});
|
142
|
+
}
|
143
|
+
}
|
103
144
|
const diskParamsDefined = valueIsDefined(PDiskId) && valueIsDefined(NodeId) && valueIsDefined(VDiskSlotId);
|
104
145
|
if (diskParamsDefined) {
|
105
146
|
const links = [];
|