ydb-embedded-ui 22.3.0 → 22.5.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 (472) hide show
  1. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.d.ts +3 -2
  2. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js +19 -4
  3. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js.map +1 -1
  4. package/dist/components/CopyableValue/CopyableValue.d.ts +10 -0
  5. package/dist/components/CopyableValue/CopyableValue.js +10 -0
  6. package/dist/components/CopyableValue/CopyableValue.js.map +1 -0
  7. package/dist/components/CopyableValue/CopyableValue.scss +16 -0
  8. package/dist/components/CopyableValue/i18n/en.json +3 -0
  9. package/dist/components/CopyableValue/i18n/index.d.ts +2 -0
  10. package/dist/components/CopyableValue/i18n/index.js +6 -0
  11. package/dist/components/CopyableValue/i18n/index.js.map +1 -0
  12. package/dist/components/CriticalActionDialog/CriticalActionDialog.d.ts +2 -1
  13. package/dist/components/CriticalActionDialog/CriticalActionDialog.js +2 -1
  14. package/dist/components/CriticalActionDialog/CriticalActionDialog.js.map +1 -1
  15. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.d.ts +8 -19
  16. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js +68 -92
  17. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js.map +1 -1
  18. package/dist/components/DiskCapacityInfo/i18n/en.json +0 -1
  19. package/dist/components/DiskCapacityInfo/i18n/index.d.ts +1 -1
  20. package/dist/components/DiskPopup/DiskPopup.d.ts +25 -0
  21. package/dist/components/DiskPopup/DiskPopup.js +44 -0
  22. package/dist/components/DiskPopup/DiskPopup.js.map +1 -0
  23. package/dist/components/DiskPopup/DiskPopup.scss +203 -0
  24. package/dist/components/DiskPopup/i18n/en.json +3 -0
  25. package/dist/components/DiskPopup/i18n/index.d.ts +2 -0
  26. package/dist/components/DiskPopup/i18n/index.js +4 -0
  27. package/dist/components/DiskPopup/i18n/index.js.map +1 -0
  28. package/dist/components/DiskStatus/DiskStatus.d.ts +31 -0
  29. package/dist/components/DiskStatus/DiskStatus.js +61 -0
  30. package/dist/components/DiskStatus/DiskStatus.js.map +1 -0
  31. package/dist/components/DiskStatus/DiskStatus.scss +59 -0
  32. package/dist/components/DiskStatus/i18n/en.json +6 -0
  33. package/dist/components/DiskStatus/i18n/index.d.ts +2 -0
  34. package/dist/components/DiskStatus/i18n/index.js +4 -0
  35. package/dist/components/DiskStatus/i18n/index.js.map +1 -0
  36. package/dist/components/EntityStatus/EntityStatus.d.ts +19 -6
  37. package/dist/components/EntityStatus/EntityStatus.js +6 -2
  38. package/dist/components/EntityStatus/EntityStatus.js.map +1 -1
  39. package/dist/components/EntityStatus/EntityStatus.scss +5 -0
  40. package/dist/components/EvictVDiskButton/EvictVDiskButton.d.ts +5 -2
  41. package/dist/components/EvictVDiskButton/EvictVDiskButton.js +3 -2
  42. package/dist/components/EvictVDiskButton/EvictVDiskButton.js.map +1 -1
  43. package/dist/components/EvictVDiskButton/i18n/en.json +2 -2
  44. package/dist/components/FullNodeViewer/FullNodeViewer.js +4 -7
  45. package/dist/components/FullNodeViewer/FullNodeViewer.js.map +1 -1
  46. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  47. package/dist/components/HoverPopup/HoverPopup.d.ts +3 -1
  48. package/dist/components/HoverPopup/HoverPopup.js +131 -28
  49. package/dist/components/HoverPopup/HoverPopup.js.map +1 -1
  50. package/dist/components/HoverPopup/usePopupPriority.d.ts +4 -0
  51. package/dist/components/HoverPopup/usePopupPriority.js +30 -0
  52. package/dist/components/HoverPopup/usePopupPriority.js.map +1 -0
  53. package/dist/components/MemoryViewer/MemoryViewer.d.ts +3 -1
  54. package/dist/components/MemoryViewer/MemoryViewer.js +25 -16
  55. package/dist/components/MemoryViewer/MemoryViewer.js.map +1 -1
  56. package/dist/components/MemoryViewer/i18n/en.json +4 -3
  57. package/dist/components/MemoryViewer/i18n/index.d.ts +1 -1
  58. package/dist/components/MemoryViewer/utils.d.ts +4 -2
  59. package/dist/components/MemoryViewer/utils.js +11 -11
  60. package/dist/components/MemoryViewer/utils.js.map +1 -1
  61. package/dist/components/PDiskInfo/PDiskInfo.d.ts +4 -9
  62. package/dist/components/PDiskInfo/PDiskInfo.js +32 -144
  63. package/dist/components/PDiskInfo/PDiskInfo.js.map +1 -1
  64. package/dist/components/PDiskInfo/PDiskInfo.scss +15 -0
  65. package/dist/components/PDiskInfo/PDiskLogSize.d.ts +5 -0
  66. package/dist/components/PDiskInfo/PDiskLogSize.js +20 -0
  67. package/dist/components/PDiskInfo/PDiskLogSize.js.map +1 -0
  68. package/dist/components/PDiskInfo/PDiskLogSize.scss +12 -0
  69. package/dist/components/PDiskInfo/getPDiskDetails.d.ts +4 -0
  70. package/dist/components/PDiskInfo/getPDiskDetails.js +33 -0
  71. package/dist/components/PDiskInfo/getPDiskDetails.js.map +1 -0
  72. package/dist/components/PDiskInfo/i18n/en.json +69 -4
  73. package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
  74. package/dist/components/PDiskInfo/statuses.d.ts +7 -0
  75. package/dist/components/PDiskInfo/statuses.js +194 -0
  76. package/dist/components/PDiskInfo/statuses.js.map +1 -0
  77. package/dist/components/PDiskPopup/PDiskPopup.d.ts +4 -7
  78. package/dist/components/PDiskPopup/PDiskPopup.js +28 -99
  79. package/dist/components/PDiskPopup/PDiskPopup.js.map +1 -1
  80. package/dist/components/PDiskPopup/i18n/en.json +2 -12
  81. package/dist/components/PDiskPopup/i18n/index.d.ts +1 -1
  82. package/dist/components/Search/Search.js +3 -1
  83. package/dist/components/Search/Search.js.map +1 -1
  84. package/dist/components/StorageGroupInfo/StorageGroupInfo.d.ts +3 -3
  85. package/dist/components/StorageGroupInfo/StorageGroupInfo.js +73 -218
  86. package/dist/components/StorageGroupInfo/StorageGroupInfo.js.map +1 -1
  87. package/dist/components/StorageGroupInfo/StorageGroupInfo.scss +21 -0
  88. package/dist/components/StorageGroupInfo/i18n/en.json +1 -9
  89. package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
  90. package/dist/components/TenantNameWrapper/i18n/index.d.ts +1 -1
  91. package/dist/components/VDisk/VDisk.d.ts +2 -1
  92. package/dist/components/VDisk/VDisk.js +24 -33
  93. package/dist/components/VDisk/VDisk.js.map +1 -1
  94. package/dist/components/VDisk/VDiskWithDonorsStack.d.ts +1 -1
  95. package/dist/components/VDisk/VDiskWithDonorsStack.js +2 -1
  96. package/dist/components/VDisk/VDiskWithDonorsStack.js.map +1 -1
  97. package/dist/components/VDisk/getFlagStatusText.d.ts +2 -0
  98. package/dist/components/VDisk/getFlagStatusText.js +18 -0
  99. package/dist/components/VDisk/getFlagStatusText.js.map +1 -0
  100. package/dist/components/VDisk/i18n/en.json +1 -1
  101. package/dist/components/VDisk/i18n/index.d.ts +1 -1
  102. package/dist/components/VDiskInfo/VDiskInfo.d.ts +3 -7
  103. package/dist/components/VDiskInfo/VDiskInfo.js +57 -235
  104. package/dist/components/VDiskInfo/VDiskInfo.js.map +1 -1
  105. package/dist/components/VDiskInfo/VDiskInfo.scss +19 -3
  106. package/dist/components/VDiskInfo/getVDiskDetails.d.ts +11 -0
  107. package/dist/components/VDiskInfo/getVDiskDetails.js +42 -0
  108. package/dist/components/VDiskInfo/getVDiskDetails.js.map +1 -0
  109. package/dist/components/VDiskInfo/i18n/en.json +5 -12
  110. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  111. package/dist/components/VDiskPopup/VDiskPopup.d.ts +7 -8
  112. package/dist/components/VDiskPopup/VDiskPopup.js +91 -241
  113. package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
  114. package/dist/components/VDiskPopup/VDiskPopup.scss +3 -10
  115. package/dist/components/VDiskPopup/i18n/en.json +4 -22
  116. package/dist/components/VDiskPopup/i18n/index.d.ts +1 -1
  117. package/dist/components/VDiskStatus/VDiskReplicationStatus.d.ts +8 -0
  118. package/dist/components/VDiskStatus/VDiskReplicationStatus.js +32 -0
  119. package/dist/components/VDiskStatus/VDiskReplicationStatus.js.map +1 -0
  120. package/dist/components/VDiskStatus/VDiskStatus.d.ts +16 -0
  121. package/dist/components/VDiskStatus/VDiskStatus.js +20 -0
  122. package/dist/components/VDiskStatus/VDiskStatus.js.map +1 -0
  123. package/dist/components/VDiskStatus/VDiskStatus.scss +36 -0
  124. package/dist/components/VDiskStatus/i18n/en.json +33 -0
  125. package/dist/components/VDiskStatus/i18n/index.d.ts +1 -0
  126. package/dist/components/VDiskStatus/i18n/index.js +5 -0
  127. package/dist/components/VDiskStatus/i18n/index.js.map +1 -0
  128. package/dist/components/VDiskStatus/index.d.ts +2 -0
  129. package/dist/components/VDiskStatus/index.js +3 -0
  130. package/dist/components/VDiskStatus/index.js.map +1 -0
  131. package/dist/components/VDiskStatus/statuses.d.ts +4 -0
  132. package/dist/components/VDiskStatus/statuses.js +120 -0
  133. package/dist/components/VDiskStatus/statuses.js.map +1 -0
  134. package/dist/components/capacityMetricsColumns/i18n/en.json +4 -4
  135. package/dist/components/nodesColumns/columns.d.ts +1 -0
  136. package/dist/components/nodesColumns/columns.js +13 -6
  137. package/dist/components/nodesColumns/columns.js.map +1 -1
  138. package/dist/containers/Cluster/ClusterDrawerHealthcheck.js +6 -1
  139. package/dist/containers/Cluster/ClusterDrawerHealthcheck.js.map +1 -1
  140. package/dist/containers/Clusters/ClusterDrawerHealthcheck.js +1 -1
  141. package/dist/containers/Clusters/ClusterDrawerHealthcheck.js.map +1 -1
  142. package/dist/containers/Clusters/Clusters.js +35 -6
  143. package/dist/containers/Clusters/Clusters.js.map +1 -1
  144. package/dist/containers/Clusters/Clusters.scss +24 -6
  145. package/dist/containers/Clusters/columns.js +9 -4
  146. package/dist/containers/Clusters/columns.js.map +1 -1
  147. package/dist/containers/Clusters/i18n/en.json +6 -0
  148. package/dist/containers/Clusters/i18n/index.d.ts +1 -1
  149. package/dist/containers/Header/Header.js +16 -2
  150. package/dist/containers/Header/Header.js.map +1 -1
  151. package/dist/containers/Header/HeaderLeftControls.js +3 -1
  152. package/dist/containers/Header/HeaderLeftControls.js.map +1 -1
  153. package/dist/containers/Header/PDiskLeftControls.d.ts +1 -0
  154. package/dist/containers/Header/PDiskLeftControls.js +24 -0
  155. package/dist/containers/Header/PDiskLeftControls.js.map +1 -0
  156. package/dist/containers/Header/StorageGroupLeftControls.d.ts +1 -0
  157. package/dist/containers/Header/StorageGroupLeftControls.js +23 -0
  158. package/dist/containers/Header/StorageGroupLeftControls.js.map +1 -0
  159. package/dist/containers/Header/VDiskLeftControls.d.ts +1 -0
  160. package/dist/containers/Header/VDiskLeftControls.js +23 -0
  161. package/dist/containers/Header/VDiskLeftControls.js.map +1 -0
  162. package/dist/containers/Header/breadcrumbs.js +5 -2
  163. package/dist/containers/Header/breadcrumbs.js.map +1 -1
  164. package/dist/containers/Header/i18n/en.json +6 -1
  165. package/dist/containers/Header/i18n/index.d.ts +1 -1
  166. package/dist/containers/Nodes/NodesControls/NodesControls.js +1 -1
  167. package/dist/containers/Nodes/NodesControls/NodesControls.js.map +1 -1
  168. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +5 -3
  169. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -1
  170. package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js +4 -2
  171. package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js.map +1 -1
  172. package/dist/containers/Nodes/useDebouncedSearch.d.ts +2 -0
  173. package/dist/containers/Nodes/useDebouncedSearch.js +11 -0
  174. package/dist/containers/Nodes/useDebouncedSearch.js.map +1 -0
  175. package/dist/containers/Operations/constants.d.ts +1 -1
  176. package/dist/containers/PDiskPage/PDiskPage.js +30 -31
  177. package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
  178. package/dist/containers/PDiskPage/PDiskPage.scss +22 -11
  179. package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js +7 -7
  180. package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js.map +1 -1
  181. package/dist/containers/PDiskPage/PDiskStorageDetails.d.ts +6 -0
  182. package/dist/containers/PDiskPage/PDiskStorageDetails.js +28 -0
  183. package/dist/containers/PDiskPage/PDiskStorageDetails.js.map +1 -0
  184. package/dist/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
  185. package/dist/containers/PDiskPage/i18n/en.json +2 -0
  186. package/dist/containers/PDiskPage/i18n/index.d.ts +1 -1
  187. package/dist/containers/Storage/Disks/Disks.js +36 -9
  188. package/dist/containers/Storage/Disks/Disks.js.map +1 -1
  189. package/dist/containers/Storage/PDisk/PDisk.d.ts +2 -1
  190. package/dist/containers/Storage/PDisk/PDisk.js +2 -2
  191. package/dist/containers/Storage/PDisk/PDisk.js.map +1 -1
  192. package/dist/containers/Storage/PDisk/i18n/index.d.ts +1 -1
  193. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/columns.js +7 -2
  194. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/columns.js.map +1 -1
  195. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
  196. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.scss +14 -82
  197. package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +1 -1
  198. package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
  199. package/dist/containers/Storage/StorageGroupStateLabel.d.ts +4 -0
  200. package/dist/containers/Storage/StorageGroupStateLabel.js +9 -0
  201. package/dist/containers/Storage/StorageGroupStateLabel.js.map +1 -0
  202. package/dist/containers/Storage/useStorageQueryParams.d.ts +4 -4
  203. package/dist/containers/Storage/utils/getStorageGroupStateLabel.d.ts +2 -0
  204. package/dist/containers/Storage/utils/getStorageGroupStateLabel.js +35 -0
  205. package/dist/containers/Storage/utils/getStorageGroupStateLabel.js.map +1 -0
  206. package/dist/containers/StorageGroupPage/StorageGroupPage.js +20 -13
  207. package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
  208. package/dist/containers/StorageGroupPage/StorageGroupPage.scss +18 -12
  209. package/dist/containers/StorageGroupPage/i18n/en.json +2 -1
  210. package/dist/containers/StorageGroupPage/i18n/index.d.ts +1 -1
  211. package/dist/containers/Tenant/Diagnostics/Overview/Overview.d.ts +2 -1
  212. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +4 -1
  213. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js.map +1 -1
  214. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.d.ts +2 -1
  215. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.js +11 -2
  216. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.js.map +1 -1
  217. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.d.ts +2 -1
  218. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.js +9 -8
  219. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.js.map +1 -1
  220. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.d.ts +16 -1
  221. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.js +56 -19
  222. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.js.map +1 -1
  223. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/en.json +5 -1
  224. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/index.d.ts +1 -1
  225. package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/ManagePartitioningDialog/i18n/index.d.ts +1 -1
  226. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +5 -12
  227. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
  228. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/i18n/index.d.ts +1 -1
  229. package/dist/containers/Tenant/Diagnostics/TopQueries/columns/i18n/index.d.ts +1 -1
  230. package/dist/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
  231. package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.d.ts +3 -1
  232. package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.js +3 -3
  233. package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.js.map +1 -1
  234. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js +2 -2
  235. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js.map +1 -1
  236. package/dist/containers/Tenant/TenantDrawerHealthcheck.js +17 -2
  237. package/dist/containers/Tenant/TenantDrawerHealthcheck.js.map +1 -1
  238. package/dist/containers/Tenants/DatabaseDrawerHealthcheck.js +8 -1
  239. package/dist/containers/Tenants/DatabaseDrawerHealthcheck.js.map +1 -1
  240. package/dist/containers/VDiskPage/VDiskPage.js +33 -33
  241. package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
  242. package/dist/containers/VDiskPage/VDiskPage.scss +21 -8
  243. package/dist/containers/VDiskPage/VDiskStorageDetails.js +27 -29
  244. package/dist/containers/VDiskPage/VDiskStorageDetails.js.map +1 -1
  245. package/dist/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
  246. package/dist/containers/VDiskPage/i18n/en.json +3 -12
  247. package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
  248. package/dist/lib.d.ts +1 -1
  249. package/dist/lib.js.map +1 -1
  250. package/dist/store/configureStore.d.ts +2 -2
  251. package/dist/store/defaultStore.d.ts +1 -1
  252. package/dist/store/reducers/cluster/parseFields.js +1 -0
  253. package/dist/store/reducers/cluster/parseFields.js.map +1 -1
  254. package/dist/store/reducers/clusters/clusters.js +1 -0
  255. package/dist/store/reducers/clusters/clusters.js.map +1 -1
  256. package/dist/store/reducers/clusters/selectors.d.ts +1 -0
  257. package/dist/store/reducers/clusters/selectors.js +4 -1
  258. package/dist/store/reducers/clusters/selectors.js.map +1 -1
  259. package/dist/store/reducers/clusters/types.d.ts +2 -0
  260. package/dist/store/reducers/header/types.d.ts +1 -1
  261. package/dist/store/reducers/index.d.ts +2 -2
  262. package/dist/store/reducers/pdisk/types.d.ts +1 -0
  263. package/dist/store/reducers/pdisk/utils.js +6 -1
  264. package/dist/store/reducers/pdisk/utils.js.map +1 -1
  265. package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +2 -1
  266. package/dist/store/reducers/storage/prepareGroupsDisks.js +9 -19
  267. package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
  268. package/dist/store/reducers/storage/utils.js +14 -3
  269. package/dist/store/reducers/storage/utils.js.map +1 -1
  270. package/dist/store/reducers/streamingQuery/streamingQuery.js +2 -4
  271. package/dist/store/reducers/streamingQuery/streamingQuery.js.map +1 -1
  272. package/dist/store/reducers/vdisk/types.d.ts +1 -1
  273. package/dist/store/reducers/vdisk/utils.js +5 -5
  274. package/dist/store/reducers/vdisk/utils.js.map +1 -1
  275. package/dist/styles/mixins.scss +22 -0
  276. package/dist/types/api/meta.d.ts +1 -0
  277. package/dist/types/api/nodesList.d.ts +2 -0
  278. package/dist/types/api/pdisk.d.ts +4 -0
  279. package/dist/types/api/pdisk.js.map +1 -1
  280. package/dist/types/api/vdisk.d.ts +8 -0
  281. package/dist/types/api/vdisk.js +7 -0
  282. package/dist/types/api/vdisk.js.map +1 -1
  283. package/dist/types/store/nodesList.d.ts +4 -2
  284. package/dist/uiFactory/types.d.ts +5 -2
  285. package/dist/utils/bytesParsers/formatBytes.d.ts +3 -1
  286. package/dist/utils/bytesParsers/formatBytes.js +12 -3
  287. package/dist/utils/bytesParsers/formatBytes.js.map +1 -1
  288. package/dist/utils/disks/constants.d.ts +1 -0
  289. package/dist/utils/disks/constants.js +4 -0
  290. package/dist/utils/disks/constants.js.map +1 -1
  291. package/dist/utils/disks/diskInfo/getDiskLocationItems.d.ts +16 -0
  292. package/dist/utils/disks/diskInfo/getDiskLocationItems.js +30 -0
  293. package/dist/utils/disks/diskInfo/getDiskLocationItems.js.map +1 -0
  294. package/dist/utils/disks/diskInfo/i18n/en.json +9 -0
  295. package/dist/utils/disks/diskInfo/i18n/index.d.ts +2 -0
  296. package/dist/utils/disks/diskInfo/i18n/index.js +4 -0
  297. package/dist/utils/disks/diskInfo/i18n/index.js.map +1 -0
  298. package/dist/utils/disks/iconCalculators.d.ts +5 -0
  299. package/dist/utils/disks/iconCalculators.js +1 -1
  300. package/dist/utils/disks/iconCalculators.js.map +1 -1
  301. package/dist/utils/disks/prepareDisks.d.ts +6 -2
  302. package/dist/utils/disks/prepareDisks.js +22 -35
  303. package/dist/utils/disks/prepareDisks.js.map +1 -1
  304. package/dist/utils/disks/types.d.ts +9 -2
  305. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.d.ts +2 -0
  306. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js +6 -0
  307. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js.map +1 -0
  308. package/dist/utils/hooks/useNodeMetadata.d.ts +2 -0
  309. package/dist/utils/hooks/useNodeMetadata.js +15 -0
  310. package/dist/utils/hooks/useNodeMetadata.js.map +1 -0
  311. package/dist/utils/memory.d.ts +5 -0
  312. package/dist/utils/memory.js +9 -0
  313. package/dist/utils/memory.js.map +1 -0
  314. package/dist/utils/nodes.js +6 -2
  315. package/dist/utils/nodes.js.map +1 -1
  316. package/dist/utils/storageMetrics.d.ts +3 -2
  317. package/dist/utils/storageMetrics.js +30 -10
  318. package/dist/utils/storageMetrics.js.map +1 -1
  319. package/dist/utils/timeParsers/formatDuration.d.ts +4 -1
  320. package/dist/utils/timeParsers/formatDuration.js +16 -1
  321. package/dist/utils/timeParsers/formatDuration.js.map +1 -1
  322. package/dist/utils/timeParsers/i18n/en.json +5 -1
  323. package/dist/utils/timeParsers/i18n/index.d.ts +1 -1
  324. package/dist/utils/timeParsers/i18n/ru.json +5 -1
  325. package/package.json +2 -2
  326. package/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx +22 -3
  327. package/src/components/CopyableValue/CopyableValue.scss +16 -0
  328. package/src/components/CopyableValue/CopyableValue.tsx +40 -0
  329. package/src/components/CopyableValue/i18n/en.json +3 -0
  330. package/src/components/CopyableValue/i18n/index.ts +8 -0
  331. package/src/components/CriticalActionDialog/CriticalActionDialog.tsx +3 -0
  332. package/src/components/DiskCapacityInfo/DiskCapacityInfo.tsx +75 -129
  333. package/src/components/DiskCapacityInfo/i18n/en.json +0 -1
  334. package/src/components/DiskPopup/DiskPopup.scss +203 -0
  335. package/src/components/DiskPopup/DiskPopup.tsx +123 -0
  336. package/src/components/DiskPopup/i18n/en.json +3 -0
  337. package/src/components/DiskPopup/i18n/index.ts +5 -0
  338. package/src/components/DiskStatus/DiskStatus.scss +59 -0
  339. package/src/components/DiskStatus/DiskStatus.tsx +149 -0
  340. package/src/components/DiskStatus/i18n/en.json +6 -0
  341. package/src/components/DiskStatus/i18n/index.ts +5 -0
  342. package/src/components/EntityStatus/EntityStatus.scss +5 -0
  343. package/src/components/EntityStatus/EntityStatus.tsx +39 -6
  344. package/src/components/EvictVDiskButton/EvictVDiskButton.tsx +10 -2
  345. package/src/components/EvictVDiskButton/i18n/en.json +2 -2
  346. package/src/components/FullNodeViewer/FullNodeViewer.tsx +4 -9
  347. package/src/components/HoverPopup/HoverPopup.tsx +157 -34
  348. package/src/components/HoverPopup/usePopupPriority.ts +39 -0
  349. package/src/components/MemoryViewer/MemoryViewer.tsx +30 -17
  350. package/src/components/MemoryViewer/i18n/en.json +4 -3
  351. package/src/components/MemoryViewer/utils.ts +19 -12
  352. package/src/components/PDiskInfo/PDiskInfo.scss +15 -0
  353. package/src/components/PDiskInfo/PDiskInfo.tsx +51 -243
  354. package/src/components/PDiskInfo/PDiskLogSize.scss +12 -0
  355. package/src/components/PDiskInfo/PDiskLogSize.tsx +41 -0
  356. package/src/components/PDiskInfo/getPDiskDetails.tsx +37 -0
  357. package/src/components/PDiskInfo/i18n/en.json +69 -10
  358. package/src/components/PDiskInfo/statuses.ts +222 -0
  359. package/src/components/PDiskPopup/PDiskPopup.tsx +62 -147
  360. package/src/components/PDiskPopup/i18n/en.json +2 -12
  361. package/src/components/Search/Search.tsx +5 -2
  362. package/src/components/StorageGroupInfo/StorageGroupInfo.scss +21 -0
  363. package/src/components/StorageGroupInfo/StorageGroupInfo.tsx +119 -263
  364. package/src/components/StorageGroupInfo/i18n/en.json +1 -9
  365. package/src/components/VDisk/VDisk.tsx +34 -36
  366. package/src/components/VDisk/VDiskWithDonorsStack.tsx +2 -0
  367. package/src/components/VDisk/getFlagStatusText.ts +19 -0
  368. package/src/components/VDisk/i18n/en.json +1 -1
  369. package/src/components/VDiskInfo/VDiskInfo.scss +19 -3
  370. package/src/components/VDiskInfo/VDiskInfo.tsx +119 -341
  371. package/src/components/VDiskInfo/getVDiskDetails.tsx +63 -0
  372. package/src/components/VDiskInfo/i18n/en.json +5 -21
  373. package/src/components/VDiskPopup/VDiskPopup.scss +3 -10
  374. package/src/components/VDiskPopup/VDiskPopup.tsx +192 -424
  375. package/src/components/VDiskPopup/i18n/en.json +4 -22
  376. package/src/components/VDiskStatus/VDiskReplicationStatus.tsx +77 -0
  377. package/src/components/VDiskStatus/VDiskStatus.scss +36 -0
  378. package/src/components/VDiskStatus/VDiskStatus.tsx +49 -0
  379. package/src/components/VDiskStatus/i18n/en.json +33 -0
  380. package/src/components/VDiskStatus/i18n/index.ts +7 -0
  381. package/src/components/VDiskStatus/index.ts +7 -0
  382. package/src/components/VDiskStatus/statuses.ts +139 -0
  383. package/src/components/capacityMetricsColumns/i18n/en.json +4 -4
  384. package/src/components/nodesColumns/columns.tsx +26 -12
  385. package/src/containers/Cluster/ClusterDrawerHealthcheck.tsx +6 -0
  386. package/src/containers/Clusters/ClusterDrawerHealthcheck.tsx +1 -0
  387. package/src/containers/Clusters/Clusters.scss +24 -6
  388. package/src/containers/Clusters/Clusters.tsx +74 -5
  389. package/src/containers/Clusters/columns.tsx +36 -6
  390. package/src/containers/Clusters/i18n/en.json +6 -0
  391. package/src/containers/Header/Header.tsx +19 -3
  392. package/src/containers/Header/HeaderLeftControls.tsx +3 -1
  393. package/src/containers/Header/PDiskLeftControls.tsx +41 -0
  394. package/src/containers/Header/StorageGroupLeftControls.tsx +38 -0
  395. package/src/containers/Header/VDiskLeftControls.tsx +40 -0
  396. package/src/containers/Header/breadcrumbs.tsx +4 -2
  397. package/src/containers/Header/i18n/en.json +6 -1
  398. package/src/containers/Nodes/NodesControls/NodesControls.tsx +1 -0
  399. package/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +5 -3
  400. package/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx +4 -2
  401. package/src/containers/Nodes/useDebouncedSearch.ts +13 -0
  402. package/src/containers/PDiskPage/PDiskPage.scss +22 -11
  403. package/src/containers/PDiskPage/PDiskPage.tsx +88 -56
  404. package/src/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.tsx +16 -11
  405. package/src/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
  406. package/src/containers/PDiskPage/PDiskStorageDetails.tsx +64 -0
  407. package/src/containers/PDiskPage/i18n/en.json +2 -0
  408. package/src/containers/Storage/Disks/Disks.tsx +66 -12
  409. package/src/containers/Storage/PDisk/PDisk.tsx +3 -0
  410. package/src/containers/Storage/PaginatedStorageGroupsTable/columns/columns.tsx +24 -3
  411. package/src/containers/Storage/StorageExpertModePanel/components/SpaceLegend.scss +14 -82
  412. package/src/containers/Storage/StorageGroupStateLabel.tsx +22 -0
  413. package/src/containers/Storage/utils/getStorageGroupStateLabel.ts +49 -0
  414. package/src/containers/StorageGroupPage/StorageGroupPage.scss +18 -12
  415. package/src/containers/StorageGroupPage/StorageGroupPage.tsx +63 -26
  416. package/src/containers/StorageGroupPage/i18n/en.json +2 -1
  417. package/src/containers/Tenant/Diagnostics/Overview/Overview.tsx +5 -1
  418. package/src/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.tsx +12 -1
  419. package/src/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.tsx +11 -10
  420. package/src/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.tsx +83 -20
  421. package/src/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/en.json +5 -1
  422. package/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +5 -32
  423. package/src/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
  424. package/src/containers/Tenant/Healthcheck/components/HealthcheckDrawer.tsx +5 -2
  425. package/src/containers/Tenant/Healthcheck/components/HealthcheckIssue.tsx +18 -8
  426. package/src/containers/Tenant/TenantDrawerHealthcheck.tsx +24 -1
  427. package/src/containers/Tenants/DatabaseDrawerHealthcheck.tsx +10 -0
  428. package/src/containers/VDiskPage/VDiskPage.scss +21 -8
  429. package/src/containers/VDiskPage/VDiskPage.tsx +103 -64
  430. package/src/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
  431. package/src/containers/VDiskPage/VDiskStorageDetails.tsx +50 -158
  432. package/src/containers/VDiskPage/i18n/en.json +3 -14
  433. package/src/lib.ts +1 -0
  434. package/src/store/reducers/cluster/parseFields.ts +1 -0
  435. package/src/store/reducers/clusters/clusters.ts +1 -0
  436. package/src/store/reducers/clusters/selectors.ts +4 -0
  437. package/src/store/reducers/clusters/types.ts +3 -0
  438. package/src/store/reducers/header/types.ts +3 -1
  439. package/src/store/reducers/pdisk/types.ts +1 -0
  440. package/src/store/reducers/pdisk/utils.ts +6 -3
  441. package/src/store/reducers/storage/prepareGroupsDisks.ts +9 -22
  442. package/src/store/reducers/storage/utils.ts +17 -3
  443. package/src/store/reducers/streamingQuery/streamingQuery.ts +2 -4
  444. package/src/store/reducers/vdisk/types.ts +2 -1
  445. package/src/store/reducers/vdisk/utils.ts +4 -5
  446. package/src/styles/mixins.scss +22 -0
  447. package/src/types/api/meta.ts +1 -0
  448. package/src/types/api/nodesList.ts +3 -0
  449. package/src/types/api/pdisk.ts +4 -0
  450. package/src/types/api/vdisk.ts +9 -0
  451. package/src/types/store/nodesList.ts +7 -7
  452. package/src/uiFactory/types.ts +9 -2
  453. package/src/utils/bytesParsers/formatBytes.ts +23 -4
  454. package/src/utils/disks/constants.ts +5 -0
  455. package/src/utils/disks/diskInfo/getDiskLocationItems.ts +50 -0
  456. package/src/utils/disks/diskInfo/i18n/en.json +9 -0
  457. package/src/utils/disks/diskInfo/i18n/index.ts +5 -0
  458. package/src/utils/disks/iconCalculators.ts +1 -1
  459. package/src/utils/disks/prepareDisks.ts +21 -47
  460. package/src/utils/disks/types.ts +10 -2
  461. package/src/utils/hooks/useDatabaseHealthcheckAvailable.ts +9 -0
  462. package/src/utils/hooks/useNodeMetadata.ts +21 -0
  463. package/src/utils/memory.ts +16 -0
  464. package/src/utils/nodes.ts +7 -1
  465. package/src/utils/storageMetrics.ts +38 -14
  466. package/src/utils/timeParsers/formatDuration.ts +22 -1
  467. package/src/utils/timeParsers/i18n/en.json +5 -1
  468. package/src/utils/timeParsers/i18n/ru.json +5 -1
  469. package/dist/components/VDiskInfo/getVDiskCapacityColumns.d.ts +0 -11
  470. package/dist/components/VDiskInfo/getVDiskCapacityColumns.js +0 -52
  471. package/dist/components/VDiskInfo/getVDiskCapacityColumns.js.map +0 -1
  472. package/src/components/VDiskInfo/getVDiskCapacityColumns.tsx +0 -83
