ydb-embedded-ui 19.0.0 → 20.0.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.
Files changed (172) hide show
  1. package/README.md +15 -0
  2. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.js +15 -2
  3. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.js.map +1 -1
  4. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.scss +77 -10
  5. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  6. package/dist/components/QueryExecutionLabel/i18n/index.d.ts +1 -1
  7. package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
  8. package/dist/containers/App/Content.js +2 -2
  9. package/dist/containers/App/Content.js.map +1 -1
  10. package/dist/containers/App/NavigationWrapper.js +2 -15
  11. package/dist/containers/App/NavigationWrapper.js.map +1 -1
  12. package/dist/containers/Authentication/Authentication.js +22 -5
  13. package/dist/containers/Authentication/Authentication.js.map +1 -1
  14. package/dist/containers/Authentication/Authentication.scss +4 -0
  15. package/dist/containers/Authentication/i18n/en.json +2 -1
  16. package/dist/containers/Authentication/i18n/index.d.ts +1 -1
  17. package/dist/containers/Authentication/utils.d.ts +8 -0
  18. package/dist/containers/Authentication/utils.js +32 -0
  19. package/dist/containers/Authentication/utils.js.map +1 -1
  20. package/dist/containers/Cluster/Cluster.js +3 -4
  21. package/dist/containers/Cluster/Cluster.js.map +1 -1
  22. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsNetwork.d.ts +1 -1
  23. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsNetwork.js +0 -6
  24. package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsNetwork.js.map +1 -1
  25. package/dist/containers/Configs/i18n/index.d.ts +1 -1
  26. package/dist/containers/Storage/Disks/Disks.js +5 -3
  27. package/dist/containers/Storage/Disks/Disks.js.map +1 -1
  28. package/dist/containers/Storage/PDisk/PDisk.d.ts +3 -1
  29. package/dist/containers/Storage/PDisk/PDisk.js +7 -18
  30. package/dist/containers/Storage/PDisk/PDisk.js.map +1 -1
  31. package/dist/containers/Storage/PDisk/PDiskVDisks.d.ts +13 -0
  32. package/dist/containers/Storage/PDisk/PDiskVDisks.js +20 -0
  33. package/dist/containers/Storage/PDisk/PDiskVDisks.js.map +1 -0
  34. package/dist/containers/Storage/PaginatedStorage.js +2 -1
  35. package/dist/containers/Storage/PaginatedStorage.js.map +1 -1
  36. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/columns.js +1 -1
  37. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.js +40 -4
  38. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.js.map +1 -1
  39. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.scss +8 -4
  40. package/dist/containers/Storage/StorageExpertModePanel/components/CompactionLegend.d.ts +2 -4
  41. package/dist/containers/Storage/StorageExpertModePanel/components/CompactionLegend.js +3 -17
  42. package/dist/containers/Storage/StorageExpertModePanel/components/CompactionLegend.js.map +1 -1
  43. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.d.ts +5 -0
  44. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.js +16 -0
  45. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.js.map +1 -0
  46. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDeviceLegend.d.ts +1 -0
  47. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDeviceLegend.js +7 -0
  48. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDeviceLegend.js.map +1 -0
  49. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.d.ts +5 -0
  50. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.js +17 -0
  51. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.js.map +1 -0
  52. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.d.ts +5 -0
  53. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.js +23 -0
  54. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.js.map +1 -0
  55. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskStateLegend.d.ts +5 -0
  56. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskStateLegend.js +23 -0
  57. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskStateLegend.js.map +1 -0
  58. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.d.ts +3 -1
  59. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.js +4 -4
  60. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.js.map +1 -1
  61. package/dist/containers/Storage/StorageExpertModePanel/components/StateLegend.js +3 -3
  62. package/dist/containers/Storage/StorageExpertModePanel/components/StateLegend.js.map +1 -1
  63. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.d.ts +6 -0
  64. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.js +21 -0
  65. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.js.map +1 -0
  66. package/dist/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.d.ts +3 -2
  67. package/dist/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.js +13 -7
  68. package/dist/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.js.map +1 -1
  69. package/dist/containers/Storage/StorageExpertModePanel/components/index.d.ts +5 -0
  70. package/dist/containers/Storage/StorageExpertModePanel/components/index.js +5 -0
  71. package/dist/containers/Storage/StorageExpertModePanel/components/index.js.map +1 -1
  72. package/dist/containers/Storage/StorageExpertModePanel/components/useSpaceLegendSelection.d.ts +2 -6
  73. package/dist/containers/Storage/StorageExpertModePanel/components/useSpaceLegendSelection.js +10 -6
  74. package/dist/containers/Storage/StorageExpertModePanel/components/useSpaceLegendSelection.js.map +1 -1
  75. package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +19 -0
  76. package/dist/containers/Storage/StorageExpertModePanel/constants.js +10 -0
  77. package/dist/containers/Storage/StorageExpertModePanel/constants.js.map +1 -1
  78. package/dist/containers/Storage/StorageExpertModePanel/i18n/en.json +23 -0
  79. package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
  80. package/dist/containers/Storage/i18n/en.json +1 -1
  81. package/dist/containers/Storage/i18n/index.d.ts +1 -1
  82. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.d.ts +2 -0
  83. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.js +142 -0
  84. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.js.map +1 -0
  85. package/dist/containers/Storage/useStorageQueryParams.d.ts +5 -1
  86. package/dist/containers/Storage/useStorageQueryParams.js +26 -2
  87. package/dist/containers/Storage/useStorageQueryParams.js.map +1 -1
  88. package/dist/containers/Tenant/Diagnostics/Network/NetworkWrapper.js +2 -3
  89. package/dist/containers/Tenant/Diagnostics/Network/NetworkWrapper.js.map +1 -1
  90. package/dist/containers/Tenant/Diagnostics/Overview/DatabaseInfo/DatabaseInfo.d.ts +2 -1
  91. package/dist/containers/Tenant/Diagnostics/Overview/DatabaseInfo/DatabaseInfo.js +6 -2
  92. package/dist/containers/Tenant/Diagnostics/Overview/DatabaseInfo/DatabaseInfo.js.map +1 -1
  93. package/dist/containers/Tenant/Diagnostics/Overview/DatabaseInfo/utils.d.ts +2 -0
  94. package/dist/containers/Tenant/Diagnostics/Overview/DatabaseInfo/utils.js +9 -0
  95. package/dist/containers/Tenant/Diagnostics/Overview/DatabaseInfo/utils.js.map +1 -0
  96. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +1 -1
  97. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js.map +1 -1
  98. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsTabs/MetricsTabs.js +1 -4
  99. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsTabs/MetricsTabs.js.map +1 -1
  100. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TenantNetwork.js +1 -6
  101. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TenantNetwork.js.map +1 -1
  102. package/dist/containers/Tenant/Diagnostics/i18n/index.d.ts +1 -1
  103. package/dist/containers/Tenant/Query/QueryResult/QueryResultViewer.js +3 -4
  104. package/dist/containers/Tenant/Query/QueryResult/QueryResultViewer.js.map +1 -1
  105. package/dist/containers/Tenant/Query/QueryResult/utils.d.ts +2 -0
  106. package/dist/containers/Tenant/Query/QueryResult/utils.js +9 -0
  107. package/dist/containers/Tenant/Query/QueryResult/utils.js.map +1 -0
  108. package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.js +4 -15
  109. package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.js.map +1 -1
  110. package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/en.json +0 -1
  111. package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/index.d.ts +1 -1
  112. package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/ru.json +0 -1
  113. package/dist/containers/Tenants/TenantsTable.js +21 -26
  114. package/dist/containers/Tenants/TenantsTable.js.map +1 -1
  115. package/dist/containers/UserSettings/i18n/en.json +1 -4
  116. package/dist/containers/UserSettings/i18n/index.d.ts +1 -1
  117. package/dist/containers/UserSettings/settings.d.ts +3 -8
  118. package/dist/containers/UserSettings/settings.js +11 -58
  119. package/dist/containers/UserSettings/settings.js.map +1 -1
  120. package/dist/lib.d.ts +1 -1
  121. package/dist/lib.js.map +1 -1
  122. package/dist/store/reducers/capabilities/hooks.d.ts +1 -0
  123. package/dist/store/reducers/capabilities/hooks.js +5 -0
  124. package/dist/store/reducers/capabilities/hooks.js.map +1 -1
  125. package/dist/store/reducers/query/api.js +4 -0
  126. package/dist/store/reducers/query/api.js.map +1 -1
  127. package/dist/store/reducers/query/types.d.ts +2 -1
  128. package/dist/store/reducers/settings/constants.d.ts +2 -8
  129. package/dist/store/reducers/settings/constants.js +2 -8
  130. package/dist/store/reducers/settings/constants.js.map +1 -1
  131. package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +3 -1
  132. package/dist/store/reducers/storage/prepareGroupsDisks.js +3 -1
  133. package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
  134. package/dist/store/reducers/tenant/tenant.d.ts +1 -0
  135. package/dist/store/reducers/tenant/tenant.js +1 -0
  136. package/dist/store/reducers/tenant/tenant.js.map +1 -1
  137. package/dist/styles/mixins.scss +8 -8
  138. package/dist/styles/space-colors.scss +48 -4
  139. package/dist/types/api/capabilities.d.ts +1 -1
  140. package/dist/types/api/pdisk.d.ts +2 -0
  141. package/dist/types/api/storage.d.ts +2 -1
  142. package/dist/types/api/storage.js.map +1 -1
  143. package/dist/types/api/tenant.d.ts +2 -0
  144. package/dist/types/api/tenant.js.map +1 -1
  145. package/dist/uiFactory/types.d.ts +5 -0
  146. package/dist/utils/constants.d.ts +1 -1
  147. package/dist/utils/constants.js +1 -5
  148. package/dist/utils/constants.js.map +1 -1
  149. package/dist/utils/disks/displayState.d.ts +7 -1
  150. package/dist/utils/disks/displayState.js +11 -0
  151. package/dist/utils/disks/displayState.js.map +1 -1
  152. package/dist/utils/disks/helpers.d.ts +2 -2
  153. package/dist/utils/disks/iconCalculators.d.ts +2 -0
  154. package/dist/utils/disks/iconCalculators.js +24 -19
  155. package/dist/utils/disks/iconCalculators.js.map +1 -1
  156. package/dist/utils/disks/pdiskState.d.ts +8 -0
  157. package/dist/utils/disks/pdiskState.js +165 -0
  158. package/dist/utils/disks/pdiskState.js.map +1 -0
  159. package/dist/utils/disks/severityCalculators.d.ts +6 -5
  160. package/dist/utils/disks/severityCalculators.js +17 -32
  161. package/dist/utils/disks/severityCalculators.js.map +1 -1
  162. package/dist/utils/disks/types.d.ts +3 -1
  163. package/dist/utils/hooks/useChangedQuerySettings.d.ts +2 -2
  164. package/dist/utils/hooks/useQueryExecutionSettings.d.ts +11 -2
  165. package/dist/utils/hooks/useQueryExecutionSettings.js +2 -18
  166. package/dist/utils/hooks/useQueryExecutionSettings.js.map +1 -1
  167. package/dist/utils/hooks/useQueryStreamingSetting.js +1 -8
  168. package/dist/utils/hooks/useQueryStreamingSetting.js.map +1 -1
  169. package/package.json +2 -2
  170. package/dist/components/NetworkTable/hooks.d.ts +0 -2
  171. package/dist/components/NetworkTable/hooks.js +0 -14
  172. package/dist/components/NetworkTable/hooks.js.map +0 -1
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Ban, Wrench } from '@gravity-ui/icons';
3
+ import { Flex, Icon, Label, Text } from '@gravity-ui/uikit';
4
+ import { b } from '../constants';
5
+ import i18n from '../i18n';
6
+ const iconSize = 12;
7
+ const legendItems = [
8
+ {
9
+ text: i18n('value_maintenance-long-term-planned'),
10
+ theme: 'danger',
11
+ icon: Wrench,
12
+ },
13
+ {
14
+ text: i18n('value_maintenance-no-new-vdisks'),
15
+ theme: 'warning',
16
+ icon: Ban,
17
+ },
18
+ { text: i18n('value_maintenance-no-request'), theme: 'success' },
19
+ ];
20
+ export function PDiskMaintenanceLegend({ className }) {
21
+ return (_jsxs(Flex, { className: className, gap: 3, alignItems: "center", wrap: "wrap", children: [_jsx(Flex, { gap: 2, alignItems: "center", wrap: "wrap", children: legendItems.map(({ text, theme, icon }) => (_jsx(Label, { size: "xs", theme: theme, icon: icon ? _jsx(Icon, { data: icon, size: iconSize }) : undefined, children: text }, text))) }), _jsx(Text, { className: b('empty-statistics'), color: "secondary", children: i18n('context_no-statistics') })] }));
22
+ }
23
+ //# sourceMappingURL=PDiskMaintenanceLegend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PDiskMaintenanceLegend.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,GAAG,EAAE,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAC,CAAC,EAAC,MAAM,cAAc,CAAC;AAC/B,OAAO,IAAI,MAAM,SAAS,CAAC;AAY3B,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,WAAW,GAAiC;IAC9C;QACI,IAAI,EAAE,IAAI,CAAC,qCAAqC,CAAC;QACjD,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,MAAM;KACf;IACD;QACI,IAAI,EAAE,IAAI,CAAC,iCAAiC,CAAC;QAC7C,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,GAAG;KACZ;IACD,EAAC,IAAI,EAAE,IAAI,CAAC,8BAA8B,CAAC,EAAE,KAAK,EAAE,SAAS,EAAC;CACjE,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,EAAC,SAAS,EAA8B;IAC3E,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,aAC/D,KAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,YACxC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,EAAE,EAAE,CAAC,CACtC,KAAC,KAAK,IAEF,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,SAAS,YAE5D,IAAI,IALA,IAAI,CAML,CACX,CAAC,GACC,EACP,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAC,WAAW,YACpD,IAAI,CAAC,uBAAuB,CAAC,GAC3B,IACJ,CACV,CAAC;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ interface PDiskStateLegendProps {
2
+ className?: string;
3
+ }
4
+ export declare function PDiskStateLegend({ className }: PDiskStateLegendProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CircleExclamationFill, CircleStopFill, CircleXmarkFill, ClockFill } from '@gravity-ui/icons';
3
+ import { Flex, Icon, Label, Text } from '@gravity-ui/uikit';
4
+ import { b } from '../constants';
5
+ import i18n from '../i18n';
6
+ const iconSize = 12;
7
+ const legendItems = [
8
+ { text: i18n('value_ok'), theme: 'success' },
9
+ { text: i18n('value_initial'), theme: 'warning', icon: ClockFill },
10
+ { text: i18n('value_attention'), theme: 'danger', icon: CircleExclamationFill },
11
+ { text: i18n('value_stopped'), theme: 'danger', icon: CircleStopFill },
12
+ {
13
+ text: i18n('value_error'),
14
+ theme: 'danger',
15
+ icon: CircleXmarkFill,
16
+ className: b('label-danger-heavy'),
17
+ },
18
+ { text: i18n('value_no-data'), theme: 'unknown' },
19
+ ];
20
+ export function PDiskStateLegend({ className }) {
21
+ return (_jsxs(Flex, { className: className, gap: 3, alignItems: "center", wrap: "wrap", children: [_jsx(Flex, { gap: 2, alignItems: "center", wrap: "wrap", children: legendItems.map(({ text, theme, icon, className: labelClassName }) => (_jsx(Label, { size: "xs", theme: theme, className: labelClassName, icon: icon ? _jsx(Icon, { data: icon, size: iconSize }) : undefined, children: text }, text))) }), _jsx(Text, { className: b('empty-statistics'), color: "secondary", children: i18n('context_no-statistics') })] }));
22
+ }
23
+ //# sourceMappingURL=PDiskStateLegend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PDiskStateLegend.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/PDiskStateLegend.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAEpG,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAC,CAAC,EAAC,MAAM,cAAc,CAAC;AAC/B,OAAO,IAAI,MAAM,SAAS,CAAC;AAa3B,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,WAAW,GAA2B;IACxC,EAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAC;IAC1C,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC;IAChE,EAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAC;IAC7E,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAC;IACpE;QACI,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC;QACzB,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,CAAC,CAAC,oBAAoB,CAAC;KACrC;IACD,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAC;CAClD,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,EAAC,SAAS,EAAwB;IAC/D,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,aAC/D,KAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,YACxC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAC,EAAE,EAAE,CAAC,CACjE,KAAC,KAAK,IAEF,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,SAAS,YAE5D,IAAI,IANA,IAAI,CAOL,CACX,CAAC,GACC,EACP,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAC,WAAW,YACpD,IAAI,CAAC,uBAAuB,CAAC,GAC3B,IACJ,CACV,CAAC;AACN,CAAC"}
@@ -1,6 +1,8 @@
1
+ import type { SpaceLegendSelectionScope } from './getSpaceLegendSelection';
1
2
  import './SpaceLegend.scss';
