ydb-embedded-ui 21.1.0 → 22.1.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 (658) hide show
  1. package/dist/components/ComponentsProvider/ComponentsProvider.d.ts +0 -4
  2. package/dist/components/ComponentsProvider/componentsRegistry.d.ts +0 -2
  3. package/dist/components/ComponentsProvider/componentsRegistry.js +1 -3
  4. package/dist/components/ComponentsProvider/componentsRegistry.js.map +1 -1
  5. package/dist/components/ContentWithPopup/ContentWithPopup.d.ts +1 -1
  6. package/dist/components/ContentWithPopup/ContentWithPopup.js +4 -2
  7. package/dist/components/ContentWithPopup/ContentWithPopup.js.map +1 -1
  8. package/dist/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.d.ts +2 -1
  9. package/dist/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.js +5 -2
  10. package/dist/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.js.map +1 -1
  11. package/dist/components/DiskStateProgressBar/AllModeIndicators.d.ts +2 -1
  12. package/dist/components/DiskStateProgressBar/AllModeIndicators.js +4 -2
  13. package/dist/components/DiskStateProgressBar/AllModeIndicators.js.map +1 -1
  14. package/dist/components/DiskStateProgressBar/DiskIndicator.d.ts +7 -2
  15. package/dist/components/DiskStateProgressBar/DiskIndicator.js +6 -6
  16. package/dist/components/DiskStateProgressBar/DiskIndicator.js.map +1 -1
  17. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.js +1 -1
  18. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.js.map +1 -1
  19. package/dist/components/DiskStateProgressBar/DiskStateProgressBar.scss +53 -45
  20. package/dist/components/DiskStateProgressBar/PDiskAllModeIndicators.js +9 -1
  21. package/dist/components/DiskStateProgressBar/PDiskAllModeIndicators.js.map +1 -1
  22. package/dist/components/EvictVDiskButton/EvictVDiskButton.js +7 -3
  23. package/dist/components/EvictVDiskButton/EvictVDiskButton.js.map +1 -1
  24. package/dist/components/FullNodeViewer/FullNodeViewer.js +40 -17
  25. package/dist/components/FullNodeViewer/FullNodeViewer.js.map +1 -1
  26. package/dist/components/FullNodeViewer/FullNodeViewer.scss +3 -3
  27. package/dist/components/FullNodeViewer/i18n/en.json +2 -1
  28. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  29. package/dist/components/HoverPopup/HoverPopup.js +36 -6
  30. package/dist/components/HoverPopup/HoverPopup.js.map +1 -1
  31. package/dist/components/HoverPopup/getPopupScrollContainer.d.ts +1 -0
  32. package/dist/components/HoverPopup/getPopupScrollContainer.js +20 -0
  33. package/dist/components/HoverPopup/getPopupScrollContainer.js.map +1 -0
  34. package/dist/components/InfoViewer/InfoViewer.js +1 -1
  35. package/dist/components/InfoViewer/InfoViewer.js.map +1 -1
  36. package/dist/components/InfoViewer/formatters/pqGroup.js +6 -1
  37. package/dist/components/InfoViewer/formatters/pqGroup.js.map +1 -1
  38. package/dist/components/InfoViewer/schemaInfo/i18n/en.json +1 -0
  39. package/dist/components/InfoViewer/schemaInfo/i18n/index.d.ts +1 -1
  40. package/dist/components/InfoViewer/schemaInfo/utils.js +6 -1
  41. package/dist/components/InfoViewer/schemaInfo/utils.js.map +1 -1
  42. package/dist/components/MetricChart/reducer.d.ts +2 -2
  43. package/dist/components/NodeHostWrapper/NodeHostWrapper.d.ts +4 -1
  44. package/dist/components/NodeHostWrapper/NodeHostWrapper.js +13 -9
  45. package/dist/components/NodeHostWrapper/NodeHostWrapper.js.map +1 -1
  46. package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
  47. package/dist/components/PaginatedTable/KeyboardNavigation.d.ts +9 -0
  48. package/dist/components/PaginatedTable/KeyboardNavigation.js +14 -0
  49. package/dist/components/PaginatedTable/KeyboardNavigation.js.map +1 -0
  50. package/dist/components/PaginatedTable/PaginatedTable.d.ts +4 -1
  51. package/dist/components/PaginatedTable/PaginatedTable.js +77 -4
  52. package/dist/components/PaginatedTable/PaginatedTable.js.map +1 -1
  53. package/dist/components/PaginatedTable/PaginatedTable.scss +10 -0
  54. package/dist/components/PaginatedTable/PaginatedTableWithLayout.d.ts +2 -1
  55. package/dist/components/PaginatedTable/PaginatedTableWithLayout.js +2 -2
  56. package/dist/components/PaginatedTable/PaginatedTableWithLayout.js.map +1 -1
  57. package/dist/components/PaginatedTable/ResizeablePaginatedTable.js +2 -1
  58. package/dist/components/PaginatedTable/ResizeablePaginatedTable.js.map +1 -1
  59. package/dist/components/PaginatedTable/TableChunk.js +6 -10
  60. package/dist/components/PaginatedTable/TableChunk.js.map +1 -1
  61. package/dist/components/PaginatedTable/TableChunksRenderer.d.ts +2 -1
  62. package/dist/components/PaginatedTable/TableChunksRenderer.js +6 -1
  63. package/dist/components/PaginatedTable/TableChunksRenderer.js.map +1 -1
  64. package/dist/components/PaginatedTable/TableRow.d.ts +3 -1
  65. package/dist/components/PaginatedTable/TableRow.js +24 -8
  66. package/dist/components/PaginatedTable/TableRow.js.map +1 -1
  67. package/dist/components/PaginatedTable/getTableChunkQueryParams.d.ts +23 -0
  68. package/dist/components/PaginatedTable/getTableChunkQueryParams.js +12 -0
  69. package/dist/components/PaginatedTable/getTableChunkQueryParams.js.map +1 -0
  70. package/dist/components/PaginatedTable/rowLookup.d.ts +8 -0
  71. package/dist/components/PaginatedTable/rowLookup.js +35 -0
  72. package/dist/components/PaginatedTable/rowLookup.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/SegmentedProgress/SegmentedProgress.d.ts +22 -1
  90. package/dist/components/SegmentedProgress/SegmentedProgress.js +44 -3
  91. package/dist/components/SegmentedProgress/SegmentedProgress.js.map +1 -1
  92. package/dist/components/SegmentedProgress/SegmentedProgress.scss +5 -0
  93. package/dist/components/ShardsTable/columns.js +6 -3
  94. package/dist/components/ShardsTable/columns.js.map +1 -1
  95. package/dist/components/ShardsTable/i18n/en.json +1 -0
  96. package/dist/components/ShardsTable/i18n/index.d.ts +1 -1
  97. package/dist/components/StorageGroupInfo/StorageGroupInfo.js +1 -13
  98. package/dist/components/StorageGroupInfo/StorageGroupInfo.js.map +1 -1
  99. package/dist/components/StorageGroupInfo/i18n/en.json +0 -1
  100. package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
  101. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.d.ts +54 -0
  102. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.js +389 -0
  103. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.js.map +1 -0
  104. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.scss +16 -0
  105. package/dist/components/TableKeyboardNavigation/i18n/en.json +4 -0
  106. package/dist/components/TableKeyboardNavigation/i18n/index.d.ts +2 -0
  107. package/dist/components/TableKeyboardNavigation/i18n/index.js +4 -0
  108. package/dist/components/TableKeyboardNavigation/i18n/index.js.map +1 -0
  109. package/dist/components/TableKeyboardNavigation/utils.d.ts +3 -0
  110. package/dist/components/TableKeyboardNavigation/utils.js +24 -0
  111. package/dist/components/TableKeyboardNavigation/utils.js.map +1 -0
  112. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.d.ts +4 -1
  113. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.js +4 -2
  114. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.js.map +1 -1
  115. package/dist/components/TenantNameWrapper/TenantNameWrapper.d.ts +3 -1
  116. package/dist/components/TenantNameWrapper/TenantNameWrapper.js +8 -12
  117. package/dist/components/TenantNameWrapper/TenantNameWrapper.js.map +1 -1
  118. package/dist/components/TenantNameWrapper/utils.d.ts +10 -0
  119. package/dist/components/TenantNameWrapper/utils.js +11 -0
  120. package/dist/components/TenantNameWrapper/utils.js.map +1 -1
  121. package/dist/components/UptimeViewer/UptimeViewer.d.ts +2 -2
  122. package/dist/components/VDisk/VDisk.d.ts +5 -1
  123. package/dist/components/VDisk/VDisk.js +84 -29
  124. package/dist/components/VDisk/VDisk.js.map +1 -1
  125. package/dist/components/VDisk/VDiskWithDonorsStack.d.ts +4 -1
  126. package/dist/components/VDisk/VDiskWithDonorsStack.js +8 -4
  127. package/dist/components/VDisk/VDiskWithDonorsStack.js.map +1 -1
  128. package/dist/components/VDisk/i18n/en.json +11 -0
  129. package/dist/components/VDisk/i18n/index.d.ts +1 -1
  130. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  131. package/dist/components/nodesColumns/columns.d.ts +4 -1
  132. package/dist/components/nodesColumns/columns.js +13 -0
  133. package/dist/components/nodesColumns/columns.js.map +1 -1
  134. package/dist/components/nodesColumns/constants.d.ts +2 -0
  135. package/dist/components/nodesColumns/constants.js +6 -0
  136. package/dist/components/nodesColumns/constants.js.map +1 -1
  137. package/dist/components/nodesColumns/i18n/en.json +2 -1
  138. package/dist/components/nodesColumns/i18n/index.d.ts +1 -1
  139. package/dist/containers/App/App.js +3 -3
  140. package/dist/containers/App/App.js.map +1 -1
  141. package/dist/containers/Cluster/ClusterInfo/ClusterInfo.js +8 -5
  142. package/dist/containers/Cluster/ClusterInfo/ClusterInfo.js.map +1 -1
  143. package/dist/containers/Cluster/ClusterInfo/ClusterInfo.scss +8 -0
  144. package/dist/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/DiskGroupsStats.d.ts +4 -3
  145. package/dist/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/DiskGroupsStats.js +62 -25
  146. package/dist/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/DiskGroupsStats.js.map +1 -1
  147. package/dist/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/DiskGroupsStats.scss +18 -0
  148. package/dist/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/utils.d.ts +22 -0
  149. package/dist/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/utils.js +49 -0
  150. package/dist/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/utils.js.map +1 -0
  151. package/dist/containers/Cluster/i18n/en.json +13 -4
  152. package/dist/containers/Cluster/i18n/index.d.ts +1 -1
  153. package/dist/containers/Clusters/Clusters.js +11 -7
  154. package/dist/containers/Clusters/Clusters.js.map +1 -1
  155. package/dist/containers/Node/Node.js +20 -17
  156. package/dist/containers/Node/Node.js.map +1 -1
  157. package/dist/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.js +1 -1
  158. package/dist/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.js.map +1 -1
  159. package/dist/containers/Node/NodeNetwork/NodeNetworkTable.js +11 -1
  160. package/dist/containers/Node/NodeNetwork/NodeNetworkTable.js.map +1 -1
  161. package/dist/containers/Node/NodePages.d.ts +3 -9
  162. package/dist/containers/Node/NodePages.js +2 -10
  163. package/dist/containers/Node/NodePages.js.map +1 -1
  164. package/dist/containers/Node/Threads/ThreadStatesBar/ThreadStatesBar.d.ts +1 -1
  165. package/dist/containers/Node/i18n/en.json +0 -3
  166. package/dist/containers/Node/i18n/index.d.ts +1 -1
  167. package/dist/containers/Nodes/NodesControls/NodesControls.js +1 -1
  168. package/dist/containers/Nodes/NodesControls/NodesControls.js.map +1 -1
  169. package/dist/containers/Nodes/NodesTable.js +13 -2
  170. package/dist/containers/Nodes/NodesTable.js.map +1 -1
  171. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +1 -1
  172. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -1
  173. package/dist/containers/Nodes/columns/columns.js +2 -1
  174. package/dist/containers/Nodes/columns/columns.js.map +1 -1
  175. package/dist/containers/Storage/Disks/Disks.d.ts +2 -1
  176. package/dist/containers/Storage/Disks/Disks.js +34 -23
  177. package/dist/containers/Storage/Disks/Disks.js.map +1 -1
  178. package/dist/containers/Storage/Disks/Disks.scss +5 -0
  179. package/dist/containers/Storage/PDisk/PDisk.d.ts +6 -9
  180. package/dist/containers/Storage/PDisk/PDisk.js +92 -37
  181. package/dist/containers/Storage/PDisk/PDisk.js.map +1 -1
  182. package/dist/containers/Storage/PDisk/PDisk.scss +79 -1
  183. package/dist/containers/Storage/PDisk/PDiskWithVDisks.d.ts +17 -0
  184. package/dist/containers/Storage/PDisk/PDiskWithVDisks.js +48 -0
  185. package/dist/containers/Storage/PDisk/PDiskWithVDisks.js.map +1 -0
  186. package/dist/containers/Storage/PDisk/i18n/en.json +8 -0
  187. package/dist/containers/Storage/PDisk/i18n/index.d.ts +1 -1
  188. package/dist/containers/Storage/PDisk/index.d.ts +1 -0
  189. package/dist/containers/Storage/PDisk/index.js +1 -0
  190. package/dist/containers/Storage/PDisk/index.js.map +1 -1
  191. package/dist/containers/Storage/PDisks/PDisks.d.ts +4 -1
  192. package/dist/containers/Storage/PDisks/PDisks.js +52 -6
  193. package/dist/containers/Storage/PDisks/PDisks.js.map +1 -1
  194. package/dist/containers/Storage/PaginatedStorage.js +3 -1
  195. package/dist/containers/Storage/PaginatedStorage.js.map +1 -1
  196. package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.js +1 -2
  197. package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.js.map +1 -1
  198. package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.js +2 -2
  199. package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.js.map +1 -1
  200. package/dist/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.js +12 -4
  201. package/dist/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.js.map +1 -1
  202. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/constants.d.ts +2 -2
  203. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
  204. package/dist/containers/Storage/PaginatedStorageGroupsTable/getGroups.d.ts +1 -1
  205. package/dist/containers/Storage/PaginatedStorageGroupsTable/getGroups.js +2 -3
  206. package/dist/containers/Storage/PaginatedStorageGroupsTable/getGroups.js.map +1 -1
  207. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.d.ts +1 -0
  208. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js +8 -5
  209. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js.map +1 -1
  210. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js +6 -3
  211. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js.map +1 -1
  212. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js +17 -5
  213. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js.map +1 -1
  214. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.d.ts +16 -0
  215. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.js +68 -0
  216. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.js.map +1 -0
  217. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.d.ts +2 -1
  218. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js +14 -2
  219. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js.map +1 -1
  220. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/columns.js +2 -2
  221. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/columns.js.map +1 -1
  222. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/hooks.js +7 -2
  223. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/hooks.js.map +1 -1
  224. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/types.d.ts +2 -0
  225. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.d.ts +5 -0
  226. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.js +31 -0
  227. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.js.map +1 -0
  228. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.d.ts +5 -0
  229. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.js +31 -0
  230. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.js.map +1 -0
  231. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.d.ts +21 -0
  232. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.js +13 -0
  233. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.js.map +1 -0
  234. package/dist/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.js +1 -0
  235. package/dist/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.js.map +1 -1
  236. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.js +1 -0
  237. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.js.map +1 -1
  238. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.js +3 -2
  239. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.js.map +1 -1
  240. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.js +1 -0
  241. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.js.map +1 -1
  242. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.js +4 -4
  243. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.js.map +1 -1
  244. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.js +3 -3
  245. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.js.map +1 -1
  246. package/dist/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.d.ts +1 -1
  247. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.d.ts +4 -0
  248. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.js +49 -0
  249. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.js.map +1 -0
  250. package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +20 -0
  251. package/dist/containers/Storage/StorageExpertModePanel/constants.js +22 -0
  252. package/dist/containers/Storage/StorageExpertModePanel/constants.js.map +1 -1
  253. package/dist/containers/Storage/StorageExpertModePanel/i18n/en.json +2 -2
  254. package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
  255. package/dist/containers/Storage/TableGroup/TableGroup.js +2 -1
  256. package/dist/containers/Storage/TableGroup/TableGroup.js.map +1 -1
  257. package/dist/containers/Storage/VDisks/VDisks.d.ts +2 -1
  258. package/dist/containers/Storage/VDisks/VDisks.js +11 -4
  259. package/dist/containers/Storage/VDisks/VDisks.js.map +1 -1
  260. package/dist/containers/Storage/VDisks/VDisks.scss +3 -0
  261. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.d.ts +1 -0
  262. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.js +73 -102
  263. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.js.map +1 -1
  264. package/dist/containers/Storage/useStorageQueryParams.d.ts +9 -1
  265. package/dist/containers/Storage/useStorageQueryParams.js +50 -2
  266. package/dist/containers/Storage/useStorageQueryParams.js.map +1 -1
  267. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.d.ts +1 -0
  268. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.js +50 -13
  269. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.js.map +1 -1
  270. package/dist/containers/Storage/utils/useStorageColumnsSettings.d.ts +4 -1
  271. package/dist/containers/Storage/utils/useStorageColumnsSettings.js +49 -39
  272. package/dist/containers/Storage/utils/useStorageColumnsSettings.js.map +1 -1
  273. package/dist/containers/Storage/utils/useVirtualizedDiskList.d.ts +10 -0
  274. package/dist/containers/Storage/utils/useVirtualizedDiskList.js +131 -0
  275. package/dist/containers/Storage/utils/useVirtualizedDiskList.js.map +1 -0
  276. package/dist/containers/StorageGroupPage/StorageGroupPage.js +2 -3
  277. package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
  278. package/dist/containers/Tablet/Tablet.js +4 -2
  279. package/dist/containers/Tablet/Tablet.js.map +1 -1
  280. package/dist/containers/Tablet/components/TabletControls/TabletControls.js +3 -1
  281. package/dist/containers/Tablet/components/TabletControls/TabletControls.js.map +1 -1
  282. package/dist/containers/Tablet/components/TabletInfo/TabletInfo.js +9 -3
  283. package/dist/containers/Tablet/components/TabletInfo/TabletInfo.js.map +1 -1
  284. package/dist/containers/Tablets/TabletsTable.js +25 -1
  285. package/dist/containers/Tablets/TabletsTable.js.map +1 -1
  286. package/dist/containers/Tablets/i18n/en.json +2 -1
  287. package/dist/containers/Tablets/i18n/index.d.ts +1 -1
  288. package/dist/containers/Tenant/Diagnostics/Overview/AsyncReplicationPaths/i18n/index.d.ts +1 -1
  289. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +2 -1
  290. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js.map +1 -1
  291. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.d.ts +7 -0
  292. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.js +69 -0
  293. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.js.map +1 -0
  294. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/en.json +9 -0
  295. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.d.ts +2 -0
  296. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.js +5 -0
  297. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.js.map +1 -0
  298. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.d.ts +1 -0
  299. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.js +2 -0
  300. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.js.map +1 -0
  301. package/dist/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.js +3 -3
  302. package/dist/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.js.map +1 -1
  303. package/dist/containers/Tenant/Diagnostics/Partitions/utils/constants.d.ts +2 -2
  304. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.js +1 -3
  305. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.js.map +1 -1
  306. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/useTenantStorageNewData.d.ts +5 -5
  307. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.d.ts +2 -1
  308. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.js +3 -2
  309. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.js.map +1 -1
  310. package/dist/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.js +1 -1
  311. package/dist/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.js.map +1 -1
  312. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js +1 -1
  313. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js.map +1 -1
  314. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.js +1 -1
  315. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.js.map +1 -1
  316. package/dist/containers/Tenant/Diagnostics/TopicData/columns/columns.d.ts +3 -3
  317. package/dist/containers/Tenant/Diagnostics/useDiagnosticsPages.js +2 -4
  318. package/dist/containers/Tenant/Diagnostics/useDiagnosticsPages.js.map +1 -1
  319. package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.js +2 -1
  320. package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.js.map +1 -1
  321. package/dist/containers/Tenant/Query/SavedQueries/SavedQueries.js +1 -1
  322. package/dist/containers/Tenant/Query/SavedQueries/SavedQueries.js.map +1 -1
  323. package/dist/containers/Tenants/TenantsTable.js +37 -6
  324. package/dist/containers/Tenants/TenantsTable.js.map +1 -1
  325. package/dist/containers/VDiskPage/VDiskPage.js +1 -1
  326. package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
  327. package/dist/routes.d.ts +1 -0
  328. package/dist/routes.js.map +1 -1
  329. package/dist/services/api/tablets.d.ts +6 -4
  330. package/dist/services/api/tablets.js +9 -8
  331. package/dist/services/api/tablets.js.map +1 -1
  332. package/dist/services/api/viewer.d.ts +1 -2
  333. package/dist/services/api/viewer.js +0 -11
  334. package/dist/services/api/viewer.js.map +1 -1
  335. package/dist/store/configureStore.d.ts +12 -12
  336. package/dist/store/defaultStore.d.ts +6 -6
  337. package/dist/store/reducers/api.d.ts +1 -1
  338. package/dist/store/reducers/api.js +3 -0
  339. package/dist/store/reducers/api.js.map +1 -1
  340. package/dist/store/reducers/authentication/authentication.d.ts +4 -4
  341. package/dist/store/reducers/cancelQuery.d.ts +2 -2
  342. package/dist/store/reducers/capabilities/capabilities.d.ts +47 -47
  343. package/dist/store/reducers/capabilities/hooks.d.ts +6 -6
  344. package/dist/store/reducers/capabilities/hooks.js +8 -3
  345. package/dist/store/reducers/capabilities/hooks.js.map +1 -1
  346. package/dist/store/reducers/cluster/cluster.d.ts +5 -5
  347. package/dist/store/reducers/cluster/cluster.js +3 -2
  348. package/dist/store/reducers/cluster/cluster.js.map +1 -1
  349. package/dist/store/reducers/clusters/clusters.d.ts +2 -2
  350. package/dist/store/reducers/clusters/clusters.js +2 -1
  351. package/dist/store/reducers/clusters/clusters.js.map +1 -1
  352. package/dist/store/reducers/codeAssist/codeAssist.d.ts +6 -6
  353. package/dist/store/reducers/configs.d.ts +3 -3
  354. package/dist/store/reducers/entityDataTags.d.ts +21 -0
  355. package/dist/store/reducers/entityDataTags.js +24 -0
  356. package/dist/store/reducers/entityDataTags.js.map +1 -0
  357. package/dist/store/reducers/environments/environments.d.ts +2 -2
  358. package/dist/store/reducers/executeTopQueries/executeTopQueries.d.ts +4 -4
  359. package/dist/store/reducers/healthcheckInfo/healthcheckInfo.d.ts +111 -111
  360. package/dist/store/reducers/heatmap.d.ts +2 -2
  361. package/dist/store/reducers/hotKeys/hotKeys.d.ts +2 -2
  362. package/dist/store/reducers/index.d.ts +8 -8
  363. package/dist/store/reducers/network/network.d.ts +2 -2
  364. package/dist/store/reducers/node/node.d.ts +2 -5
  365. package/dist/store/reducers/node/node.js +0 -12
  366. package/dist/store/reducers/node/node.js.map +1 -1
  367. package/dist/store/reducers/node/types.d.ts +0 -14
  368. package/dist/store/reducers/nodes/nodes.d.ts +2 -2
  369. package/dist/store/reducers/nodesList.d.ts +6 -264
  370. package/dist/store/reducers/nodesList.js +1 -1
  371. package/dist/store/reducers/nodesList.js.map +1 -1
  372. package/dist/store/reducers/operations.d.ts +5 -5
  373. package/dist/store/reducers/overview/overview.d.ts +2 -2
  374. package/dist/store/reducers/partitions/partitions.d.ts +3 -3
  375. package/dist/store/reducers/pdisk/pdisk.d.ts +2 -2
  376. package/dist/store/reducers/planToSvg.d.ts +2 -2
  377. package/dist/store/reducers/preview.d.ts +2 -2
  378. package/dist/store/reducers/query/api.d.ts +4 -4
  379. package/dist/store/reducers/replication.d.ts +2 -2
  380. package/dist/store/reducers/schema/schema.d.ts +16 -16
  381. package/dist/store/reducers/schemaAcl/schemaAcl.d.ts +40 -40
  382. package/dist/store/reducers/settings/api.d.ts +4 -4
  383. package/dist/store/reducers/settings/constants.d.ts +4 -0
  384. package/dist/store/reducers/settings/constants.js +4 -0
  385. package/dist/store/reducers/settings/constants.js.map +1 -1
  386. package/dist/store/reducers/settings/settings.d.ts +1 -1
  387. package/dist/store/reducers/shardsWorkload/shardsWorkload.d.ts +2 -2
  388. package/dist/store/reducers/showCreateTable/showCreateTable.d.ts +2 -2
  389. package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +1 -0
  390. package/dist/store/reducers/storage/prepareGroupsDisks.js +17 -13
  391. package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
  392. package/dist/store/reducers/storage/requestStorageData.d.ts +2 -4
  393. package/dist/store/reducers/storage/requestStorageData.js +4 -10
  394. package/dist/store/reducers/storage/requestStorageData.js.map +1 -1
  395. package/dist/store/reducers/storage/storage.d.ts +4 -6
  396. package/dist/store/reducers/storage/storage.js.map +1 -1
  397. package/dist/store/reducers/storage/types.d.ts +0 -9
  398. package/dist/store/reducers/storage/utils.d.ts +1 -2
  399. package/dist/store/reducers/storage/utils.js +11 -116
  400. package/dist/store/reducers/storage/utils.js.map +1 -1
  401. package/dist/store/reducers/storageUsage/StorageUsage.d.ts +2 -2
  402. package/dist/store/reducers/streamingQuery/streamingQuery.d.ts +2 -2
  403. package/dist/store/reducers/table/table.d.ts +4 -4
  404. package/dist/store/reducers/tableData.d.ts +2 -2
  405. package/dist/store/reducers/tableData.js.map +1 -1
  406. package/dist/store/reducers/tablePartitioning/tablePartitioning.d.ts +2 -2
  407. package/dist/store/reducers/tableSchemaData.d.ts +2 -2
  408. package/dist/store/reducers/tablet.d.ts +11 -8
  409. package/dist/store/reducers/tablet.js +6 -6
  410. package/dist/store/reducers/tablet.js.map +1 -1
  411. package/dist/store/reducers/tablets.d.ts +3 -3
  412. package/dist/store/reducers/tenant/tenant.d.ts +2 -2
  413. package/dist/store/reducers/tenant/tenant.js +14 -1
  414. package/dist/store/reducers/tenant/tenant.js.map +1 -1
  415. package/dist/store/reducers/tenantOverview/executeTopTables/executeTopTables.d.ts +2 -2
  416. package/dist/store/reducers/tenantOverview/storage/tenantOverviewStorage.d.ts +2 -2
  417. package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.d.ts +2 -2
  418. package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.js +1 -1
  419. package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.js.map +1 -1
  420. package/dist/store/reducers/tenants/tenants.d.ts +3 -3
  421. package/dist/store/reducers/tenants/tenants.js +2 -1
  422. package/dist/store/reducers/tenants/tenants.js.map +1 -1
  423. package/dist/store/reducers/topic/topic.d.ts +84 -84
  424. package/dist/store/reducers/vdisk/vdisk.d.ts +3 -3
  425. package/dist/store/reducers/viewSchema/viewSchema.d.ts +2 -2
  426. package/dist/store/state-url-mapping.js +5 -1
  427. package/dist/store/state-url-mapping.js.map +1 -1
  428. package/dist/types/api/capabilities.d.ts +2 -2
  429. package/dist/types/api/pdisk.d.ts +2 -0
  430. package/dist/types/api/pdisk.js.map +1 -1
  431. package/dist/types/api/schema/persQueueGroup.d.ts +2 -2
  432. package/dist/types/api/schema/schema.d.ts +15 -0
  433. package/dist/types/api/schema/schema.js.map +1 -1
  434. package/dist/types/api/schema/tableIndex.d.ts +1 -0
  435. package/dist/types/api/storage.d.ts +6 -111
  436. package/dist/types/api/storage.js.map +1 -1
  437. package/dist/types/api/vdisk.d.ts +2 -0
  438. package/dist/types/api/vdisk.js.map +1 -1
  439. package/dist/uiFactory/types.d.ts +2 -0
  440. package/dist/utils/developerUI/tabletDevUi.d.ts +1 -0
  441. package/dist/utils/developerUI/tabletDevUi.js +4 -0
  442. package/dist/utils/developerUI/tabletDevUi.js.map +1 -0
  443. package/dist/utils/disks/displayState.d.ts +2 -0
  444. package/dist/utils/disks/displayState.js.map +1 -1
  445. package/dist/utils/disks/getDiskBarTone.d.ts +2 -1
  446. package/dist/utils/disks/getDiskBarTone.js +5 -1
  447. package/dist/utils/disks/getDiskBarTone.js.map +1 -1
  448. package/dist/utils/disks/pdiskState.js +2 -2
  449. package/dist/utils/disks/pdiskState.js.map +1 -1
  450. package/dist/utils/disks/prepareDisks.js +19 -9
  451. package/dist/utils/disks/prepareDisks.js.map +1 -1
  452. package/dist/utils/disks/types.d.ts +2 -1
  453. package/dist/utils/hooks/useWhoami.d.ts +5 -5
  454. package/dist/utils/query.d.ts +1 -0
  455. package/dist/utils/query.js +6 -0
  456. package/dist/utils/query.js.map +1 -1
  457. package/package.json +1 -1
  458. package/src/components/ComponentsProvider/componentsRegistry.ts +1 -4
  459. package/src/components/ContentWithPopup/ContentWithPopup.tsx +7 -0
  460. package/src/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.tsx +15 -2
  461. package/src/components/DiskStateProgressBar/AllModeIndicators.tsx +19 -6
  462. package/src/components/DiskStateProgressBar/DiskIndicator.tsx +19 -8
  463. package/src/components/DiskStateProgressBar/DiskStateProgressBar.scss +53 -45
  464. package/src/components/DiskStateProgressBar/DiskStateProgressBar.tsx +1 -1
  465. package/src/components/DiskStateProgressBar/PDiskAllModeIndicators.tsx +16 -3
  466. package/src/components/EvictVDiskButton/EvictVDiskButton.tsx +10 -3
  467. package/src/components/FullNodeViewer/FullNodeViewer.scss +3 -3
  468. package/src/components/FullNodeViewer/FullNodeViewer.tsx +81 -34
  469. package/src/components/FullNodeViewer/i18n/en.json +2 -1
  470. package/src/components/HoverPopup/HoverPopup.tsx +53 -19
  471. package/src/components/HoverPopup/getPopupScrollContainer.ts +20 -0
  472. package/src/components/InfoViewer/InfoViewer.tsx +4 -2
  473. package/src/components/InfoViewer/formatters/pqGroup.ts +6 -2
  474. package/src/components/InfoViewer/schemaInfo/i18n/en.json +1 -0
  475. package/src/components/InfoViewer/schemaInfo/utils.tsx +9 -0
  476. package/src/components/NodeHostWrapper/NodeHostWrapper.tsx +23 -13
  477. package/src/components/PaginatedTable/KeyboardNavigation.tsx +30 -0
  478. package/src/components/PaginatedTable/PaginatedTable.scss +10 -0
  479. package/src/components/PaginatedTable/PaginatedTable.tsx +128 -4
  480. package/src/components/PaginatedTable/PaginatedTableWithLayout.tsx +6 -1
  481. package/src/components/PaginatedTable/ResizeablePaginatedTable.tsx +6 -1
  482. package/src/components/PaginatedTable/TableChunk.tsx +6 -14
  483. package/src/components/PaginatedTable/TableChunksRenderer.tsx +12 -0
  484. package/src/components/PaginatedTable/TableRow.tsx +54 -20
  485. package/src/components/PaginatedTable/getTableChunkQueryParams.ts +25 -0
  486. package/src/components/PaginatedTable/rowLookup.ts +63 -0
  487. package/src/components/PaginatedTable/useKeyboardNavigation.ts +115 -0
  488. package/src/components/ResizeableDataTable/DataTableKeyboardNavigation.tsx +194 -0
  489. package/src/components/ResizeableDataTable/ResizeableDataTable.scss +10 -0
  490. package/src/components/ResizeableDataTable/ResizeableDataTable.tsx +100 -5
  491. package/src/components/ResizeableDataTable/getDataTableOrder.ts +18 -0
  492. package/src/components/Search/Search.tsx +8 -1
  493. package/src/components/SegmentedProgress/SegmentedProgress.scss +5 -0
  494. package/src/components/SegmentedProgress/SegmentedProgress.tsx +99 -10
  495. package/src/components/ShardsTable/columns.tsx +14 -5
  496. package/src/components/ShardsTable/i18n/en.json +1 -0
  497. package/src/components/StorageGroupInfo/StorageGroupInfo.tsx +0 -13
  498. package/src/components/StorageGroupInfo/i18n/en.json +0 -1
  499. package/src/components/TableKeyboardNavigation/TableKeyboardNavigation.scss +16 -0
  500. package/src/components/TableKeyboardNavigation/TableKeyboardNavigation.tsx +519 -0
  501. package/src/components/TableKeyboardNavigation/i18n/en.json +4 -0
  502. package/src/components/TableKeyboardNavigation/i18n/index.ts +5 -0
  503. package/src/components/TableKeyboardNavigation/utils.ts +36 -0
  504. package/src/components/TableWithControlsLayout/TableWithControlsLayout.tsx +26 -1
  505. package/src/components/TenantNameWrapper/TenantNameWrapper.tsx +14 -15
  506. package/src/components/TenantNameWrapper/utils.ts +26 -0
  507. package/src/components/VDisk/VDisk.tsx +115 -41
  508. package/src/components/VDisk/VDiskWithDonorsStack.tsx +18 -3
  509. package/src/components/VDisk/i18n/en.json +11 -0
  510. package/src/components/nodesColumns/columns.tsx +13 -1
  511. package/src/components/nodesColumns/constants.ts +6 -0
  512. package/src/components/nodesColumns/i18n/en.json +2 -1
  513. package/src/containers/App/App.tsx +3 -3
  514. package/src/containers/Cluster/ClusterInfo/ClusterInfo.scss +8 -0
  515. package/src/containers/Cluster/ClusterInfo/ClusterInfo.tsx +12 -11
  516. package/src/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/DiskGroupsStats.scss +18 -0
  517. package/src/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/DiskGroupsStats.tsx +143 -58
  518. package/src/containers/Cluster/ClusterInfo/components/DiskGroupsStatsBars/utils.ts +89 -0
  519. package/src/containers/Cluster/i18n/en.json +13 -4
  520. package/src/containers/Clusters/Clusters.tsx +47 -29
  521. package/src/containers/Node/Node.tsx +32 -18
  522. package/src/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.tsx +1 -0
  523. package/src/containers/Node/NodeNetwork/NodeNetworkTable.tsx +17 -0
  524. package/src/containers/Node/NodePages.ts +5 -10
  525. package/src/containers/Node/i18n/en.json +0 -4
  526. package/src/containers/Nodes/NodesControls/NodesControls.tsx +1 -0
  527. package/src/containers/Nodes/NodesTable.tsx +23 -1
  528. package/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +1 -0
  529. package/src/containers/Nodes/columns/columns.tsx +2 -0
  530. package/src/containers/Storage/Disks/Disks.scss +5 -0
  531. package/src/containers/Storage/Disks/Disks.tsx +156 -92
  532. package/src/containers/Storage/PDisk/PDisk.scss +79 -1
  533. package/src/containers/Storage/PDisk/PDisk.tsx +157 -81
  534. package/src/containers/Storage/PDisk/PDiskWithVDisks.tsx +181 -0
  535. package/src/containers/Storage/PDisk/i18n/en.json +8 -0
  536. package/src/containers/Storage/PDisk/index.ts +1 -0
  537. package/src/containers/Storage/PDisks/PDisks.tsx +157 -22
  538. package/src/containers/Storage/PaginatedStorage.tsx +4 -0
  539. package/src/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.tsx +1 -1
  540. package/src/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.tsx +3 -2
  541. package/src/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.tsx +15 -6
  542. package/src/containers/Storage/PaginatedStorageGroupsTable/columns/constants.ts +2 -2
  543. package/src/containers/Storage/PaginatedStorageGroupsTable/getGroups.ts +40 -47
  544. package/src/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.tsx +10 -2
  545. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.tsx +6 -2
  546. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesControls.tsx +76 -41
  547. package/src/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.ts +103 -0
  548. package/src/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.tsx +24 -1
  549. package/src/containers/Storage/PaginatedStorageNodesTable/columns/columns.tsx +3 -1
  550. package/src/containers/Storage/PaginatedStorageNodesTable/columns/hooks.ts +8 -1
  551. package/src/containers/Storage/PaginatedStorageNodesTable/columns/types.ts +2 -0
  552. package/src/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.tsx +63 -0
  553. package/src/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.tsx +67 -0
  554. package/src/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.tsx +63 -0
  555. package/src/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.tsx +1 -0
  556. package/src/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.tsx +1 -0
  557. package/src/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.tsx +3 -2
  558. package/src/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.tsx +1 -0
  559. package/src/containers/Storage/StorageExpertModePanel/components/SpaceLegend.tsx +3 -0
  560. package/src/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.tsx +7 -9
  561. package/src/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.ts +1 -1
  562. package/src/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.tsx +58 -0
  563. package/src/containers/Storage/StorageExpertModePanel/constants.ts +26 -0
  564. package/src/containers/Storage/StorageExpertModePanel/i18n/en.json +2 -2
  565. package/src/containers/Storage/TableGroup/TableGroup.tsx +6 -1
  566. package/src/containers/Storage/VDisks/VDisks.scss +3 -0
  567. package/src/containers/Storage/VDisks/VDisks.tsx +29 -7
  568. package/src/containers/Storage/useStoragePDiskDisplayStateGetter.ts +94 -135
  569. package/src/containers/Storage/useStorageQueryParams.ts +120 -1
  570. package/src/containers/Storage/useStorageVDiskDisplayStateGetter.ts +65 -10
  571. package/src/containers/Storage/utils/useStorageColumnsSettings.ts +77 -49
  572. package/src/containers/Storage/utils/useVirtualizedDiskList.ts +156 -0
  573. package/src/containers/StorageGroupPage/StorageGroupPage.tsx +2 -6
  574. package/src/containers/Tablet/Tablet.tsx +4 -2
  575. package/src/containers/Tablet/components/TabletControls/TabletControls.tsx +7 -3
  576. package/src/containers/Tablet/components/TabletInfo/TabletInfo.tsx +13 -3
  577. package/src/containers/Tablets/TabletsTable.tsx +50 -10
  578. package/src/containers/Tablets/i18n/en.json +2 -1
  579. package/src/containers/Tenant/Diagnostics/Overview/Overview.tsx +2 -1
  580. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.tsx +106 -0
  581. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/en.json +9 -0
  582. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.ts +7 -0
  583. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.ts +1 -0
  584. package/src/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.ts +3 -3
  585. package/src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.tsx +1 -6
  586. package/src/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.tsx +6 -0
  587. package/src/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.tsx +4 -0
  588. package/src/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.tsx +7 -1
  589. package/src/containers/Tenant/Diagnostics/TopShards/TopShards.tsx +1 -1
  590. package/src/containers/Tenant/Diagnostics/useDiagnosticsPages.ts +1 -4
  591. package/src/containers/Tenant/Query/QueriesHistory/QueriesHistory.tsx +5 -0
  592. package/src/containers/Tenant/Query/SavedQueries/SavedQueries.tsx +6 -0
  593. package/src/containers/Tenants/TenantsTable.tsx +70 -12
  594. package/src/containers/VDiskPage/VDiskPage.tsx +1 -1
  595. package/src/routes.ts +1 -1
  596. package/src/services/api/tablets.ts +16 -7
  597. package/src/services/api/viewer.ts +1 -25
  598. package/src/store/reducers/api.ts +4 -0
  599. package/src/store/reducers/capabilities/hooks.ts +9 -4
  600. package/src/store/reducers/cluster/cluster.ts +3 -2
  601. package/src/store/reducers/clusters/clusters.ts +2 -1
  602. package/src/store/reducers/entityDataTags.ts +34 -0
  603. package/src/store/reducers/node/node.ts +0 -11
  604. package/src/store/reducers/node/types.ts +0 -18
  605. package/src/store/reducers/nodesList.ts +2 -3
  606. package/src/store/reducers/settings/constants.ts +4 -0
  607. package/src/store/reducers/storage/prepareGroupsDisks.ts +16 -11
  608. package/src/store/reducers/storage/requestStorageData.ts +5 -17
  609. package/src/store/reducers/storage/storage.ts +2 -6
  610. package/src/store/reducers/storage/types.ts +0 -9
  611. package/src/store/reducers/storage/utils.ts +14 -180
  612. package/src/store/reducers/tableData.ts +1 -1
  613. package/src/store/reducers/tablet.ts +25 -6
  614. package/src/store/reducers/tenant/tenant.ts +17 -1
  615. package/src/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.ts +1 -1
  616. package/src/store/reducers/tenants/tenants.ts +2 -1
  617. package/src/store/state-url-mapping.ts +5 -1
  618. package/src/types/api/capabilities.ts +2 -2
  619. package/src/types/api/pdisk.ts +2 -0
  620. package/src/types/api/schema/persQueueGroup.ts +2 -2
  621. package/src/types/api/schema/schema.ts +18 -0
  622. package/src/types/api/schema/tableIndex.ts +1 -0
  623. package/src/types/api/storage.ts +11 -131
  624. package/src/types/api/vdisk.ts +2 -0
  625. package/src/uiFactory/types.ts +3 -0
  626. package/src/utils/developerUI/tabletDevUi.ts +3 -0
  627. package/src/utils/disks/displayState.ts +2 -0
  628. package/src/utils/disks/getDiskBarTone.ts +8 -0
  629. package/src/utils/disks/pdiskState.ts +2 -2
  630. package/src/utils/disks/prepareDisks.ts +25 -9
  631. package/src/utils/disks/types.ts +2 -1
  632. package/src/utils/query.ts +7 -0
  633. package/dist/containers/Node/NodeStructure/NodeStructure.d.ts +0 -7
  634. package/dist/containers/Node/NodeStructure/NodeStructure.js +0 -76
  635. package/dist/containers/Node/NodeStructure/NodeStructure.js.map +0 -1
  636. package/dist/containers/Node/NodeStructure/NodeStructure.scss +0 -155
  637. package/dist/containers/Node/NodeStructure/PDiskTitleBadge.d.ts +0 -7
  638. package/dist/containers/Node/NodeStructure/PDiskTitleBadge.js +0 -7
  639. package/dist/containers/Node/NodeStructure/PDiskTitleBadge.js.map +0 -1
  640. package/dist/containers/Node/NodeStructure/Pdisk.d.ts +0 -10
  641. package/dist/containers/Node/NodeStructure/Pdisk.js +0 -125
  642. package/dist/containers/Node/NodeStructure/Pdisk.js.map +0 -1
  643. package/dist/containers/Storage/PDisk/PDiskVDisks.d.ts +0 -13
  644. package/dist/containers/Storage/PDisk/PDiskVDisks.js +0 -20
  645. package/dist/containers/Storage/PDisk/PDiskVDisks.js.map +0 -1
  646. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.d.ts +0 -6
  647. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.js +0 -66
  648. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.js.map +0 -1
  649. package/dist/store/reducers/node/selectors.d.ts +0 -47
  650. package/dist/store/reducers/node/selectors.js +0 -43
  651. package/dist/store/reducers/node/selectors.js.map +0 -1
  652. package/src/containers/Node/NodeStructure/NodeStructure.scss +0 -155
  653. package/src/containers/Node/NodeStructure/NodeStructure.tsx +0 -121
  654. package/src/containers/Node/NodeStructure/PDiskTitleBadge.tsx +0 -18
  655. package/src/containers/Node/NodeStructure/Pdisk.tsx +0 -274
  656. package/src/containers/Storage/PDisk/PDiskVDisks.tsx +0 -65
  657. package/src/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.tsx +0 -151
  658. package/src/store/reducers/node/selectors.ts +0 -68