@@ -7,314 +7,164 @@ import {isNil} from 'lodash';
7
7
  import {useVDiskPagePath} from '../../routes';
8
8
  import {api} from '../../store/reducers/api';
9
9
  import {useBlobStorageCapacityMetricsEnabled} from '../../store/reducers/capabilities/hooks';
10
- import {selectNodesMap} from '../../store/reducers/nodesList';
11
- import {EFlag} from '../../types/api/enums';
12
10
  import type {TVDiskID} from '../../types/api/vdisk';
13
- import {EVDiskState} from '../../types/api/vdisk';
11
+ import type {NodeMetadata} from '../../types/store/nodesList';
14
12
  import {cn} from '../../utils/cn';
15
13
  import {BRAND_BUTTON_CLASS, EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
16
- import {formatDurationSeconds, parseVdiskId} from '../../utils/dataFormatters/dataFormatters';
14
+ import {parseVdiskId} from '../../utils/dataFormatters/dataFormatters';
17
15
  import {createVDiskDeveloperUILink, useHasDeveloperUi} from '../../utils/developerUI/developerUI';
18
- import {getStateSeverity} from '../../utils/disks/calculateVDiskSeverity';
19
- import {
20
- DISK_COLOR_STATE_TO_NUMERIC_SEVERITY,
21
- NUMERIC_SEVERITY_TO_LABEL_VIEW,
22
- VDISK_LABEL_CONFIG,
23
- } from '../../utils/disks/constants';
24
16
  import {isFullVDiskData} from '../../utils/disks/helpers';
25
17
  import type {PreparedVDisk, UnavailableDonor} from '../../utils/disks/types';
26
- import {useTypedDispatch, useTypedSelector} from '../../utils/hooks';
27
- import {useDatabaseFromQuery} from '../../utils/hooks/useDatabaseFromQuery';
18
+ import {useTypedDispatch} from '../../utils/hooks';
28
19
  import {useIsViewerUser} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
29
- import {bytesToGB, bytesToSpeed} from '../../utils/utils';
20
+ import {useNodeMetadata} from '../../utils/hooks/useNodeMetadata';
21
+ import {getVDiskCapacityItems} from '../DiskCapacityInfo/DiskCapacityInfo';
30
22
  import {
31
- getVDiskCapacityInfoItems,
32
- toDefinitionListItems,
33
- } from '../DiskCapacityInfo/DiskCapacityInfo';
23
+ DiskPopup,
24
+ DiskPopupHeader,
25
+ DiskPopupLocation,
26
+ DiskPopupPanel,
27
+ DiskPopupText,
28
+ } from '../DiskPopup/DiskPopup';
34
29
  import {EvictVDiskButton, isAllVdiskParamsDefined} from '../EvictVDiskButton/EvictVDiskButton';
