ydb-embedded-ui 22.4.0 → 22.6.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 (337) hide show
  1. package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.d.ts +2 -0
  2. package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.js +9 -0
  3. package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.js.map +1 -0
  4. package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.scss +18 -0
  5. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.d.ts +3 -2
  6. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js +19 -4
  7. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js.map +1 -1
  8. package/dist/components/CopyableValue/CopyableValue.d.ts +10 -0
  9. package/dist/components/CopyableValue/CopyableValue.js +10 -0
  10. package/dist/components/CopyableValue/CopyableValue.js.map +1 -0
  11. package/dist/components/CopyableValue/CopyableValue.scss +16 -0
  12. package/dist/components/CopyableValue/i18n/en.json +3 -0
  13. package/dist/components/CopyableValue/i18n/index.d.ts +2 -0
  14. package/dist/components/CopyableValue/i18n/index.js +6 -0
  15. package/dist/components/CopyableValue/i18n/index.js.map +1 -0
  16. package/dist/components/CriticalActionDialog/CriticalActionDialog.d.ts +2 -1
  17. package/dist/components/CriticalActionDialog/CriticalActionDialog.js +2 -1
  18. package/dist/components/CriticalActionDialog/CriticalActionDialog.js.map +1 -1
  19. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.d.ts +1 -21
  20. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js +40 -126
  21. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js.map +1 -1
  22. package/dist/components/DiskCapacityInfo/i18n/en.json +0 -1
  23. package/dist/components/DiskCapacityInfo/i18n/index.d.ts +1 -1
  24. package/dist/components/EntityStatus/EntityStatus.d.ts +18 -6
  25. package/dist/components/EntityStatus/EntityStatus.js +5 -1
  26. package/dist/components/EntityStatus/EntityStatus.js.map +1 -1
  27. package/dist/components/EntityStatus/EntityStatus.scss +5 -0
  28. package/dist/components/EvictVDiskButton/EvictVDiskButton.d.ts +5 -2
  29. package/dist/components/EvictVDiskButton/EvictVDiskButton.js +3 -2
  30. package/dist/components/EvictVDiskButton/EvictVDiskButton.js.map +1 -1
  31. package/dist/components/EvictVDiskButton/i18n/en.json +2 -2
  32. package/dist/components/FullNodeViewer/FullNodeViewer.js +4 -7
  33. package/dist/components/FullNodeViewer/FullNodeViewer.js.map +1 -1
  34. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  35. package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.d.ts +3 -0
  36. package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.js +12 -0
  37. package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.js.map +1 -0
  38. package/dist/components/HideUnavailableNodesSwitch/i18n/en.json +3 -0
  39. package/dist/components/HideUnavailableNodesSwitch/i18n/index.d.ts +2 -0
  40. package/dist/components/HideUnavailableNodesSwitch/i18n/index.js +6 -0
  41. package/dist/components/HideUnavailableNodesSwitch/i18n/index.js.map +1 -0
  42. package/dist/components/HideUnavailableNodesSwitch/i18n/ru.json +3 -0
  43. package/dist/components/HoverPopup/HoverPopup.d.ts +1 -0
  44. package/dist/components/HoverPopup/HoverPopup.js +87 -16
  45. package/dist/components/HoverPopup/HoverPopup.js.map +1 -1
  46. package/dist/components/MemoryViewer/MemoryViewer.d.ts +3 -1
  47. package/dist/components/MemoryViewer/MemoryViewer.js +25 -16
  48. package/dist/components/MemoryViewer/MemoryViewer.js.map +1 -1
  49. package/dist/components/MemoryViewer/i18n/en.json +4 -3
  50. package/dist/components/MemoryViewer/i18n/index.d.ts +1 -1
  51. package/dist/components/MemoryViewer/utils.d.ts +4 -2
  52. package/dist/components/MemoryViewer/utils.js +11 -11
  53. package/dist/components/MemoryViewer/utils.js.map +1 -1
  54. package/dist/components/PDiskInfo/PDiskInfo.d.ts +4 -9
  55. package/dist/components/PDiskInfo/PDiskInfo.js +32 -144
  56. package/dist/components/PDiskInfo/PDiskInfo.js.map +1 -1
  57. package/dist/components/PDiskInfo/PDiskInfo.scss +15 -0
  58. package/dist/components/PDiskInfo/PDiskLogSize.js +1 -1
  59. package/dist/components/PDiskInfo/PDiskLogSize.js.map +1 -1
  60. package/dist/components/PDiskInfo/i18n/en.json +6 -3
  61. package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
  62. package/dist/components/PDiskInfo/statuses.js +12 -3
  63. package/dist/components/PDiskInfo/statuses.js.map +1 -1
  64. package/dist/components/PageMeta/PageMeta.d.ts +0 -2
  65. package/dist/components/PageMeta/PageMeta.js +1 -6
  66. package/dist/components/PageMeta/PageMeta.js.map +1 -1
  67. package/dist/components/Search/Search.js +3 -1
  68. package/dist/components/Search/Search.js.map +1 -1
  69. package/dist/components/StorageGroupInfo/StorageGroupInfo.js +4 -9
  70. package/dist/components/StorageGroupInfo/StorageGroupInfo.js.map +1 -1
  71. package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
  72. package/dist/components/TenantNameWrapper/i18n/index.d.ts +1 -1
  73. package/dist/components/VDisk/VDisk.js +2 -2
  74. package/dist/components/VDisk/VDisk.js.map +1 -1
  75. package/dist/components/VDiskInfo/VDiskInfo.d.ts +3 -7
  76. package/dist/components/VDiskInfo/VDiskInfo.js +57 -235
  77. package/dist/components/VDiskInfo/VDiskInfo.js.map +1 -1
  78. package/dist/components/VDiskInfo/VDiskInfo.scss +19 -3
  79. package/dist/components/VDiskInfo/getVDiskDetails.d.ts +7 -1
  80. package/dist/components/VDiskInfo/getVDiskDetails.js +14 -1
  81. package/dist/components/VDiskInfo/getVDiskDetails.js.map +1 -1
  82. package/dist/components/VDiskInfo/i18n/en.json +4 -13
  83. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  84. package/dist/components/VDiskPopup/VDiskPopup.d.ts +2 -1
  85. package/dist/components/VDiskPopup/VDiskPopup.js +10 -26
  86. package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
  87. package/dist/components/VDiskPopup/i18n/en.json +0 -2
  88. package/dist/components/VDiskPopup/i18n/index.d.ts +1 -1
  89. package/dist/components/VDiskStatus/VDiskReplicationStatus.js +1 -1
  90. package/dist/components/VDiskStatus/VDiskReplicationStatus.js.map +1 -1
  91. package/dist/components/VDiskStatus/VDiskStatus.js +2 -2
  92. package/dist/components/VDiskStatus/VDiskStatus.js.map +1 -1
  93. package/dist/components/VDiskStatus/VDiskStatus.scss +4 -0
  94. package/dist/components/VDiskStatus/statuses.js +2 -2
  95. package/dist/components/VDiskStatus/statuses.js.map +1 -1
  96. package/dist/components/nodesColumns/columns.d.ts +1 -0
  97. package/dist/components/nodesColumns/columns.js +13 -6
  98. package/dist/components/nodesColumns/columns.js.map +1 -1
  99. package/dist/containers/Clusters/Clusters.js +35 -6
  100. package/dist/containers/Clusters/Clusters.js.map +1 -1
  101. package/dist/containers/Clusters/Clusters.scss +24 -6
  102. package/dist/containers/Clusters/columns.js +9 -4
  103. package/dist/containers/Clusters/columns.js.map +1 -1
  104. package/dist/containers/Clusters/i18n/en.json +6 -0
  105. package/dist/containers/Clusters/i18n/index.d.ts +1 -1
  106. package/dist/containers/Header/Header.js +8 -0
  107. package/dist/containers/Header/Header.js.map +1 -1
  108. package/dist/containers/Header/HeaderLeftControls.js +3 -1
  109. package/dist/containers/Header/HeaderLeftControls.js.map +1 -1
  110. package/dist/containers/Header/PDiskLeftControls.d.ts +1 -0
  111. package/dist/containers/Header/PDiskLeftControls.js +24 -0
  112. package/dist/containers/Header/PDiskLeftControls.js.map +1 -0
  113. package/dist/containers/Header/VDiskLeftControls.d.ts +1 -0
  114. package/dist/containers/Header/VDiskLeftControls.js +23 -0
  115. package/dist/containers/Header/VDiskLeftControls.js.map +1 -0
  116. package/dist/containers/Header/breadcrumbs.js +5 -2
  117. package/dist/containers/Header/breadcrumbs.js.map +1 -1
  118. package/dist/containers/Header/i18n/en.json +4 -1
  119. package/dist/containers/Header/i18n/index.d.ts +1 -1
  120. package/dist/containers/Node/Node.js +4 -3
  121. package/dist/containers/Node/Node.js.map +1 -1
  122. package/dist/containers/Node/Node.scss +14 -2
  123. package/dist/containers/Nodes/NodesControls/NodesControls.js +2 -1
  124. package/dist/containers/Nodes/NodesControls/NodesControls.js.map +1 -1
  125. package/dist/containers/Nodes/NodesTable.js +4 -0
  126. package/dist/containers/Nodes/NodesTable.js.map +1 -1
  127. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +8 -3
  128. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -1
  129. package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js +12 -2
  130. package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js.map +1 -1
  131. package/dist/containers/Nodes/getNodes.js +2 -1
  132. package/dist/containers/Nodes/getNodes.js.map +1 -1
  133. package/dist/containers/Nodes/useDebouncedSearch.d.ts +2 -0
  134. package/dist/containers/Nodes/useDebouncedSearch.js +11 -0
  135. package/dist/containers/Nodes/useDebouncedSearch.js.map +1 -0
  136. package/dist/containers/PDiskPage/PDiskPage.js +24 -34
  137. package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
  138. package/dist/containers/PDiskPage/PDiskPage.scss +29 -11
  139. package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js +3 -3
  140. package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js.map +1 -1
  141. package/dist/containers/PDiskPage/PDiskStorageDetails.d.ts +6 -0
  142. package/dist/containers/PDiskPage/PDiskStorageDetails.js +28 -0
  143. package/dist/containers/PDiskPage/PDiskStorageDetails.js.map +1 -0
  144. package/dist/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
  145. package/dist/containers/PDiskPage/i18n/en.json +1 -0
  146. package/dist/containers/PDiskPage/i18n/index.d.ts +1 -1
  147. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
  148. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js +3 -0
  149. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js.map +1 -1
  150. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js +8 -1
  151. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js.map +1 -1
  152. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js +2 -1
  153. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js.map +1 -1
  154. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js +4 -0
  155. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js.map +1 -1
  156. package/dist/containers/Storage/PaginatedStorageNodesTable/getNodes.js +2 -1
  157. package/dist/containers/Storage/PaginatedStorageNodesTable/getNodes.js.map +1 -1
  158. package/dist/containers/Storage/Storage.scss +4 -0
  159. package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +1 -1
  160. package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
  161. package/dist/containers/Storage/useStorageQueryParams.d.ts +4 -4
  162. package/dist/containers/StorageGroupPage/StorageGroupPage.js +5 -14
  163. package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
  164. package/dist/containers/StorageGroupPage/StorageGroupPage.scss +19 -4
  165. package/dist/containers/StorageGroupPage/i18n/en.json +0 -2
  166. package/dist/containers/StorageGroupPage/i18n/index.d.ts +1 -1
  167. package/dist/containers/Tablet/Tablet.js +3 -2
  168. package/dist/containers/Tablet/Tablet.js.map +1 -1
  169. package/dist/containers/Tablet/Tablet.scss +15 -1
  170. package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/ManagePartitioningDialog/i18n/index.d.ts +1 -1
  171. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +5 -12
  172. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
  173. package/dist/containers/Tenant/Diagnostics/TopQueries/columns/i18n/index.d.ts +1 -1
  174. package/dist/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
  175. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js +2 -2
  176. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js.map +1 -1
  177. package/dist/containers/Tenant/TenantDrawerHealthcheck.js +10 -2
  178. package/dist/containers/Tenant/TenantDrawerHealthcheck.js.map +1 -1
  179. package/dist/containers/VDiskPage/VDiskPage.js +27 -36
  180. package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
  181. package/dist/containers/VDiskPage/VDiskPage.scss +39 -7
  182. package/dist/containers/VDiskPage/VDiskStorageDetails.js +27 -29
  183. package/dist/containers/VDiskPage/VDiskStorageDetails.js.map +1 -1
  184. package/dist/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
  185. package/dist/containers/VDiskPage/i18n/en.json +2 -12
  186. package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
  187. package/dist/store/reducers/capabilities/hooks.d.ts +1 -0
  188. package/dist/store/reducers/capabilities/hooks.js +3 -0
  189. package/dist/store/reducers/capabilities/hooks.js.map +1 -1
  190. package/dist/store/reducers/cluster/parseFields.js +1 -0
  191. package/dist/store/reducers/cluster/parseFields.js.map +1 -1
  192. package/dist/store/reducers/clusters/clusters.js +1 -0
  193. package/dist/store/reducers/clusters/clusters.js.map +1 -1
  194. package/dist/store/reducers/clusters/selectors.d.ts +1 -0
  195. package/dist/store/reducers/clusters/selectors.js +4 -1
  196. package/dist/store/reducers/clusters/selectors.js.map +1 -1
  197. package/dist/store/reducers/clusters/types.d.ts +2 -0
  198. package/dist/store/reducers/nodes/types.d.ts +1 -0
  199. package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +1 -1
  200. package/dist/store/reducers/storage/prepareGroupsDisks.js +2 -1
  201. package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
  202. package/dist/store/reducers/storage/types.d.ts +1 -0
  203. package/dist/store/reducers/storage/utils.js +10 -3
  204. package/dist/store/reducers/storage/utils.js.map +1 -1
  205. package/dist/store/reducers/vdisk/types.d.ts +1 -1
  206. package/dist/store/reducers/vdisk/utils.js +5 -5
  207. package/dist/store/reducers/vdisk/utils.js.map +1 -1
  208. package/dist/types/api/capabilities.d.ts +1 -1
  209. package/dist/types/api/meta.d.ts +1 -0
  210. package/dist/types/api/nodes.d.ts +2 -0
  211. package/dist/types/api/nodesList.d.ts +2 -0
  212. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.d.ts +2 -0
  213. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js +6 -0
  214. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js.map +1 -0
  215. package/dist/utils/hooks/useHideUnavailableNodes.d.ts +5 -0
  216. package/dist/utils/hooks/useHideUnavailableNodes.js +21 -0
  217. package/dist/utils/hooks/useHideUnavailableNodes.js.map +1 -0
  218. package/dist/utils/memory.d.ts +5 -0
  219. package/dist/utils/memory.js +9 -0
  220. package/dist/utils/memory.js.map +1 -0
  221. package/dist/utils/nodes.js +3 -3
  222. package/dist/utils/nodes.js.map +1 -1
  223. package/dist/utils/storageMetrics.d.ts +1 -0
  224. package/dist/utils/storageMetrics.js +8 -0
  225. package/dist/utils/storageMetrics.js.map +1 -1
  226. package/package.json +1 -1
  227. package/src/components/AutoRefreshControl/StickyAutoRefreshControl.scss +18 -0
  228. package/src/components/AutoRefreshControl/StickyAutoRefreshControl.tsx +15 -0
  229. package/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx +22 -3
  230. package/src/components/CopyableValue/CopyableValue.scss +16 -0
  231. package/src/components/CopyableValue/CopyableValue.tsx +40 -0
  232. package/src/components/CopyableValue/i18n/en.json +3 -0
  233. package/src/components/CopyableValue/i18n/index.ts +8 -0
  234. package/src/components/CriticalActionDialog/CriticalActionDialog.tsx +3 -0
  235. package/src/components/DiskCapacityInfo/DiskCapacityInfo.tsx +40 -185
  236. package/src/components/DiskCapacityInfo/i18n/en.json +0 -1
  237. package/src/components/EntityStatus/EntityStatus.scss +5 -0
  238. package/src/components/EntityStatus/EntityStatus.tsx +38 -5
  239. package/src/components/EvictVDiskButton/EvictVDiskButton.tsx +10 -2
  240. package/src/components/EvictVDiskButton/i18n/en.json +2 -2
  241. package/src/components/FullNodeViewer/FullNodeViewer.tsx +4 -9
  242. package/src/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.tsx +24 -0
  243. package/src/components/HideUnavailableNodesSwitch/i18n/en.json +3 -0
  244. package/src/components/HideUnavailableNodesSwitch/i18n/index.ts +7 -0
  245. package/src/components/HideUnavailableNodesSwitch/i18n/ru.json +3 -0
  246. package/src/components/HoverPopup/HoverPopup.tsx +95 -19
  247. package/src/components/MemoryViewer/MemoryViewer.tsx +30 -17
  248. package/src/components/MemoryViewer/i18n/en.json +4 -3
  249. package/src/components/MemoryViewer/utils.ts +19 -12
  250. package/src/components/PDiskInfo/PDiskInfo.scss +15 -0
  251. package/src/components/PDiskInfo/PDiskInfo.tsx +51 -243
  252. package/src/components/PDiskInfo/PDiskLogSize.tsx +12 -8
  253. package/src/components/PDiskInfo/i18n/en.json +6 -3
  254. package/src/components/PDiskInfo/statuses.ts +16 -3
  255. package/src/components/PageMeta/PageMeta.tsx +0 -18
  256. package/src/components/Search/Search.tsx +5 -2
  257. package/src/components/StorageGroupInfo/StorageGroupInfo.tsx +8 -13
  258. package/src/components/VDisk/VDisk.tsx +3 -2
  259. package/src/components/VDiskInfo/VDiskInfo.scss +19 -3
  260. package/src/components/VDiskInfo/VDiskInfo.tsx +119 -341
  261. package/src/components/VDiskInfo/getVDiskDetails.tsx +24 -2
  262. package/src/components/VDiskInfo/i18n/en.json +4 -13
  263. package/src/components/VDiskPopup/VDiskPopup.tsx +16 -24
  264. package/src/components/VDiskPopup/i18n/en.json +0 -2
  265. package/src/components/VDiskStatus/VDiskReplicationStatus.tsx +1 -1
  266. package/src/components/VDiskStatus/VDiskStatus.scss +4 -0
  267. package/src/components/VDiskStatus/VDiskStatus.tsx +13 -2
  268. package/src/components/VDiskStatus/statuses.ts +2 -2
  269. package/src/components/nodesColumns/columns.tsx +26 -12
  270. package/src/containers/Clusters/Clusters.scss +24 -6
  271. package/src/containers/Clusters/Clusters.tsx +74 -5
  272. package/src/containers/Clusters/columns.tsx +36 -6
  273. package/src/containers/Clusters/i18n/en.json +6 -0
  274. package/src/containers/Header/Header.tsx +8 -0
  275. package/src/containers/Header/HeaderLeftControls.tsx +3 -1
  276. package/src/containers/Header/PDiskLeftControls.tsx +41 -0
  277. package/src/containers/Header/VDiskLeftControls.tsx +40 -0
  278. package/src/containers/Header/breadcrumbs.tsx +4 -2
  279. package/src/containers/Header/i18n/en.json +4 -1
  280. package/src/containers/Node/Node.scss +14 -2
  281. package/src/containers/Node/Node.tsx +6 -6
  282. package/src/containers/Nodes/NodesControls/NodesControls.tsx +3 -0
  283. package/src/containers/Nodes/NodesTable.tsx +4 -0
  284. package/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +8 -3
  285. package/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx +12 -2
  286. package/src/containers/Nodes/getNodes.ts +2 -0
  287. package/src/containers/Nodes/useDebouncedSearch.ts +13 -0
  288. package/src/containers/PDiskPage/PDiskPage.scss +29 -11
  289. package/src/containers/PDiskPage/PDiskPage.tsx +69 -63
  290. package/src/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.tsx +3 -9
  291. package/src/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
  292. package/src/containers/PDiskPage/PDiskStorageDetails.tsx +64 -0
  293. package/src/containers/PDiskPage/i18n/en.json +1 -0
  294. package/src/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.tsx +3 -0
  295. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.tsx +8 -1
  296. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesControls.tsx +2 -0
  297. package/src/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.tsx +4 -0
  298. package/src/containers/Storage/PaginatedStorageNodesTable/getNodes.ts +2 -0
  299. package/src/containers/Storage/Storage.scss +4 -0
  300. package/src/containers/StorageGroupPage/StorageGroupPage.scss +19 -4
  301. package/src/containers/StorageGroupPage/StorageGroupPage.tsx +25 -45
  302. package/src/containers/StorageGroupPage/i18n/en.json +0 -2
  303. package/src/containers/Tablet/Tablet.scss +15 -1
  304. package/src/containers/Tablet/Tablet.tsx +21 -15
  305. package/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +5 -32
  306. package/src/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
  307. package/src/containers/Tenant/Healthcheck/components/HealthcheckIssue.tsx +18 -8
  308. package/src/containers/Tenant/TenantDrawerHealthcheck.tsx +14 -1
  309. package/src/containers/VDiskPage/VDiskPage.scss +39 -7
  310. package/src/containers/VDiskPage/VDiskPage.tsx +84 -72
  311. package/src/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
  312. package/src/containers/VDiskPage/VDiskStorageDetails.tsx +50 -158
  313. package/src/containers/VDiskPage/i18n/en.json +2 -14
  314. package/src/store/reducers/capabilities/hooks.ts +4 -0
  315. package/src/store/reducers/cluster/parseFields.ts +1 -0
  316. package/src/store/reducers/clusters/clusters.ts +1 -0
  317. package/src/store/reducers/clusters/selectors.ts +4 -0
  318. package/src/store/reducers/clusters/types.ts +3 -0
  319. package/src/store/reducers/nodes/types.ts +1 -0
  320. package/src/store/reducers/storage/prepareGroupsDisks.ts +2 -0
  321. package/src/store/reducers/storage/types.ts +1 -0
  322. package/src/store/reducers/storage/utils.ts +13 -3
  323. package/src/store/reducers/vdisk/types.ts +2 -1
  324. package/src/store/reducers/vdisk/utils.ts +4 -5
  325. package/src/types/api/capabilities.ts +1 -0
  326. package/src/types/api/meta.ts +1 -0
  327. package/src/types/api/nodes.ts +2 -0
  328. package/src/types/api/nodesList.ts +3 -0
  329. package/src/utils/hooks/useDatabaseHealthcheckAvailable.ts +9 -0
  330. package/src/utils/hooks/useHideUnavailableNodes.ts +33 -0
  331. package/src/utils/memory.ts +16 -0
  332. package/src/utils/nodes.ts +3 -2
  333. package/src/utils/storageMetrics.ts +11 -0
  334. package/dist/components/VDiskInfo/getVDiskCapacityColumns.d.ts +0 -11
  335. package/dist/components/VDiskInfo/getVDiskCapacityColumns.js +0 -52
  336. package/dist/components/VDiskInfo/getVDiskCapacityColumns.js.map +0 -1
  337. package/src/components/VDiskInfo/getVDiskCapacityColumns.tsx +0 -83