@@ -1,81 +1,166 @@
1
1
  import React from 'react';
2
2
 
3
- import {Flex, Label, Text} from '@gravity-ui/uikit';
3
+ import {Card, Flex, HelpMark, Label, Text} from '@gravity-ui/uikit';
4
4
 
5
- import {SegmentedProgress} from '../../../../../components/SegmentedProgress/SegmentedProgress';
6
- import type {
7
- ClusterGroupsStats,
8
- DiskErasureGroupsStats,
9
- } from '../../../../../store/reducers/cluster/types';
5
+ import {
6
+ SegmentedProgress,
7
+ defaultNormalizePercent,
8
+ } from '../../../../../components/SegmentedProgress/SegmentedProgress';
9
+ import {cn} from '../../../../../utils/cn';
10
10
  import {formatNumber} from '../../../../../utils/dataFormatters/dataFormatters';
11
11
  import i18n from '../../../i18n';
12
12
 
13
- interface GroupsStatsPopupContentProps {
14
- stats: DiskErasureGroupsStats;
15
- storageType: string;
13
+ import type {
14
+ PreparedClusterGroupsStats,
15
+ PreparedDiskGroupsStats,
16
+ PreparedErasureGroupsStats,
17
+ } from './utils';
18
+
19
+ import './DiskGroupsStats.scss';
20
+
21
+ const b = cn('ydb-disk-groups-stats');
22
+
23
+ const ERASURE_COLORS: Record<string, string> = {
24
+ 'block-4-2': 'var(--g-color-base-info-heavy)',
25
+ 'mirror-3-dc': 'var(--g-color-base-utility-heavy)',
26
+ 'mirror-3of4': 'var(--g-color-base-utility-heavy)',
27
+ none: 'var(--g-color-base-neutral-heavy)',
28
+ };
29
+
30
+ function getErasureColor(erasure: string) {
31
+ return ERASURE_COLORS[erasure] ?? 'var(--g-color-base-neutral-heavy)';
16
32
  }
17
33
 
18
- function DiskGroupStats({stats, storageType}: GroupsStatsPopupContentProps) {
19
- const {erasure} = stats;
34
+ function formatGroups(count: number) {
35
+ return i18n('value_groups', {
36
+ count,
37
+ formattedCount: formatNumber(count),
38
+ });
39
+ }
20
40
 
21
- const availableGroups = stats.totalGroups - stats.createdGroups;
41
+ function formatAvailableGroups({min, max}: PreparedDiskGroupsStats['availableGroups']) {
42
+ if (min === max) {
43
+ return formatGroups(min);
44
+ }
22
45
 
23
- const availableGroupsString =
24
- availableGroups === 1
25
- ? i18n('title_available-one')
26
- : i18n('title_available-other', {
27
- count: formatNumber(availableGroups),
28
- });
46
+ return i18n('value_available-groups-range', {
47
+ min: formatNumber(min),
48
+ max: formatNumber(max),
49
+ });
50
+ }
51
+
52
+ function getErasureTooltip(stats: PreparedErasureGroupsStats) {
53
+ return i18n('context_available-groups-by-erasure', {
54
+ count: stats.availableGroups,
55
+ formattedCount: formatNumber(stats.availableGroups),
56
+ erasure: stats.erasure,
57
+ });
58
+ }
59
+
60
+ function DiskGroupStats({stats}: {stats: PreparedDiskGroupsStats}) {
61
+ const legendId = React.useId();
62
+ const {allocatedGroups, availableGroups, diskType, erasures, progressTotalGroups} = stats;
63
+ const progressValue = progressTotalGroups > 0 ? allocatedGroups / progressTotalGroups : 0;
64
+ const progressPercent = progressValue * 100;
65
+ const progressLabel = i18n('context_storage-group-allocation-progress', {
66
+ diskType,
67
+ percent: defaultNormalizePercent(progressPercent),
68
+ });
69
+ const availableGroupsContext = i18n('context_available-groups');
70
+
71
+ const segments = erasures.map((erasureStats, index) => ({
72
+ id: erasureStats.erasure,
73
+ value: erasureStats.createdGroups,
74
+ minWidth: 10,
75
+ color: getErasureColor(erasureStats.erasure),
76
+ className: b('progress-segment'),
77
+ dataQa: 'cluster-storage-group-segment',
78
+ tooltip: getErasureTooltip(erasureStats),
79
+ ariaLabelledBy: `${legendId}-${index}`,
80
+ }));
29
81
 
30
82
  return (
31
- <Flex direction="column" gap={2}>
32
- <Flex justifyContent="space-between" alignItems="center">
33
- <Text variant="subheader-1">{storageType}</Text>
34
- <Flex gap={4} wrap="nowrap" alignItems="center">
35
- <Label theme="info">{availableGroupsString}</Label>
36
- <Text color="secondary">
37
- {i18n('title_allocated', {
38
- used: formatNumber(stats.createdGroups),
39
- total: formatNumber(stats.totalGroups),
40
- })}
41
- </Text>
83
+ <Card view="filled" className={b('card')} qa="cluster-storage-group-card">
84
+ <Flex direction="column" gap={1}>
85
+ <Flex direction="column" gap={2}>
86
+ <Flex justifyContent="space-between" alignItems="center" gap={2}>
87
+ <Text variant="subheader-1">{diskType}</Text>
88
+ <Label
89
+ theme="info"
90
+ value={
91
+ <Flex alignItems="center" gap={1}>
92
+ {formatAvailableGroups(availableGroups)}
93
+ <HelpMark
94
+ iconSize="s"
95
+ aria-label={i18n('action_show-available-groups-info', {
96
+ diskType,
97
+ })}
98
+ className={b('available-help')}
99
+ popoverProps={{placement: ['top', 'bottom']}}
100
+ >
101
+ {availableGroupsContext}
102
+ </HelpMark>
103
+ </Flex>
104
+ }
105
+ >
106
+ {i18n('title_available')}
107
+ </Label>
108
+ </Flex>
109
+ <div role="group" aria-label={progressLabel}>
110
+ <SegmentedProgress
111
+ segments={segments}
112
+ total={progressTotalGroups}
113
+ ariaLabel={progressLabel}
114
+ hideLabels
115
+ />
116
+ </div>
117
+ </Flex>
118
+ <Flex justifyContent="space-between" alignItems="center" gap={2} wrap="wrap">
119
+ <Flex alignItems="center" gap={4} wrap="wrap">
120
+ {erasures.map((erasureStats, index) => (
121
+ <Flex
122
+ key={erasureStats.erasure}
123
+ id={`${legendId}-${index}`}
124
+ alignItems="center"
125
+ gap={2}
126
+ >
127
+ <span
128
+ aria-hidden="true"
129
+ className={b('legend-dot')}
130
+ style={{backgroundColor: getErasureColor(erasureStats.erasure)}}
131
+ />
132
+ <Text>{erasureStats.erasure}</Text>
133
+ <Text color="secondary">
134
+ {formatGroups(erasureStats.createdGroups)}
135
+ </Text>
136
+ </Flex>
137
+ ))}
138
+ </Flex>
139
+ <Text color="secondary">{formatGroups(allocatedGroups)}</Text>
42
140
  </Flex>
43
141
  </Flex>
44
- <SegmentedProgress
45
- value={stats.createdGroups}
46
- total={stats.totalGroups}
47
- labelStart={erasure}
48
- ariaLabel={i18n('context_storage-group-allocation-progress')}
49
- />
50
- </Flex>
142
+ </Card>
51
143
  );
52
144
  }
53
145
 
54
146
  interface StorageGroupStatsProps {
55
- groupStats: ClusterGroupsStats;
147
+ stats: PreparedClusterGroupsStats;
56
148
  }
57
149
 
58
- export function StorageGroupStats({groupStats}: StorageGroupStatsProps) {
59
- const stats = React.useMemo(() => {
60
- const result: React.ReactNode[] = [];
61
-
62
- Object.entries(groupStats).forEach(([storageType, stats]) => {
63
- Object.values(stats).forEach((erasureStats) => {
64
- result.push(
65
- <DiskGroupStats
66
- key={`${storageType}|${erasureStats.erasure}`}
67
- stats={erasureStats}
68
- storageType={storageType}
69
- />,
70
- );
71
- });
72
- });
73
- return result;
74
- }, [groupStats]);
75
-
150
+ export function StorageGroupStats({stats}: StorageGroupStatsProps) {
76
151
  return (
77
- <Flex direction="column" gap={5}>
78
- {stats}
79
- </Flex>
152
+ <React.Fragment>
153
+ <Text as="div" variant="subheader-2">
154
+ {i18n('title_storage-groups')}{' '}
155
+ <Text color="secondary" variant="subheader-2">
156
+ {formatNumber(stats.allocatedGroups)}
157
+ </Text>
158
+ </Text>
159
+ <Flex direction="column" gap={1}>
160
+ {stats.disks.map((diskStats) => (
161
+ <DiskGroupStats key={diskStats.diskType} stats={diskStats} />
162
+ ))}
163
+ </Flex>
164
+ </React.Fragment>
80
165
  );
81
166
  }
@@ -0,0 +1,89 @@
1
+ import type {ClusterGroupsStats} from '../../../../../store/reducers/cluster/types';
2
+
3
+ const DISK_TYPE_ORDER = ['HDD', 'SSD'];
4
+ const ERASURE_ORDER = ['block-4-2', 'mirror-3-dc', 'mirror-3of4', 'none'];
5
+
6
+ export interface PreparedErasureGroupsStats {
7
+ erasure: string;
8
+ createdGroups: number;
9
+ availableGroups: number;
10
+ }
11
+
12
+ export interface PreparedDiskGroupsStats {
13
+ diskType: string;
14
+ erasures: PreparedErasureGroupsStats[];
15
+ allocatedGroups: number;
16
+ availableGroups: {
17
+ min: number;
18
+ max: number;
19
+ average: number;
20
+ };
21
+ progressTotalGroups: number;
22
+ }
23
+
24
+ export interface PreparedClusterGroupsStats {
25
+ disks: PreparedDiskGroupsStats[];
26
+ allocatedGroups: number;
27
+ }
28
+
29
+ function getErasureOrder(erasure: string) {
30
+ const index = ERASURE_ORDER.indexOf(erasure);
31
+
32
+ return index === -1 ? ERASURE_ORDER.length : index;
33
+ }
34
+
35
+ function getDiskTypeOrder(diskType: string) {
36
+ const index = DISK_TYPE_ORDER.indexOf(diskType);
37
+
38
+ return index === -1 ? DISK_TYPE_ORDER.length : index;
39
+ }
40
+
41
+ export function prepareClusterGroupsStats(
42
+ groupStats: ClusterGroupsStats,
43
+ ): PreparedClusterGroupsStats {
44
+ let allocatedGroups = 0;
45
+
46
+ const disks = Object.entries(groupStats)
47
+ .flatMap(([diskType, diskStats]) => {
48
+ const erasures = Object.values(diskStats)
49
+ .filter(({createdGroups}) => createdGroups > 0)
50
+ .map((stats) => ({
51
+ erasure: stats.erasure,
52
+ createdGroups: stats.createdGroups,
53
+ availableGroups: stats.totalGroups - stats.createdGroups,
54
+ }))
55
+ .sort((a, b) => getErasureOrder(a.erasure) - getErasureOrder(b.erasure));
56
+
57
+ if (erasures.length === 0) {
58
+ return [];
59
+ }
60
+
61
+ const diskAllocatedGroups = erasures.reduce(
62
+ (sum, stats) => sum + stats.createdGroups,
63
+ 0,
64
+ );
65
+ const availableValues = erasures.map((stats) => stats.availableGroups);
66
+ const minAvailableGroups = Math.min(...availableValues);
67
+ const maxAvailableGroups = Math.max(...availableValues);
68
+ const averageAvailableGroups = (minAvailableGroups + maxAvailableGroups) / 2;
69
+
70
+ allocatedGroups += diskAllocatedGroups;
71
+
72
+ return [
73
+ {
74
+ diskType,
75
+ erasures,
76
+ allocatedGroups: diskAllocatedGroups,
77
+ availableGroups: {
78
+ min: minAvailableGroups,
79
+ max: maxAvailableGroups,
80
+ average: averageAvailableGroups,
81
+ },
82
+ progressTotalGroups: diskAllocatedGroups + averageAvailableGroups,
83
+ },
84
+ ];
85
+ })
86
+ .sort((a, b) => getDiskTypeOrder(a.diskType) - getDiskTypeOrder(b.diskType));
87
+
88
+ return {disks, allocatedGroups};
89
+ }
@@ -1,8 +1,17 @@
1
1
  {
2
- "title_allocated": "Allocated : {{used}} of {{total}} groups",
3
- "title_available-one": "Available : 1 group",
4
- "title_available-other": "Available : {{count}} groups",
5
- "context_storage-group-allocation-progress": "Storage group allocation progress",
2
+ "title_available": "Available",
3
+ "value_groups": {
4
+ "one": "{{formattedCount}} group",
5
+ "other": "{{formattedCount}} groups"
6
+ },
7
+ "value_available-groups-range": "{{min}}–{{max}} groups",
8
+ "context_available-groups": "Estimated number of free groups available for allocation.",
9
+ "action_show-available-groups-info": "About available {{diskType}} storage groups",
10
+ "context_available-groups-by-erasure": {
11
+ "one": "{{formattedCount}} group available if only {{erasure}} is used",
12
+ "other": "{{formattedCount}} groups available if only {{erasure}} is used"
13
+ },
14
+ "context_storage-group-allocation-progress": "{{diskType}} storage group allocation: {{percent}}%",
6
15
  "title_cpu": "CPU",
7
16
  "title_storage-groups": "Allocated Storage Groups",
8
17
  "title_memory": "Memory",
@@ -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
  }
@@ -16,7 +16,6 @@ import routes, {getDefaultNodePath} from '../../routes';
16
16
  import {
17
17
  useCapabilitiesLoaded,
18
18
  useConfigAvailable,
19
- useDiskPagesAvailable,
20
19
  useViewerPeersHandlerAvailable,
21
20
  } from '../../store/reducers/capabilities/hooks';
22
21
  import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
@@ -34,7 +33,6 @@ import {Tablets} from '../Tablets/Tablets';
34
33
 
35
34
  import type {NodeTab} from './NodePages';
36
35
  import {NODE_TABS, nodePageQueryParams, nodePageTabSchema} from './NodePages';
37
- import NodeStructure from './NodeStructure/NodeStructure';
38
36
  import {Threads} from './Threads/Threads';
39
37
  import i18n from './i18n';
40
38
 
@@ -52,12 +50,14 @@ export function Node() {
52
50
  const dispatch = useTypedDispatch();
53
51
  const history = useHistory();
54
52
 
55
- const match = useRouteMatch<{id: string; activeTab: string}>(routes.node);
53
+ const match = useRouteMatch<{id: string; activeTab: string; environment?: string}>(routes.node);
56
54
 
57
55
  const nodeId = match?.params.id;
58
56
  const activeTabIdFromQuery = match?.params.activeTab;
57
+ const environment = match?.params.environment;
59
58
 
60
- const [{database: tenantNameFromQuery}] = useQueryParams(nodePageQueryParams);
59
+ const [{database: tenantNameFromQuery, clusterName, backend}] =
60
+ useQueryParams(nodePageQueryParams);
61
61
  const database = tenantNameFromQuery?.toString();
62
62
 
63
63
  const activeTabId = nodePageTabSchema.parse(activeTabIdFromQuery);
@@ -72,7 +72,6 @@ export function Node() {
72
72
  } = nodeApi.useGetNodeInfoQuery(params, {pollingInterval: autoRefreshInterval});
73
73
 
74
74
  const capabilitiesLoaded = useCapabilitiesLoaded();
75
- const isDiskPagesAvailable = useDiskPagesAvailable();
76
75
  const isPeersHandlerAvailable = useViewerPeersHandlerAvailable();
77
76
 
78
77
  const pageLoading = isLoading || !capabilitiesLoaded;
@@ -89,9 +88,6 @@ export function Node() {
89
88
  if (!configsAvailable) {
90
89
  skippedTabs.push('configs');
91
90
  }
92
- if (isDiskPagesAvailable) {
93
- skippedTabs.push('structure');
94
- }
95
91
  if ((!database && !isViewerUser) || !hasThreads) {
96
92
  skippedTabs.push('threads');
97
93
  }
@@ -111,7 +107,6 @@ export function Node() {
111
107
  return {activeTab: actualActiveTab, nodeTabs: actualNodeTabs};
112
108
  }, [
113
109
  isStorageNode,
114
- isDiskPagesAvailable,
115
110
  isPeersHandlerAvailable,
116
111
  activeTabId,
117
112
  hasThreads,
@@ -142,12 +137,26 @@ export function Node() {
142
137
  return;
143
138
  }
144
139
 
145
- if (activeTab.id !== activeTabId) {
146
- const path = getDefaultNodePath({id: nodeId, activeTab: activeTab.id}, {database});
140
+ if (activeTab.id !== activeTabId || activeTabIdFromQuery === 'structure') {
141
+ const path = getDefaultNodePath(
142
+ {id: nodeId, activeTab: activeTab.id, environment},
143
+ {database, clusterName: clusterName ?? undefined, backend: backend ?? undefined},
144
+ );
147
145
 
148
146
  history.replace(path);
149
147
  }
150
- }, [nodeId, database, activeTab.id, activeTabId, history, activeTab]);
148
+ }, [
149
+ nodeId,
150
+ database,
151
+ clusterName,
152
+ backend,
153
+ environment,
154
+ activeTab.id,
155
+ activeTabId,
156
+ activeTabIdFromQuery,
157
+ history,
158
+ activeTab,
159
+ ]);
151
160
 
152
161
  return (
153
162
  <div className={b(null)} ref={container}>
@@ -160,6 +169,9 @@ export function Node() {
160
169
  <NodePageContent
161
170
  nodeId={nodeId}
162
171
  database={database}
172
+ clusterName={clusterName ?? undefined}
173
+ backend={backend ?? undefined}
174
+ environment={environment}
163
175
  activeTabId={activeTab.id}
164
176
  tabs={nodeTabs}
165
177
  parentContainer={container}
@@ -233,6 +245,9 @@ function NodePageInfo({node, loading}: NodePageInfoProps) {
233
245
  interface NodePageContentProps {
234
246
  nodeId: string;
235
247
  database?: string;
248
+ clusterName?: string;
249
+ backend?: string;
250
+ environment?: string;
236
251
 
237
252
  activeTabId: NodeTab;
238
253
  tabs: {id: string; title: string}[];
@@ -243,6 +258,9 @@ interface NodePageContentProps {
243
258
  function NodePageContent({
244
259
  nodeId,
245
260
  database,
261
+ clusterName,
262
+ backend,
263
+ environment,
246
264
  activeTabId,
247
265
  tabs,
248
266
  parentContainer,
@@ -254,8 +272,8 @@ function NodePageContent({
254
272
  <TabList className={b('tab-list')} size="l">
255
273
  {tabs.map(({id, title}) => {
256
274
  const path = getDefaultNodePath(
257
- {id: nodeId, activeTab: id as NodeTab},
258
- {database},
275
+ {id: nodeId, activeTab: id as NodeTab, environment},
276
+ {database, clusterName, backend},
259
277
  );
260
278
  return (
261
279
  <Tab value={id} key={id}>
@@ -296,10 +314,6 @@ function NodePageContent({
296
314
  );
297
315
  }
298
316
 
299
- case 'structure': {
300
- return <NodeStructure nodeId={nodeId} />;
301
- }
302
-
303
317
  case 'threads': {
304
318
  return (
305
319
  <Threads
@@ -23,6 +23,7 @@ export function NodeNetworkControls({
23
23
  return (
24
24
  <React.Fragment>
25
25
  <Search
26
+ tableFilter
26
27
  value={searchValue}
27
28
  onChange={onSearchChange}
28
29
  placeholder={i18n('search-placeholder')}
@@ -1,7 +1,14 @@
1
1
  import React from 'react';
2
2
 
3
+ import {useHistory} from 'react-router-dom';
4
+
5
+ import {
6
+ getNodeHostLabel,
7
+ getNodeHostPath,
8
+ } from '../../../components/NodeHostWrapper/NodeHostWrapper';
3
9
  import {PAGINATED_TABLE_IDS, ResizeablePaginatedTable} from '../../../components/PaginatedTable';
4
10
  import type {PaginatedTableData} from '../../../components/PaginatedTable';
11
+ import {useDatabaseFromQuery} from '../../../utils/hooks/useDatabaseFromQuery';
5
12
  import {renderPaginatedTableErrorMessage} from '../../../utils/renderPaginatedTableErrorMessage';
6
13
  import type {Column} from '../../../utils/tableUtils/types';
7
14
 
@@ -25,6 +32,8 @@ export function NodeNetworkTable({
25
32
  scrollContainerRef,
26
33
  onDataFetched,
27
34
  }: NodeNetworkTableProps) {
35
+ const history = useHistory();
36
+ const database = useDatabaseFromQuery();
28
37
  const filters = React.useMemo(
29
38
  () => ({
30
39
  nodeId,
@@ -37,6 +46,14 @@ export function NodeNetworkTable({
37
46
 
38
47
  return (
39
48
  <ResizeablePaginatedTable
49
+ getKeyboardRowKey={(node) => node.NodeId}
50
+ getKeyboardRowLabel={getNodeHostLabel}
51
+ onKeyboardActivate={(node) => {
52
+ const nodePath = getNodeHostPath(node, database);
53
+ if (nodePath) {
54
+ history.push(nodePath);
55
+ }
56
+ }}
40
57
  columnsWidthLSKey={NODE_NETWORK_COLUMNS_WIDTH_LS_KEY}
41
58
  scrollContainerRef={scrollContainerRef}
42
59
  columns={columns}