2
3
  interface SpaceLegendProps {
3
4
  className?: string;
5
+ selectionScope?: SpaceLegendSelectionScope;
4
6
  }
5
- export declare function SpaceLegend({ className }: SpaceLegendProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function SpaceLegend({ className, selectionScope }: SpaceLegendProps): import("react/jsx-runtime").JSX.Element;
6
8
  export {};
@@ -38,9 +38,9 @@ const legendItems = [
38
38
  { id: ECapacityAlert.RED, text: i18n('space_red'), customClass: b('label', { red: true }) },
39
39
  { id: ECapacityAlert.BLACK, text: i18n('space_black'), customClass: b('label', { black: true }) },
40
40
  ];
41
- export function SpaceLegend({ className }) {
41
+ export function SpaceLegend({ className, selectionScope = 'vdisks' }) {
42
42
  // Load inactive ECapacityAlert values
43
- const [inactiveAlerts, setInactiveAlerts] = React.useState(getSpaceLegendSelection);
43
+ const [inactiveAlerts, setInactiveAlerts] = React.useState(() => getSpaceLegendSelection(selectionScope));
44
44
  const toggleItem = React.useCallback((id) => {
45
45
  setInactiveAlerts((prev) => {
46
46
  const next = new Set(prev);
@@ -50,10 +50,10 @@ export function SpaceLegend({ className }) {
50
50
  else {
51
51
  next.add(id);
52
52
  }
53
- saveSpaceLegendSelection(next);
53
+ saveSpaceLegendSelection(next, selectionScope);
54
54
  return next;
55
55
  });
56
- }, []);
56
+ }, [selectionScope]);
57
57
  return (_jsxs(Flex, { className: className, gap: 2, alignItems: "center", wrap: "wrap", children: [_jsx(Flex, { gap: 2, alignItems: "center", wrap: "wrap", children: legendItems.map(({ id, text, theme, customClass }) => {
58
58
  const isActive = !inactiveAlerts.has(id);
59
59
  return (_jsx(Label, { size: "xs", theme: theme, className: customClass, onClick: () => toggleItem(id), icon: _jsx("div", { className: b('label-icon', { selected: isActive }), children: isActive ? _jsx(Icon, { data: Check, size: 12 }) : null }), children: text }, id));
@@ -1 +1 @@
1
- {"version":3,"file":"SpaceLegend.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/SpaceLegend.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpaceLegend.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/SpaceLegend.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { CircleExclamation, CircleXmarkFill, Clock } from '@gravity-ui/icons';
2
+ import { CircleExclamationFill, CircleXmarkFill, ClockFill } from '@gravity-ui/icons';
3
3
  import { Flex, Icon, Label, Text } from '@gravity-ui/uikit';
4
4
  import { b } from '../constants';
5
5
  import i18n from '../i18n';
@@ -7,8 +7,8 @@ const iconSize = 12;
7
7
  const legendItems = [
8
8
  { text: i18n('value_ok'), theme: 'success' },
9
9
  { text: i18n('value_replication'), theme: 'info' },
10
- { text: i18n('value_initial'), theme: 'warning', icon: Clock },
11
- { text: i18n('value_pdisk-error'), theme: 'danger', icon: CircleExclamation },
10
+ { text: i18n('value_initial'), theme: 'warning', icon: ClockFill },
11
+ { text: i18n('value_pdisk-error'), theme: 'danger', icon: CircleExclamationFill },
12
12
  {
13
13
  text: i18n('value_error'),
14
14
  theme: 'danger',
@@ -1 +1 @@
1
- {"version":3,"file":"StateLegend.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/StateLegend.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,iBAAiB,EAAE,eAAe,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAC,CAAC,EAAC,MAAM,cAAc,CAAC;AAC/B,OAAO,IAAI,MAAM,SAAS,CAAC;AAa3B,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,WAAW,GAAsB;IACnC,EAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAC;IAC1C,EAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAC;IAChD,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAC;IAC5D,EAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAC;IAC3E;QACI,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC;QACzB,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,CAAC,CAAC,oBAAoB,CAAC;KACrC;IACD,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAC;CAClD,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAC,SAAS,EAAmB;IACrD,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,aAC/D,KAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,YACxC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAC,EAAE,EAAE,CAAC,CACjE,KAAC,KAAK,IAEF,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,SAAS,YAE5D,IAAI,IANA,IAAI,CAOL,CACX,CAAC,GACC,EACP,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAC,WAAW,YACpD,IAAI,CAAC,uBAAuB,CAAC,GAC3B,IACJ,CACV,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"StateLegend.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/StateLegend.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,qBAAqB,EAAE,eAAe,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAC,CAAC,EAAC,MAAM,cAAc,CAAC;AAC/B,OAAO,IAAI,MAAM,SAAS,CAAC;AAa3B,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,WAAW,GAAsB;IACnC,EAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAC;IAC1C,EAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAC;IAChD,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC;IAChE,EAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAC;IAC/E;QACI,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC;QACzB,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,CAAC,CAAC,oBAAoB,CAAC;KACrC;IACD,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAC;CAClD,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAC,SAAS,EAAmB;IACrD,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,aAC/D,KAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,YACxC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAC,EAAE,EAAE,CAAC,CACjE,KAAC,KAAK,IAEF,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,SAAS,YAE5D,IAAI,IANA,IAAI,CAOL,CACX,CAAC,GACC,EACP,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAC,WAAW,YACpD,IAAI,CAAC,uBAAuB,CAAC,GAC3B,IACJ,CACV,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface StatusPairLegendProps {
2
+ className?: string;
3
+ label: string;
4
+ }
5
+ export declare function StatusPairLegend({ className, label }: StatusPairLegendProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CircleCheckFill, CircleExclamationFill, CircleXmarkFill, TriangleExclamationFill, } from '@gravity-ui/icons';
3
+ import { Flex, Icon, Label, Text } from '@gravity-ui/uikit';
4
+ import { b } from '../constants';
5
+ import i18n from '../i18n';
6
+ const iconSize = 12;
7
+ const legendItems = [
8
+ { text: i18n('compaction_ok'), theme: 'success', icon: CircleCheckFill },
9
+ { text: i18n('compaction_notice'), theme: 'warning', icon: TriangleExclamationFill },
10
+ { text: i18n('compaction_warning'), theme: 'danger', icon: CircleExclamationFill },
11
+ {
12
+ text: i18n('compaction_impaired'),
13
+ theme: 'danger',
14
+ icon: CircleXmarkFill,
15
+ className: b('label-danger-heavy'),
16
+ },
17
+ ];
18
+ export function StatusPairLegend({ className, label }) {
19
+ return (_jsxs(Flex, { className: className, gap: 3, alignItems: "center", wrap: "wrap", children: [_jsxs(Flex, { gap: 2, alignItems: "center", wrap: "wrap", children: [_jsx(Text, { color: "secondary", children: label }), legendItems.map(({ text, theme, icon, className: labelClassName }) => (_jsx(Label, { size: "xs", theme: theme, className: labelClassName, icon: _jsx(Icon, { data: icon, size: iconSize }), children: text }, text)))] }), _jsx(Text, { className: b('empty-statistics'), color: "secondary", children: i18n('context_no-statistics') })] }));
20
+ }
21
+ //# sourceMappingURL=StatusPairLegend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusPairLegend.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.tsx"],"names":[],"mappings":";AAAA,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,uBAAuB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAC,CAAC,EAAC,MAAM,cAAc,CAAC;AAC/B,OAAO,IAAI,MAAM,SAAS,CAAC;AAc3B,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,WAAW,GAA2B;IACxC,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAC;IACtE,EAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,uBAAuB,EAAC;IAClF,EAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAC;IAChF;QACI,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC;QACjC,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,CAAC,CAAC,oBAAoB,CAAC;KACrC;CACJ,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAwB;IACtE,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,aAC/D,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,aACzC,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,YAAE,KAAK,GAAQ,EACrC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAC,EAAE,EAAE,CAAC,CACjE,KAAC,KAAK,IAEF,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAI,YAEzC,IAAI,IANA,IAAI,CAOL,CACX,CAAC,IACC,EACP,KAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAC,WAAW,YACpD,IAAI,CAAC,uBAAuB,CAAC,GAC3B,IACJ,CACV,CAAC;AACN,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { ECapacityAlert } from '../../../../types/api/enums';
2
2
  export declare const SPACE_LEGEND_STORAGE_KEY = "ydb-space-legend-inactive";
3
3
  export declare const SPACE_LEGEND_CHANGE_EVENT = "spaceLegendChange";
4
+ export type SpaceLegendSelectionScope = 'vdisks' | 'pdisks';
4
5
  /**
5
6
  * Get the set of inactive (deselected) capacityAlert values for Space mode legend
6
7
  * Returns a Set of ECapacityAlert values that are currently deselected in the legend
7
8
  */
8
- export declare function getSpaceLegendSelection(): Set<ECapacityAlert>;
9
- export declare function saveSpaceLegendSelection(selection: Set<ECapacityAlert>): void;
9
+ export declare function getSpaceLegendSelection(scope?: SpaceLegendSelectionScope): Set<ECapacityAlert>;
10
+ export declare function saveSpaceLegendSelection(selection: Set<ECapacityAlert>, scope?: SpaceLegendSelectionScope): void;
@@ -4,8 +4,14 @@ export const SPACE_LEGEND_STORAGE_KEY = 'ydb-space-legend-inactive';
4
4
  export const SPACE_LEGEND_CHANGE_EVENT = 'spaceLegendChange';
5
5
  // By default, GREEN and CYAN are inactive (deselected)
6
6
  const defaultInactive = new Set([ECapacityAlert.GREEN, ECapacityAlert.CYAN]);
7
- function loadInactiveItems() {
8
- const stored = loadFromSessionStorage(SPACE_LEGEND_STORAGE_KEY);
7
+ function getStorageKey(scope) {
8
+ return scope === 'vdisks' ? SPACE_LEGEND_STORAGE_KEY : `${SPACE_LEGEND_STORAGE_KEY}-${scope}`;
9
+ }
10
+ function getChangeEvent(scope) {
11
+ return scope === 'vdisks' ? SPACE_LEGEND_CHANGE_EVENT : `${SPACE_LEGEND_CHANGE_EVENT}-${scope}`;
12
+ }
13
+ function loadInactiveItems(scope) {
14
+ const stored = loadFromSessionStorage(getStorageKey(scope));
9
15
  if (Array.isArray(stored)) {
10
16
  const normalizedStored = new Set();
11
17
  stored.forEach((item) => {
@@ -21,11 +27,11 @@ function loadInactiveItems() {
21
27
  * Get the set of inactive (deselected) capacityAlert values for Space mode legend
22
28
  * Returns a Set of ECapacityAlert values that are currently deselected in the legend
23
29
  */
24
- export function getSpaceLegendSelection() {
25
- return loadInactiveItems();
30
+ export function getSpaceLegendSelection(scope = 'vdisks') {
31
+ return loadInactiveItems(scope);
26
32
  }
27
- export function saveSpaceLegendSelection(selection) {
28
- saveToSessionStorage(SPACE_LEGEND_STORAGE_KEY, Array.from(selection));
29
- window.dispatchEvent(new CustomEvent(SPACE_LEGEND_CHANGE_EVENT));
33
+ export function saveSpaceLegendSelection(selection, scope = 'vdisks') {
34
+ saveToSessionStorage(getStorageKey(scope), Array.from(selection));
35
+ window.dispatchEvent(new CustomEvent(getChangeEvent(scope)));
30
36
  }
31
37
  //# sourceMappingURL=getSpaceLegendSelection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getSpaceLegendSelection.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAE/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAC;AACpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAE7D,uDAAuD;AACvD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAE7E,SAAS,iBAAiB;IACtB,MAAM,MAAM,GAAG,sBAAsB,CAAC,wBAAwB,CAAC,CAAC;IAEhE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACnC,OAAO,iBAAiB,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAA8B;IACnE,oBAAoB,CAAC,wBAAwB,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"getSpaceLegendSelection.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAE/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAC;AACpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAI7D,uDAAuD;AACvD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAE7E,SAAS,aAAa,CAAC,KAAgC;IACnD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,wBAAwB,IAAI,KAAK,EAAE,CAAC;AAClG,CAAC;AAED,SAAS,cAAc,CAAC,KAAgC;IACpD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,yBAAyB,IAAI,KAAK,EAAE,CAAC;AACpG,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAgC;IACvD,MAAM,MAAM,GAAG,sBAAsB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAE5D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACnC,QAAmC,QAAQ;IAE3C,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACpC,SAA8B,EAC9B,QAAmC,QAAQ;IAE3C,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -1,4 +1,9 @@
1
1
  export { StateLegend } from './StateLegend';
2
+ export { PDiskStateLegend } from './PDiskStateLegend';
3
+ export { PDiskDriveLegend } from './PDiskDriveLegend';
4
+ export { PDiskDecommitLegend } from './PDiskDecommitLegend';
5
+ export { PDiskMaintenanceLegend } from './PDiskMaintenanceLegend';
6
+ export { PDiskDeviceLegend } from './PDiskDeviceLegend';
2
7
  export { SpaceLegend } from './SpaceLegend';
3
8
  export { FrontQueuesLegend } from './FrontQueuesLegend';
4
9
  export { CompactionLegend } from './CompactionLegend';
@@ -1,4 +1,9 @@
1
1
  export { StateLegend } from './StateLegend';
2
+ export { PDiskStateLegend } from './PDiskStateLegend';
3
+ export { PDiskDriveLegend } from './PDiskDriveLegend';
4
+ export { PDiskDecommitLegend } from './PDiskDecommitLegend';
5
+ export { PDiskMaintenanceLegend } from './PDiskMaintenanceLegend';
6
+ export { PDiskDeviceLegend } from './PDiskDeviceLegend';
2
7
  export { SpaceLegend } from './SpaceLegend';
3
8
  export { FrontQueuesLegend } from './FrontQueuesLegend';
4
9
  export { CompactionLegend } from './CompactionLegend';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC"}
@@ -1,7 +1,3 @@
1
1
  import type { ECapacityAlert } from '../../../../types/api/enums';
2
- /**
3
- * Hook to get the set of inactive (deselected) legend items for Space mode
4
- * Returns a Set of ECapacityAlert values that are currently deselected in the legend
5
- * Automatically updates when legend selection changes
6
- */
7
- export declare function useSpaceLegendSelection(): Set<ECapacityAlert>;
2
+ import type { SpaceLegendSelectionScope } from './getSpaceLegendSelection';
3
+ export declare function useSpaceLegendSelection(scope?: SpaceLegendSelectionScope): Set<ECapacityAlert>;
@@ -5,17 +5,21 @@ import { SPACE_LEGEND_CHANGE_EVENT, getSpaceLegendSelection } from './getSpaceLe
5
5
  * Returns a Set of ECapacityAlert values that are currently deselected in the legend
6
6
  * Automatically updates when legend selection changes
7
7
  */
8
- export function useSpaceLegendSelection() {
9
- const [selection, setSelection] = React.useState(getSpaceLegendSelection);
8
+ function getChangeEvent(scope) {
9
+ return scope === 'vdisks' ? SPACE_LEGEND_CHANGE_EVENT : `${SPACE_LEGEND_CHANGE_EVENT}-${scope}`;
10
+ }
11
+ export function useSpaceLegendSelection(scope = 'vdisks') {
12
+ const [selection, setSelection] = React.useState(() => getSpaceLegendSelection(scope));
10
13
  React.useEffect(() => {
11
14
  const handleLegendChange = () => {
12
- setSelection(getSpaceLegendSelection());
15
+ setSelection(getSpaceLegendSelection(scope));
13
16
  };
14
- window.addEventListener(SPACE_LEGEND_CHANGE_EVENT, handleLegendChange);
17
+ const changeEvent = getChangeEvent(scope);
18
+ window.addEventListener(changeEvent, handleLegendChange);
15
19
  return () => {
16
- window.removeEventListener(SPACE_LEGEND_CHANGE_EVENT, handleLegendChange);
20
+ window.removeEventListener(changeEvent, handleLegendChange);
17
21
  };
18
- }, []);
22
+ }, [scope]);
19
23
  return selection;
20
24
  }
21
25
  //# sourceMappingURL=useSpaceLegendSelection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSpaceLegendSelection.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/useSpaceLegendSelection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAC,yBAAyB,EAAE,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAE7F;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACnC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsB,uBAAuB,CAAC,CAAC;IAE/F,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC5B,YAAY,CAAC,uBAAuB,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;QACvE,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;QAC9E,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,SAAS,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"useSpaceLegendSelection.js","sourceRoot":"","sources":["../../../../../src/containers/Storage/StorageExpertModePanel/components/useSpaceLegendSelection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAC,yBAAyB,EAAE,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAG7F;;;;GAIG;AACH,SAAS,cAAc,CAAC,KAAgC;IACpD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,yBAAyB,IAAI,KAAK,EAAE,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,uBAAuB,CACnC,QAAmC,QAAQ;IAE3C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsB,GAAG,EAAE,CACvE,uBAAuB,CAAC,KAAK,CAAC,CACjC,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC5B,YAAY,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACzD,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAChE,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,SAAS,CAAC;AACrB,CAAC"}
@@ -3,6 +3,16 @@ import { VDisksGroupBy } from '../../../utils/disks/groupBy';
3
3
  import type { VDisksGroupByValue } from '../../../utils/disks/groupBy';
4
4
  export { VDisksGroupBy };
5
5
  export type { VDisksGroupByValue };
6
+ export declare const PDisksGroupBy: {
7
+ readonly State: "State";
8
+ readonly Space: "Space";
9
+ readonly Drive: "Drive";
10
+ readonly Decommit: "Decommit";
11
+ readonly Maintenance: "Maintenance";
12
+ readonly Device: "Device";
13
+ readonly All: "All";
14
+ };
15
+ export type PDisksGroupByValue = (typeof PDisksGroupBy)[keyof typeof PDisksGroupBy];
6
16
  export declare const vdisksGroupBySchema: z.ZodCatch<z.ZodEnum<{
7
17
  readonly State: "State";
8
18
  readonly Space: "Space";
@@ -10,4 +20,13 @@ export declare const vdisksGroupBySchema: z.ZodCatch<z.ZodEnum<{
10
20
  readonly Compaction: "Compaction";
11
21
  readonly All: "All";
12
22
  }>>;
23
+ export declare const pdisksGroupBySchema: z.ZodCatch<z.ZodEnum<{
24
+ readonly State: "State";
25
+ readonly Space: "Space";
26
+ readonly Drive: "Drive";
27
+ readonly Decommit: "Decommit";
28
+ readonly Maintenance: "Maintenance";
29
+ readonly Device: "Device";
30
+ readonly All: "All";
31
+ }>>;
13
32
  export declare const b: import("@bem-react/classname").ClassNameFormatter;
@@ -2,6 +2,16 @@ import { z } from 'zod';
2
2
  import { cn } from '../../../utils/cn';
3
3
  import { VDisksGroupBy } from '../../../utils/disks/groupBy';
4
4
  export { VDisksGroupBy };
5
+ export const PDisksGroupBy = {
6
+ State: 'State',
7
+ Space: 'Space',
8
+ Drive: 'Drive',
9
+ Decommit: 'Decommit',
10
+ Maintenance: 'Maintenance',
11
+ Device: 'Device',
12
+ All: 'All',
13
+ };
5
14
  export const vdisksGroupBySchema = z.nativeEnum(VDisksGroupBy).catch(VDisksGroupBy.State);
15
+ export const pdisksGroupBySchema = z.nativeEnum(PDisksGroupBy).catch(PDisksGroupBy.State);
6
16
  export const b = cn('ydb-storage-expert-mode-panel');
7
17
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/containers/Storage/StorageExpertModePanel/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,EAAE,EAAC,MAAM,mBAAmB,CAAC;AACrC,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAAC,aAAa,EAAC,CAAC;AAGvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,+BAA+B,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/containers/Storage/StorageExpertModePanel/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,EAAE,EAAC,MAAM,mBAAmB,CAAC;AACrC,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAAC,aAAa,EAAC,CAAC;AAGvB,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACJ,CAAC;AAIX,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,+BAA+B,CAAC,CAAC"}
@@ -1,16 +1,38 @@
1
1
  {
2
2
  "label_vdisks": "VDisks:",
3
+ "label_pdisks": "PDisks:",
3
4
  "value_state": "State",
4
5
  "value_space": "Space",
5
6
  "value_front-queues": "Front queues",
6
7
  "value_compaction": "Compaction",
7
8
  "value_all": "All",
9
+ "value_pdisks-state": "State",
10
+ "value_pdisks-space": "Space",
11
+ "value_pdisks-drive": "Drive",
12
+ "value_pdisks-decommit": "Decommit",
13
+ "value_pdisks-maintenance": "Maintenance",
14
+ "value_pdisks-device": "Device",
15
+ "value_pdisks-all": "All",
8
16
  "value_ok": "Ok",
9
17
  "value_replication": "Replication",
10
18
  "value_initial": "Initial",
11
19
  "value_pdisk-error": "PDisk Error",
12
20
  "value_error": "Error",
21
+ "value_attention": "Attention",
22
+ "value_stopped": "Stopped",
13
23
  "value_no-data": "N/D",
24
+ "drive_active": "Active",
25
+ "drive_inactive": "Inactive",
26
+ "drive_to-be-removed": "To be removed",
27
+ "drive_faulty": "Faulty",
28
+ "drive_broken": "Broken",
29
+ "value_decommit-imminent": "Imminent",
30
+ "value_decommit-rejected": "Rejected",
31
+ "value_decommit-pending": "Pending",
32
+ "value_decommit-none": "No decommission",
33
+ "value_maintenance-long-term-planned": "Long term planned",
34
+ "value_maintenance-no-new-vdisks": "No new VDisks",
35
+ "value_maintenance-no-request": "No request",
14
36
  "context_no-statistics": "No statistics available",
15
37
  "label_capacity-alerts": "Capacity alerts:",
16
38
  "capacity-alerts_all": "All",
@@ -39,6 +61,7 @@
39
61
  "front-queues_warning": "Warning",
40
62
  "front-queues_impaired": "Impaired",
41
63
  "compaction_key": "Fresh / Level Rank Satisfaction:",
64
+ "device_key": "Device / Realtime:",
42
65
  "compaction_ok": "OK",
43
66
  "compaction_notice": "Notice",
44
67
  "compaction_warning": "Warning",
@@ -1,2 +1,2 @@
1
- declare const _default: (key: "value_all" | "label_vdisks" | "value_state" | "value_space" | "value_front-queues" | "value_compaction" | "value_ok" | "value_replication" | "value_initial" | "value_pdisk-error" | "value_error" | "value_no-data" | "context_no-statistics" | "label_capacity-alerts" | "capacity-alerts_all" | "capacity-alerts_none" | "capacity-alerts_except" | "capacity-alert_green" | "capacity-alert_cyan" | "capacity-alert_light-yellow" | "capacity-alert_yellow" | "capacity-alert_light-orange" | "capacity-alert_pre-orange" | "capacity-alert_orange" | "capacity-alert_red" | "capacity-alert_black" | "space_green" | "space_cyan" | "space_light-yellow" | "space_yellow" | "space_light-orange" | "space_pre-orange" | "space_orange" | "space_red" | "space_black" | "front-queues_ok" | "front-queues_notice" | "front-queues_warning" | "front-queues_impaired" | "compaction_key" | "compaction_ok" | "compaction_notice" | "compaction_warning" | "compaction_impaired", params?: import("@gravity-ui/i18n").Params) => string;
1
+ declare const _default: (key: "value_all" | "label_vdisks" | "label_pdisks" | "value_state" | "value_space" | "value_front-queues" | "value_compaction" | "value_pdisks-state" | "value_pdisks-space" | "value_pdisks-drive" | "value_pdisks-decommit" | "value_pdisks-maintenance" | "value_pdisks-device" | "value_pdisks-all" | "value_ok" | "value_replication" | "value_initial" | "value_pdisk-error" | "value_error" | "value_attention" | "value_stopped" | "value_no-data" | "drive_active" | "drive_inactive" | "drive_to-be-removed" | "drive_faulty" | "drive_broken" | "value_decommit-imminent" | "value_decommit-rejected" | "value_decommit-pending" | "value_decommit-none" | "value_maintenance-long-term-planned" | "value_maintenance-no-new-vdisks" | "value_maintenance-no-request" | "context_no-statistics" | "label_capacity-alerts" | "capacity-alerts_all" | "capacity-alerts_none" | "capacity-alerts_except" | "capacity-alert_green" | "capacity-alert_cyan" | "capacity-alert_light-yellow" | "capacity-alert_yellow" | "capacity-alert_light-orange" | "capacity-alert_pre-orange" | "capacity-alert_orange" | "capacity-alert_red" | "capacity-alert_black" | "space_green" | "space_cyan" | "space_light-yellow" | "space_yellow" | "space_light-orange" | "space_pre-orange" | "space_orange" | "space_red" | "space_black" | "front-queues_ok" | "front-queues_notice" | "front-queues_warning" | "front-queues_impaired" | "compaction_key" | "device_key" | "compaction_ok" | "compaction_notice" | "compaction_warning" | "compaction_impaired", params?: import("@gravity-ui/i18n").Params) => string;
2
2
  export default _default;
@@ -7,5 +7,5 @@
7
7
  "controls_expert-mode": "Expert mode",
8
8
  "no-nodes": "No such nodes",
9
9
  "no-groups": "No such groups",
10
- "no-data": "N/A"
10
+ "no-data": "N/D"
11
11
  }
@@ -1,2 +1,2 @@
1
- declare const _default: (key: "nodes" | "groups" | "no-data" | "controls_group-by-placeholder" | "controls_groups-search-placeholder" | "controls_nodes-search-placeholder" | "controls_expert-mode" | "no-nodes" | "no-groups", params?: import("@gravity-ui/i18n").Params) => string;
1
+ declare const _default: (key: "nodes" | "no-data" | "groups" | "controls_group-by-placeholder" | "controls_groups-search-placeholder" | "controls_nodes-search-placeholder" | "controls_expert-mode" | "no-nodes" | "no-groups", params?: import("@gravity-ui/i18n").Params) => string;
2
2
  export default _default;
@@ -0,0 +1,2 @@
1
+ import type { PDiskDisplayStateGetter } from '../../utils/disks/displayState';
2
+ export declare function useStoragePDiskDisplayStateGetter(): PDiskDisplayStateGetter;
@@ -0,0 +1,142 @@
1
+ import React from 'react';
2
+ import { CircleQuestionFill } from '@gravity-ui/icons';
3
+ import { isCapacityAlert } from '../../types/api/enums';
4
+ import { NOT_AVAILABLE_SEVERITY } from '../../utils/disks/constants';
5
+ import { getDefaultPDiskDisplayState } from '../../utils/disks/displayState';
6
+ import { calculateFlagPairIcon, calculateSpaceIcon } from '../../utils/disks/iconCalculators';
7
+ import { getPDiskDecommitDisplayState, getPDiskDriveDisplayState, getPDiskMaintenanceDisplayState, getPDiskStateDisplayState, } from '../../utils/disks/pdiskState';
8
+ import { calculateFlagPairSeverity, calculateSpaceSeverity, } from '../../utils/disks/severityCalculators';
9
+ import { useSpaceLegendSelection } from './StorageExpertModePanel/components/useSpaceLegendSelection';
10
+ import { PDisksGroupBy } from './StorageExpertModePanel/constants';
11
+ import { useIsStorageExpertMode, usePDisksGroupByParam } from './useStorageQueryParams';
12
+ const EXPERT_MODE_PDISK_WIDTH = 55;
13
+ function getModeModifier(groupBy) {
14
+ switch (groupBy) {
15
+ case PDisksGroupBy.State:
16
+ return 'mode-state';
17
+ case PDisksGroupBy.Space:
18
+ return 'mode-space';
19
+ case PDisksGroupBy.Drive:
20
+ return 'mode-drive';
21
+ case PDisksGroupBy.Decommit:
22
+ return 'mode-decommit';
23
+ case PDisksGroupBy.Maintenance:
24
+ return 'mode-maintenance';
25
+ case PDisksGroupBy.Device:
26
+ return 'mode-device';
27
+ default:
28
+ return undefined;
29
+ }
30
+ }
31
+ function requiresWhiteboardData(groupBy) {
32
+ return groupBy === PDisksGroupBy.State || groupBy === PDisksGroupBy.Device;
33
+ }
34
+ export function useStoragePDiskDisplayStateGetter() {
35
+ const isExpertMode = useIsStorageExpertMode();
36
+ const pdisksGroupBy = usePDisksGroupByParam();
37
+ const inactiveAlerts = useSpaceLegendSelection('pdisks');
38
+ return React.useCallback((pDisk) => {
39
+ var _a;
40
+ if (!isExpertMode) {
41
+ return getDefaultPDiskDisplayState(pDisk);
42
+ }
43
+ const modeModifier = getModeModifier(pdisksGroupBy);
44
+ if (pDisk.WhiteboardSize === undefined && requiresWhiteboardData(pdisksGroupBy)) {
45
+ return {
46
+ severity: NOT_AVAILABLE_SEVERITY,
47
+ icon: undefined,
48
+ modeModifier,
49
+ isLegendInactive: false,
50
+ showNoDataPlaceholder: true,
51
+ allocatedPercent: undefined,
52
+ width: modeModifier ? EXPERT_MODE_PDISK_WIDTH : undefined,
53
+ };
54
+ }
55
+ if (pdisksGroupBy === PDisksGroupBy.Space) {
56
+ const capacityAlert = pDisk.PDiskCapacityAlert;
57
+ const whiteboardAllocatedPercent = (_a = pDisk.WhiteboardSize) === null || _a === void 0 ? void 0 : _a.AllocatedPercent;
58
+ const allocatedPercent = typeof whiteboardAllocatedPercent === 'number' &&
59
+ Number.isFinite(whiteboardAllocatedPercent)
60
+ ? whiteboardAllocatedPercent
61
+ : pDisk.AllocatedPercent;
62
+ return {
63
+ severity: calculateSpaceSeverity({ CapacityAlert: capacityAlert }),
64
+ icon: calculateSpaceIcon({ CapacityAlert: capacityAlert }),
65
+ modeModifier,
66
+ isLegendInactive: isCapacityAlert(capacityAlert) && inactiveAlerts.has(capacityAlert),
67
+ showNoDataPlaceholder: false,
68
+ allocatedPercent,
69
+ width: EXPERT_MODE_PDISK_WIDTH,
70
+ };
71
+ }
72
+ if (pdisksGroupBy === PDisksGroupBy.Drive) {
73
+ const driveDisplayState = getPDiskDriveDisplayState(pDisk.DriveStatus);
74
+ return {
75
+ ...driveDisplayState,
76
+ icon: pDisk.DriveStatus === undefined
77
+ ? CircleQuestionFill
78
+ : driveDisplayState.icon,
79
+ modeModifier,
80
+ isLegendInactive: false,
81
+ showNoDataPlaceholder: false,
82
+ allocatedPercent: undefined,
83
+ width: EXPERT_MODE_PDISK_WIDTH,
84
+ };
85
+ }
86
+ if (pdisksGroupBy === PDisksGroupBy.Decommit) {
87
+ const decommitDisplayState = getPDiskDecommitDisplayState(pDisk.DecommitStatus);
88
+ return {
89
+ ...decommitDisplayState,
90
+ icon: pDisk.DecommitStatus === undefined
91
+ ? CircleQuestionFill
92
+ : decommitDisplayState.icon,
93
+ modeModifier,
94
+ isLegendInactive: false,
95
+ showNoDataPlaceholder: false,
96
+ allocatedPercent: undefined,
97
+ width: EXPERT_MODE_PDISK_WIDTH,
98
+ };
99
+ }
100
+ if (pdisksGroupBy === PDisksGroupBy.Maintenance) {
101
+ const maintenanceDisplayState = getPDiskMaintenanceDisplayState(pDisk.MaintenanceStatus);
102
+ return {
103
+ ...maintenanceDisplayState,
104
+ icon: pDisk.MaintenanceStatus === undefined
105
+ ? CircleQuestionFill
106
+ : maintenanceDisplayState.icon,
107
+ modeModifier,
108
+ isLegendInactive: false,
109
+ showNoDataPlaceholder: false,
110
+ allocatedPercent: undefined,
111
+ width: EXPERT_MODE_PDISK_WIDTH,
112
+ };
113
+ }
114
+ if (pdisksGroupBy === PDisksGroupBy.Device) {
115
+ return {
116
+ severity: calculateFlagPairSeverity(pDisk.Device, pDisk.Realtime),
117
+ icon: calculateFlagPairIcon(pDisk.Device, pDisk.Realtime),
118
+ modeModifier,
119
+ isLegendInactive: false,
120
+ showNoDataPlaceholder: false,
121
+ allocatedPercent: undefined,
122
+ width: EXPERT_MODE_PDISK_WIDTH,
123
+ };
124
+ }
125
+ if (pdisksGroupBy !== PDisksGroupBy.State) {
126
+ return getDefaultPDiskDisplayState(pDisk);
127
+ }
128
+ const stateDisplayState = getPDiskStateDisplayState(pDisk.State);
129
+ return {
130
+ ...stateDisplayState,
131
+ icon: stateDisplayState.severity === NOT_AVAILABLE_SEVERITY
132
+ ? CircleQuestionFill
133
+ : stateDisplayState.icon,
134
+ modeModifier,
135
+ isLegendInactive: false,
136
+ showNoDataPlaceholder: false,
137
+ allocatedPercent: undefined,
138
+ width: EXPERT_MODE_PDISK_WIDTH,
139
+ };
140
+ }, [inactiveAlerts, isExpertMode, pdisksGroupBy]);
141
+ }
142
+ //# sourceMappingURL=useStoragePDiskDisplayStateGetter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStoragePDiskDisplayStateGetter.js","sourceRoot":"","sources":["../../../src/containers/Storage/useStoragePDiskDisplayStateGetter.ts"],"names":[],"mappings":"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"}