@@ -1,263 +1,71 @@
1
1
  import {Flex} from '@gravity-ui/uikit';
2
2
 
3
3
  import {useBlobStorageCapacityMetricsEnabled} from '../../store/reducers/capabilities/hooks';
4
- import {valueIsDefined} from '../../utils';
5
- import {formatBytes} from '../../utils/bytesParsers';
6
- import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters';
7
- import {createPDiskDeveloperUILink, useHasDeveloperUi} from '../../utils/developerUI/developerUI';
8
- import {formatPDiskType} from '../../utils/disks/getPDiskType';
4
+ import {cn} from '../../utils/cn';
5
+ import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
9
6
  import type {PreparedPDisk} from '../../utils/disks/types';
10
- import {getPDiskCapacityInfoItems, toInfoViewerItems} from '../DiskCapacityInfo/DiskCapacityInfo';
11
- import type {InfoViewerItem} from '../InfoViewer';
12
- import {InfoViewer} from '../InfoViewer/InfoViewer';
13
- import {LinkWithIcon} from '../LinkWithIcon/LinkWithIcon';
14
- import {PDiskPageLink} from '../PDiskPageLink/PDiskPageLink';
15
- import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
16
- import {StatusIcon} from '../StatusIcon/StatusIcon';
7
+ import {formatMetricPercent} from '../../utils/storageMetrics';
8
+ import {CopyableValue} from '../CopyableValue/CopyableValue';
9
+ import {getPDiskCapacityItems} from '../DiskCapacityInfo/DiskCapacityInfo';
10
+ import type {YDBDefinitionListItem} from '../YDBDefinitionList/YDBDefinitionList';
11
+ import {YDBDefinitionList} from '../YDBDefinitionList/YDBDefinitionList';
17
12
 
