ydb-embedded-ui 22.0.0 → 22.2.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 (520) hide show
  1. package/dist/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.d.ts +2 -1
  2. package/dist/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.js +5 -2
  3. package/dist/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.js.map +1 -1
  4. package/dist/components/DiskStateProgressBar/AllModeIndicators.d.ts +2 -1
  5. package/dist/components/DiskStateProgressBar/AllModeIndicators.js +7 -2
  6. package/dist/components/DiskStateProgressBar/AllModeIndicators.js.map +1 -1
  7. package/dist/components/DiskStateProgressBar/DiskIndicator.d.ts +7 -2
  8. package/dist/components/DiskStateProgressBar/DiskIndicator.js +10 -6
  9. package/dist/components/DiskStateProgressBar/DiskIndicator.js.map +1 -1
  10. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.js +1 -1
  11. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.js.map +1 -1
  12. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.scss +96 -46
  13. package/dist/components/DiskStateProgressBar/PDiskAllModeIndicators.js +9 -1
  14. package/dist/components/DiskStateProgressBar/PDiskAllModeIndicators.js.map +1 -1
  15. package/dist/components/EvictVDiskButton/EvictVDiskButton.js +7 -3
  16. package/dist/components/EvictVDiskButton/EvictVDiskButton.js.map +1 -1
  17. package/dist/components/FullNodeViewer/FullNodeViewer.js +40 -17
  18. package/dist/components/FullNodeViewer/FullNodeViewer.js.map +1 -1
  19. package/dist/components/FullNodeViewer/FullNodeViewer.scss +3 -3
  20. package/dist/components/FullNodeViewer/i18n/en.json +2 -1
  21. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  22. package/dist/components/HoverPopup/HoverPopup.js +9 -2
  23. package/dist/components/HoverPopup/HoverPopup.js.map +1 -1
  24. package/dist/components/InfoViewer/InfoViewer.js +1 -1
  25. package/dist/components/InfoViewer/InfoViewer.js.map +1 -1
  26. package/dist/components/InfoViewer/formatters/pqGroup.js +6 -1
  27. package/dist/components/InfoViewer/formatters/pqGroup.js.map +1 -1
  28. package/dist/components/InfoViewer/schemaInfo/i18n/en.json +1 -0
  29. package/dist/components/InfoViewer/schemaInfo/i18n/index.d.ts +1 -1
  30. package/dist/components/InfoViewer/schemaInfo/utils.js +6 -1
  31. package/dist/components/InfoViewer/schemaInfo/utils.js.map +1 -1
  32. package/dist/components/NodeHostWrapper/NodeHostWrapper.d.ts +4 -1
  33. package/dist/components/NodeHostWrapper/NodeHostWrapper.js +13 -9
  34. package/dist/components/NodeHostWrapper/NodeHostWrapper.js.map +1 -1
  35. package/dist/components/PDiskInfo/PDiskInfo.js +2 -1
  36. package/dist/components/PDiskInfo/PDiskInfo.js.map +1 -1
  37. package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
  38. package/dist/components/PDiskPopup/PDiskPopup.js +5 -1
  39. package/dist/components/PDiskPopup/PDiskPopup.js.map +1 -1
  40. package/dist/components/PaginatedTable/KeyboardNavigation.d.ts +9 -0
  41. package/dist/components/PaginatedTable/KeyboardNavigation.js +14 -0
  42. package/dist/components/PaginatedTable/KeyboardNavigation.js.map +1 -0
  43. package/dist/components/PaginatedTable/PaginatedTable.d.ts +4 -1
  44. package/dist/components/PaginatedTable/PaginatedTable.js +103 -18
  45. package/dist/components/PaginatedTable/PaginatedTable.js.map +1 -1
  46. package/dist/components/PaginatedTable/PaginatedTable.scss +10 -0
  47. package/dist/components/PaginatedTable/PaginatedTableContext.d.ts +2 -3
  48. package/dist/components/PaginatedTable/PaginatedTableContext.js +10 -11
  49. package/dist/components/PaginatedTable/PaginatedTableContext.js.map +1 -1
  50. package/dist/components/PaginatedTable/PaginatedTableWithLayout.d.ts +2 -1
  51. package/dist/components/PaginatedTable/PaginatedTableWithLayout.js +2 -2
  52. package/dist/components/PaginatedTable/PaginatedTableWithLayout.js.map +1 -1
  53. package/dist/components/PaginatedTable/ResizeablePaginatedTable.js +2 -1
  54. package/dist/components/PaginatedTable/ResizeablePaginatedTable.js.map +1 -1
  55. package/dist/components/PaginatedTable/TableChunk.d.ts +1 -1
  56. package/dist/components/PaginatedTable/TableChunk.js +8 -11
  57. package/dist/components/PaginatedTable/TableChunk.js.map +1 -1
  58. package/dist/components/PaginatedTable/TableChunksRenderer.d.ts +3 -2
  59. package/dist/components/PaginatedTable/TableChunksRenderer.js +6 -1
  60. package/dist/components/PaginatedTable/TableChunksRenderer.js.map +1 -1
  61. package/dist/components/PaginatedTable/TableRow.d.ts +3 -1
  62. package/dist/components/PaginatedTable/TableRow.js +24 -8
  63. package/dist/components/PaginatedTable/TableRow.js.map +1 -1
  64. package/dist/components/PaginatedTable/getTableChunkQueryParams.d.ts +23 -0
  65. package/dist/components/PaginatedTable/getTableChunkQueryParams.js +12 -0
  66. package/dist/components/PaginatedTable/getTableChunkQueryParams.js.map +1 -0
  67. package/dist/components/PaginatedTable/rowLookup.d.ts +8 -0
  68. package/dist/components/PaginatedTable/rowLookup.js +35 -0
  69. package/dist/components/PaginatedTable/rowLookup.js.map +1 -0
  70. package/dist/components/PaginatedTable/tableCounts.d.ts +19 -0
  71. package/dist/components/PaginatedTable/tableCounts.js +30 -0
  72. package/dist/components/PaginatedTable/tableCounts.js.map +1 -0
  73. package/dist/components/PaginatedTable/useKeyboardNavigation.d.ts +27 -0
  74. package/dist/components/PaginatedTable/useKeyboardNavigation.js +70 -0
  75. package/dist/components/PaginatedTable/useKeyboardNavigation.js.map +1 -0
  76. package/dist/components/ResizeableDataTable/DataTableKeyboardNavigation.d.ts +24 -0
  77. package/dist/components/ResizeableDataTable/DataTableKeyboardNavigation.js +144 -0
  78. package/dist/components/ResizeableDataTable/DataTableKeyboardNavigation.js.map +1 -0
  79. package/dist/components/ResizeableDataTable/ResizeableDataTable.d.ts +4 -1
  80. package/dist/components/ResizeableDataTable/ResizeableDataTable.js +28 -4
  81. package/dist/components/ResizeableDataTable/ResizeableDataTable.js.map +1 -1
  82. package/dist/components/ResizeableDataTable/ResizeableDataTable.scss +10 -0
  83. package/dist/components/ResizeableDataTable/getDataTableOrder.d.ts +2 -0
  84. package/dist/components/ResizeableDataTable/getDataTableOrder.js +12 -0
  85. package/dist/components/ResizeableDataTable/getDataTableOrder.js.map +1 -0
  86. package/dist/components/Search/Search.d.ts +2 -1
  87. package/dist/components/Search/Search.js +6 -2
  88. package/dist/components/Search/Search.js.map +1 -1
  89. package/dist/components/ShardsTable/columns.js +6 -3
  90. package/dist/components/ShardsTable/columns.js.map +1 -1
  91. package/dist/components/ShardsTable/i18n/en.json +1 -0
  92. package/dist/components/ShardsTable/i18n/index.d.ts +1 -1
  93. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.d.ts +54 -0
  94. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.js +389 -0
  95. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.js.map +1 -0
  96. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.scss +16 -0
  97. package/dist/components/TableKeyboardNavigation/i18n/en.json +4 -0
  98. package/dist/components/TableKeyboardNavigation/i18n/index.d.ts +2 -0
  99. package/dist/components/TableKeyboardNavigation/i18n/index.js +4 -0
  100. package/dist/components/TableKeyboardNavigation/i18n/index.js.map +1 -0
  101. package/dist/components/TableKeyboardNavigation/utils.d.ts +3 -0
  102. package/dist/components/TableKeyboardNavigation/utils.js +24 -0
  103. package/dist/components/TableKeyboardNavigation/utils.js.map +1 -0
  104. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.d.ts +4 -1
  105. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.js +4 -2
  106. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.js.map +1 -1
  107. package/dist/components/TenantNameWrapper/TenantNameWrapper.d.ts +3 -1
  108. package/dist/components/TenantNameWrapper/TenantNameWrapper.js +8 -12
  109. package/dist/components/TenantNameWrapper/TenantNameWrapper.js.map +1 -1
  110. package/dist/components/TenantNameWrapper/utils.d.ts +10 -0
  111. package/dist/components/TenantNameWrapper/utils.js +11 -0
  112. package/dist/components/TenantNameWrapper/utils.js.map +1 -1
  113. package/dist/components/UptimeViewer/UptimeViewer.d.ts +2 -2
  114. package/dist/components/VDisk/VDisk.d.ts +6 -1
  115. package/dist/components/VDisk/VDisk.js +97 -32
  116. package/dist/components/VDisk/VDisk.js.map +1 -1
  117. package/dist/components/VDisk/VDiskWithDonorsStack.d.ts +6 -2
  118. package/dist/components/VDisk/VDiskWithDonorsStack.js +9 -4
  119. package/dist/components/VDisk/VDiskWithDonorsStack.js.map +1 -1
  120. package/dist/components/VDisk/i18n/en.json +14 -1
  121. package/dist/components/VDisk/i18n/index.d.ts +1 -1
  122. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  123. package/dist/components/nodesColumns/columns.d.ts +4 -1
  124. package/dist/components/nodesColumns/columns.js +13 -0
  125. package/dist/components/nodesColumns/columns.js.map +1 -1
  126. package/dist/components/nodesColumns/constants.d.ts +2 -0
  127. package/dist/components/nodesColumns/constants.js +6 -0
  128. package/dist/components/nodesColumns/constants.js.map +1 -1
  129. package/dist/components/nodesColumns/i18n/en.json +2 -1
  130. package/dist/components/nodesColumns/i18n/index.d.ts +1 -1
  131. package/dist/containers/Clusters/Clusters.js +11 -7
  132. package/dist/containers/Clusters/Clusters.js.map +1 -1
  133. package/dist/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.js +1 -1
  134. package/dist/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.js.map +1 -1
  135. package/dist/containers/Node/NodeNetwork/NodeNetworkTable.js +11 -1
  136. package/dist/containers/Node/NodeNetwork/NodeNetworkTable.js.map +1 -1
  137. package/dist/containers/Node/Threads/ThreadStatesBar/ThreadStatesBar.d.ts +1 -1
  138. package/dist/containers/Nodes/NodesControls/NodesControls.js +1 -1
  139. package/dist/containers/Nodes/NodesControls/NodesControls.js.map +1 -1
  140. package/dist/containers/Nodes/NodesTable.js +12 -1
  141. package/dist/containers/Nodes/NodesTable.js.map +1 -1
  142. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +1 -1
  143. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -1
  144. package/dist/containers/Nodes/columns/columns.js +2 -1
  145. package/dist/containers/Nodes/columns/columns.js.map +1 -1
  146. package/dist/containers/Storage/Disks/Disks.d.ts +2 -1
  147. package/dist/containers/Storage/Disks/Disks.js +32 -23
  148. package/dist/containers/Storage/Disks/Disks.js.map +1 -1
  149. package/dist/containers/Storage/Disks/Disks.scss +5 -0
  150. package/dist/containers/Storage/PDisk/PDisk.d.ts +6 -9
  151. package/dist/containers/Storage/PDisk/PDisk.js +99 -37
  152. package/dist/containers/Storage/PDisk/PDisk.js.map +1 -1
  153. package/dist/containers/Storage/PDisk/PDisk.scss +79 -1
  154. package/dist/containers/Storage/PDisk/PDiskWithVDisks.d.ts +17 -0
  155. package/dist/containers/Storage/PDisk/PDiskWithVDisks.js +48 -0
  156. package/dist/containers/Storage/PDisk/PDiskWithVDisks.js.map +1 -0
  157. package/dist/containers/Storage/PDisk/i18n/en.json +9 -0
  158. package/dist/containers/Storage/PDisk/i18n/index.d.ts +1 -1
  159. package/dist/containers/Storage/PDisk/index.d.ts +1 -0
  160. package/dist/containers/Storage/PDisk/index.js +1 -0
  161. package/dist/containers/Storage/PDisk/index.js.map +1 -1
  162. package/dist/containers/Storage/PDisks/PDisks.d.ts +4 -1
  163. package/dist/containers/Storage/PDisks/PDisks.js +52 -6
  164. package/dist/containers/Storage/PDisks/PDisks.js.map +1 -1
  165. package/dist/containers/Storage/PaginatedStorage.js +3 -1
  166. package/dist/containers/Storage/PaginatedStorage.js.map +1 -1
  167. package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.js +1 -1
  168. package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.js.map +1 -1
  169. package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.js +2 -2
  170. package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.js.map +1 -1
  171. package/dist/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.js +10 -1
  172. package/dist/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.js.map +1 -1
  173. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
  174. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.d.ts +1 -0
  175. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js +8 -5
  176. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js.map +1 -1
  177. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js +6 -3
  178. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js.map +1 -1
  179. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js +17 -5
  180. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js.map +1 -1
  181. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.d.ts +16 -0
  182. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.js +68 -0
  183. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.js.map +1 -0
  184. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.d.ts +2 -1
  185. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js +14 -2
  186. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js.map +1 -1
  187. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/columns.js +2 -2
  188. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/columns.js.map +1 -1
  189. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/hooks.js +7 -2
  190. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/hooks.js.map +1 -1
  191. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/types.d.ts +2 -0
  192. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.d.ts +5 -0
  193. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.js +33 -0
  194. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.js.map +1 -0
  195. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.d.ts +5 -0
  196. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.js +31 -0
  197. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.js.map +1 -0
  198. package/dist/containers/Storage/StorageExpertModePanel/components/DriveTypeLegend.d.ts +1 -0
  199. package/dist/containers/Storage/StorageExpertModePanel/components/DriveTypeLegend.js +7 -0
  200. package/dist/containers/Storage/StorageExpertModePanel/components/DriveTypeLegend.js.map +1 -0
  201. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.d.ts +21 -0
  202. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.js +13 -0
  203. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.js.map +1 -0
  204. package/dist/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.js +1 -0
  205. package/dist/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.js.map +1 -1
  206. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.js +1 -0
  207. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.js.map +1 -1
  208. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.js +3 -2
  209. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.js.map +1 -1
  210. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.js +1 -0
  211. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.js.map +1 -1
  212. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.js +4 -4
  213. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.js.map +1 -1
  214. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.js +3 -3
  215. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.js.map +1 -1
  216. package/dist/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.d.ts +1 -1
  217. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.d.ts +4 -0
  218. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.js +54 -0
  219. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.js.map +1 -0
  220. package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +23 -0
  221. package/dist/containers/Storage/StorageExpertModePanel/constants.js +23 -0
  222. package/dist/containers/Storage/StorageExpertModePanel/constants.js.map +1 -1
  223. package/dist/containers/Storage/StorageExpertModePanel/i18n/en.json +6 -2
  224. package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
  225. package/dist/containers/Storage/TableGroup/TableGroup.js +2 -1
  226. package/dist/containers/Storage/TableGroup/TableGroup.js.map +1 -1
  227. package/dist/containers/Storage/VDisks/VDisks.d.ts +2 -1
  228. package/dist/containers/Storage/VDisks/VDisks.js +11 -4
  229. package/dist/containers/Storage/VDisks/VDisks.js.map +1 -1
  230. package/dist/containers/Storage/VDisks/VDisks.scss +3 -0
  231. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.d.ts +1 -0
  232. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.js +80 -102
  233. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.js.map +1 -1
  234. package/dist/containers/Storage/useStorageQueryParams.d.ts +13 -5
  235. package/dist/containers/Storage/useStorageQueryParams.js +50 -2
  236. package/dist/containers/Storage/useStorageQueryParams.js.map +1 -1
  237. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.d.ts +1 -0
  238. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.js +59 -13
  239. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.js.map +1 -1
  240. package/dist/containers/Storage/utils/useStorageColumnsSettings.d.ts +4 -1
  241. package/dist/containers/Storage/utils/useStorageColumnsSettings.js +49 -39
  242. package/dist/containers/Storage/utils/useStorageColumnsSettings.js.map +1 -1
  243. package/dist/containers/Storage/utils/useVirtualizedDiskList.d.ts +10 -0
  244. package/dist/containers/Storage/utils/useVirtualizedDiskList.js +131 -0
  245. package/dist/containers/Storage/utils/useVirtualizedDiskList.js.map +1 -0
  246. package/dist/containers/Tablet/Tablet.js +4 -2
  247. package/dist/containers/Tablet/Tablet.js.map +1 -1
  248. package/dist/containers/Tablet/components/TabletControls/TabletControls.js +3 -1
  249. package/dist/containers/Tablet/components/TabletControls/TabletControls.js.map +1 -1
  250. package/dist/containers/Tablet/components/TabletInfo/TabletInfo.js +9 -3
  251. package/dist/containers/Tablet/components/TabletInfo/TabletInfo.js.map +1 -1
  252. package/dist/containers/Tablets/TabletsTable.js +25 -1
  253. package/dist/containers/Tablets/TabletsTable.js.map +1 -1
  254. package/dist/containers/Tablets/i18n/en.json +2 -1
  255. package/dist/containers/Tablets/i18n/index.d.ts +1 -1
  256. package/dist/containers/Tenant/Diagnostics/Overview/AsyncReplicationPaths/i18n/index.d.ts +1 -1
  257. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +2 -1
  258. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js.map +1 -1
  259. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.d.ts +7 -0
  260. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.js +69 -0
  261. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.js.map +1 -0
  262. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/en.json +9 -0
  263. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.d.ts +2 -0
  264. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.js +5 -0
  265. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.js.map +1 -0
  266. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.d.ts +1 -0
  267. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.js +2 -0
  268. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.js.map +1 -0
  269. package/dist/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.js +3 -3
  270. package/dist/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.js.map +1 -1
  271. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.d.ts +2 -1
  272. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.js +3 -2
  273. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.js.map +1 -1
  274. package/dist/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.js +1 -1
  275. package/dist/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.js.map +1 -1
  276. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js +1 -1
  277. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js.map +1 -1
  278. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.js +1 -1
  279. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.js.map +1 -1
  280. package/dist/containers/Tenant/Diagnostics/TopicData/columns/columns.d.ts +3 -3
  281. package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.js +2 -1
  282. package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.js.map +1 -1
  283. package/dist/containers/Tenant/Query/SavedQueries/SavedQueries.js +1 -1
  284. package/dist/containers/Tenant/Query/SavedQueries/SavedQueries.js.map +1 -1
  285. package/dist/containers/Tenants/TenantsTable.js +37 -6
  286. package/dist/containers/Tenants/TenantsTable.js.map +1 -1
  287. package/dist/containers/VDiskPage/VDiskPage.js +10 -2
  288. package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
  289. package/dist/services/api/tablets.d.ts +6 -4
  290. package/dist/services/api/tablets.js +9 -8
  291. package/dist/services/api/tablets.js.map +1 -1
  292. package/dist/store/reducers/capabilities/capabilities.d.ts +4 -4
  293. package/dist/store/reducers/capabilities/hooks.d.ts +1 -0
  294. package/dist/store/reducers/capabilities/hooks.js +8 -0
  295. package/dist/store/reducers/capabilities/hooks.js.map +1 -1
  296. package/dist/store/reducers/nodesList.d.ts +3 -261
  297. package/dist/store/reducers/nodesList.js +1 -1
  298. package/dist/store/reducers/nodesList.js.map +1 -1
  299. package/dist/store/reducers/settings/constants.d.ts +4 -0
  300. package/dist/store/reducers/settings/constants.js +4 -0
  301. package/dist/store/reducers/settings/constants.js.map +1 -1
  302. package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +1 -0
  303. package/dist/store/reducers/storage/prepareGroupsDisks.js +17 -13
  304. package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
  305. package/dist/store/reducers/storage/utils.js +11 -5
  306. package/dist/store/reducers/storage/utils.js.map +1 -1
  307. package/dist/store/reducers/table/table.js +6 -0
  308. package/dist/store/reducers/table/table.js.map +1 -1
  309. package/dist/store/reducers/tableData.d.ts +1 -1
  310. package/dist/store/reducers/tableData.js.map +1 -1
  311. package/dist/store/reducers/tablet.d.ts +3 -0
  312. package/dist/store/reducers/tablet.js +6 -6
  313. package/dist/store/reducers/tablet.js.map +1 -1
  314. package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.js +1 -1
  315. package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.js.map +1 -1
  316. package/dist/store/reducers/topic/topic.js +7 -1
  317. package/dist/store/reducers/topic/topic.js.map +1 -1
  318. package/dist/types/api/capabilities.d.ts +2 -2
  319. package/dist/types/api/pdisk.d.ts +2 -0
  320. package/dist/types/api/pdisk.js.map +1 -1
  321. package/dist/types/api/schema/persQueueGroup.d.ts +2 -2
  322. package/dist/types/api/schema/schema.d.ts +15 -0
  323. package/dist/types/api/schema/schema.js.map +1 -1
  324. package/dist/types/api/schema/tableIndex.d.ts +1 -0
  325. package/dist/types/api/storage.d.ts +4 -0
  326. package/dist/types/api/storage.js.map +1 -1
  327. package/dist/types/api/vdisk.d.ts +2 -0
  328. package/dist/types/api/vdisk.js.map +1 -1
  329. package/dist/uiFactory/types.d.ts +6 -0
  330. package/dist/utils/developerUI/tabletDevUi.d.ts +1 -0
  331. package/dist/utils/developerUI/tabletDevUi.js +4 -0
  332. package/dist/utils/developerUI/tabletDevUi.js.map +1 -0
  333. package/dist/utils/disks/displayState.d.ts +5 -2
  334. package/dist/utils/disks/displayState.js.map +1 -1
  335. package/dist/utils/disks/driveType.d.ts +3 -0
  336. package/dist/utils/disks/driveType.js +27 -0
  337. package/dist/utils/disks/driveType.js.map +1 -0
  338. package/dist/utils/disks/getDiskBarTone.d.ts +4 -2
  339. package/dist/utils/disks/getDiskBarTone.js +8 -1
  340. package/dist/utils/disks/getDiskBarTone.js.map +1 -1
  341. package/dist/utils/disks/getPDiskType.d.ts +1 -0
  342. package/dist/utils/disks/getPDiskType.js +3 -0
  343. package/dist/utils/disks/getPDiskType.js.map +1 -1
  344. package/dist/utils/disks/groupBy.d.ts +1 -0
  345. package/dist/utils/disks/groupBy.js +1 -0
  346. package/dist/utils/disks/groupBy.js.map +1 -1
  347. package/dist/utils/disks/iconCalculators.d.ts +1 -1
  348. package/dist/utils/disks/iconCalculators.js +2 -2
  349. package/dist/utils/disks/iconCalculators.js.map +1 -1
  350. package/dist/utils/disks/pdiskState.js +2 -2
  351. package/dist/utils/disks/pdiskState.js.map +1 -1
  352. package/dist/utils/disks/prepareDisks.js +19 -9
  353. package/dist/utils/disks/prepareDisks.js.map +1 -1
  354. package/dist/utils/disks/types.d.ts +3 -2
  355. package/dist/utils/objectCreationMetrics.d.ts +5 -0
  356. package/dist/utils/objectCreationMetrics.js +38 -0
  357. package/dist/utils/objectCreationMetrics.js.map +1 -0
  358. package/dist/utils/query.d.ts +1 -0
  359. package/dist/utils/query.js +6 -0
  360. package/dist/utils/query.js.map +1 -1
  361. package/package.json +1 -1
  362. package/src/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.tsx +15 -2
  363. package/src/components/DiskStateProgressBar/AllModeIndicators.tsx +30 -6
  364. package/src/components/DiskStateProgressBar/DiskIndicator.tsx +27 -8
  365. package/src/components/DiskStateProgressBar/DiskStateProgressBar.scss +96 -46
  366. package/src/components/DiskStateProgressBar/DiskStateProgressBar.tsx +1 -1
  367. package/src/components/DiskStateProgressBar/PDiskAllModeIndicators.tsx +16 -3
  368. package/src/components/EvictVDiskButton/EvictVDiskButton.tsx +10 -3
  369. package/src/components/FullNodeViewer/FullNodeViewer.scss +3 -3
  370. package/src/components/FullNodeViewer/FullNodeViewer.tsx +81 -34
  371. package/src/components/FullNodeViewer/i18n/en.json +2 -1
  372. package/src/components/HoverPopup/HoverPopup.tsx +21 -16
  373. package/src/components/InfoViewer/InfoViewer.tsx +4 -2
  374. package/src/components/InfoViewer/formatters/pqGroup.ts +6 -2
  375. package/src/components/InfoViewer/schemaInfo/i18n/en.json +1 -0
  376. package/src/components/InfoViewer/schemaInfo/utils.tsx +9 -0
  377. package/src/components/NodeHostWrapper/NodeHostWrapper.tsx +23 -13
  378. package/src/components/PDiskInfo/PDiskInfo.tsx +2 -1
  379. package/src/components/PDiskPopup/PDiskPopup.tsx +5 -1
  380. package/src/components/PaginatedTable/KeyboardNavigation.tsx +30 -0
  381. package/src/components/PaginatedTable/PaginatedTable.scss +10 -0
  382. package/src/components/PaginatedTable/PaginatedTable.tsx +154 -20
  383. package/src/components/PaginatedTable/PaginatedTableContext.tsx +14 -19
  384. package/src/components/PaginatedTable/PaginatedTableWithLayout.tsx +6 -1
  385. package/src/components/PaginatedTable/ResizeablePaginatedTable.tsx +6 -1
  386. package/src/components/PaginatedTable/TableChunk.tsx +9 -16
  387. package/src/components/PaginatedTable/TableChunksRenderer.tsx +13 -1
  388. package/src/components/PaginatedTable/TableRow.tsx +54 -20
  389. package/src/components/PaginatedTable/getTableChunkQueryParams.ts +25 -0
  390. package/src/components/PaginatedTable/rowLookup.ts +63 -0
  391. package/src/components/PaginatedTable/tableCounts.ts +50 -0
  392. package/src/components/PaginatedTable/useKeyboardNavigation.ts +115 -0
  393. package/src/components/ResizeableDataTable/DataTableKeyboardNavigation.tsx +194 -0
  394. package/src/components/ResizeableDataTable/ResizeableDataTable.scss +10 -0
  395. package/src/components/ResizeableDataTable/ResizeableDataTable.tsx +100 -5
  396. package/src/components/ResizeableDataTable/getDataTableOrder.ts +18 -0
  397. package/src/components/Search/Search.tsx +8 -1
  398. package/src/components/ShardsTable/columns.tsx +14 -5
  399. package/src/components/ShardsTable/i18n/en.json +1 -0
  400. package/src/components/TableKeyboardNavigation/TableKeyboardNavigation.scss +16 -0
  401. package/src/components/TableKeyboardNavigation/TableKeyboardNavigation.tsx +519 -0
  402. package/src/components/TableKeyboardNavigation/i18n/en.json +4 -0
  403. package/src/components/TableKeyboardNavigation/i18n/index.ts +5 -0
  404. package/src/components/TableKeyboardNavigation/utils.ts +36 -0
  405. package/src/components/TableWithControlsLayout/TableWithControlsLayout.tsx +26 -1
  406. package/src/components/TenantNameWrapper/TenantNameWrapper.tsx +14 -15
  407. package/src/components/TenantNameWrapper/utils.ts +26 -0
  408. package/src/components/VDisk/VDisk.tsx +141 -44
  409. package/src/components/VDisk/VDiskWithDonorsStack.tsx +23 -4
  410. package/src/components/VDisk/i18n/en.json +14 -1
  411. package/src/components/nodesColumns/columns.tsx +13 -1
  412. package/src/components/nodesColumns/constants.ts +6 -0
  413. package/src/components/nodesColumns/i18n/en.json +2 -1
  414. package/src/containers/Clusters/Clusters.tsx +47 -29
  415. package/src/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.tsx +1 -0
  416. package/src/containers/Node/NodeNetwork/NodeNetworkTable.tsx +17 -0
  417. package/src/containers/Nodes/NodesControls/NodesControls.tsx +1 -0
  418. package/src/containers/Nodes/NodesTable.tsx +17 -1
  419. package/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +1 -0
  420. package/src/containers/Nodes/columns/columns.tsx +2 -0
  421. package/src/containers/Storage/Disks/Disks.scss +5 -0
  422. package/src/containers/Storage/Disks/Disks.tsx +157 -95
  423. package/src/containers/Storage/PDisk/PDisk.scss +79 -1
  424. package/src/containers/Storage/PDisk/PDisk.tsx +166 -81
  425. package/src/containers/Storage/PDisk/PDiskWithVDisks.tsx +181 -0
  426. package/src/containers/Storage/PDisk/i18n/en.json +9 -0
  427. package/src/containers/Storage/PDisk/index.ts +1 -0
  428. package/src/containers/Storage/PDisks/PDisks.tsx +157 -22
  429. package/src/containers/Storage/PaginatedStorage.tsx +4 -0
  430. package/src/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.tsx +1 -0
  431. package/src/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.tsx +3 -2
  432. package/src/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.tsx +13 -0
  433. package/src/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.tsx +10 -2
  434. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.tsx +6 -2
  435. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesControls.tsx +76 -41
  436. package/src/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.ts +103 -0
  437. package/src/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.tsx +24 -1
  438. package/src/containers/Storage/PaginatedStorageNodesTable/columns/columns.tsx +3 -1
  439. package/src/containers/Storage/PaginatedStorageNodesTable/columns/hooks.ts +8 -1
  440. package/src/containers/Storage/PaginatedStorageNodesTable/columns/types.ts +2 -0
  441. package/src/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.tsx +65 -0
  442. package/src/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.tsx +67 -0
  443. package/src/containers/Storage/StorageExpertModePanel/components/DriveTypeLegend.tsx +22 -0
  444. package/src/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.tsx +63 -0
  445. package/src/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.tsx +1 -0
  446. package/src/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.tsx +1 -0
  447. package/src/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.tsx +3 -2
  448. package/src/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.tsx +1 -0
  449. package/src/containers/Storage/StorageExpertModePanel/components/SpaceLegend.tsx +3 -0
  450. package/src/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.tsx +7 -9
  451. package/src/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.ts +1 -1
  452. package/src/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.tsx +63 -0
  453. package/src/containers/Storage/StorageExpertModePanel/constants.ts +27 -0
  454. package/src/containers/Storage/StorageExpertModePanel/i18n/en.json +6 -2
  455. package/src/containers/Storage/TableGroup/TableGroup.tsx +6 -1
  456. package/src/containers/Storage/VDisks/VDisks.scss +3 -0
  457. package/src/containers/Storage/VDisks/VDisks.tsx +29 -7
  458. package/src/containers/Storage/useStoragePDiskDisplayStateGetter.ts +102 -135
  459. package/src/containers/Storage/useStorageQueryParams.ts +120 -1
  460. package/src/containers/Storage/useStorageVDiskDisplayStateGetter.ts +75 -10
  461. package/src/containers/Storage/utils/useStorageColumnsSettings.ts +77 -49
  462. package/src/containers/Storage/utils/useVirtualizedDiskList.ts +156 -0
  463. package/src/containers/Tablet/Tablet.tsx +4 -2
  464. package/src/containers/Tablet/components/TabletControls/TabletControls.tsx +7 -3
  465. package/src/containers/Tablet/components/TabletInfo/TabletInfo.tsx +13 -3
  466. package/src/containers/Tablets/TabletsTable.tsx +50 -10
  467. package/src/containers/Tablets/i18n/en.json +2 -1
  468. package/src/containers/Tenant/Diagnostics/Overview/Overview.tsx +2 -1
  469. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.tsx +106 -0
  470. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/en.json +9 -0
  471. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.ts +7 -0
  472. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.ts +1 -0
  473. package/src/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.ts +3 -3
  474. package/src/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.tsx +6 -0
  475. package/src/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.tsx +4 -0
  476. package/src/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.tsx +7 -1
  477. package/src/containers/Tenant/Diagnostics/TopShards/TopShards.tsx +1 -1
  478. package/src/containers/Tenant/Query/QueriesHistory/QueriesHistory.tsx +5 -0
  479. package/src/containers/Tenant/Query/SavedQueries/SavedQueries.tsx +6 -0
  480. package/src/containers/Tenants/TenantsTable.tsx +70 -12
  481. package/src/containers/VDiskPage/VDiskPage.tsx +10 -2
  482. package/src/services/api/tablets.ts +16 -7
  483. package/src/store/reducers/capabilities/hooks.ts +9 -0
  484. package/src/store/reducers/nodesList.ts +2 -3
  485. package/src/store/reducers/settings/constants.ts +4 -0
  486. package/src/store/reducers/storage/prepareGroupsDisks.ts +16 -11
  487. package/src/store/reducers/storage/utils.ts +12 -5
  488. package/src/store/reducers/table/table.ts +6 -0
  489. package/src/store/reducers/tableData.ts +1 -1
  490. package/src/store/reducers/tablet.ts +25 -6
  491. package/src/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.ts +1 -1
  492. package/src/store/reducers/topic/topic.ts +7 -1
  493. package/src/types/api/capabilities.ts +2 -2
  494. package/src/types/api/pdisk.ts +2 -0
  495. package/src/types/api/schema/persQueueGroup.ts +2 -2
  496. package/src/types/api/schema/schema.ts +18 -0
  497. package/src/types/api/schema/tableIndex.ts +1 -0
  498. package/src/types/api/storage.ts +4 -0
  499. package/src/types/api/vdisk.ts +2 -0
  500. package/src/uiFactory/types.ts +6 -0
  501. package/src/utils/developerUI/tabletDevUi.ts +3 -0
  502. package/src/utils/disks/displayState.ts +5 -1
  503. package/src/utils/disks/driveType.ts +30 -0
  504. package/src/utils/disks/getDiskBarTone.ts +15 -1
  505. package/src/utils/disks/getPDiskType.ts +4 -0
  506. package/src/utils/disks/groupBy.ts +1 -0
  507. package/src/utils/disks/iconCalculators.ts +2 -2
  508. package/src/utils/disks/pdiskState.ts +2 -2
  509. package/src/utils/disks/prepareDisks.ts +25 -9
  510. package/src/utils/disks/types.ts +3 -2
  511. package/src/utils/objectCreationMetrics.ts +47 -0
  512. package/src/utils/query.ts +7 -0
  513. package/dist/containers/Storage/PDisk/PDiskVDisks.d.ts +0 -13
  514. package/dist/containers/Storage/PDisk/PDiskVDisks.js +0 -20
  515. package/dist/containers/Storage/PDisk/PDiskVDisks.js.map +0 -1
  516. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.d.ts +0 -6
  517. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.js +0 -66
  518. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.js.map +0 -1
  519. package/src/containers/Storage/PDisk/PDiskVDisks.tsx +0 -65
  520. package/src/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.tsx +0 -151
