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
@@ -31,6 +31,7 @@ import {getInfoTabLinks} from '../../../../utils/additionalProps';
31
31
  import {TENANT_DEFAULT_TITLE} from '../../../../utils/constants';
32
32
  import {useAutoRefreshInterval, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
33
33
  import {useClusterNameFromQuery} from '../../../../utils/hooks/useDatabaseFromQuery';
34
+ import {useDatabaseHealthcheckAvailable} from '../../../../utils/hooks/useDatabaseHealthcheckAvailable';
34
35
  import {useDatabasesV2} from '../../../../utils/hooks/useDatabasesV2';
35
36
  import {canShowTenantMonitoringTab} from '../../../../utils/monitoringVisibility';
36
37
  import {useTenantPage} from '../../TenantNavigation/useTenantNavigation';
@@ -64,18 +65,6 @@ function isTenantLoading(isFetching: boolean, tenant: TTenant | undefined, error
64
65
  return isFetching && tenant === undefined && !error;
65
66
  }
66
67
 
67
- function shouldSkipHealthcheck({
68
- isServerless,
69
- isV2NavigationEnabled,
70
- tenant,
71
- }: {
72
- isServerless: boolean;
73
- isV2NavigationEnabled: boolean;
74
- tenant?: TTenant;
75
- }) {
76
- return isServerless || isV2NavigationEnabled || tenant === undefined;
77
- }
78
-
79
68
  function getDatabaseStatus(overall?: EFlag, selfCheckResult?: SelfCheckResult) {
80
69
  const healthcheckStatus =
81
70
  selfCheckResult === undefined ? undefined : selfCheckResultToHcStatus[selfCheckResult];
@@ -128,20 +117,6 @@ function renderTenantError(error: unknown, defaultMessage: string) {
128
117
  return error ? <ResponseError error={error} defaultMessage={defaultMessage} /> : null;
129
118
  }
130
119
 
131
- function renderHealthcheckPreview({
132
- database,
133
- isServerless,
134
- isV2NavigationEnabled,
135
- }: {
136
- database: string;
137
- isServerless: boolean;
138
- isV2NavigationEnabled: boolean;
139
- }) {
140
- return !isServerless && !isV2NavigationEnabled ? (
141
- <HealthcheckPreview database={database} />
142
- ) : null;
143
- }
144
-
145
120
  function renderOverviewHead({
146
121
  databaseStatus,
147
122
  handleOpenMonitoring,
@@ -308,6 +283,8 @@ export function TenantOverview({
308
283
  const tenantLoading = isTenantLoading(isFetching, tenant, error);
309
284
  const {Name, Type, Overall, CoresTotal} = tenant || {};
310
285
  const isServerless = Type === 'Serverless';
286
+ const healthcheckAvailable = useDatabaseHealthcheckAvailable(Type);
287
+ const showHealthcheck = healthcheckAvailable && !isV2NavigationEnabled;
311
288
 
312
289
  // Use healthcheck self_check_result as the database status color when available;
313
290
  // fall back to tenantinfo.Overall (e.g. for Serverless databases where healthcheck is skipped).
@@ -317,7 +294,7 @@ export function TenantOverview({
317
294
  const {currentData: healthcheckData} = healthcheckApi.useGetHealthcheckInfoQuery(
318
295
  {database, clusterName},
319
296
  {
320
- skip: shouldSkipHealthcheck({isServerless, isV2NavigationEnabled, tenant}),
297
+ skip: !showHealthcheck || tenant === undefined,
321
298
  },
322
299
  );
323
300
  const databaseStatus = getDatabaseStatus(Overall, healthcheckData?.self_check_result);
@@ -404,11 +381,7 @@ export function TenantOverview({
404
381
  tenantType,
405
382
  })}
406
383
  <Flex direction="column" gap={4}>
407
- {renderHealthcheckPreview({
408
- database,
409
- isServerless,
410
- isV2NavigationEnabled,
411
- })}
384
+ {showHealthcheck && <HealthcheckPreview database={database} />}
412
385
  <QueriesActivityBar database={database} />
413
386
  <MetricsTabs
414
387
  metrics={metricOverview}
@@ -93,7 +93,12 @@
93
93
  }
94
94
  }
95
95
  &__issue-status {
96
- text-align: start;
96
+ display: flex;
97
+ flex-shrink: 0;
98
+ }
99
+ &__issue-title {
100
+ min-width: 0;
101
+ overflow-wrap: anywhere;
97
102
  }
98
103
  &__issue-content {
99
104
  --g-definition-list-item-gap: var(--g-spacing-3);
@@ -9,10 +9,12 @@ import {EnableFullscreenButton} from '../../../../components/EnableFullscreenBut
9
9
  import type {SelfCheckResult} from '../../../../types/api/healthcheck';
10
10
  import {uiFactory} from '../../../../uiFactory/uiFactory';
11
11
  import {createAndDownloadJsonFile} from '../../../../utils/downloadFile';
12
+ import type {HealthcheckAssistantTarget} from '../types';
12
13
 
13
14
  import {HealthcheckDrawerTitle} from './HealthcheckDrawerTitle';
14
15
 
15
16
  interface HealthcheckDrawerProps {
17
+ target?: HealthcheckAssistantTarget;
16
18
  children: React.ReactNode;
17
19
  isDrawerVisible: boolean;
18
20
  onCloseDrawer: () => void;
@@ -29,6 +31,7 @@ interface HealthcheckDrawerProps {
29
31
  }
30
32
 
31
33
  export function HealthcheckDrawer({
34
+ target,
32
35
  children,
33
36
  isDrawerVisible,
34
37
  onCloseDrawer,
@@ -51,11 +54,11 @@ export function HealthcheckDrawer({
51
54
 
52
55
  return (
53
56
  <React.Fragment>
54
- {renderDrawerExtension()}
57
+ {renderDrawerExtension({target})}
55
58
  {renderDrawerContent()}
56
59
  </React.Fragment>
57
60
  );
58
- }, [renderDrawerContent, renderDrawerExtension]);
61
+ }, [renderDrawerContent, renderDrawerExtension, target]);
59
62
 
60
63
  const handleDownload = React.useCallback(
61
64
  (event: React.MouseEvent<HTMLButtonElement>) => {
@@ -80,17 +80,26 @@ export function HealthcheckIssue({
80
80
  justifyContent="space-between"
81
81
  className={b('issue-summary')}
82
82
  >
83
- <Flex direction="column" gap={1} alignSelf="center">
84
- <Text variant="subheader-2">{issue.message}</Text>
85
-
83
+ <Flex
84
+ gap={2}
85
+ alignItems="center"
86
+ className={b('issue-message')}
87
+ >
86
88
  {issue.status && (
87
89
  <div className={b('issue-status')}>
88
90
  <EntityStatus.Label
91
+ view="compact"
89
92
  size="s"
90
93
  status={hcStatusToColorFlag[issue.status]}
91
94
  />
92
95
  </div>
93
96
  )}
97
+ <Text
98
+ variant="subheader-2"
99
+ className={b('issue-title')}
100
+ >
101
+ {issue.message}
102
+ </Text>
94
103
  </Flex>
95
104
  <Flex
96
105
  wrap="nowrap"
@@ -124,21 +133,22 @@ export function HealthcheckIssue({
124
133
  >
125
134
  <Flex
126
135
  id={id}
127
- direction="column"
128
- gap={1}
129
- alignSelf="center"
136
+ gap={2}
137
+ alignItems="center"
130
138
  className={b('issue-message')}
131
139
  >
132
- <Text variant="subheader-2">{issue.message}</Text>
133
-
134
140
  {issue.status && (
135
141
  <div className={b('issue-status')}>
136
142
  <EntityStatus.Label
143
+ view="compact"
137
144
  size="s"
138
145
  status={hcStatusToColorFlag[issue.status]}
139
146
  />
140
147
  </div>
141
148
  )}
149
+ <Text variant="subheader-2" className={b('issue-title')}>
150
+ {issue.message}
151
+ </Text>
142
152
  </Flex>
143
153
  <div
144
154
  className={b('issue-action')}
@@ -5,9 +5,11 @@ import {
5
5
  selectCheckStatus,
6
6
  } from '../../store/reducers/healthcheckInfo/healthcheckInfo';
7
7
  import {useTypedSelector} from '../../utils/hooks';
8
+ import {useDatabaseHealthcheckAvailable} from '../../utils/hooks/useDatabaseHealthcheckAvailable';
8
9
 
9
10
  import {Healthcheck} from './Healthcheck/Healthcheck';
10
11
  import {HealthcheckDrawer} from './Healthcheck/components/HealthcheckDrawer';
12
+ import {getDatabaseHealthcheckAssistantTarget} from './Healthcheck/utils';
11
13
  import {useCurrentSchema} from './TenantContext';
12
14
  import i18n from './i18n';
13
15
  import {useTenantQueryParams} from './useTenantQueryParams';
@@ -18,12 +20,15 @@ interface TenantDrawerHealthcheckProps {
18
20
  }
19
21
 
20
22
  export function TenantDrawerHealthcheck({children, clusterName}: TenantDrawerHealthcheckProps) {
23
+ const healthcheckAvailable = useDatabaseHealthcheckAvailable();
21
24
  const {database} = useCurrentSchema();
22
25
  const {
23
26
  handleShowHealthcheckChange,
24
27
  showHealthcheck,
25
28
  handleIssuesFilterChange,
26
29
  handleHealthcheckViewChange,
30
+ issuesFilter,
31
+ view,
27
32
  } = useTenantQueryParams();
28
33
 
29
34
  const healthcheckStatus = useTypedSelector((state) =>
@@ -40,13 +45,31 @@ export function TenantDrawerHealthcheck({children, clusterName}: TenantDrawerHea
40
45
  handleHealthcheckViewChange(undefined);
41
46
  }, [handleShowHealthcheckChange, handleIssuesFilterChange, handleHealthcheckViewChange]);
42
47
 
48
+ React.useEffect(() => {
49
+ if (
50
+ healthcheckAvailable === false &&
51
+ (showHealthcheck !== undefined || view !== undefined || issuesFilter !== undefined)
52
+ ) {
53
+ handleCloseDrawer();
54
+ }
55
+ }, [healthcheckAvailable, showHealthcheck, view, issuesFilter, handleCloseDrawer]);
56
+
43
57
  const renderDrawerContent = React.useCallback(() => {
44
58
  return <Healthcheck database={database} clusterName={clusterName} />;
45
59
  }, [database, clusterName]);
46
60
 
47
61
  return (
48
62
  <HealthcheckDrawer
49
- isDrawerVisible={Boolean(showHealthcheck)}
63
+ target={
64
+ database
65
+ ? getDatabaseHealthcheckAssistantTarget({
66
+ database,
67
+ clusterName,
68
+ scope: 'database',
69
+ })
70
+ : undefined
71
+ }
72
+ isDrawerVisible={Boolean(healthcheckAvailable && showHealthcheck)}
50
73
  onCloseDrawer={handleCloseDrawer}
51
74
  renderDrawerContent={renderDrawerContent}
52
75
  drawerId="tenant-healthcheck-details"
@@ -8,6 +8,7 @@ import type {PreparedTenant} from '../../store/reducers/tenants/types';
8
8
  import {useTypedSelector} from '../../utils/hooks';
9
9
  import {Healthcheck} from '../Tenant/Healthcheck/Healthcheck';
10
10
  import {HealthcheckDrawer} from '../Tenant/Healthcheck/components/HealthcheckDrawer';
11
+ import {getDatabaseHealthcheckAssistantTarget} from '../Tenant/Healthcheck/utils';
11
12
  import tenantI18n from '../Tenant/i18n';
12
13
  import {useTenantQueryParams} from '../Tenant/useTenantQueryParams';
13
14
 
@@ -78,6 +79,15 @@ export function DatabaseDrawerHealthcheck({children, clusterName}: DatabaseDrawe
78
79
 
79
80
  return (
80
81
  <HealthcheckDrawer
82
+ target={
83
+ database
84
+ ? getDatabaseHealthcheckAssistantTarget({
85
+ database,
86
+ clusterName: selectedClusterName,
87
+ scope: 'database',
88
+ })
89
+ : undefined
90
+ }
81
91
  isDrawerVisible={Boolean(database)}
82
92
  onCloseDrawer={handleCloseDrawer}
83
93
  renderDrawerContent={renderDrawerContent}
@@ -1,17 +1,17 @@
1
- @use '../../styles//mixins.scss';
2
-
3
1
  .ydb-vdisk-page {
4
2
  --g-definition-list-item-gap: var(--g-spacing-3);
5
3
  position: relative;
6
4
 
7
5
  overflow: auto;
6
+ overflow-anchor: none;
8
7
 
9
8
  height: 100%;
10
- padding: 0 20px;
9
+ padding: 20px 20px 0;
11
10
 
12
11
  &__meta,
13
12
  &__title,
14
13
  &__controls,
14
+ &__storage-details,
15
15
  &__info,
16
16
  &__tabs {
17
17
  position: sticky;
@@ -20,22 +20,35 @@
20
20
  margin-bottom: 20px;
21
21
  }
22
22
 
23
- &__info {
24
- @include mixins.body-2-typography();
23
+ &__heading {
24
+ margin: 0;
25
+ overflow-wrap: anywhere;
26
+ }
27
+
28
+ &__pool-name {
29
+ min-width: 0;
30
+ overflow-wrap: anywhere;
31
+ }
32
+
33
+ &__title-content {
34
+ flex: 1;
35
+
36
+ min-width: 0;
25
37
  }
26
38
 
27
- &__meta {
28
- margin-top: 20px;
39
+ &__refresh-control {
40
+ flex-shrink: 0;
29
41
  }
30
42
 
31
43
  &__controls {
32
44
  display: flex;
45
+ flex-wrap: wrap;
33
46
  align-items: center;
34
47
  gap: var(--g-spacing-2);
35
48
  }
36
49
 
37
50
  &__storage-details {
38
- margin-bottom: var(--g-spacing-5);
51
+ margin-bottom: var(--g-spacing-4);
39
52
  }
40
53
 
41
54
  &__tablets-content {
@@ -1,11 +1,15 @@
1
1
  import React from 'react';
2
2
 
3
- import {Flex, Icon, Label, Tab, TabList, TabProvider} from '@gravity-ui/uikit';
3
+ import {ArrowLeft, Wrench} from '@gravity-ui/icons';
4
+ import {Button, Flex, Icon, Tab, TabList, TabProvider, Text} from '@gravity-ui/uikit';
4
5
  import {skipToken} from '@reduxjs/toolkit/query';
5
6
  import {isNil} from 'lodash';
6
7
  import {Helmet} from 'react-helmet-async';
8
+ import {useHistory} from 'react-router-dom';
7
9
 
8
- import {EntityPageTitle} from '../../components/EntityPageTitle/EntityPageTitle';
10
+ import {AutoRefreshControl} from '../../components/AutoRefreshControl/AutoRefreshControl';
11
+ import {CopyableValue} from '../../components/CopyableValue/CopyableValue';
12
+ import {DiskTypeLabel} from '../../components/DiskStatus/DiskStatus';
9
13
  import {ResponseError} from '../../components/Errors/ResponseError';
10
14
  import {
11
15
  EvictVDiskButton,
@@ -13,18 +17,22 @@ import {
13
17
  } from '../../components/EvictVDiskButton/EvictVDiskButton';
14
18
  import {InfoViewerSkeleton} from '../../components/InfoViewerSkeleton/InfoViewerSkeleton';
15
19
  import {InternalLink} from '../../components/InternalLink/InternalLink';
16
- import {PageMetaWithAutorefresh} from '../../components/PageMeta/PageMeta';
20
+ import {LinkWithIcon} from '../../components/LinkWithIcon/LinkWithIcon';
17
21
  import {VDiskInfo} from '../../components/VDiskInfo/VDiskInfo';
22
+ import {vDiskInfoKeyset} from '../../components/VDiskInfo/i18n';
23
+ import {
24
+ VDiskDonorLabel,
25
+ VDiskReplicationStatus,
26
+ VDiskStateLabel,
27
+ } from '../../components/VDiskStatus';
18
28
  import {useVDiskPagePath} from '../../routes';
19
29
  import {api} from '../../store/reducers/api';
20
- import {useNewStorageViewEnabled} from '../../store/reducers/capabilities/hooks';
21
30
  import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
22
31
  import {vDiskApi} from '../../store/reducers/vdisk/vdisk';
23
32
  import {cn} from '../../utils/cn';
33
+ import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
24
34
  import {parseVdiskId} from '../../utils/dataFormatters/dataFormatters';
25
- import {VDISK_LABEL_CONFIG} from '../../utils/disks/constants';
26
- import {formatPDiskType} from '../../utils/disks/getPDiskType';
27
- import {getDataSeverityColor} from '../../utils/disks/helpers';
35
+ import {createVDiskDeveloperUILink, useHasDeveloperUi} from '../../utils/developerUI/developerUI';
28
36
  import {useAutoRefreshInterval, useTypedDispatch} from '../../utils/hooks';
29
37
  import {useAppTitle} from '../App/AppTitleContext';
30
38
  import {PaginatedStorage} from '../Storage/PaginatedStorage';
@@ -40,12 +48,14 @@ const vDiskPageCn = cn('ydb-vdisk-page');
40
48
 
41
49
  export function VDiskPage() {
42
50
  const dispatch = useTypedDispatch();
51
+ const history = useHistory();
52
+ const showBackButton = history.length > 1;
43
53
  const getVDiskPagePath = useVDiskPagePath();
44
54
 
45
55
  const containerRef = React.useRef<HTMLDivElement>(null);
46
56
 
47
57
  const {nodeId, vDiskId: vDiskIdParam, database, vDiskTab, vDiskTabs} = useVDiskQueryParams();
48
- const newStorageViewEnabled = useNewStorageViewEnabled();
58
+ const hasDeveloperUi = useHasDeveloperUi();
49
59
 
50
60
  const [autoRefreshInterval] = useAutoRefreshInterval();
51
61
 
@@ -77,17 +87,7 @@ export function VDiskPage() {
77
87
  }, [dispatch, database, vDiskData?.VDiskId?.GroupID, vDiskData?.StringifiedId]);
78
88
 
79
89
  const loading = isFetching && vDiskData === undefined;
80
- const {
81
- NodeHost,
82
- NodeId,
83
- NodeType,
84
- NodeDC,
85
- PDiskId,
86
- PDiskType,
87
- Severity,
88
- VDiskId,
89
- StringifiedId,
90
- } = vDiskData || {};
90
+ const {NodeHost, NodeId, PDiskId, PDiskType, VDiskId, StringifiedId} = vDiskData || {};
91
91
 
92
92
  const resolvedVDiskId = VDiskId || (!loading && parseVdiskId(vDiskIdParam)) || undefined;
93
93
  const {GroupID} = resolvedVDiskId || {};
@@ -115,52 +115,76 @@ export function VDiskPage() {
115
115
  };
116
116
 
117
117
  const renderPageMeta = () => {
118
- const hostItem = NodeHost ? `${vDiskPageKeyset('fqdn')}: ${NodeHost}` : undefined;
119
- const nodeIdItem = NodeId ? `${vDiskPageKeyset('node')}: ${NodeId}` : undefined;
120
- const pDiskIdItem = NodeId ? `${vDiskPageKeyset('pdisk')}: ${PDiskId}` : undefined;
118
+ if (!showBackButton) {
119
+ return null;
120
+ }
121
121
 
122
122
  return (
123
- <PageMetaWithAutorefresh
123
+ <Flex
124
124
  className={vDiskPageCn('meta')}
125
- loading={loading}
126
- items={[
127
- hostItem,
128
- nodeIdItem,
129
- NodeType,
130
- NodeDC,
131
- pDiskIdItem,
132
- formatPDiskType(PDiskType),
133
- ]}
134
- />
125
+ alignItems="center"
126
+ justifyContent="space-between"
127
+ gap={1}
128
+ >
129
+ <Button size="m" view="outlined" onClick={() => history.goBack()}>
130
+ <Icon data={ArrowLeft} size={16} />
131
+ {vDiskPageKeyset('action_back')}
132
+ </Button>
133
+ <AutoRefreshControl className={vDiskPageCn('refresh-control')} />
134
+ </Flex>
135
135
  );
136
136
  };
137
137
 
138
138
  const renderTitleMeta = () => {
139
- if (!vDiskData?.DonorMode) {
140
- return null;
141
- }
142
- const donorLabelConfig = VDISK_LABEL_CONFIG.donor;
143
139
  return (
144
- <Label
145
- theme={donorLabelConfig.theme}
146
- icon={donorLabelConfig.icon ? <Icon data={donorLabelConfig.icon} /> : undefined}
147
- size="m"
148
- >
149
- {vDiskPageKeyset('label_donor')}
150
- </Label>
140
+ <Flex gap={2} wrap="wrap" alignItems="center">
141
+ <VDiskStateLabel state={vDiskData?.VDiskState} size="s" />
142
+ {vDiskData?.DonorMode ? (
143
+ <VDiskDonorLabel donorMode size="s" />
144
+ ) : (
145
+ <VDiskReplicationStatus data={vDiskData || {}} size="s" />
146
+ )}
147
+ <DiskTypeLabel type={PDiskType} size="s" />
148
+ </Flex>
151
149
  );
152
150
  };
153
151
 
154
152
  const renderPageTitle = () => {
155
153
  return (
156
- <Flex gap={2} alignItems="center">
157
- <EntityPageTitle
158
- className={vDiskPageCn('title')}
159
- entityName={vDiskPageKeyset('vdisk')}
160
- status={getDataSeverityColor(Severity)}
161
- id={vDiskId}
162
- metaInfo={renderTitleMeta()}
163
- />
154
+ <Flex
155
+ className={vDiskPageCn('title')}
156
+ alignItems="flex-start"
157
+ gap={2}
158
+ wrap="nowrap"
159
+ qa="vdisk-header"
160
+ >
161
+ <Flex direction="column" gap={1} className={vDiskPageCn('title-content')}>
162
+ <Flex gap={3} alignItems="center" wrap="wrap">
163
+ <CopyableValue copyText={vDiskId} fieldName={vDiskPageKeyset('vdisk')}>
164
+ <Text as="h1" variant="header-1" className={vDiskPageCn('heading')}>
165
+ {vDiskPageKeyset('vdisk')}{' '}
166
+ <Text color="hint" variant="header-1">
167
+ {vDiskId || EMPTY_DATA_PLACEHOLDER}
168
+ </Text>
169
+ </Text>
170
+ </CopyableValue>
171
+ {renderTitleMeta()}
172
+ </Flex>
173
+ <Flex gap={1} alignItems="center" className={vDiskPageCn('pool')}>
174
+ <Text color="secondary">{vDiskInfoKeyset('pool-name')}:</Text>
175
+ <CopyableValue
176
+ copyText={vDiskData?.StoragePoolName}
177
+ fieldName={vDiskInfoKeyset('pool-name')}
178
+ >
179
+ <Text color="secondary" className={vDiskPageCn('pool-name')}>
180
+ {vDiskData?.StoragePoolName || EMPTY_DATA_PLACEHOLDER}
181
+ </Text>
182
+ </CopyableValue>
183
+ </Flex>
184
+ </Flex>
185
+ {!showBackButton && (
186
+ <AutoRefreshControl className={vDiskPageCn('refresh-control')} />
187
+ )}
164
188
  </Flex>
165
189
  );
166
190
  };
@@ -178,29 +202,44 @@ export function VDiskPage() {
178
202
  }, [dispatch, vDiskId]);
179
203
 
180
204
  const renderControls = () => {
181
- if (!isAllVdiskParamsDefined(resolvedVDiskId)) {
205
+ const canEvict = isAllVdiskParamsDefined(resolvedVDiskId) && !vDiskData?.DonorMode;
206
+ const developerUILink =
207
+ hasDeveloperUi && !isNil(NodeId) && !isNil(PDiskId) && !isNil(vDiskSlotId)
208
+ ? createVDiskDeveloperUILink({
209
+ nodeId: NodeId,
210
+ pDiskId: PDiskId,
211
+ vDiskSlotId,
212
+ })
213
+ : undefined;
214
+ if (!canEvict && !developerUILink) {
182
215
  return null;
183
216
  }
184
217
  return (
185
218
  <div className={vDiskPageCn('controls')} data-qa="vdisk-controls">
186
- <EvictVDiskButton
187
- vDiskId={resolvedVDiskId}
188
- donorMode={vDiskData?.DonorMode}
189
- onSuccess={handleAfterEvictVDisk}
190
- />
219
+ {canEvict && isAllVdiskParamsDefined(resolvedVDiskId) && (
220
+ <EvictVDiskButton
221
+ vDiskId={resolvedVDiskId}
222
+ view="action"
223
+ onSuccess={handleAfterEvictVDisk}
224
+ />
225
+ )}
226
+ {developerUILink && (
227
+ <LinkWithIcon
228
+ title={vDiskPageKeyset('action_open-in-developer-ui')}
229
+ url={developerUILink}
230
+ icon={Wrench}
231
+ hideEndIcon
232
+ />
233
+ )}
191
234
  </div>
192
235
  );
193
236
  };
194
237
 
195
238
  const renderInfo = () => {
196
- return <VDiskInfo data={vDiskData} className={vDiskPageCn('info')} wrap />;
239
+ return <VDiskInfo key={vDiskId} data={vDiskData} className={vDiskPageCn('info')} />;
197
240
  };
198
241
 
199
242
  const renderStorageDetails = () => {
200
- if (!newStorageViewEnabled) {
201
- return null;
202
- }
203
-
204
243
  return <VDiskStorageDetails data={vDiskData} className={vDiskPageCn('storage-details')} />;
205
244
  };
206
245
 
@@ -284,8 +323,8 @@ export function VDiskPage() {
284
323
  return (
285
324
  <React.Fragment>
286
325
  {error ? <ResponseError error={error} /> : null}
287
- {renderInfo()}
288
326
  {renderStorageDetails()}
327
+ {renderInfo()}
289
328
  {renderTabs()}
290
329
  {renderTabsContent()}
291
330
  </React.Fragment>