ydb-embedded-ui 22.0.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 (473) 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 +4 -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 +6 -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 +53 -45
  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/i18n/index.d.ts +1 -1
  36. package/dist/components/PaginatedTable/KeyboardNavigation.d.ts +9 -0
  37. package/dist/components/PaginatedTable/KeyboardNavigation.js +14 -0
  38. package/dist/components/PaginatedTable/KeyboardNavigation.js.map +1 -0
  39. package/dist/components/PaginatedTable/PaginatedTable.d.ts +4 -1
  40. package/dist/components/PaginatedTable/PaginatedTable.js +77 -4
  41. package/dist/components/PaginatedTable/PaginatedTable.js.map +1 -1
  42. package/dist/components/PaginatedTable/PaginatedTable.scss +10 -0
  43. package/dist/components/PaginatedTable/PaginatedTableWithLayout.d.ts +2 -1
  44. package/dist/components/PaginatedTable/PaginatedTableWithLayout.js +2 -2
  45. package/dist/components/PaginatedTable/PaginatedTableWithLayout.js.map +1 -1
  46. package/dist/components/PaginatedTable/ResizeablePaginatedTable.js +2 -1
  47. package/dist/components/PaginatedTable/ResizeablePaginatedTable.js.map +1 -1
  48. package/dist/components/PaginatedTable/TableChunk.js +6 -10
  49. package/dist/components/PaginatedTable/TableChunk.js.map +1 -1
  50. package/dist/components/PaginatedTable/TableChunksRenderer.d.ts +2 -1
  51. package/dist/components/PaginatedTable/TableChunksRenderer.js +6 -1
  52. package/dist/components/PaginatedTable/TableChunksRenderer.js.map +1 -1
  53. package/dist/components/PaginatedTable/TableRow.d.ts +3 -1
  54. package/dist/components/PaginatedTable/TableRow.js +24 -8
  55. package/dist/components/PaginatedTable/TableRow.js.map +1 -1
  56. package/dist/components/PaginatedTable/getTableChunkQueryParams.d.ts +23 -0
  57. package/dist/components/PaginatedTable/getTableChunkQueryParams.js +12 -0
  58. package/dist/components/PaginatedTable/getTableChunkQueryParams.js.map +1 -0
  59. package/dist/components/PaginatedTable/rowLookup.d.ts +8 -0
  60. package/dist/components/PaginatedTable/rowLookup.js +35 -0
  61. package/dist/components/PaginatedTable/rowLookup.js.map +1 -0
  62. package/dist/components/PaginatedTable/useKeyboardNavigation.d.ts +27 -0
  63. package/dist/components/PaginatedTable/useKeyboardNavigation.js +70 -0
  64. package/dist/components/PaginatedTable/useKeyboardNavigation.js.map +1 -0
  65. package/dist/components/ResizeableDataTable/DataTableKeyboardNavigation.d.ts +24 -0
  66. package/dist/components/ResizeableDataTable/DataTableKeyboardNavigation.js +144 -0
  67. package/dist/components/ResizeableDataTable/DataTableKeyboardNavigation.js.map +1 -0
  68. package/dist/components/ResizeableDataTable/ResizeableDataTable.d.ts +4 -1
  69. package/dist/components/ResizeableDataTable/ResizeableDataTable.js +28 -4
  70. package/dist/components/ResizeableDataTable/ResizeableDataTable.js.map +1 -1
  71. package/dist/components/ResizeableDataTable/ResizeableDataTable.scss +10 -0
  72. package/dist/components/ResizeableDataTable/getDataTableOrder.d.ts +2 -0
  73. package/dist/components/ResizeableDataTable/getDataTableOrder.js +12 -0
  74. package/dist/components/ResizeableDataTable/getDataTableOrder.js.map +1 -0
  75. package/dist/components/Search/Search.d.ts +2 -1
  76. package/dist/components/Search/Search.js +6 -2
  77. package/dist/components/Search/Search.js.map +1 -1
  78. package/dist/components/ShardsTable/columns.js +6 -3
  79. package/dist/components/ShardsTable/columns.js.map +1 -1
  80. package/dist/components/ShardsTable/i18n/en.json +1 -0
  81. package/dist/components/ShardsTable/i18n/index.d.ts +1 -1
  82. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.d.ts +54 -0
  83. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.js +389 -0
  84. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.js.map +1 -0
  85. package/dist/components/TableKeyboardNavigation/TableKeyboardNavigation.scss +16 -0
  86. package/dist/components/TableKeyboardNavigation/i18n/en.json +4 -0
  87. package/dist/components/TableKeyboardNavigation/i18n/index.d.ts +2 -0
  88. package/dist/components/TableKeyboardNavigation/i18n/index.js +4 -0
  89. package/dist/components/TableKeyboardNavigation/i18n/index.js.map +1 -0
  90. package/dist/components/TableKeyboardNavigation/utils.d.ts +3 -0
  91. package/dist/components/TableKeyboardNavigation/utils.js +24 -0
  92. package/dist/components/TableKeyboardNavigation/utils.js.map +1 -0
  93. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.d.ts +4 -1
  94. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.js +4 -2
  95. package/dist/components/TableWithControlsLayout/TableWithControlsLayout.js.map +1 -1
  96. package/dist/components/TenantNameWrapper/TenantNameWrapper.d.ts +3 -1
  97. package/dist/components/TenantNameWrapper/TenantNameWrapper.js +8 -12
  98. package/dist/components/TenantNameWrapper/TenantNameWrapper.js.map +1 -1
  99. package/dist/components/TenantNameWrapper/utils.d.ts +10 -0
  100. package/dist/components/TenantNameWrapper/utils.js +11 -0
  101. package/dist/components/TenantNameWrapper/utils.js.map +1 -1
  102. package/dist/components/UptimeViewer/UptimeViewer.d.ts +2 -2
  103. package/dist/components/VDisk/VDisk.d.ts +5 -1
  104. package/dist/components/VDisk/VDisk.js +84 -29
  105. package/dist/components/VDisk/VDisk.js.map +1 -1
  106. package/dist/components/VDisk/VDiskWithDonorsStack.d.ts +4 -1
  107. package/dist/components/VDisk/VDiskWithDonorsStack.js +8 -4
  108. package/dist/components/VDisk/VDiskWithDonorsStack.js.map +1 -1
  109. package/dist/components/VDisk/i18n/en.json +11 -0
  110. package/dist/components/VDisk/i18n/index.d.ts +1 -1
  111. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  112. package/dist/components/nodesColumns/columns.d.ts +4 -1
  113. package/dist/components/nodesColumns/columns.js +13 -0
  114. package/dist/components/nodesColumns/columns.js.map +1 -1
  115. package/dist/components/nodesColumns/constants.d.ts +2 -0
  116. package/dist/components/nodesColumns/constants.js +6 -0
  117. package/dist/components/nodesColumns/constants.js.map +1 -1
  118. package/dist/components/nodesColumns/i18n/en.json +2 -1
  119. package/dist/components/nodesColumns/i18n/index.d.ts +1 -1
  120. package/dist/containers/Clusters/Clusters.js +11 -7
  121. package/dist/containers/Clusters/Clusters.js.map +1 -1
  122. package/dist/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.js +1 -1
  123. package/dist/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.js.map +1 -1
  124. package/dist/containers/Node/NodeNetwork/NodeNetworkTable.js +11 -1
  125. package/dist/containers/Node/NodeNetwork/NodeNetworkTable.js.map +1 -1
  126. package/dist/containers/Node/Threads/ThreadStatesBar/ThreadStatesBar.d.ts +1 -1
  127. package/dist/containers/Nodes/NodesControls/NodesControls.js +1 -1
  128. package/dist/containers/Nodes/NodesControls/NodesControls.js.map +1 -1
  129. package/dist/containers/Nodes/NodesTable.js +12 -1
  130. package/dist/containers/Nodes/NodesTable.js.map +1 -1
  131. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +1 -1
  132. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -1
  133. package/dist/containers/Nodes/columns/columns.js +2 -1
  134. package/dist/containers/Nodes/columns/columns.js.map +1 -1
  135. package/dist/containers/Storage/Disks/Disks.d.ts +2 -1
  136. package/dist/containers/Storage/Disks/Disks.js +34 -23
  137. package/dist/containers/Storage/Disks/Disks.js.map +1 -1
  138. package/dist/containers/Storage/Disks/Disks.scss +5 -0
  139. package/dist/containers/Storage/PDisk/PDisk.d.ts +6 -9
  140. package/dist/containers/Storage/PDisk/PDisk.js +92 -37
  141. package/dist/containers/Storage/PDisk/PDisk.js.map +1 -1
  142. package/dist/containers/Storage/PDisk/PDisk.scss +79 -1
  143. package/dist/containers/Storage/PDisk/PDiskWithVDisks.d.ts +17 -0
  144. package/dist/containers/Storage/PDisk/PDiskWithVDisks.js +48 -0
  145. package/dist/containers/Storage/PDisk/PDiskWithVDisks.js.map +1 -0
  146. package/dist/containers/Storage/PDisk/i18n/en.json +8 -0
  147. package/dist/containers/Storage/PDisk/i18n/index.d.ts +1 -1
  148. package/dist/containers/Storage/PDisk/index.d.ts +1 -0
  149. package/dist/containers/Storage/PDisk/index.js +1 -0
  150. package/dist/containers/Storage/PDisk/index.js.map +1 -1
  151. package/dist/containers/Storage/PDisks/PDisks.d.ts +4 -1
  152. package/dist/containers/Storage/PDisks/PDisks.js +52 -6
  153. package/dist/containers/Storage/PDisks/PDisks.js.map +1 -1
  154. package/dist/containers/Storage/PaginatedStorage.js +3 -1
  155. package/dist/containers/Storage/PaginatedStorage.js.map +1 -1
  156. package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.js +1 -1
  157. package/dist/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.js.map +1 -1
  158. package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.js +2 -2
  159. package/dist/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.js.map +1 -1
  160. package/dist/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.js +10 -1
  161. package/dist/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.js.map +1 -1
  162. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
  163. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.d.ts +1 -0
  164. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js +8 -5
  165. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js.map +1 -1
  166. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js +6 -3
  167. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js.map +1 -1
  168. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js +17 -5
  169. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js.map +1 -1
  170. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.d.ts +16 -0
  171. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.js +68 -0
  172. package/dist/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.js.map +1 -0
  173. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.d.ts +2 -1
  174. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js +14 -2
  175. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js.map +1 -1
  176. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/columns.js +2 -2
  177. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/columns.js.map +1 -1
  178. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/hooks.js +7 -2
  179. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/hooks.js.map +1 -1
  180. package/dist/containers/Storage/PaginatedStorageNodesTable/columns/types.d.ts +2 -0
  181. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.d.ts +5 -0
  182. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.js +31 -0
  183. package/dist/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.js.map +1 -0
  184. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.d.ts +5 -0
  185. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.js +31 -0
  186. package/dist/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.js.map +1 -0
  187. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.d.ts +21 -0
  188. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.js +13 -0
  189. package/dist/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.js.map +1 -0
  190. package/dist/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.js +1 -0
  191. package/dist/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.js.map +1 -1
  192. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.js +1 -0
  193. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.js.map +1 -1
  194. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.js +3 -2
  195. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.js.map +1 -1
  196. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.js +1 -0
  197. package/dist/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.js.map +1 -1
  198. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.js +4 -4
  199. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.js.map +1 -1
  200. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.js +3 -3
  201. package/dist/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.js.map +1 -1
  202. package/dist/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.d.ts +1 -1
  203. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.d.ts +4 -0
  204. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.js +49 -0
  205. package/dist/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.js.map +1 -0
  206. package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +20 -0
  207. package/dist/containers/Storage/StorageExpertModePanel/constants.js +22 -0
  208. package/dist/containers/Storage/StorageExpertModePanel/constants.js.map +1 -1
  209. package/dist/containers/Storage/StorageExpertModePanel/i18n/en.json +2 -2
  210. package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
  211. package/dist/containers/Storage/TableGroup/TableGroup.js +2 -1
  212. package/dist/containers/Storage/TableGroup/TableGroup.js.map +1 -1
  213. package/dist/containers/Storage/VDisks/VDisks.d.ts +2 -1
  214. package/dist/containers/Storage/VDisks/VDisks.js +11 -4
  215. package/dist/containers/Storage/VDisks/VDisks.js.map +1 -1
  216. package/dist/containers/Storage/VDisks/VDisks.scss +3 -0
  217. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.d.ts +1 -0
  218. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.js +73 -102
  219. package/dist/containers/Storage/useStoragePDiskDisplayStateGetter.js.map +1 -1
  220. package/dist/containers/Storage/useStorageQueryParams.d.ts +9 -1
  221. package/dist/containers/Storage/useStorageQueryParams.js +50 -2
  222. package/dist/containers/Storage/useStorageQueryParams.js.map +1 -1
  223. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.d.ts +1 -0
  224. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.js +50 -13
  225. package/dist/containers/Storage/useStorageVDiskDisplayStateGetter.js.map +1 -1
  226. package/dist/containers/Storage/utils/useStorageColumnsSettings.d.ts +4 -1
  227. package/dist/containers/Storage/utils/useStorageColumnsSettings.js +49 -39
  228. package/dist/containers/Storage/utils/useStorageColumnsSettings.js.map +1 -1
  229. package/dist/containers/Storage/utils/useVirtualizedDiskList.d.ts +10 -0
  230. package/dist/containers/Storage/utils/useVirtualizedDiskList.js +131 -0
  231. package/dist/containers/Storage/utils/useVirtualizedDiskList.js.map +1 -0
  232. package/dist/containers/Tablet/Tablet.js +4 -2
  233. package/dist/containers/Tablet/Tablet.js.map +1 -1
  234. package/dist/containers/Tablet/components/TabletControls/TabletControls.js +3 -1
  235. package/dist/containers/Tablet/components/TabletControls/TabletControls.js.map +1 -1
  236. package/dist/containers/Tablet/components/TabletInfo/TabletInfo.js +9 -3
  237. package/dist/containers/Tablet/components/TabletInfo/TabletInfo.js.map +1 -1
  238. package/dist/containers/Tablets/TabletsTable.js +25 -1
  239. package/dist/containers/Tablets/TabletsTable.js.map +1 -1
  240. package/dist/containers/Tablets/i18n/en.json +2 -1
  241. package/dist/containers/Tablets/i18n/index.d.ts +1 -1
  242. package/dist/containers/Tenant/Diagnostics/Overview/AsyncReplicationPaths/i18n/index.d.ts +1 -1
  243. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +2 -1
  244. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js.map +1 -1
  245. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.d.ts +7 -0
  246. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.js +69 -0
  247. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.js.map +1 -0
  248. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/en.json +9 -0
  249. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.d.ts +2 -0
  250. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.js +5 -0
  251. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.js.map +1 -0
  252. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.d.ts +1 -0
  253. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.js +2 -0
  254. package/dist/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.js.map +1 -0
  255. package/dist/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.js +3 -3
  256. package/dist/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.js.map +1 -1
  257. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.d.ts +2 -1
  258. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.js +3 -2
  259. package/dist/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.js.map +1 -1
  260. package/dist/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.js +1 -1
  261. package/dist/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.js.map +1 -1
  262. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js +1 -1
  263. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js.map +1 -1
  264. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.js +1 -1
  265. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.js.map +1 -1
  266. package/dist/containers/Tenant/Diagnostics/TopicData/columns/columns.d.ts +3 -3
  267. package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.js +2 -1
  268. package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.js.map +1 -1
  269. package/dist/containers/Tenant/Query/SavedQueries/SavedQueries.js +1 -1
  270. package/dist/containers/Tenant/Query/SavedQueries/SavedQueries.js.map +1 -1
  271. package/dist/containers/Tenants/TenantsTable.js +37 -6
  272. package/dist/containers/Tenants/TenantsTable.js.map +1 -1
  273. package/dist/containers/VDiskPage/VDiskPage.js +1 -1
  274. package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
  275. package/dist/services/api/tablets.d.ts +6 -4
  276. package/dist/services/api/tablets.js +9 -8
  277. package/dist/services/api/tablets.js.map +1 -1
  278. package/dist/store/reducers/capabilities/capabilities.d.ts +4 -4
  279. package/dist/store/reducers/capabilities/hooks.d.ts +1 -0
  280. package/dist/store/reducers/capabilities/hooks.js +8 -0
  281. package/dist/store/reducers/capabilities/hooks.js.map +1 -1
  282. package/dist/store/reducers/nodesList.d.ts +3 -261
  283. package/dist/store/reducers/nodesList.js +1 -1
  284. package/dist/store/reducers/nodesList.js.map +1 -1
  285. package/dist/store/reducers/settings/constants.d.ts +4 -0
  286. package/dist/store/reducers/settings/constants.js +4 -0
  287. package/dist/store/reducers/settings/constants.js.map +1 -1
  288. package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +1 -0
  289. package/dist/store/reducers/storage/prepareGroupsDisks.js +17 -13
  290. package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
  291. package/dist/store/reducers/storage/utils.js +11 -5
  292. package/dist/store/reducers/storage/utils.js.map +1 -1
  293. package/dist/store/reducers/tableData.d.ts +1 -1
  294. package/dist/store/reducers/tableData.js.map +1 -1
  295. package/dist/store/reducers/tablet.d.ts +3 -0
  296. package/dist/store/reducers/tablet.js +6 -6
  297. package/dist/store/reducers/tablet.js.map +1 -1
  298. package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.js +1 -1
  299. package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.js.map +1 -1
  300. package/dist/types/api/capabilities.d.ts +2 -2
  301. package/dist/types/api/pdisk.d.ts +2 -0
  302. package/dist/types/api/pdisk.js.map +1 -1
  303. package/dist/types/api/schema/persQueueGroup.d.ts +2 -2
  304. package/dist/types/api/schema/schema.d.ts +15 -0
  305. package/dist/types/api/schema/schema.js.map +1 -1
  306. package/dist/types/api/schema/tableIndex.d.ts +1 -0
  307. package/dist/types/api/storage.d.ts +4 -0
  308. package/dist/types/api/storage.js.map +1 -1
  309. package/dist/types/api/vdisk.d.ts +2 -0
  310. package/dist/types/api/vdisk.js.map +1 -1
  311. package/dist/utils/developerUI/tabletDevUi.d.ts +1 -0
  312. package/dist/utils/developerUI/tabletDevUi.js +4 -0
  313. package/dist/utils/developerUI/tabletDevUi.js.map +1 -0
  314. package/dist/utils/disks/displayState.d.ts +2 -0
  315. package/dist/utils/disks/displayState.js.map +1 -1
  316. package/dist/utils/disks/getDiskBarTone.d.ts +2 -1
  317. package/dist/utils/disks/getDiskBarTone.js +5 -1
  318. package/dist/utils/disks/getDiskBarTone.js.map +1 -1
  319. package/dist/utils/disks/pdiskState.js +2 -2
  320. package/dist/utils/disks/pdiskState.js.map +1 -1
  321. package/dist/utils/disks/prepareDisks.js +19 -9
  322. package/dist/utils/disks/prepareDisks.js.map +1 -1
  323. package/dist/utils/disks/types.d.ts +2 -1
  324. package/dist/utils/query.d.ts +1 -0
  325. package/dist/utils/query.js +6 -0
  326. package/dist/utils/query.js.map +1 -1
  327. package/package.json +1 -1
  328. package/src/components/DiskStateProgressBar/AllModeCapacityAlertIndicator.tsx +15 -2
  329. package/src/components/DiskStateProgressBar/AllModeIndicators.tsx +19 -6
  330. package/src/components/DiskStateProgressBar/DiskIndicator.tsx +19 -8
  331. package/src/components/DiskStateProgressBar/DiskStateProgressBar.scss +53 -45
  332. package/src/components/DiskStateProgressBar/DiskStateProgressBar.tsx +1 -1
  333. package/src/components/DiskStateProgressBar/PDiskAllModeIndicators.tsx +16 -3
  334. package/src/components/EvictVDiskButton/EvictVDiskButton.tsx +10 -3
  335. package/src/components/FullNodeViewer/FullNodeViewer.scss +3 -3
  336. package/src/components/FullNodeViewer/FullNodeViewer.tsx +81 -34
  337. package/src/components/FullNodeViewer/i18n/en.json +2 -1
  338. package/src/components/HoverPopup/HoverPopup.tsx +21 -16
  339. package/src/components/InfoViewer/InfoViewer.tsx +4 -2
  340. package/src/components/InfoViewer/formatters/pqGroup.ts +6 -2
  341. package/src/components/InfoViewer/schemaInfo/i18n/en.json +1 -0
  342. package/src/components/InfoViewer/schemaInfo/utils.tsx +9 -0
  343. package/src/components/NodeHostWrapper/NodeHostWrapper.tsx +23 -13
  344. package/src/components/PaginatedTable/KeyboardNavigation.tsx +30 -0
  345. package/src/components/PaginatedTable/PaginatedTable.scss +10 -0
  346. package/src/components/PaginatedTable/PaginatedTable.tsx +128 -4
  347. package/src/components/PaginatedTable/PaginatedTableWithLayout.tsx +6 -1
  348. package/src/components/PaginatedTable/ResizeablePaginatedTable.tsx +6 -1
  349. package/src/components/PaginatedTable/TableChunk.tsx +6 -14
  350. package/src/components/PaginatedTable/TableChunksRenderer.tsx +12 -0
  351. package/src/components/PaginatedTable/TableRow.tsx +54 -20
  352. package/src/components/PaginatedTable/getTableChunkQueryParams.ts +25 -0
  353. package/src/components/PaginatedTable/rowLookup.ts +63 -0
  354. package/src/components/PaginatedTable/useKeyboardNavigation.ts +115 -0
  355. package/src/components/ResizeableDataTable/DataTableKeyboardNavigation.tsx +194 -0
  356. package/src/components/ResizeableDataTable/ResizeableDataTable.scss +10 -0
  357. package/src/components/ResizeableDataTable/ResizeableDataTable.tsx +100 -5
  358. package/src/components/ResizeableDataTable/getDataTableOrder.ts +18 -0
  359. package/src/components/Search/Search.tsx +8 -1
  360. package/src/components/ShardsTable/columns.tsx +14 -5
  361. package/src/components/ShardsTable/i18n/en.json +1 -0
  362. package/src/components/TableKeyboardNavigation/TableKeyboardNavigation.scss +16 -0
  363. package/src/components/TableKeyboardNavigation/TableKeyboardNavigation.tsx +519 -0
  364. package/src/components/TableKeyboardNavigation/i18n/en.json +4 -0
  365. package/src/components/TableKeyboardNavigation/i18n/index.ts +5 -0
  366. package/src/components/TableKeyboardNavigation/utils.ts +36 -0
  367. package/src/components/TableWithControlsLayout/TableWithControlsLayout.tsx +26 -1
  368. package/src/components/TenantNameWrapper/TenantNameWrapper.tsx +14 -15
  369. package/src/components/TenantNameWrapper/utils.ts +26 -0
  370. package/src/components/VDisk/VDisk.tsx +115 -41
  371. package/src/components/VDisk/VDiskWithDonorsStack.tsx +18 -3
  372. package/src/components/VDisk/i18n/en.json +11 -0
  373. package/src/components/nodesColumns/columns.tsx +13 -1
  374. package/src/components/nodesColumns/constants.ts +6 -0
  375. package/src/components/nodesColumns/i18n/en.json +2 -1
  376. package/src/containers/Clusters/Clusters.tsx +47 -29
  377. package/src/containers/Node/NodeNetwork/NodeNetworkControls/NodeNetworkControls.tsx +1 -0
  378. package/src/containers/Node/NodeNetwork/NodeNetworkTable.tsx +17 -0
  379. package/src/containers/Nodes/NodesControls/NodesControls.tsx +1 -0
  380. package/src/containers/Nodes/NodesTable.tsx +17 -1
  381. package/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +1 -0
  382. package/src/containers/Nodes/columns/columns.tsx +2 -0
  383. package/src/containers/Storage/Disks/Disks.scss +5 -0
  384. package/src/containers/Storage/Disks/Disks.tsx +156 -92
  385. package/src/containers/Storage/PDisk/PDisk.scss +79 -1
  386. package/src/containers/Storage/PDisk/PDisk.tsx +157 -81
  387. package/src/containers/Storage/PDisk/PDiskWithVDisks.tsx +181 -0
  388. package/src/containers/Storage/PDisk/i18n/en.json +8 -0
  389. package/src/containers/Storage/PDisk/index.ts +1 -0
  390. package/src/containers/Storage/PDisks/PDisks.tsx +157 -22
  391. package/src/containers/Storage/PaginatedStorage.tsx +4 -0
  392. package/src/containers/Storage/PaginatedStorageGroups/GroupedStorageGroupsComponent.tsx +1 -0
  393. package/src/containers/Storage/PaginatedStorageGroups/StorageGroupsControls.tsx +3 -2
  394. package/src/containers/Storage/PaginatedStorageGroupsTable/PaginatedStorageGroupsTable.tsx +13 -0
  395. package/src/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.tsx +10 -2
  396. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.tsx +6 -2
  397. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesControls.tsx +76 -41
  398. package/src/containers/Storage/PaginatedStorageNodes/nodeExpertModeLayout.ts +103 -0
  399. package/src/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.tsx +24 -1
  400. package/src/containers/Storage/PaginatedStorageNodesTable/columns/columns.tsx +3 -1
  401. package/src/containers/Storage/PaginatedStorageNodesTable/columns/hooks.ts +8 -1
  402. package/src/containers/Storage/PaginatedStorageNodesTable/columns/types.ts +2 -0
  403. package/src/containers/Storage/StorageExpertModePanel/StorageGroupsExpertModePanel.tsx +63 -0
  404. package/src/containers/Storage/StorageExpertModePanel/StorageNodesExpertModePanel.tsx +67 -0
  405. package/src/containers/Storage/StorageExpertModePanel/components/ExpertModePanelLayout.tsx +63 -0
  406. package/src/containers/Storage/StorageExpertModePanel/components/FrontQueuesLegend.tsx +1 -0
  407. package/src/containers/Storage/StorageExpertModePanel/components/PDiskDecommitLegend.tsx +1 -0
  408. package/src/containers/Storage/StorageExpertModePanel/components/PDiskDriveLegend.tsx +3 -2
  409. package/src/containers/Storage/StorageExpertModePanel/components/PDiskMaintenanceLegend.tsx +1 -0
  410. package/src/containers/Storage/StorageExpertModePanel/components/SpaceLegend.tsx +3 -0
  411. package/src/containers/Storage/StorageExpertModePanel/components/StatusPairLegend.tsx +7 -9
  412. package/src/containers/Storage/StorageExpertModePanel/components/getSpaceLegendSelection.ts +1 -1
  413. package/src/containers/Storage/StorageExpertModePanel/components/renderExpertModeLegend.tsx +58 -0
  414. package/src/containers/Storage/StorageExpertModePanel/constants.ts +26 -0
  415. package/src/containers/Storage/StorageExpertModePanel/i18n/en.json +2 -2
  416. package/src/containers/Storage/TableGroup/TableGroup.tsx +6 -1
  417. package/src/containers/Storage/VDisks/VDisks.scss +3 -0
  418. package/src/containers/Storage/VDisks/VDisks.tsx +29 -7
  419. package/src/containers/Storage/useStoragePDiskDisplayStateGetter.ts +94 -135
  420. package/src/containers/Storage/useStorageQueryParams.ts +120 -1
  421. package/src/containers/Storage/useStorageVDiskDisplayStateGetter.ts +65 -10
  422. package/src/containers/Storage/utils/useStorageColumnsSettings.ts +77 -49
  423. package/src/containers/Storage/utils/useVirtualizedDiskList.ts +156 -0
  424. package/src/containers/Tablet/Tablet.tsx +4 -2
  425. package/src/containers/Tablet/components/TabletControls/TabletControls.tsx +7 -3
  426. package/src/containers/Tablet/components/TabletInfo/TabletInfo.tsx +13 -3
  427. package/src/containers/Tablets/TabletsTable.tsx +50 -10
  428. package/src/containers/Tablets/i18n/en.json +2 -1
  429. package/src/containers/Tenant/Diagnostics/Overview/Overview.tsx +2 -1
  430. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/ResourcePoolInfo.tsx +106 -0
  431. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/en.json +9 -0
  432. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/i18n/index.ts +7 -0
  433. package/src/containers/Tenant/Diagnostics/Overview/ResourcePoolInfo/index.ts +1 -0
  434. package/src/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.ts +3 -3
  435. package/src/containers/Tenant/Diagnostics/TopQueries/QueriesTableWithDrawer.tsx +6 -0
  436. package/src/containers/Tenant/Diagnostics/TopQueries/RunningQueriesData.tsx +4 -0
  437. package/src/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.tsx +7 -1
  438. package/src/containers/Tenant/Diagnostics/TopShards/TopShards.tsx +1 -1
  439. package/src/containers/Tenant/Query/QueriesHistory/QueriesHistory.tsx +5 -0
  440. package/src/containers/Tenant/Query/SavedQueries/SavedQueries.tsx +6 -0
  441. package/src/containers/Tenants/TenantsTable.tsx +70 -12
  442. package/src/containers/VDiskPage/VDiskPage.tsx +1 -1
  443. package/src/services/api/tablets.ts +16 -7
  444. package/src/store/reducers/capabilities/hooks.ts +9 -0
  445. package/src/store/reducers/nodesList.ts +2 -3
  446. package/src/store/reducers/settings/constants.ts +4 -0
  447. package/src/store/reducers/storage/prepareGroupsDisks.ts +16 -11
  448. package/src/store/reducers/storage/utils.ts +12 -5
  449. package/src/store/reducers/tableData.ts +1 -1
  450. package/src/store/reducers/tablet.ts +25 -6
  451. package/src/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.ts +1 -1
  452. package/src/types/api/capabilities.ts +2 -2
  453. package/src/types/api/pdisk.ts +2 -0
  454. package/src/types/api/schema/persQueueGroup.ts +2 -2
  455. package/src/types/api/schema/schema.ts +18 -0
  456. package/src/types/api/schema/tableIndex.ts +1 -0
  457. package/src/types/api/storage.ts +4 -0
  458. package/src/types/api/vdisk.ts +2 -0
  459. package/src/utils/developerUI/tabletDevUi.ts +3 -0
  460. package/src/utils/disks/displayState.ts +2 -0
  461. package/src/utils/disks/getDiskBarTone.ts +8 -0
  462. package/src/utils/disks/pdiskState.ts +2 -2
  463. package/src/utils/disks/prepareDisks.ts +25 -9
  464. package/src/utils/disks/types.ts +2 -1
  465. package/src/utils/query.ts +7 -0
  466. package/dist/containers/Storage/PDisk/PDiskVDisks.d.ts +0 -13
  467. package/dist/containers/Storage/PDisk/PDiskVDisks.js +0 -20
  468. package/dist/containers/Storage/PDisk/PDiskVDisks.js.map +0 -1
  469. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.d.ts +0 -6
  470. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.js +0 -66
  471. package/dist/containers/Storage/StorageExpertModePanel/StorageExpertModePanel.js.map +0 -1
  472. package/src/containers/Storage/PDisk/PDiskVDisks.tsx +0 -65
  473. 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,11 +3,12 @@ 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';