13
+ import {getPDiskLogItems, getPDiskRuntimeItems} from './getPDiskDetails';
18
14
  import {pDiskInfoKeyset} from './i18n';
19
15
 
20
- interface GetPDiskInfoOptions<T extends PreparedPDisk> {
21
- pDisk?: T;
22
- nodeId?: number | string | null;
23
- withPDiskPageLink?: boolean;
24
- hasDeveloperUi?: boolean;
25
- capacityMetricsEnabled?: boolean;
26
- }
27
-
28
- // eslint-disable-next-line complexity
29
- function getPDiskInfo<T extends PreparedPDisk>({
30
- pDisk,
31
- nodeId,
32
- withPDiskPageLink,
33
- hasDeveloperUi,
34
- capacityMetricsEnabled,
35
- }: GetPDiskInfoOptions<T>) {
36
- const {
37
- PDiskId,
38
- Path,
39
- Guid,
40
- Category,
41
- Type,
42
- Device,
43
- Realtime,
44
- State,
45
- SerialNumber,
46
- TotalSize,
47
- AllocatedSize,
48
- AllocatedPercent,
49
- StatusV2,
50
- NumActiveSlots,
51
- ExpectedSlotCount,
52
- LogUsedSize,
53
- LogTotalSize,
54
- SystemSize,
55
- SharedWithOs,
56
- } = pDisk || {};
16
+ import './PDiskInfo.scss';
57
17
 
58
- const generalInfo: InfoViewerItem[] = [];
59
-
60
- if (valueIsDefined(Category)) {
61
- generalInfo.push({label: pDiskInfoKeyset('type'), value: formatPDiskType(Type)});
62
- }
63
- if (valueIsDefined(Path)) {
64
- generalInfo.push({label: pDiskInfoKeyset('path'), value: Path});
65
- }
66
- if (valueIsDefined(Guid)) {
67
- generalInfo.push({label: pDiskInfoKeyset('guid'), value: Guid});
68
- }
69
- // SerialNumber could be an empty string ""
70
- if (SerialNumber) {
71
- generalInfo.push({
72
- label: pDiskInfoKeyset('serial-number'),
73
- value: SerialNumber,
74
- });
75
- }
76
- if (SharedWithOs) {
77
- generalInfo.push({
78
- label: pDiskInfoKeyset('shared-with-os'),
79
- value: pDiskInfoKeyset('yes'),
80
- });
81
- }
82
-
83
- const statusInfo: InfoViewerItem[] = [];
84
-
85
- if (valueIsDefined(StatusV2)) {
86
- statusInfo.push({label: pDiskInfoKeyset('drive-status'), value: StatusV2});
87
- }
88
- if (valueIsDefined(State)) {
89
- statusInfo.push({label: pDiskInfoKeyset('state'), value: State});
90
- }
91
- if (valueIsDefined(Device)) {
92
- statusInfo.push({
93
- label: pDiskInfoKeyset('device'),
94
- value: <StatusIcon status={Device} />,
95
- });
96
- }
97
- if (valueIsDefined(Realtime)) {
98
- statusInfo.push({
99
- label: pDiskInfoKeyset('realtime'),
100
- value: <StatusIcon status={Realtime} />,
101
- });
102
- }
103
-
104
- const additionalInfo: InfoViewerItem[] = [];
105
-
106
- const shouldDisplayLinks =
107
- (withPDiskPageLink || hasDeveloperUi) && valueIsDefined(PDiskId) && valueIsDefined(nodeId);
108
-
109
- if (shouldDisplayLinks) {
110
- const pDiskInternalViewerPath = createPDiskDeveloperUILink({
111
- nodeId,
112
- pDiskId: PDiskId,
113
- });
114
-
115
- additionalInfo.push({
116
- label: pDiskInfoKeyset('links'),
117
- value: (
118
- <Flex wrap="wrap" gap={2}>
119
- {withPDiskPageLink && <PDiskPageLink pDiskId={PDiskId} nodeId={nodeId} />}
120
- {hasDeveloperUi && (
121
- <LinkWithIcon
122
- title={pDiskInfoKeyset('developer-ui')}
123
- url={pDiskInternalViewerPath}
124
- />
125
- )}
126
- </Flex>
127
- ),
128
- });
129
- }
18
+ const b = cn('ydb-pdisk-info');
130
19
 
131
- if (capacityMetricsEnabled) {
132
- const configurationInfo = [...generalInfo];
133
- const runtimeInfo = [...statusInfo];
134
- const capacityItems = getPDiskCapacityInfoItems(pDisk, {
135
- withUsage: true,
136
- withCapacityAlert: false,
137
- });
138
- const slotSizeItem = capacityItems.find(({id}) => id === 'slot-size-in-units');
139
- const runtimeCapacityItems = capacityItems.filter(({id}) => id !== 'slot-size-in-units');
140
-
141
- if (slotSizeItem) {
142
- configurationInfo.push(...toInfoViewerItems([slotSizeItem]));
143
- }
144
- configurationInfo.push(...additionalInfo);
145
- runtimeInfo.push(...toInfoViewerItems(runtimeCapacityItems));
146
-
147
- if (valueIsDefined(LogUsedSize) && valueIsDefined(LogTotalSize)) {
148
- runtimeInfo.push({
149
- label: pDiskInfoKeyset('log-size'),
150
- value: (
151
- <ProgressViewer
152
- value={LogUsedSize}
153
- capacity={LogTotalSize}
154
- formatValues={formatStorageValuesToGb}
155
- />
156
- ),
157
- });
158
- }
159
- if (valueIsDefined(SystemSize)) {
160
- runtimeInfo.push({
161
- label: pDiskInfoKeyset('system-size'),
162
- value: formatBytes({value: SystemSize}),
163
- });
164
- }
165
-
166
- return [configurationInfo, runtimeInfo];
167
- }
168
-
169
- const spaceInfo: InfoViewerItem[] = [];
20
+ interface PDiskInfoProps {
21
+ pDisk?: PreparedPDisk;
22
+ className?: string;
23
+ }
170
24
 
171
- const hasSpaceData =
172
- Number.isFinite(Number(AllocatedSize)) && Number.isFinite(Number(TotalSize));
173
- spaceInfo.push({
174
- label: pDiskInfoKeyset('space'),
175
- value: hasSpaceData
176
- ? formatStorageValuesToGb(Number(AllocatedSize), Number(TotalSize)).join(' / ')
177
- : pDiskInfoKeyset('value_no-data'),
178
- });
179
- if (!isNaN(Number(AllocatedPercent))) {
180
- spaceInfo.push({
181
- label: pDiskInfoKeyset('usage'),
182
- value: `${AllocatedPercent}%`,
183
- });
184
- }
185
- if (valueIsDefined(NumActiveSlots) && valueIsDefined(ExpectedSlotCount)) {
186
- spaceInfo.push({
187
- label: pDiskInfoKeyset('slots'),
188
- value: <ProgressViewer value={NumActiveSlots} capacity={ExpectedSlotCount} />,
189
- });
190
- }
191
- if (valueIsDefined(LogUsedSize) && valueIsDefined(LogTotalSize)) {
192
- spaceInfo.push({
193
- label: pDiskInfoKeyset('log-size'),
194
- value: (
195
- <ProgressViewer
196
- value={LogUsedSize}
197
- capacity={LogTotalSize}
198
- formatValues={formatStorageValuesToGb}
199
- />
200
- ),
201
- });
202
- }
203
- if (valueIsDefined(SystemSize)) {
204
- spaceInfo.push({
205
- label: pDiskInfoKeyset('system-size'),
206
- value: formatBytes({value: SystemSize}),
25
+ function getPageCapacityItems(data: PreparedPDisk, capacityMetricsEnabled: boolean) {
26
+ const items = getPDiskCapacityItems(data, {useWhiteboardSize: capacityMetricsEnabled}).filter(
27
+ ({id}) => capacityMetricsEnabled || id === 'space' || id === 'slots',
28
+ );
29
+ if (!capacityMetricsEnabled) {
30
+ items.splice(1, 0, {
31
+ id: 'usage',
32
+ name: pDiskInfoKeyset('usage'),
33
+ content: formatMetricPercent(data.AllocatedPercent, 2),
207
34
  });
208
35
  }
209
-
210
- return [generalInfo, statusInfo, spaceInfo, additionalInfo];
211
- }
212
-
213
- interface PDiskInfoProps<T extends PreparedPDisk> extends GetPDiskInfoOptions<T> {
214
- className?: string;
36
+ return [...items, ...getPDiskLogItems(data)];
215
37
  }
216
38
 
217
- export function PDiskInfo<T extends PreparedPDisk>({
218
- pDisk,
219
- nodeId,
220
- withPDiskPageLink,
221
- className,
222
- }: PDiskInfoProps<T>) {
223
- const hasDeveloperUi = useHasDeveloperUi();
39
+ export function PDiskInfo({pDisk = {}, className}: PDiskInfoProps) {
224
40
  const capacityMetricsEnabled = useBlobStorageCapacityMetricsEnabled();
225
-
226
- const infoGroups = getPDiskInfo({
227
- pDisk,
228
- nodeId,
229
- withPDiskPageLink,
230
- hasDeveloperUi,
231
- capacityMetricsEnabled,
232
- });
233
-
234
- if (capacityMetricsEnabled) {
235
- const [configurationInfo, runtimeInfo] = infoGroups;
236
-
237
- return (
238
- <Flex className={className} gap={2} direction="row" wrap>
239
- <Flex direction="column" gap={2} width={500}>
240
- <InfoViewer info={configurationInfo} renderEmptyState={() => null} />
241
- </Flex>
242
- <Flex direction="column" gap={2} width={500}>
243
- <InfoViewer info={runtimeInfo} renderEmptyState={() => null} />
244
- </Flex>
245
- </Flex>
246
- );
247
- }
248
-
249
- const [generalInfo, statusInfo, spaceInfo, additionalInfo] = infoGroups;
41
+ const identityItems = [
42
+ {name: pDiskInfoKeyset('guid'), value: pDisk.Guid},
43
+ {name: pDiskInfoKeyset('serial-number'), value: pDisk.SerialNumber},
44
+ ].map(({name, value}) => ({
45
+ name,
46
+ content: (
47
+ <CopyableValue copyText={value || undefined} fieldName={name}>
48
+ <span className={b('identity-value')}>{value || EMPTY_DATA_PLACEHOLDER}</span>
49
+ </CopyableValue>
50
+ ),
51
+ }));
52
+ const runtimeItems: YDBDefinitionListItem[] = [
53
+ ...getPDiskRuntimeItems(pDisk),
54
+ ...identityItems,
55
+ ];
250
56
 
251
57
  return (
252
- <Flex className={className} gap={2} direction="row" wrap>
253
- <Flex direction="column" gap={2} width={500}>
254
- <InfoViewer info={generalInfo} renderEmptyState={() => null} />
255
- <InfoViewer info={spaceInfo} renderEmptyState={() => null} />
256
- </Flex>
257
- <Flex direction="column" gap={2} width={500}>
258
- <InfoViewer info={statusInfo} renderEmptyState={() => null} />
259
- <InfoViewer info={additionalInfo} renderEmptyState={() => null} />
260
- </Flex>
58
+ <Flex className={b(null, className)} gap={6} gapRow={3} wrap="wrap" qa="pdisk-page-info">
59
+ <YDBDefinitionList
60
+ items={runtimeItems}
61
+ nameMaxWidth={200}
62
+ wrapperClassName={b('column')}
63
+ />
64
+ <YDBDefinitionList
65
+ items={getPageCapacityItems(pDisk, capacityMetricsEnabled)}
66
+ nameMaxWidth={200}
67
+ wrapperClassName={b('column')}
68
+ />
261
69
  </Flex>
262
70
  );
263
71
  }
@@ -23,14 +23,18 @@ export function PDiskLogSize({used, total}: {used?: string; total?: string}) {
23
23
  }
24
24
 
25
25
  return (
26
- <Flex gap={1} alignItems="center" className={b()}>
27
- <Progress
28
- className={b('progress')}
29
- value={percentage}
30
- theme="success"
31
- size="s"
32
- aria-label={i18n('log-size')}
33
- />
26
+ <Flex
27
+ gap={1}
28
+ alignItems="center"
29
+ className={b()}
30
+ role="meter"
31
+ aria-label={i18n('log-size')}
32
+ aria-valuemin={0}
33
+ aria-valuemax={100}
34
+ aria-valuenow={percentage}
35
+ aria-valuetext={formatStorageMetricPair(usedSize, totalSize, 2)}
36
+ >
37
+ <Progress className={b('progress')} value={percentage} theme="success" size="s" />
34
38
  <span>{formatStorageMetricPair(usedSize, totalSize, 2)}</span>
35
39
  </Flex>
36
40
  );
@@ -3,7 +3,6 @@
3
3
  "path": "Path",
4
4
  "guid": "GUID",
5
5
  "serial-number": "Serial Number",
6
- "shared-with-os": "SharedWithOs",
7
6
  "drive-status": "Drive Status",
8
7
  "state": "State",
9
8
  "device": "Device",
@@ -14,12 +13,16 @@
14
13
  "slots": "Slots",
15
14
  "log-size": "Log Size",
16
15
  "system-size": "System Size",
17
- "links": "Links",
18
16
  "developer-ui": "Developer UI",
19
- "yes": "Yes",
20
17
  "context_slots": "The number of VDisks residing on this PDisk",
21
18
  "context_log-size": "The size of the Common Log shared by the residing VDisks",
22
19
  "context_system-size": "The size reserved for the PDisk system components. Includes SysLog",
20
+ "field_drive": "Drive status",
21
+ "field_decommit": "Decommission",
22
+ "value_not-available": "N/A",
23
+ "context_drive-not-available": "Drive is not available",
24
+ "context_decommit-not-available": "Decommission status is not available",
25
+ "context_maintenance-not-available": "Maintenance status is not available",
23
26
  "value_unknown": "Unknown",
24
27
  "value_ok": "Ok",
25
28
  "value_initial": "Initial",
@@ -24,6 +24,16 @@ function unknownLabel(): DiskStatusLabelData {
24
24
  };
25
25
  }
26
26
 
27
+ function unavailableLabel(title: string, tooltip: string): DiskStatusLabelData {
28
+ return {
29
+ title,
30
+ value: i18n('value_not-available'),
31
+ tooltip,
32
+ theme: 'unknown',
33
+ icon: CircleQuestionFill,
34
+ };
35
+ }
36
+
27
37
  function getLabelView({
28
38
  severity,
29
39
  icon,
@@ -112,7 +122,7 @@ export function getPDiskStateLabel(state?: TPDiskState): DiskStatusLabelData {
112
122
 
113
123
  export function getPDiskDriveLabel(status?: EDriveStatus): DiskStatusLabelData | undefined {
114
124
  if (!status || status === 'UNKNOWN') {
115
- return undefined;
125
+ return unavailableLabel(i18n('field_drive'), i18n('context_drive-not-available'));
116
126
  }
117
127
  const labels: Record<Exclude<EDriveStatus, 'UNKNOWN'>, StatusText> = {
118
128
  ACTIVE: {value: i18n('value_active'), tooltip: i18n('context_active')},
@@ -141,7 +151,7 @@ export function getPDiskDriveLabel(status?: EDriveStatus): DiskStatusLabelData |
141
151
 
142
152
  export function getPDiskDecommitLabel(status?: EDecommitStatus): DiskStatusLabelData | undefined {
143
153
  if (!status || status === 'DECOMMIT_UNSET') {
144
- return undefined;
154
+ return unavailableLabel(i18n('field_decommit'), i18n('context_decommit-not-available'));
145
155
  }
146
156
  const labels: Record<Exclude<EDecommitStatus, 'DECOMMIT_UNSET'>, StatusText> = {
147
157
  DECOMMIT_NONE: {value: i18n('value_decommit-none'), tooltip: i18n('context_decommit-none')},
@@ -174,7 +184,10 @@ export function getPDiskMaintenanceLabel(
174
184
  status?: EMaintenanceStatus,
175
185
  ): DiskStatusLabelData | undefined {
176
186
  if (!status) {
177
- return undefined;
187
+ return unavailableLabel(
188
+ i18n('label_maintenance'),
189
+ i18n('context_maintenance-not-available'),
190
+ );
178
191
  }
179
192
  const labels: Record<EMaintenanceStatus, StatusText> = {
180
193
  NO_REQUEST: {
@@ -1,7 +1,4 @@
1
- import {Flex} from '@gravity-ui/uikit';
2
-
3
1
  import {cn} from '../../utils/cn';
4
- import {AutoRefreshControl} from '../AutoRefreshControl/AutoRefreshControl';
5
2
  import {Skeleton} from '../Skeleton/Skeleton';
6
3
 
7
4
  import './PageMeta.scss';
@@ -10,7 +7,6 @@ const b = cn('ydb-page-meta');
10
7
 
11
8
  interface PageMetaProps {
12
9
  items: (string | undefined)[];
13
- className?: string;
14
10
  loading?: boolean;
15
11
  }
16
12
 
@@ -27,17 +23,3 @@ export function PageMeta({items, loading}: PageMetaProps) {
27
23
 
28
24
  return <div className={b('info')}>{renderContent()}</div>;
29
25
  }
30
-
31
- export function PageMetaWithAutorefresh({className, ...rest}: PageMetaProps) {
32
- return (
33
- <Flex
34
- gap={1}
35
- alignItems="center"
36
- justifyContent="space-between"
37
- className={b(null, className)}
38
- >
39
- <PageMeta {...rest} />
40
- <AutoRefreshControl />
41
- </Flex>
42
- );
43
- }
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
3
  import type {TextInputProps} from '@gravity-ui/uikit';
4
+ import {TextInput} from '@gravity-ui/uikit';
4
5
 
5
6
  import {cn} from '../../utils/cn';
6
7
  import {DebouncedTextInput} from '../DebouncedInput/DebouncedTextInput';
@@ -40,9 +41,11 @@ export const Search = ({
40
41
  [onChange],
41
42
  );
42
43
 
44
+ const Input = debounce === 0 ? TextInput : DebouncedTextInput;
45
+
43
46
  return (
44
- <DebouncedTextInput
45
- debounce={debounce}
47
+ <Input
48
+ {...(debounce === 0 ? {} : {debounce})}
46
49
  hasClear
47
50
  autoFocus
48
51
  controlRef={controlRef}
@@ -6,13 +6,14 @@ import {isNonEmptyValue} from '../../utils';
6
6
  import {formatBytes} from '../../utils/bytesParsers';
7
7
  import {cn} from '../../utils/cn';
8
8
  import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
9
- import {formatMetricPercent, formatStorageMetricPair} from '../../utils/storageMetrics';
9
+ import {
10
+ formatMetricPercent,
11
+ formatStorageMetricPair,
12
+ formatStorageThroughput,
13
+ } from '../../utils/storageMetrics';
10
14
  import {formatToMs} from '../../utils/timeParsers';
11
15
  import {parseOptionalNonNegativeNumber} from '../../utils/utils';
12
- import {
13
- getStorageGroupCapacityInfoItems,
14
- toDefinitionListItems,
15
- } from '../DiskCapacityInfo/DiskCapacityInfo';
16
+ import {getStorageGroupCapacityInfoItems} from '../DiskCapacityInfo/DiskCapacityInfo';
16
17
  import diskCapacityInfoKeyset from '../DiskCapacityInfo/i18n';
17
18
  import {StatusIcon} from '../StatusIcon/StatusIcon';
18
19
  import type {YDBDefinitionListItem} from '../YDBDefinitionList/YDBDefinitionList';
@@ -94,13 +95,7 @@ export function StorageGroupInfo({data, className}: StorageGroupInfoProps) {
94
95
  ] as const
95
96
  ).map(([name, value]) => ({
96
97
  name,
97
- content:
98
- formatBytes({
99
- value: parseOptionalNonNegativeNumber(value),
100
- size: 'mb',
101
- fixedDecimalPlaces: 2,
102
- withSpeedLabel: true,
103
- }) || EMPTY_DATA_PLACEHOLDER,
98
+ content: formatStorageThroughput(value),
104
99
  }));
105
100
  const capacityItems: YDBDefinitionListItem[] = [];
106
101
 
@@ -127,7 +122,7 @@ export function StorageGroupInfo({data, className}: StorageGroupInfoProps) {
127
122
  },
128
123
  );
129
124
  if (capacityMetricsEnabled) {
130
- capacityItems.push(...toDefinitionListItems(getStorageGroupCapacityInfoItems(data)));
125
+ capacityItems.push(...getStorageGroupCapacityInfoItems(data));
131
126
  } else {
132
127
  capacityItems.push(
133
128
  {
@@ -175,7 +175,7 @@ function getAccessibleName(
175
175
  {mode, allMode, isNoData, driveType}: VDiskDisplayState,
176
176
  ) {
177
177
  if (!mode) {
178
- return undefined;
178
+ return getAccessibleDiskName(data, {mode, isNoData});
179
179
  }
180
180
  if (mode === 'all') {
181
181
  return getAllModeAccessibleName(data, allMode?.hasIssues);
@@ -334,10 +334,11 @@ export const VDisk = ({
334
334
  onShowPopup={onShowPopup}
335
335
  onHidePopup={onHidePopup}
336
336
  onClosePopup={onClosePopup}
337
- renderPopupContent={({onClose}) => (
337
+ renderPopupContent={({onClose, holdOpen}) => (
338
338
  <VDiskPopup
339
339
  data={hidePDiskInPopup ? {...data, PDisk: undefined} : data}
340
340
  onClose={onClose}
341
+ onDialogOpen={holdOpen}
341
342
  />
342
343
  )}
343
344
  offset={popupOffset}
@@ -1,7 +1,23 @@
1
1
  .ydb-vdisk-info {
2
- &__info {
3
- flex: unset;
2
+ --g-definition-list-item-gap: var(--g-spacing-3);
4
3
 
5
- width: 500px;
4
+ &__metrics {
5
+ width: 100%;
6
+ }
7
+
8
+ &__column {
9
+ flex: 1 1 400px;
10
+
11
+ min-width: 0;
12
+ max-width: 500px;
13
+ }
14
+
15
+ &__identity {
16
+ width: 100%;
17
+ max-width: 500px;
18
+ }
19
+
20
+ &__disk {
21
+ width: 55px;
6
22
  }
7
23
  }