35
- import {InternalLink} from '../InternalLink';
36
30
  import {InternalLinkButton} from '../InternalLinkButton';
37
31
  import {LinkWithIcon} from '../LinkWithIcon/LinkWithIcon';
32
+ import {PDiskPopupContent} from '../PDiskPopup/PDiskPopup';
33
+ import {
34
+ getVDiskIdentityItems,
35
+ getVDiskLocationItems,
36
+ getVDiskThroughputItems,
37
+ } from '../VDiskInfo/getVDiskDetails';
38
+ import {vDiskInfoKeyset} from '../VDiskInfo/i18n';
38
39
  import {
39
- buildPDiskFooter,
40
- preparePDiskData,
41
- preparePDiskHeaderLabels,
42
- } from '../PDiskPopup/PDiskPopup';
43
- import {StatusIcon} from '../StatusIcon/StatusIcon';
44
- import type {
45
- YDBDefinitionListHeaderLabel,
46
- YDBDefinitionListItem,
47
- } from '../YDBDefinitionList/YDBDefinitionList';
40
+ VDiskCompactionRankLabel,
41
+ VDiskDonorLabel,
42
+ VDiskFrontQueuesLabel,
43
+ VDiskReplicationStatus,
44
+ VDiskStateLabel,
45
+ } from '../VDiskStatus';
46
+ import type {YDBDefinitionListItem} from '../YDBDefinitionList/YDBDefinitionList';
48
47
  import {YDBDefinitionList} from '../YDBDefinitionList/YDBDefinitionList';