@@ -1,3 +1,4 @@
1
+ import {getTenantPath} from '../../routes';
1
2
  import type {PreparedTenant} from '../../store/reducers/tenants/types';
2
3
  import type {AdditionalTenantsProps} from '../../types/additionalProps';
3
4
 
@@ -17,3 +18,28 @@ export function getTenantBackend(
17
18
  }
18
19
  return additionalTenantsProps.prepareTenantBackend(nodeId);
19
20
  }
21
+
22
+ export function getTenantLink({
23
+ tenant,
24
+ additionalTenantsProps,
25
+ externalLink,
26
+ useDatabaseId,
27
+ }: {
28
+ tenant: PreparedTenant;
29
+ additionalTenantsProps?: AdditionalTenantsProps;
30
+ externalLink?: boolean;
31
+ useDatabaseId?: boolean;
32
+ }) {
33
+ const backend = getTenantBackend(tenant, additionalTenantsProps);
34
+ const isExternalLink = Boolean(externalLink || backend);
35
+ const database = useDatabaseId ? tenant.Id : tenant.Name;
36
+
37
+ return {
38
+ database,
39
+ isExternalLink,
40
+ href: getTenantPath(
41
+ {clusterName: tenant.Cluster, database, backend},
42
+ {withBasename: isExternalLink},
43
+ ),
44
+ };
45
+ }
@@ -3,15 +3,17 @@ import React from 'react';
3
3
  import type {PopupPlacement, PopupProps} from '@gravity-ui/uikit';