@@ -35,7 +36,6 @@ const EMPTY_ALL_MODE_INDICATORS = {};
35
36
  interface GetVDiskBarContentParams {
36
37
  allocatedPercent?: number;
37
38
  compact?: boolean;
38
- hidden: boolean;
39
39
  noDataPlaceholder?: React.ReactNode;
40
40
  severity: number;
41
41
  showAllocatedPercentLabel?: boolean;
@@ -45,16 +45,11 @@ interface GetVDiskBarContentParams {
45
45
  function getVDiskBarContent({
46
46
  allocatedPercent,
47
47
  compact,
48
- hidden,
49
48
  noDataPlaceholder,
50
49
  severity,
51
50
  showAllocatedPercentLabel,
52
51
  showNoDataPlaceholder,
53
52
  }: GetVDiskBarContentParams) {
54
- if (hidden) {
55
- return null;
56
- }
57
-
58
53
  const hasAllocatedPercent = isNumeric(allocatedPercent) && allocatedPercent >= 0;
59
54
  if (!compact && hasAllocatedPercent && showAllocatedPercentLabel !== false) {
60
55
  return <DiskBarLabel>{`${Math.floor(allocatedPercent)}%`}</DiskBarLabel>;
@@ -74,6 +69,9 @@ function getVDiskBarContent({
74
69
  interface GetVDiskBarIndicatorParams {
75
70
  hidden: boolean;
76
71
  icon?: DiskIndicatorValue;
72
+ indicatorClassName?: string;
73
+ iconGroupSize?: number;
74
+ iconSize?: number;
77
75
  isDonor?: boolean;
78
76
  placement: 'inline' | 'overlap';
79
77
  severity: number;
@@ -83,6 +81,9 @@ interface GetVDiskBarIndicatorParams {
83
81
  function getVDiskBarIndicator({
84
82
  hidden,
85
83
  icon,
84
+ indicatorClassName,
85
+ iconGroupSize,
86
+ iconSize,
86
87
  isDonor,
87
88
  placement,
88
89
  severity,
@@ -94,33 +95,49 @@ function getVDiskBarIndicator({
94
95
  }
95
96
 
96
97
  return {
97
- leading: <DiskIndicator value={resolvedIndicator} placement={placement} />,
98
+ leading: (
99
+ <DiskIndicator
100
+ value={resolvedIndicator}
101
+ placement={placement}
102
+ iconSize={iconSize}
103
+ iconGroupSize={iconGroupSize}
104
+ className={indicatorClassName}
105
+ />
106
+ ),
98
107
  overflowVisible: placement === 'overlap',
99
108
  showIndicator: true,
100
109
  };
101
110
  }
102
111
 
103
- function getAllModeOverlay(
104
- compact: boolean | undefined,
105
- isAllMode: boolean,
106
- indicators: AllModeIndicatorsState | undefined,
107
- ) {
108
- if (compact || !isAllMode) {
109
- return null;
112
+ function getFlagAccessibleName(flag: EFlag | undefined) {
113
+ switch (flag) {
114
+ case EFlag.Green:
115
+ case EFlag.Blue:
116
+ return i18n('value_ok');
117
+ case EFlag.Yellow:
118
+ return i18n('value_notice');
119
+ case EFlag.Orange:
120
+ return i18n('value_warning');
121
+ case EFlag.Red:
122
+ return i18n('value_impaired');
123
+ default:
124
+ return i18n('context_no-data');
110
125
  }
111
-
112
- return <AllModeIndicators indicators={indicators ?? EMPTY_ALL_MODE_INDICATORS} />;
113
126
  }
114
127
 
115
- function getAccessibleName(
116
- data: PreparedVDisk,
117
- hasIssues: boolean | undefined,
118
- isAllMode: boolean,
119
- ) {
120
- if (!isAllMode) {
121
- return undefined;
128
+ function getReplicationAccessibleName(replicated: boolean | undefined) {
129
+ if (replicated === undefined) {
130
+ return i18n('context_no-data');
122
131
  }
123
132
 
133
+ return i18n(
134
+ replicated
135
+ ? 'context_all-mode-replication-complete'
136
+ : 'context_all-mode-replication-in-progress',
137
+ );
138
+ }
139
+
140
+ function getAllModeAccessibleName(data: PreparedVDisk, hasIssues: boolean | undefined) {
124
141
  const noData = i18n('context_no-data');
125
142
  const health =
126
143
  hasIssues === undefined
@@ -132,20 +149,11 @@ function getAccessibleName(
132
149
  Number.isFinite(data.AllocatedPercent) && Number(data.AllocatedPercent) >= 0
133
150
  ? `${data.AllocatedPercent}%`
134
151
  : 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
152
  return i18n('context_all-mode-accessible-name', {
145
153
  vdiskId: data.StringifiedId || noData,
146
154
  health,
147
- state: data.VDiskState || noData,
148
- replication,
155
+ state: data.VDiskState || data.Status || noData,
156
+ replication: getReplicationAccessibleName(data.Replicated),
149
157
  capacityAlert: data.CapacityAlert || noData,
150
158
  frontQueues: data.FrontQueues || noData,
151
159
  freshCompaction: data.SatisfactionRank?.FreshRank?.Flag || noData,
@@ -154,9 +162,58 @@ function getAccessibleName(
154
162
  });
155
163
  }
156
164
 
165
+ function getAccessibleName(data: PreparedVDisk, {mode, allMode, isNoData}: VDiskDisplayState) {
166
+ if (!mode) {
167
+ return undefined;
168
+ }
169
+ if (mode === 'all') {
170
+ return getAllModeAccessibleName(data, allMode?.hasIssues);
171
+ }
172
+
173
+ const noData = i18n('context_no-data');
174
+ let diskName = i18n(data.DonorMode ? 'context_donor-vdisk' : 'context_vdisk', {
175
+ vdiskId: data.StringifiedId || noData,
176
+ nodeId: data.NodeId ?? noData,
177
+ });
178
+ if (isNoData) {
179
+ diskName = i18n('context_vdisk-no-whiteboard', {disk: diskName, noData});
180
+ }
181
+
182
+ const {CapacityAlert, FrontQueues, SatisfactionRank, Replicated} = isNoData ? {} : data;
183
+ const {FreshRank, LevelRank} = SatisfactionRank ?? {};
184
+
185
+ switch (mode) {
186
+ case 'state':
187
+ return i18n('context_state-accessible-name', {
188
+ disk: diskName,
189
+ state: data.VDiskState || data.Status || noData,
190
+ replication: getReplicationAccessibleName(Replicated),
191
+ });
192
+ case 'space':
193
+ return i18n('context_space-accessible-name', {
194
+ disk: diskName,
195
+ capacityAlert: isCapacityAlert(CapacityAlert) ? CapacityAlert : noData,
196
+ });
197
+ case 'frontQueues':
198
+ return i18n('context_front-queues-accessible-name', {
199
+ disk: diskName,
200
+ frontQueues: getFlagAccessibleName(FrontQueues),
201
+ });
202
+ case 'compaction':
203
+ return i18n('context_compaction-accessible-name', {
204
+ disk: diskName,
205
+ freshCompaction: getFlagAccessibleName(FreshRank?.Flag),
206
+ levelCompaction: getFlagAccessibleName(LevelRank?.Flag),
207
+ });
208
+ default:
209
+ return undefined;
210
+ }
211
+ }
212
+
157
213
  export interface VDiskProps {
158
214
  data?: PreparedVDisk;
159
215
  compact?: boolean;
216
+ allModeSize?: 's' | 'm';
160
217
  inactive?: boolean;
161
218
  showPopup?: boolean;
162
219
  onShowPopup?: VoidFunction;
@@ -165,6 +222,9 @@ export interface VDiskProps {
165
222
  delayOpen?: number;
166
223
  delayClose?: number;
167
224
  withIcon?: boolean;
225
+ iconSize?: number;
226
+ iconGroupSize?: number;
227
+ indicatorClassName?: string;
168
228
  highlighted?: boolean;
169
229
  placement?: PopupPlacement;
170
230
  popupOffset?: PopupProps['offset'];
@@ -175,6 +235,7 @@ export interface VDiskProps {
175
235
  export const VDisk = ({
176
236
  data = {},
177
237
  compact,
238
+ allModeSize,
178
239
  inactive,
179
240
  showPopup,
180
241
  onShowPopup,
@@ -183,6 +244,9 @@ export const VDisk = ({
183
244
  delayClose,
184
245
  delayOpen,
185
246
  withIcon,
247
+ iconSize,
248
+ iconGroupSize,
249
+ indicatorClassName,
186
250
  highlighted,
187
251
  placement = ['top', 'bottom', 'left', 'right'],
188
252
  popupOffset = DEFAULT_POPUP_OFFSET,
@@ -203,20 +267,24 @@ export const VDisk = ({
203
267
  icon,
204
268
  mode,
205
269
  isLegendInactive,
270
+ borderless,
206
271
  showNoDataPlaceholder,
207
272
  allocatedPercent,
208
273
  showAllocatedPercentLabel,
209
274
  striped,
210
275
  iconPlacement,
211
276
  allMode,
277
+ isNoData,
212
278
  } = displayState;
213
279
 
214
280
  const isAllMode = mode === 'all';
215
- const accessibleName = getAccessibleName(data, allMode?.hasIssues, isAllMode);
216
- const hideBarContent = Boolean(isLegendInactive && !isDonor);
281
+ const accessibleName = getAccessibleName(data, displayState);
217
282
  const {leading, overflowVisible, showIndicator} = getVDiskBarIndicator({
218
- hidden: hideBarContent,
283
+ hidden: Boolean(isLegendInactive && !isDonor),
219
284
  icon,
285
+ indicatorClassName,
286
+ iconGroupSize,
287
+ iconSize,
220
288
  isDonor,
221
289
  placement: iconPlacement,
222
290
  severity,
@@ -226,18 +294,24 @@ export const VDisk = ({
226
294
  const barContent = getVDiskBarContent({
227
295
  allocatedPercent,
228
296
  compact,
229
- hidden: hideBarContent,
230
297
  noDataPlaceholder,
231
298
  severity,
232
299
  showAllocatedPercentLabel,
233
300
  showNoDataPlaceholder,
234
301
  });
235
- const overlay = getAllModeOverlay(compact, isAllMode, allMode?.indicators);
302
+ const overlay =
303
+ !compact && isAllMode && !isNoData ? (
304
+ <AllModeIndicators
305
+ indicators={allMode?.indicators ?? EMPTY_ALL_MODE_INDICATORS}
306
+ size={allModeSize}
307
+ />
308
+ ) : null;
236
309
  const tone = getDiskBarTone({
237
310
  severity,
238
311
  isDonor,
239
312
  showIndicator,
240
313
  indicator: icon,
314
+ isNoData,
241
315
  });
242
316
 
243
317
  return (
@@ -275,7 +349,7 @@ export const VDisk = ({
275
349
  overlay={overlay}
276
350
  highlighted={highlighted}
277
351
  strongFill={allMode?.hasIssues}
278
- borderless={isLegendInactive}
352
+ borderless={borderless}
279
353
  overflowVisible={overflowVisible}
280
354
  />
281
355
  </InternalLink>
@@ -15,6 +15,8 @@ interface VDiskWithDonorsStackProps extends Omit<VDiskProps, 'withOpaqueBackgrou
15
15
  highlightedVDisk?: string;
16
16
  setHighlightedVDisk?: (id?: string) => void;
17
17
  progressBarClassName?: string;
18
+ renderContent?: boolean;
19
+ placeholderProps?: React.HTMLAttributes<HTMLDivElement>;
18
20
  }
19
21
 
20
22
  const diskInStackPlacement: PopupPlacement = ['left', 'right'];
@@ -33,6 +35,8 @@ export function VDiskWithDonorsStack({
33
35
  onShowPopup: _onShowPopup,
34
36
  onHidePopup: _onHidePopup,
35
37
  highlighted: _highlighted,
38
+ renderContent = true,
39
+ placeholderProps,
36
40
  ...restProps
37
41
  }: VDiskWithDonorsStackProps) {
38
42
  const donors = data?.Donors ?? EMPTY_DONORS;
@@ -44,7 +48,7 @@ export function VDiskWithDonorsStack({
44
48
  const [internalHighlightedVDisk, setInternalHighlightedVDisk] = React.useState<string>();
45
49
 
46
50
  const donorIds = React.useMemo(
47
- () => new Set(donors?.map((donor) => donor.StringifiedId) ?? []),
51
+ () => new Set(donors.map((donor) => donor.StringifiedId)),
48
52
  [donors],
49
53
  );
50
54
 
@@ -65,6 +69,13 @@ export function VDiskWithDonorsStack({
65
69
  setHighlightedVDisk?.(undefined);
66
70
  }, [setHighlightedVDisk]);
67
71
 
72
+ // Keep the stack's state and popup anchors until a main/donor interaction finishes.
73
+ if (!renderContent && !isHighlighted && !highlightedVDiskInStack) {
74
+ return (
75
+ <div className={className} data-disk-id={stackId} tabIndex={-1} {...placeholderProps} />
76
+ );
77
+ }
78
+
68
79
  // Spread restProps first, then explicitly override critical fields to prevent
69
80
  // external code from breaking the stack's highlight/popup coordination.
70
81
  const mainVDiskProps: Partial<VDiskProps> = {
@@ -107,7 +118,7 @@ export function VDiskWithDonorsStack({
107
118
  highlighted={donor.StringifiedId === internalHighlightedVDisk}
108
119
  onShowPopup={() => {
109
120
  if (donor.StringifiedId) {
110
- setInternalHighlightedVDisk?.(donor.StringifiedId);
121
+ setInternalHighlightedVDisk(donor.StringifiedId);
111
122
  }
112
123
  }}
113
124
  onHidePopup={() => {
@@ -121,5 +132,9 @@ export function VDiskWithDonorsStack({
121
132
  <VDisk data={data} withIcon={withIcon} {...mainVDiskProps} />
122
133
  );
123
134
 
124
- return <div className={className}>{content}</div>;
135
+ return (
136
+ <div className={className} data-disk-id={stackId} tabIndex={-1}>
137
+ {content}
138
+ </div>
139
+ );
125
140
  }
@@ -1,5 +1,16 @@
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_state-accessible-name": "{{disk}}. State: {{state}}. Replication: {{replication}}.",
7
+ "context_space-accessible-name": "{{disk}}. Capacity alert: {{capacityAlert}}.",
8
+ "context_front-queues-accessible-name": "{{disk}}. Front queues: {{frontQueues}}.",
9
+ "context_compaction-accessible-name": "{{disk}}. Fresh compaction: {{freshCompaction}}. Level compaction: {{levelCompaction}}.",
10
+ "value_ok": "OK",
11
+ "value_notice": "Notice",
12
+ "value_warning": "Warning",
13
+ "value_impaired": "Impaired",
3
14
  "context_all-mode-health-healthy": "healthy",
4
15
  "context_all-mode-health-issues": "issues detected",
5
16
  "context_all-mode-replication-complete": "complete",
@@ -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
  }
@@ -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}
@@ -67,6 +67,7 @@ export function NodesControls({
67
67
  return (
68
68
  <React.Fragment>
69
69
  <Search
70
+ tableFilter
70
71
  onChange={handleSearchQueryChange}
71
72
  placeholder={i18n('controls_search-placeholder')}
72
73
  width={238}