49
48
 
50
49
  import {vDiskPopupKeyset} from './i18n';
51
50
 
52
51
  import './VDiskPopup.scss';
53
52
 
54
- const b = cn('vdisk-storage-popup');
55
-
56
- const prepareUnavailableVDiskData = (data: UnavailableDonor) => {
57
- const {NodeId, PDiskId, VSlotId, StoragePoolName} = data;
58
-
59
- const vdiskData: YDBDefinitionListItem[] = [];
60
-
61
- if (StoragePoolName) {
62
- vdiskData.push({
63
- name: vDiskPopupKeyset('label_storage-pool'),
64
- content: StoragePoolName,
65
- copyText: StoragePoolName,
66
- });
67
- }
53
+ const b = cn('ydb-vdisk-popup');
68
54
 
69
- vdiskData.push(
70
- {
71
- name: vDiskPopupKeyset('label_node-id'),
72
- content: NodeId ?? EMPTY_DATA_PLACEHOLDER,
73
- copyText: NodeId,
74
- },
75
- {
76
- name: vDiskPopupKeyset('label_pdisk-id'),
77
- content: PDiskId ?? EMPTY_DATA_PLACEHOLDER,
78
- copyText: PDiskId,
79
- },
80
- {
81
- name: vDiskPopupKeyset('label_vslot-id'),
82
- content: VSlotId ?? EMPTY_DATA_PLACEHOLDER,
83
- copyText: VSlotId,
84
- },
85
- );
86
-
87
- return vdiskData;
88
- };
89
-
90
- const buildUnavailableVDiskFooter = (
55
+ function buildUnavailableVDiskFooter(
91
56
  data: UnavailableDonor,
92
- withDeveloperUILink?: boolean,
93
- ): React.ReactNode | null => {
94
- const {NodeId, PDiskId, VSlotId} = data;
95
-
96
- if (!withDeveloperUILink || isNil(NodeId) || isNil(PDiskId) || isNil(VSlotId)) {
57
+ withDeveloperUILink: boolean,
58
+ ): React.ReactNode | null {
59
+ const {NodeId, PDiskId, VDiskSlotId} = data;
60
+ if (!withDeveloperUILink || isNil(NodeId) || isNil(PDiskId) || isNil(VDiskSlotId)) {
97
61
  return null;
98
62
  }
99
-
100
63
  const vDiskInternalViewerPath = createVDiskDeveloperUILink({
101
64
  nodeId: NodeId,
102
65
  pDiskId: PDiskId,
103
- vDiskSlotId: VSlotId,
66
+ vDiskSlotId: VDiskSlotId,
104
67
  });
105
-
106
68
  return (
107
- <div className={b('links')}>
108
- <LinkWithIcon
109
- title={vDiskPopupKeyset('action_open-in-developer-ui')}
110
- url={vDiskInternalViewerPath}
111
- icon={Wrench}
112
- hideEndIcon
113
- />
114
- </div>
69
+ <LinkWithIcon
70
+ title={vDiskPopupKeyset('action_open-in-developer-ui')}
71
+ url={vDiskInternalViewerPath}
72
+ icon={Wrench}
73
+ hideEndIcon
74
+ />
115
75
  );
116
- };
117
-
118
- interface VDiskLinkProps {
119
- nodeId?: string | number;
120
- stringifiedId?: string;
121
- getVDiskLinkFn?: (data: {
122
- nodeId: string | number | undefined;
123
- vDiskId: string | undefined;
124
- }) => string | undefined;
125
76
  }
126
77
 
127
- const VDiskLink = ({nodeId, stringifiedId, getVDiskLinkFn}: VDiskLinkProps) => {
128
- if (isNil(stringifiedId)) {
129
- return <span>{EMPTY_DATA_PLACEHOLDER}</span>;
130
- }
131
-
132
- const path = getVDiskLinkFn?.({nodeId, vDiskId: stringifiedId});
133
-
134
- return path ? (
135
- <InternalLink to={path}>
136
- {vDiskPopupKeyset('label_vdisk')} {stringifiedId}
137
- </InternalLink>
138
- ) : (
139
- <span>{stringifiedId}</span>
140
- );
141
- };
142
-
143
- // eslint-disable-next-line complexity
144
- export const prepareVDiskData = (
78
+ function getRuntimeItems(
145
79
  data: PreparedVDisk,
146
- getVDiskLinkFn:
147
- | ((data: {
148
- nodeId: string | number | undefined;
149
- vDiskId: string | undefined;
150
- }) => string | undefined)
151
- | undefined,
152
- capacityMetricsEnabled = false,
153
- ) => {
154
- const {
155
- VDiskState,
156
- SatisfactionRank,
157
- DiskSpace,
158
- FrontQueues,
159
- Replicated,
160
- ReplicationProgress,
161
- ReplicationSecondsRemaining,
162
- UnsyncedVDisks,
163
- AllocatedSize,
164
- AvailableSize,
165
- ReadThroughput,
166
- WriteThroughput,
167
- StoragePoolName,
168
- Donors,
169
- DonorMode,
170
- Recipient,
171
- } = data;
172
-
173
- const vdiskData: YDBDefinitionListItem[] = [];
174
-
175
- if (StoragePoolName) {
176
- vdiskData.push({
177
- name: vDiskPopupKeyset('label_storage-pool'),
178
- content: StoragePoolName,
179
- copyText: StoragePoolName,
180
- });
181
- }
182
-
183
- // Show donors if they exist
184
- if (Donors?.length) {
185
- vdiskData.push({
186
- name: vDiskPopupKeyset('label_donor'),
80
+ withUnreadableBlobs: boolean,
81
+ ): YDBDefinitionListItem[] {
82
+ const items: YDBDefinitionListItem[] = [
83
+ {
84
+ name: vDiskPopupKeyset('label_front-queues'),
85
+ content: <VDiskFrontQueuesLabel flag={data.FrontQueues} />,
86
+ },
87
+ {
88
+ name: vDiskPopupKeyset('label_compaction'),
187
89
  content: (
188
- <Flex direction="column" gap={1}>
189
- {Donors.map((donor) => (
190
- <VDiskLink
191
- key={donor.StringifiedId}
192
- nodeId={donor.NodeId}
193
- stringifiedId={donor.StringifiedId}
194
- getVDiskLinkFn={getVDiskLinkFn}
195
- />
196
- ))}
90
+ <Flex
91
+ direction="column"
92
+ gap={1}
93
+ alignItems="flex-start"
94
+ className={b('compaction')}
95
+ >
96
+ <VDiskCompactionRankLabel
97
+ flag={data.SatisfactionRank?.FreshRank?.Flag}
98
+ rank="fresh"
99
+ />
100
+ <VDiskCompactionRankLabel
101
+ flag={data.SatisfactionRank?.LevelRank?.Flag}
102
+ rank="level"
103
+ />
197
104
  </Flex>
198
105
  ),
106
+ },
107
+ ];
108
+ items.push(...getVDiskThroughputItems(data));
109
+ if (withUnreadableBlobs) {
110
+ items.push({
111
+ name: vDiskInfoKeyset('has-unreadable-blobs'),
112
+ content: isNil(data.HasUnreadableBlobs)
113
+ ? EMPTY_DATA_PLACEHOLDER
114
+ : vDiskInfoKeyset(data.HasUnreadableBlobs ? 'yes' : 'no'),
199
115
  });
200
116
  }
117
+ return items;
118
+ }
201
119
 
202
- if (DonorMode && Recipient) {
203
- vdiskData.push({
204
- name: vDiskPopupKeyset('label_recipient'),
205
- content: (
206
- <VDiskLink
207
- nodeId={Recipient.NodeId}
208
- stringifiedId={Recipient.StringifiedId}
209
- getVDiskLinkFn={getVDiskLinkFn}
210
- />
211
- ),
212
- });
213
- }
214
-
215
- if (SatisfactionRank && SatisfactionRank.FreshRank?.Flag !== EFlag.Green) {
216
- vdiskData.push({
217
- name: vDiskPopupKeyset('label_fresh'),
218
- content: SatisfactionRank.FreshRank?.Flag,
219
- });
220
- }
221
-
222
- if (SatisfactionRank && SatisfactionRank.LevelRank?.Flag !== EFlag.Green) {
223
- vdiskData.push({
224
- name: vDiskPopupKeyset('label_level'),
225
- content: SatisfactionRank.LevelRank?.Flag,
226
- });
227
- }
228
-
229
- if (SatisfactionRank && SatisfactionRank.FreshRank?.RankPercent) {
230
- vdiskData.push({
231
- name: vDiskPopupKeyset('label_fresh'),
232
- content: SatisfactionRank.FreshRank.RankPercent,
233
- });
234
- }
235
-
236
- if (SatisfactionRank && SatisfactionRank.LevelRank?.RankPercent) {
237
- vdiskData.push({
238
- name: vDiskPopupKeyset('label_level'),
239
- content: SatisfactionRank.LevelRank.RankPercent,
240
- });
241
- }
242
-
243
- if (capacityMetricsEnabled) {
244
- vdiskData.push(
245
- ...toDefinitionListItems(getVDiskCapacityInfoItems(data, {withRawUsage: false})),
246
- );
247
- } else if (DiskSpace) {
248
- vdiskData.push({
249
- name: vDiskPopupKeyset('label_space'),
250
- content: <StatusIcon mode="icons" status={DiskSpace} />,
251
- });
252
- }
120
+ function getStorageItems(
121
+ data: PreparedVDisk,
122
+ capacityMetricsEnabled: boolean,
123
+ ): YDBDefinitionListItem[] {
124
+ const items: YDBDefinitionListItem[] = [
125
+ {
126
+ name: vDiskPopupKeyset('label_storage-pool'),
127
+ content: <DiskPopupText value={data.StoragePoolName} />,
128
+ copyText: data.StoragePoolName,
129
+ },
130
+ ];
131
+ return isFullVDiskData(data)
132
+ ? [...items, ...getVDiskCapacityItems(data, {capacityMetricsEnabled})]
133
+ : items;
134
+ }
253
135
 
254
- if (FrontQueues) {
255
- vdiskData.push({
256
- name: vDiskPopupKeyset('label_front-queues'),
257
- content: <StatusIcon mode="icons" status={FrontQueues} />,
258
- });
136
+ function getLocationItems(data: PreparedVDisk, nodeData: NodeMetadata, withPDiskPanel: boolean) {
137
+ const items = getVDiskLocationItems(data, nodeData);
138
+ if (!withPDiskPanel) {
139
+ return items;
259
140
  }
141
+ return items.filter(({id}) => id !== 'pdisk-id' && id !== 'pdisk-path');
142
+ }
260
143
 
261
- if (Replicated === false && VDiskState === EVDiskState.OK && !DonorMode) {
262
- vdiskData.push({name: vDiskPopupKeyset('label_replicated'), content: 'NO'});
263
-
264
- // Only show replication progress and time remaining when disk is not replicated and state is OK
265
- if (!isNil(ReplicationProgress) && !isNaN(Number(ReplicationProgress))) {
266
- const progressPercent = Math.round(ReplicationProgress * 100);
267
- vdiskData.push({
268
- name: vDiskPopupKeyset('label_progress'),
269
- content: `${progressPercent}%`,
270
- });
271
- }
272
-
273
- if (!isNil(ReplicationSecondsRemaining)) {
274
- const timeRemaining = formatDurationSeconds(ReplicationSecondsRemaining);
275
- if (timeRemaining) {
276
- vdiskData.push({
277
- name: vDiskPopupKeyset('label_remaining'),
278
- content: timeRemaining,
279
- });
144
+ function DiskHeader({
145
+ data = {},
146
+ donorMode,
147
+ withPDiskType = true,
148
+ }: {
149
+ data?: PreparedVDisk;
150
+ donorMode?: boolean;
151
+ withPDiskType?: boolean;
152
+ }) {
153
+ return (
154
+ <DiskPopupHeader
155
+ title={vDiskPopupKeyset('label_vdisk')}
156
+ id={data.StringifiedId}
157
+ type={withPDiskType ? (data.PDiskType ?? data.PDisk?.Type) : undefined}
158
+ statuses={
159
+ <React.Fragment>
160
+ <VDiskStateLabel state={data.VDiskState} size="xs" />
161
+ <VDiskReplicationStatus data={data} size="xs" />
162
+ <VDiskDonorLabel donorMode={donorMode} size="xs" />
163
+ </React.Fragment>
280
164
  }
281
- }
282
- }
283
-
284
- if (UnsyncedVDisks) {
285
- vdiskData.push({name: vDiskPopupKeyset('label_unsync-vdisks'), content: UnsyncedVDisks});
286
- }
287
-
288
- if (!capacityMetricsEnabled && Number(AllocatedSize)) {
289
- vdiskData.push({
290
- name: vDiskPopupKeyset('label_allocated'),
291
- content: bytesToGB(AllocatedSize),
292
- });
293
- }
294
-
295
- if (!capacityMetricsEnabled && Number(AvailableSize)) {
296
- vdiskData.push({
297
- name: vDiskPopupKeyset('label_available'),
298
- content: bytesToGB(AvailableSize),
299
- });
300
- }
301
-
302
- if (Number(ReadThroughput)) {
303
- vdiskData.push({
304
- name: vDiskPopupKeyset('label_read'),
305
- content: bytesToSpeed(ReadThroughput),
306
- });
307
- }
308
-
309
- if (Number(WriteThroughput)) {
310
- vdiskData.push({
311
- name: vDiskPopupKeyset('label_write'),
312
- content: bytesToSpeed(WriteThroughput),
313
- });
314
- }
315
-
316
- return vdiskData;
317
- };
165
+ />
166
+ );
167
+ }
318
168
 
319
169
  /**
320
170
  * Resolve VDiskId from PreparedVDisk data.
@@ -329,44 +179,33 @@ const resolveVDiskId = (data: PreparedVDisk): Required<TVDiskID> | undefined =>
329
179
  return isAllVdiskParamsDefined(parsed) ? parsed : undefined;
330
180
  };
331
181
 
332
- const buildVDiskFooter = (
182
+ function buildVDiskFooter(
333
183
  data: PreparedVDisk,
334
- withDeveloperUILink?: boolean,
335
- getVDiskLinkFn?: (data: {
336
- nodeId: string | number;
337
- vDiskId: string | undefined;
338
- }) => string | undefined,
339
- onSuccess?: () => void,
340
- ): React.ReactNode | null => {
184
+ withDeveloperUILink: boolean,
185
+ getVDiskLinkFn: ReturnType<typeof useVDiskPagePath>,
186
+ onSuccess: (isDialogOpen: boolean) => void,
187
+ withActions: boolean,
188
+ onDialogOpen?: () => VoidFunction,
189
+ ): React.ReactNode | null {
341
190
  const {NodeId, PDiskId, VDiskSlotId, StringifiedId, DonorMode} = data;
342
-
343
191
  const vDiskInternalViewerPath =
344
- withDeveloperUILink && !isNil(VDiskSlotId) && !isNil(NodeId) && !isNil(PDiskId)
192
+ withDeveloperUILink && !isNil(NodeId) && !isNil(PDiskId) && !isNil(VDiskSlotId)
345
193
  ? createVDiskDeveloperUILink({
346
194
  nodeId: NodeId,
347
195
  pDiskId: PDiskId,
348
196
  vDiskSlotId: VDiskSlotId,
349
197
  })
350
198
  : undefined;
351
-
352
199
  const vDiskPagePath =
353
- withDeveloperUILink && !isNil(NodeId) && !isNil(StringifiedId)
354
- ? getVDiskLinkFn?.({
355
- nodeId: NodeId,
356
- vDiskId: StringifiedId,
357
- })
200
+ withActions && withDeveloperUILink && !isNil(NodeId) && StringifiedId
201
+ ? getVDiskLinkFn({nodeId: NodeId, vDiskId: StringifiedId})
358
202
  : undefined;
359
-
360
- const hasLinks = vDiskPagePath || vDiskInternalViewerPath;
361
-
362
- const resolvedVDiskId = resolveVDiskId(data);
363
-
364
- if (!hasLinks && !resolvedVDiskId) {
203
+ const resolvedVDiskId = withActions ? resolveVDiskId(data) : undefined;
204
+ if (!vDiskInternalViewerPath && !vDiskPagePath && !resolvedVDiskId) {
365
205
  return null;
366
206
  }
367
-
368
207
  return (
369
- <Flex direction="column" gap={5}>
208
+ <React.Fragment>
370
209
  {vDiskInternalViewerPath && (
371
210
  <LinkWithIcon
372
211
  title={vDiskPopupKeyset('action_open-in-developer-ui')}
@@ -376,7 +215,7 @@ const buildVDiskFooter = (
376
215
  />
377
216
  )}
378
217
  {(vDiskPagePath || resolvedVDiskId) && (
379
- <Flex wrap="wrap" gap={2}>
218
+ <Flex gap={2} wrap="wrap" className={b('actions')}>
380
219
  {vDiskPagePath && (
381
220
  <InternalLinkButton
382
221
  href={vDiskPagePath}
@@ -392,158 +231,87 @@ const buildVDiskFooter = (
392
231
  vDiskId={resolvedVDiskId}
393
232
  donorMode={DonorMode}
394
233
  onSuccess={onSuccess}
234
+ onDialogOpen={onDialogOpen}
395
235
  />
396
236
  )}
397
237
  </Flex>
398
238
  )}
399
- </Flex>
239
+ </React.Fragment>
400
240
  );
401
- };
402
-
403
- const prepareHeaderLabels = (data: PreparedVDisk): YDBDefinitionListHeaderLabel[] => {
404
- const labels: YDBDefinitionListHeaderLabel[] = [];
405
-
406
- const {VDiskState, DonorMode, Severity} = data;
407
-
408
- const isReplicatingColor = Severity === DISK_COLOR_STATE_TO_NUMERIC_SEVERITY.Blue;
409
-
410
- if (DonorMode) {
411
- const donorConfig = VDISK_LABEL_CONFIG.donor;
412
-
413
- labels.push({
414
- id: 'donor',
415
- value: vDiskPopupKeyset('label_donor'),
416
- theme: donorConfig.theme,
417
- icon: donorConfig.icon,
418
- });
419
- } else if (isReplicatingColor) {
420
- const replicaConfig = VDISK_LABEL_CONFIG.replica;
421
-
422
- labels.push({
423
- id: 'replication',
424
- value: vDiskPopupKeyset('label_replication'),
425
- theme: replicaConfig.theme,
426
- icon: replicaConfig.icon,
427
- });
428
- }
429
-
430
- const severity = getStateSeverity(VDiskState);
431
-
432
- const {theme: stateTheme, icon: stateIcon} = NUMERIC_SEVERITY_TO_LABEL_VIEW[severity];
433
-
434
- const value = VDiskState ?? vDiskPopupKeyset('context_not-available');
435
-
436
- labels.push({
437
- id: 'state',
438
- value,
439
- theme: stateTheme,
440
- icon: stateIcon,
441
- });
442
-
443
- return labels;
444
- };
241
+ }
445
242
 
446
243
  interface VDiskPopupProps {
447
- data: PreparedVDisk | UnavailableDonor;
244
+ data: PreparedVDisk;
245
+ nodeData?: NodeMetadata;
448
246
  onClose?: VoidFunction;
247
+ onDialogOpen?: () => VoidFunction;
248
+ view?: 'default' | 'space-distribution';
449
249
  }
450
250
 
451
- export const VDiskPopup = ({data, onClose}: VDiskPopupProps) => {
251
+ export function VDiskPopup({
252
+ data,
253
+ nodeData: parentNodeData,
254
+ onClose,
255
+ onDialogOpen,
256
+ view = 'default',
257
+ }: VDiskPopupProps) {
452
258
  const dispatch = useTypedDispatch();
453
- const isFullData = isFullVDiskData(data);
259
+ const nodeData = useNodeMetadata(data.NodeId, parentNodeData);
454
260
  const isViewerUser = useIsViewerUser();
455
261
  const capacityMetricsEnabled = useBlobStorageCapacityMetricsEnabled();
456
-
457
262
  const hasDeveloperUi = useHasDeveloperUi();
458
263
  const getVDiskLink = useVDiskPagePath();
459
-
460
- const database = useDatabaseFromQuery();
461
-
462
- const vdiskInfo = React.useMemo(
463
- () =>
464
- isFullData
465
- ? prepareVDiskData(data, getVDiskLink, capacityMetricsEnabled)
466
- : prepareUnavailableVDiskData(data),
467
- [data, isFullData, getVDiskLink, capacityMetricsEnabled],
468
- );
469
-
470
- const handleAfterEvictVDisk = React.useCallback(() => {
471
- // Use StringifiedId directly — it matches the cache key used by getVDiskData
472
- const vDiskId = isFullData ? data.StringifiedId : undefined;
264
+ const fullData = isFullVDiskData(data) ? data : undefined;
265
+ const vdiskId = fullData?.StringifiedId;
266
+ const handleAfterEvictVDisk = (isDialogOpen: boolean) => {
473
267
  dispatch(
474
268
  api.util.invalidateTags([
475
269
  'TableData',
476
270
  'StorageData',
477
- {
478
- type: 'VDiskData',
479
- id: vDiskId,
480
- },
271
+ 'PDiskData',
272
+ {type: 'VDiskData', id: vdiskId},
481
273
  ]),
482
274
  );
483
- onClose?.();
484
- }, [dispatch, data, isFullData, onClose]);
485
-
486
- const vdiskHeaderLabels: YDBDefinitionListHeaderLabel[] = React.useMemo(
487
- () => (isFullData ? prepareHeaderLabels(data) : []),
488
- [data, isFullData],
489
- );
490
-
491
- const vdiskFooter = React.useMemo(
492
- () =>
493
- isFullData
494
- ? buildVDiskFooter(data, hasDeveloperUi, getVDiskLink, handleAfterEvictVDisk)
495
- : buildUnavailableVDiskFooter(data, hasDeveloperUi),
496
- [data, isFullData, hasDeveloperUi, getVDiskLink, handleAfterEvictVDisk],
497
- );
498
-
499
- const nodesMap = useTypedSelector((state) => selectNodesMap(state, database));
500
- const nodeData = isNil(data.NodeId) ? undefined : nodesMap?.get(data.NodeId);
501
- const pdiskInfo = React.useMemo(
502
- () =>
503
- isFullData &&
504
- data.PDisk &&
505
- preparePDiskData(data.PDisk, nodeData, capacityMetricsEnabled),
506
- [data, nodeData, isFullData, capacityMetricsEnabled],
507
- );
508
- const pdiskHeaderLabels = React.useMemo(
509
- () => (isFullData && data.PDisk ? preparePDiskHeaderLabels(data.PDisk) : []),
510
- [data, isFullData],
511
- );
512
-
513
- const pdiskFooter = React.useMemo(
514
- () => (isFullData && data.PDisk ? buildPDiskFooter(data.PDisk, hasDeveloperUi) : null),
515
- [data, isFullData, hasDeveloperUi],
516
- );
517
-
518
- const vdiskId = isFullData ? data.StringifiedId : undefined;
519
- const pdiskId = isFullData ? data.PDisk?.StringifiedId : undefined;
520
- const nameMaxWidth = isFullData && capacityMetricsEnabled ? 220 : 100;
521
-
275
+ if (isDialogOpen) {
276
+ onClose?.();
277
+ }
278
+ };
279
+ const isSpaceDistribution = view === 'space-distribution';
280
+ const runtimeItems = fullData ? getRuntimeItems(fullData, isSpaceDistribution) : [];
281
+ const identityItems = isSpaceDistribution ? getVDiskIdentityItems(fullData) : [];
282
+ const storageItems = getStorageItems(data, capacityMetricsEnabled);
283
+ const pdisk = !isSpaceDistribution && isViewerUser ? fullData?.PDisk : undefined;
284
+ const vdiskFooter = isFullVDiskData(data)
285
+ ? buildVDiskFooter(
286
+ data,
287
+ hasDeveloperUi,
288
+ getVDiskLink,
289
+ handleAfterEvictVDisk,
290
+ !isSpaceDistribution,
291
+ onDialogOpen,
292
+ )
293
+ : buildUnavailableVDiskFooter(data, hasDeveloperUi);
294
+ const locationItems = getLocationItems(data, nodeData, Boolean(pdisk));
522
295
  return (
523
- <div className={b()}>
524
- <YDBDefinitionList
525
- compact
526
- title="VDisk"
527
- titleSuffix={{title: vdiskId ?? EMPTY_DATA_PLACEHOLDER, copyText: vdiskId}}
528
- items={vdiskInfo}
529
- headerLabels={vdiskHeaderLabels}
530
- nameMaxWidth={nameMaxWidth}
531
- footer={vdiskFooter}
532
- />
533
- {pdiskInfo && isViewerUser && (
534
- <React.Fragment>
535
- <Divider className={b('custom-divider')} />
536
- <YDBDefinitionList
537
- compact
538
- title="PDisk"
539
- titleSuffix={{title: pdiskId ?? EMPTY_DATA_PLACEHOLDER, copyText: pdiskId}}
540
- items={pdiskInfo}
541
- headerLabels={pdiskHeaderLabels}
542
- footer={pdiskFooter}
543
- nameMaxWidth={nameMaxWidth}
544
- />
545
- </React.Fragment>
546
- )}
547
- </div>
296
+ <DiskPopup combined={Boolean(pdisk)} className={b(null, 'vdisk-storage-popup')}>
297
+ {pdisk && <PDiskPopupContent data={pdisk} nodeData={nodeData} />}
298
+ <DiskPopupPanel footer={vdiskFooter}>
299
+ <DiskHeader data={fullData} donorMode={data.DonorMode} withPDiskType={!pdisk} />
300
+ <DiskPopupLocation items={locationItems} />
301
+ {runtimeItems.length > 0 && (
302
+ <YDBDefinitionList items={runtimeItems} nameMaxWidth={150} />
303
+ )}
304
+ {runtimeItems.length > 0 && storageItems.length > 0 && <Divider />}
305
+ {storageItems.length > 0 && (
306
+ <YDBDefinitionList items={storageItems} nameMaxWidth={150} />
307
+ )}
308
+ {identityItems.length > 0 && (
309
+ <React.Fragment>
310
+ <Divider />
311
+ <YDBDefinitionList items={identityItems} nameMaxWidth={150} />
312
+ </React.Fragment>
313
+ )}
314
+ </DiskPopupPanel>
315
+ </DiskPopup>
548
316
  );
549
- };
317
+ }