4
4
 
5
5
  import {useVDiskPagePath} from '../../routes';
6
+ import {EFlag, isCapacityAlert} from '../../types/api/enums';
6
7
  import {cn} from '../../utils/cn';
7
8
  import {NOT_AVAILABLE_SEVERITY} from '../../utils/disks/constants';
8
9
  import type {
9
- AllModeIndicatorsState,
10
10
  DiskIndicatorValue,
11
+ VDiskDisplayState,
11
12
  VDiskDisplayStateGetter,
12
13
  } from '../../utils/disks/displayState';
13
14
  import {getDefaultDiskDisplayState} from '../../utils/disks/displayState';
14
15
  import {getDiskBarTone} from '../../utils/disks/getDiskBarTone';
16
+ import {formatPDiskType} from '../../utils/disks/getPDiskType';
15
17
  import {getVDiskStatusIcon} from '../../utils/disks/helpers';
16
18
  import type {PreparedVDisk} from '../../utils/disks/types';
17
19
  import {isNumeric} from '../../utils/utils';
@@ -35,7 +37,6 @@ const EMPTY_ALL_MODE_INDICATORS = {};
35
37
  interface GetVDiskBarContentParams {
36
38
  allocatedPercent?: number;
37
39
  compact?: boolean;
38
- hidden: boolean;
39
40
  noDataPlaceholder?: React.ReactNode;
40
41
  severity: number;
41
42
  showAllocatedPercentLabel?: boolean;
@@ -45,16 +46,11 @@ interface GetVDiskBarContentParams {
45
46
  function getVDiskBarContent({
46
47
  allocatedPercent,
47
48
  compact,
48
- hidden,
49
49
  noDataPlaceholder,
50
50
  severity,
51
51
  showAllocatedPercentLabel,
52
52
  showNoDataPlaceholder,
53
53
  }: GetVDiskBarContentParams) {
54
- if (hidden) {
55
- return null;
56
- }
57
-
58
54
  const hasAllocatedPercent = isNumeric(allocatedPercent) && allocatedPercent >= 0;
59
55
  if (!compact && hasAllocatedPercent && showAllocatedPercentLabel !== false) {
60
56
  return <DiskBarLabel>{`${Math.floor(allocatedPercent)}%`}</DiskBarLabel>;
@@ -74,6 +70,9 @@ function getVDiskBarContent({
74
70
  interface GetVDiskBarIndicatorParams {
75
71
  hidden: boolean;
76
72
  icon?: DiskIndicatorValue;
73
+ indicatorClassName?: string;
74
+ iconGroupSize?: number;
75
+ iconSize?: number;
77
76
  isDonor?: boolean;
78
77
  placement: 'inline' | 'overlap';
79
78
  severity: number;
@@ -83,6 +82,9 @@ interface GetVDiskBarIndicatorParams {
83
82
  function getVDiskBarIndicator({
84
83
  hidden,
85
84
  icon,
85
+ indicatorClassName,
86
+ iconGroupSize,
87
+ iconSize,
86
88
  isDonor,
87
89
  placement,
88
90
  severity,
@@ -94,33 +96,49 @@ function getVDiskBarIndicator({
94
96
  }
95
97
 
96
98
  return {
97
- leading: <DiskIndicator value={resolvedIndicator} placement={placement} />,
99
+ leading: (
100
+ <DiskIndicator
101
+ value={resolvedIndicator}
102
+ placement={placement}
103
+ iconSize={iconSize}
104
+ iconGroupSize={iconGroupSize}
105
+ className={indicatorClassName}
106
+ />
107
+ ),
98
108
  overflowVisible: placement === 'overlap',
99
109
  showIndicator: true,
100
110
  };
101
111
  }
102
112
 
103
- function getAllModeOverlay(
104
- compact: boolean | undefined,
105
- isAllMode: boolean,
106
- indicators: AllModeIndicatorsState | undefined,
107
- ) {
108
- if (compact || !isAllMode) {
109
- return null;
113
+ function getFlagAccessibleName(flag: EFlag | undefined) {
114
+ switch (flag) {
115
+ case EFlag.Green:
116
+ case EFlag.Blue:
117
+ return i18n('value_ok');
118
+ case EFlag.Yellow:
119
+ return i18n('value_notice');
120
+ case EFlag.Orange:
121
+ return i18n('value_warning');
122
+ case EFlag.Red:
123
+ return i18n('value_impaired');
124
+ default:
125
+ return i18n('context_no-data');
110
126
  }
111
-
112
- return <AllModeIndicators indicators={indicators ?? EMPTY_ALL_MODE_INDICATORS} />;
113
127
  }
114
128
 
115
- function getAccessibleName(
116
- data: PreparedVDisk,
117
- hasIssues: boolean | undefined,
118
- isAllMode: boolean,
119
- ) {
120
- if (!isAllMode) {
121
- return undefined;
129
+ function getReplicationAccessibleName(replicated: boolean | undefined) {
130
+ if (replicated === undefined) {
131
+ return i18n('context_no-data');
122
132
  }
123
133
 
134
+ return i18n(
135
+ replicated
136
+ ? 'context_all-mode-replication-complete'
137
+ : 'context_all-mode-replication-in-progress',
138
+ );
139
+ }
140
+
141
+ function getAllModeAccessibleName(data: PreparedVDisk, hasIssues: boolean | undefined) {
124
142
  const noData = i18n('context_no-data');
125
143
  const health =
126
144
  hasIssues === undefined
@@ -132,20 +150,11 @@ function getAccessibleName(
132
150
  Number.isFinite(data.AllocatedPercent) && Number(data.AllocatedPercent) >= 0
133
151
  ? `${data.AllocatedPercent}%`
134
152
  : noData;
135
- const replication =
136
- data.Replicated === undefined
137
- ? noData
138
- : i18n(
139
- data.Replicated
140
- ? 'context_all-mode-replication-complete'
141
- : 'context_all-mode-replication-in-progress',
142
- );
143
-
144
153
  return i18n('context_all-mode-accessible-name', {
145
154
  vdiskId: data.StringifiedId || noData,
146
155
  health,
147
- state: data.VDiskState || noData,
148
- replication,
156
+ state: data.VDiskState || data.Status || noData,
157
+ replication: getReplicationAccessibleName(data.Replicated),
149
158
  capacityAlert: data.CapacityAlert || noData,
150
159
  frontQueues: data.FrontQueues || noData,
151
160
  freshCompaction: data.SatisfactionRank?.FreshRank?.Flag || noData,
@@ -154,9 +163,72 @@ function getAccessibleName(
154
163
  });
155
164
  }
156
165
 
166
+ function getAccessibleName(
167
+ data: PreparedVDisk,
168
+ {mode, allMode, isNoData, driveType}: VDiskDisplayState,
169
+ ) {
170
+ if (!mode) {
171
+ return undefined;
172
+ }
173
+ if (mode === 'all') {
174
+ return getAllModeAccessibleName(data, allMode?.hasIssues);
175
+ }
176
+
177
+ const noData = i18n('context_no-data');
178
+ let diskName = i18n(data.DonorMode ? 'context_donor-vdisk' : 'context_vdisk', {
179
+ vdiskId: data.StringifiedId || noData,
180
+ nodeId: data.NodeId ?? noData,
181
+ });
182
+ if (isNoData) {
183
+ const hasVDiskWhiteboardData = data.HasWhiteboardData ?? Boolean(data.VDiskId);
184
+ diskName = i18n(
185
+ mode === 'driveType' && hasVDiskWhiteboardData
186
+ ? 'context_pdisk-no-whiteboard'
187
+ : 'context_vdisk-no-whiteboard',
188
+ {disk: diskName, noData},
189
+ );
190
+ }
191
+
192
+ const {CapacityAlert, FrontQueues, SatisfactionRank, Replicated} = isNoData ? {} : data;
193
+ const {FreshRank, LevelRank} = SatisfactionRank ?? {};
194
+
195
+ switch (mode) {
196
+ case 'driveType':
197
+ return i18n('context_drive-type-accessible-name', {
198
+ disk: diskName,
199
+ driveType: formatPDiskType(driveType) || noData,
200
+ });
201
+ case 'state':
202
+ return i18n('context_state-accessible-name', {
203
+ disk: diskName,
204
+ state: data.VDiskState || data.Status || noData,
205
+ replication: getReplicationAccessibleName(Replicated),
206
+ });
207
+ case 'space':
208
+ return i18n('context_space-accessible-name', {
209
+ disk: diskName,
210
+ capacityAlert: isCapacityAlert(CapacityAlert) ? CapacityAlert : noData,
211
+ });
212
+ case 'frontQueues':
213
+ return i18n('context_front-queues-accessible-name', {
214
+ disk: diskName,
215
+ frontQueues: getFlagAccessibleName(FrontQueues),
216
+ });
217
+ case 'compaction':
218
+ return i18n('context_compaction-accessible-name', {
219
+ disk: diskName,
220
+ freshCompaction: getFlagAccessibleName(FreshRank?.Flag),
221
+ levelCompaction: getFlagAccessibleName(LevelRank?.Flag),
222
+ });
223
+ default:
224
+ return undefined;
225
+ }
226
+ }
227
+
157
228
  export interface VDiskProps {
158
229
  data?: PreparedVDisk;
159
230
  compact?: boolean;
231
+ allModeSize?: 's' | 'm';
160
232
  inactive?: boolean;
161
233
  showPopup?: boolean;
162
234
  onShowPopup?: VoidFunction;
@@ -165,16 +237,21 @@ export interface VDiskProps {
165
237
  delayOpen?: number;
166
238
  delayClose?: number;
167
239
  withIcon?: boolean;
240
+ iconSize?: number;
241
+ iconGroupSize?: number;
242
+ indicatorClassName?: string;
168
243
  highlighted?: boolean;
169
244
  placement?: PopupPlacement;
170
245
  popupOffset?: PopupProps['offset'];
171
246
  withOpaqueBackground?: boolean;
172
247
  getDisplayState?: VDiskDisplayStateGetter;
248
+ hidePDiskInPopup?: boolean;
173
249
  }
174
250
 
175
251
  export const VDisk = ({
176
252
  data = {},
177
253
  compact,
254
+ allModeSize,
178
255
  inactive,
179
256
  showPopup,
180
257
  onShowPopup,
@@ -183,11 +260,15 @@ export const VDisk = ({
183
260
  delayClose,
184
261
  delayOpen,
185
262
  withIcon,
263
+ iconSize,
264
+ iconGroupSize,
265
+ indicatorClassName,
186
266
  highlighted,
187
267
  placement = ['top', 'bottom', 'left', 'right'],
188
268
  popupOffset = DEFAULT_POPUP_OFFSET,
189
269
  withOpaqueBackground,
190
270
  getDisplayState,
271
+ hidePDiskInPopup,
191
272
  }: VDiskProps) => {
192
273
  const getVDiskLink = useVDiskPagePath();
193
274
  const vDiskPath = getVDiskLink({nodeId: data.NodeId, vDiskId: data.StringifiedId});
@@ -203,21 +284,25 @@ export const VDisk = ({
203
284
  icon,
204
285
  mode,
205
286
  isLegendInactive,
287
+ borderless,
206
288
  showNoDataPlaceholder,
207
289
  allocatedPercent,
208
290
  showAllocatedPercentLabel,
209
291
  striped,
210
292
  iconPlacement,
211
293
  allMode,
294
+ isNoData,
212
295
  } = displayState;
213
296
 
214
297
  const isAllMode = mode === 'all';
215
- const accessibleName = getAccessibleName(data, allMode?.hasIssues, isAllMode);
216
- const hideBarContent = Boolean(isLegendInactive && !isDonor);
298
+ const accessibleName = getAccessibleName(data, displayState);
217
299
  const {leading, overflowVisible, showIndicator} = getVDiskBarIndicator({
218
- hidden: hideBarContent,
300
+ hidden: Boolean(isLegendInactive && !isDonor),
219
301
  icon,
220
- isDonor,
302
+ indicatorClassName,
303
+ iconGroupSize,
304
+ iconSize,
305
+ isDonor: mode !== 'driveType' && isDonor,
221
306
  placement: iconPlacement,
222
307
  severity,
223
308
  withIcon,
@@ -226,18 +311,25 @@ export const VDisk = ({
226
311
  const barContent = getVDiskBarContent({
227
312
  allocatedPercent,
228
313
  compact,
229
- hidden: hideBarContent,
230
314
  noDataPlaceholder,
231
315
  severity,
232
316
  showAllocatedPercentLabel,
233
317
  showNoDataPlaceholder,
234
318
  });
235
- const overlay = getAllModeOverlay(compact, isAllMode, allMode?.indicators);
319
+ const overlay =
320
+ !compact && isAllMode && !isNoData ? (
321
+ <AllModeIndicators
322
+ indicators={allMode?.indicators ?? EMPTY_ALL_MODE_INDICATORS}
323
+ size={allModeSize}
324
+ />
325
+ ) : null;
236
326
  const tone = getDiskBarTone({
327
+ driveType: displayState.driveType,
237
328
  severity,
238
- isDonor,
329
+ isDonor: mode !== 'driveType' && isDonor,
239
330
  showIndicator,
240
331
  indicator: icon,
332
+ isNoData,
241
333
  });
242
334
 
243
335
  return (
@@ -245,7 +337,12 @@ export const VDisk = ({
245
337
  showPopup={showPopup}
246
338
  onShowPopup={onShowPopup}
247
339
  onHidePopup={onHidePopup}
248
- renderPopupContent={({onClose}) => <VDiskPopup data={data} onClose={onClose} />}
340
+ renderPopupContent={({onClose}) => (
341
+ <VDiskPopup
342
+ data={hidePDiskInPopup ? {...data, PDisk: undefined} : data}
343
+ onClose={onClose}
344
+ />
345
+ )}
249
346
  offset={popupOffset}
250
347
  delayClose={delayClose}
251
348
  delayOpen={delayOpen}
@@ -275,7 +372,7 @@ export const VDisk = ({
275
372
  overlay={overlay}
276
373
  highlighted={highlighted}
277
374
  strongFill={allMode?.hasIssues}
278
- borderless={isLegendInactive}
375
+ borderless={borderless}
279
376
  overflowVisible={overflowVisible}
280
377
  />
281
378
  </InternalLink>
@@ -8,13 +8,17 @@ import {Stack} from '../Stack/Stack';
8
8
  import type {VDiskProps} from './VDisk';
9
9
  import {VDisk} from './VDisk';
10
10
 
11
- interface VDiskWithDonorsStackProps extends Omit<VDiskProps, 'withOpaqueBackground'> {
11
+ interface VDiskWithDonorsStackProps
12
+ extends Omit<VDiskProps, 'withOpaqueBackground' | 'hidePDiskInPopup'> {
12
13
  data?: PreparedVDisk;
13
14
  className?: string;
14
15
  stackClassName?: string;
15
16
  highlightedVDisk?: string;
16
17
  setHighlightedVDisk?: (id?: string) => void;
17
18
  progressBarClassName?: string;
19
+ renderContent?: boolean;
20
+ placeholderProps?: React.HTMLAttributes<HTMLDivElement>;
21
+ hideMainPDiskInPopup?: boolean;
18
22
  }
19
23
 
20
24
  const diskInStackPlacement: PopupPlacement = ['left', 'right'];
@@ -27,12 +31,15 @@ export function VDiskWithDonorsStack({
27
31
  stackClassName,
28
32
  withIcon,
29
33
  compact,
34
+ hideMainPDiskInPopup,
30
35
  highlightedVDisk,
31
36
  setHighlightedVDisk,
32
37
  showPopup: _showPopup,
33
38
  onShowPopup: _onShowPopup,
34
39
  onHidePopup: _onHidePopup,
35
40
  highlighted: _highlighted,
41
+ renderContent = true,
42
+ placeholderProps,
36
43
  ...restProps
37
44
  }: VDiskWithDonorsStackProps) {
38
45
  const donors = data?.Donors ?? EMPTY_DONORS;
@@ -44,7 +51,7 @@ export function VDiskWithDonorsStack({
44
51
  const [internalHighlightedVDisk, setInternalHighlightedVDisk] = React.useState<string>();
45
52
 
46
53
  const donorIds = React.useMemo(
47
- () => new Set(donors?.map((donor) => donor.StringifiedId) ?? []),
54
+ () => new Set(donors.map((donor) => donor.StringifiedId)),
48
55
  [donors],
49
56
  );
50
57
 
@@ -65,11 +72,19 @@ export function VDiskWithDonorsStack({
65
72
  setHighlightedVDisk?.(undefined);
66
73
  }, [setHighlightedVDisk]);
67
74
 
75
+ // Keep the stack's state and popup anchors until a main/donor interaction finishes.
76
+ if (!renderContent && !isHighlighted && !highlightedVDiskInStack) {
77
+ return (
78
+ <div className={className} data-disk-id={stackId} tabIndex={-1} {...placeholderProps} />
79
+ );
80
+ }
81
+
68
82
  // Spread restProps first, then explicitly override critical fields to prevent
69
83
  // external code from breaking the stack's highlight/popup coordination.
70
84
  const mainVDiskProps: Partial<VDiskProps> = {
71
85
  ...restProps,
72
86
  compact,
87
+ hidePDiskInPopup: hideMainPDiskInPopup,
73
88
  withIcon,
74
89
  showPopup: isHighlighted,
75
90
  highlighted: isHighlighted,
@@ -107,7 +122,7 @@ export function VDiskWithDonorsStack({
107
122
  highlighted={donor.StringifiedId === internalHighlightedVDisk}
108
123
  onShowPopup={() => {
109
124
  if (donor.StringifiedId) {
110
- setInternalHighlightedVDisk?.(donor.StringifiedId);
125
+ setInternalHighlightedVDisk(donor.StringifiedId);
111
126
  }
112
127
  }}
113
128
  onHidePopup={() => {
@@ -121,5 +136,9 @@ export function VDiskWithDonorsStack({
121
136
  <VDisk data={data} withIcon={withIcon} {...mainVDiskProps} />
122
137
  );
123
138
 
124
- return <div className={className}>{content}</div>;
139
+ return (
140
+ <div className={className} data-disk-id={stackId} tabIndex={-1}>
141
+ {content}
142
+ </div>
143
+ );
125
144
  }
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "context_no-data": "N/D",
3
+ "context_vdisk": "VDisk {{vdiskId}} on node {{nodeId}}",
4
+ "context_donor-vdisk": "Donor VDisk {{vdiskId}} on node {{nodeId}}",
5
+ "context_vdisk-no-whiteboard": "{{disk}}. Whiteboard: {{noData}}",
6
+ "context_pdisk-no-whiteboard": "{{disk}}. PDisk Whiteboard: {{noData}}",
7
+ "context_state-accessible-name": "{{disk}}. State: {{state}}. Replication: {{replication}}.",
8
+ "context_space-accessible-name": "{{disk}}. Capacity alert: {{capacityAlert}}.",
9
+ "context_front-queues-accessible-name": "{{disk}}. Front queues: {{frontQueues}}.",
10
+ "context_compaction-accessible-name": "{{disk}}. Fresh compaction: {{freshCompaction}}. Level compaction: {{levelCompaction}}.",
11
+ "value_ok": "OK",
12
+ "value_notice": "Notice",
13
+ "value_warning": "Warning",
14
+ "value_impaired": "Impaired",
3
15
  "context_all-mode-health-healthy": "healthy",
4
16
  "context_all-mode-health-issues": "issues detected",
5
17
  "context_all-mode-replication-complete": "complete",
6
18
  "context_all-mode-replication-in-progress": "in progress",
7
- "context_all-mode-accessible-name": "VDisk {{vdiskId}}. Health: {{health}}. State: {{state}}. Replication: {{replication}}. Capacity alert: {{capacityAlert}}. Front queues: {{frontQueues}}. Fresh compaction: {{freshCompaction}}. Level compaction: {{levelCompaction}}. Allocated: {{allocatedPercent}}."
19
+ "context_all-mode-accessible-name": "VDisk {{vdiskId}}. Health: {{health}}. State: {{state}}. Replication: {{replication}}. Capacity alert: {{capacityAlert}}. Front queues: {{frontQueues}}. Fresh compaction: {{freshCompaction}}. Level compaction: {{levelCompaction}}. Allocated: {{allocatedPercent}}.",
20
+ "context_drive-type-accessible-name": "{{disk}}. Drive type: {{driveType}}."
8
21
  }
@@ -2,7 +2,7 @@ import DataTable from '@gravity-ui/react-data-table';
2
2
  import {DefinitionList, Tooltip} from '@gravity-ui/uikit';
3
3
 
4
4
  import type {PreparedStorageNode} from '../../store/reducers/storage/types';
5
- import type {TMemoryStats, TPoolStats} from '../../types/api/nodes';
5
+ import type {TEndpoint, TMemoryStats, TPoolStats} from '../../types/api/nodes';
6
6
  import type {TTabletStateInfo} from '../../types/api/tablet';
7
7
  import {valueIsDefined} from '../../utils';
8
8
  import {cn} from '../../utils/cn';
@@ -59,6 +59,18 @@ export function getHostColumn<T extends PreparedStorageNode>({
59
59
  };
60
60
  }
61
61
 
62
+ export function getICPortColumn<T extends {Endpoints?: TEndpoint[]}>(): Column<T> {
63
+ return {
64
+ name: NODES_COLUMNS_IDS.ICPort,
65
+ header: NODES_COLUMNS_TITLES.ICPort,
66
+ render: ({row}) =>
67
+ row.Endpoints?.find(({Name}) => Name === 'ic')?.Address?.replace(/^:/, '') ||
68
+ EMPTY_DATA_PLACEHOLDER,
69
+ width: 100,
70
+ align: DataTable.RIGHT,
71
+ };
72
+ }
73
+
62
74
  // Different column for different set of required fields
63
75
  // ConnectStatus is required here, it makes handler to return network stats
64
76
  // On versions before 25-1-2 ConnectStatus also makes handler to return peers - it can significantly increase response size
@@ -12,6 +12,7 @@ export const NODES_COLUMNS_WIDTH_LS_KEY = 'nodesTableColumnsWidth';
12
12
  export const NODES_COLUMNS_IDS = {
13
13
  NodeId: 'NodeId',
14
14
  Host: 'Host',
15
+ ICPort: 'ICPort',
15
16
  NetworkHost: 'NetworkHost',
16
17
  Database: 'Database',
17
18
  NodeName: 'NodeName',
@@ -67,6 +68,9 @@ export const NODES_COLUMNS_TITLES = {
67
68
  get Host() {
68
69
  return i18n('host');
69
70
  },
71
+ get ICPort() {
72
+ return i18n('field_ic-port');
73
+ },
70
74
  get NetworkHost() {
71
75
  return i18n('host');
72
76
  },
@@ -219,6 +223,7 @@ export function getNodesGroupByFieldTitle(groupByField: NodesGroupByField) {
219
223
  export const NODES_COLUMNS_TO_DATA_FIELDS: Record<NodesColumnId, NodesRequiredField[]> = {
220
224
  NodeId: ['NodeId'],
221
225
  Host: ['Host', 'Rack', 'Database', 'SystemState'],
226
+ ICPort: ['SystemState'],
222
227
  NetworkHost: ['Host', 'Rack', 'Database', 'SystemState', 'ConnectStatus'],
223
228
  Database: ['Database'],
224
229
  NodeName: ['NodeName'],
@@ -253,6 +258,7 @@ export const NODES_COLUMNS_TO_DATA_FIELDS: Record<NodesColumnId, NodesRequiredFi
253
258
  const NODES_COLUMNS_TO_SORT_FIELDS: Record<NodesColumnId, NodesSortValue | undefined> = {
254
259
  NodeId: 'NodeId',
255
260
  Host: 'Host',
261
+ ICPort: undefined,
256
262
  NetworkHost: 'Host',
257
263
  Database: 'Database',
258
264
  NodeName: 'NodeName',
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "node-id": "Node ID",
3
3
  "host": "Host",
4
+ "field_ic-port": "IC port",
4
5
  "database": "Database",
5
6
  "node-name": "Node Name",
6
7
  "dc": "DC",
@@ -17,7 +18,7 @@
17
18
  "load": "Load",
18
19
  "sessions": "Sessions",
19
20
  "missing": "Missing",
20
- "pdisks": "PDisks",
21
+ "pdisks": "PDisks & VDisks",
21
22
  "field_memory-used": "Memory used",
22
23
  "field_memory-limit": "Memory limit",
23
24
  "field_pile-name": "Pile Name",
@@ -19,8 +19,9 @@ import {
19
19
  selectStatusFilter,
20
20
  selectVersionFilter,
21
21
  } from '../../store/reducers/clusters/selectors';
22
+ import type {PreparedCluster} from '../../store/reducers/clusters/types';
22
23
  import {uiFactory} from '../../uiFactory/uiFactory';
23
- import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
24
+ import {DEFAULT_TABLE_SETTINGS, EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
24
25
  import {useAutoRefreshInterval, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
25
26
  import {useSelectedColumns} from '../../utils/hooks/useSelectedColumns';
26
27
  import {getMinorVersion} from '../../utils/versions';
@@ -35,6 +36,7 @@ import {
35
36
  } from './constants';
36
37
  import i18n from './i18n';
37
38
  import {b} from './shared';
39
+ import {calculateClusterPath} from './utils';
38
40
 
39
41
  import './Clusters.scss';
40
42
 
@@ -87,7 +89,9 @@ export function Clusters({scrollContainerRef}: ClustersProps) {
87
89
  const handleDrawerClose = React.useCallback(() => {
88
90
  setHealthcheckClusterName(undefined);
89
91
  }, []);
90
-
92
+ const openCluster = React.useCallback((row: PreparedCluster) => {
93
+ window.location.assign(calculateClusterPath(row));
94
+ }, []);
91
95
  const rawColumns = React.useMemo(() => {
92
96
  return getClustersColumns({
93
97
  isEditClusterAvailable,
@@ -197,6 +201,7 @@ export function Clusters({scrollContainerRef}: ClustersProps) {
197
201
  return (
198
202
  <React.Fragment>
199
203
  <Search
204
+ tableFilter
200
205
  placeholder={i18n('controls_search-placeholder')}
201
206
  endContent={<Icon data={Magnifier} className={b('search-icon')} />}
202
207
  onChange={changeClusterName}
@@ -283,18 +288,25 @@ export function Clusters({scrollContainerRef}: ClustersProps) {
283
288
 
284
289
  const renderContent = () => {
285
290
  return (
286
- <ResizeableDataTable
287
- isLoading={query.isLoading}
288
- columnsWidthLSKey={CLUSTERS_COLUMNS_WIDTH_LS_KEY}
289
- wrapperClassName={b('table')}
290
- data={filteredClusters}
291
- columns={filteredColumnsToShow}
292
- settings={{...DEFAULT_TABLE_SETTINGS, dynamicRender: false}}
293
- initialSortOrder={{
294
- columnId: COLUMNS_NAMES.TITLE,
295
- order: DataTable.ASCENDING,
296
- }}
297
- />
291
+ <div>
292
+ <ResizeableDataTable
293
+ onKeyboardActivate={openCluster}
294
+ getKeyboardRowKey={(cluster) => cluster.name}
295
+ getKeyboardRowLabel={(cluster) =>
296
+ cluster.title || cluster.name || EMPTY_DATA_PLACEHOLDER
297
+ }
298
+ isLoading={query.isLoading}
299
+ columnsWidthLSKey={CLUSTERS_COLUMNS_WIDTH_LS_KEY}
300
+ wrapperClassName={b('table')}
301
+ data={filteredClusters}
302
+ columns={filteredColumnsToShow}
303
+ settings={{...DEFAULT_TABLE_SETTINGS, dynamicRender: false}}
304
+ initialSortOrder={{
305
+ columnId: COLUMNS_NAMES.TITLE,
306
+ order: DataTable.ASCENDING,
307
+ }}
308
+ />
309
+ </div>
298
310
  );
299
311
  };
300
312
 
@@ -304,22 +316,28 @@ export function Clusters({scrollContainerRef}: ClustersProps) {
304
316
  isVisible={Boolean(healthcheckClusterName)}
305
317
  onClose={handleDrawerClose}
306
318
  >
307
- <TableWithControlsLayout fullHeight className={b(null)}>
308
- <TableWithControlsLayout.Controls
309
- className={b('controls')}
310
- renderExtraControls={renderColumnSetup}
311
- >
312
- {renderControls()}
313
- </TableWithControlsLayout.Controls>
314
- {query.isError ? <ResponseError error={query.error} /> : null}
315
- {renderClustersCount()}
316
- <TableWithControlsLayout.Table
317
- scrollContainerRef={scrollContainerRef}
318
- className={b('table-wrapper')}
319
+ <div>
320
+ <TableWithControlsLayout
321
+ fullHeight
322
+ className={b(null)}
323
+ keyboardNavigationResetKey={JSON.stringify([status, service, version, galaxy])}
319
324
  >
320
- {renderContent()}
321
- </TableWithControlsLayout.Table>
322
- </TableWithControlsLayout>
325
+ <TableWithControlsLayout.Controls
326
+ className={b('controls')}
327
+ renderExtraControls={renderColumnSetup}
328
+ >
329
+ {renderControls()}
330
+ </TableWithControlsLayout.Controls>
331
+ {query.isError ? <ResponseError error={query.error} /> : null}
332
+ {renderClustersCount()}
333
+ <TableWithControlsLayout.Table
334
+ scrollContainerRef={scrollContainerRef}
335
+ className={b('table-wrapper')}
336
+ >
337
+ <div>{renderContent()}</div>
338
+ </TableWithControlsLayout.Table>
339
+ </TableWithControlsLayout>
340
+ </div>
323
341
  </ClusterDrawerHealthcheck>
324
342
  );
325
343
  }