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
@@ -25,10 +25,15 @@ import {
25
25
  } from '../../utils/disks/severityCalculators';
26
26
 
27
27
  import {EXPERT_MODE_ALL_PDISK_WIDTH, EXPERT_MODE_PDISK_WIDTH} from './Disks/constants';
28
+ import type {SpaceLegendSelectionScope} from './StorageExpertModePanel/components/getSpaceLegendSelection';
28
29
  import {useSpaceLegendSelection} from './StorageExpertModePanel/components/useSpaceLegendSelection';
29
30
  import {PDisksGroupBy} from './StorageExpertModePanel/constants';
30
31
  import type {PDisksGroupByValue} from './StorageExpertModePanel/constants';
31
- import {useIsStorageExpertMode, usePDisksGroupByParam} from './useStorageQueryParams';
32
+ import {
33
+ useIsStorageExpertMode,
34
+ useNodesPDisksGroupByParam,
35
+ usePDisksGroupByParam,
36
+ } from './useStorageQueryParams';
32
37
 
33
38
  function getMode(groupBy: PDisksGroupByValue): DiskDisplayMode | undefined {
34
39
  switch (groupBy) {
@@ -51,18 +56,6 @@ function getMode(groupBy: PDisksGroupByValue): DiskDisplayMode | undefined {
51
56
  }
52
57
  }
53
58
 
54
- function requiresWhiteboardData(groupBy: PDisksGroupByValue) {
55
- return groupBy === PDisksGroupBy.State || groupBy === PDisksGroupBy.Device;
56
- }
57
-
58
- function hasBSCStatusData(pDisk: Parameters<PDiskDisplayStateGetter>[0]) {
59
- return (
60
- pDisk.DriveStatus !== undefined ||
61
- pDisk.DecommitStatus !== undefined ||
62
- pDisk.MaintenanceStatus !== undefined
63
- );
64
- }
65
-
66
59
  function getAllocatedPercent(pDisk: Parameters<PDiskDisplayStateGetter>[0]) {
67
60
  const whiteboardAllocatedPercent = pDisk.WhiteboardSize?.AllocatedPercent;
68
61
 
@@ -87,43 +80,54 @@ function isAllModeHealthy(pDisk: Parameters<PDiskDisplayStateGetter>[0]) {
87
80
  function getAllModeIndicators(
88
81
  pDisk: Parameters<PDiskDisplayStateGetter>[0],
89
82
  isCapacityAlertInactive: boolean,
83
+ hasWhiteboardData = true,
90
84
  ): PDiskAllModeIndicatorsState {
91
85
  const capacityAlertIcon = isCapacityAlertInactive
92
86
  ? undefined
93
87
  : calculateSpaceIcon({CapacityAlert: pDisk.PDiskCapacityAlert});
94
- const driveDisplayState = getPDiskDriveDisplayState(pDisk.DriveStatus);
95
- const decommitDisplayState = getPDiskDecommitDisplayState(pDisk.DecommitStatus);
96
- const maintenanceDisplayState = getPDiskMaintenanceDisplayState(pDisk.MaintenanceStatus);
88
+ const driveIcon = getBSCStatusDisplayState(pDisk, 'drive', hasWhiteboardData)?.icon;
89
+ const decommitIcon = getBSCStatusDisplayState(pDisk, 'decommit', hasWhiteboardData)?.icon;
90
+ const maintenanceIcon = getBSCStatusDisplayState(pDisk, 'maintenance', hasWhiteboardData)?.icon;
97
91
  const deviceIcon = calculateFlagPairIcon(pDisk.Device, pDisk.Realtime);
98
- const driveIcon = pDisk.DriveStatus === undefined ? CircleQuestionFill : driveDisplayState.icon;
99
- const decommitIcon =
100
- pDisk.DecommitStatus === undefined ? CircleQuestionFill : decommitDisplayState.icon;
101
- const maintenanceIcon =
102
- pDisk.MaintenanceStatus === undefined ? CircleQuestionFill : maintenanceDisplayState.icon;
103
92
 
104
93
  return {
105
- ...(capacityAlertIcon ? {capacityAlert: capacityAlertIcon} : {}),
94
+ ...(capacityAlertIcon && (hasWhiteboardData || isCapacityAlert(pDisk.PDiskCapacityAlert))
95
+ ? {capacityAlert: capacityAlertIcon}
96
+ : {}),
106
97
  ...(driveIcon ? {drive: driveIcon} : {}),
107
98
  ...(decommitIcon ? {decommit: decommitIcon} : {}),
108
99
  ...(maintenanceIcon ? {maintenance: maintenanceIcon} : {}),
109
- ...(deviceIcon ? {device: deviceIcon} : {}),
100
+ ...(deviceIcon && hasWhiteboardData ? {device: deviceIcon} : {}),
110
101
  };
111
102
  }
112
103
 
113
- function getMissingAllModeDisplayState(
104
+ function getMissingPDiskDisplayState(
114
105
  pDisk: Parameters<PDiskDisplayStateGetter>[0],
106
+ mode: DiskDisplayMode | undefined,
107
+ inactiveAlerts: Set<ECapacityAlert>,
115
108
  ): PDiskDisplayState {
109
+ const isCapacityAlertInactive =
110
+ isCapacityAlert(pDisk.PDiskCapacityAlert) && inactiveAlerts.has(pDisk.PDiskCapacityAlert);
111
+ let icon: PDiskDisplayState['icon'] = getBSCStatusDisplayState(pDisk, mode, false)?.icon;
112
+ if (mode === 'space' && isCapacityAlert(pDisk.PDiskCapacityAlert) && !isCapacityAlertInactive) {
113
+ icon = calculateSpaceIcon({CapacityAlert: pDisk.PDiskCapacityAlert});
114
+ }
115
+
116
116
  return {
117
117
  severity: NOT_AVAILABLE_SEVERITY,
118
- icon: undefined,
119
- mode: 'all',
118
+ icon,
119
+ mode,
120
+ isNoData: true,
120
121
  isLegendInactive: false,
121
122
  showNoDataPlaceholder: true,
122
- allocatedPercent: getAllocatedPercent(pDisk),
123
- showAllocatedPercentLabel: false,
123
+ allocatedPercent:
124
+ mode === 'all' || mode === 'space' ? getAllocatedPercent(pDisk) : undefined,
125
+ showAllocatedPercentLabel: mode !== 'all',
124
126
  iconPlacement: 'inline',
125
- width: EXPERT_MODE_ALL_PDISK_WIDTH,
126
- allMode: {indicators: {}},
127
+ width: mode === 'all' ? EXPERT_MODE_ALL_PDISK_WIDTH : EXPERT_MODE_PDISK_WIDTH,
128
+ ...(mode === 'all'
129
+ ? {allMode: {indicators: getAllModeIndicators(pDisk, isCapacityAlertInactive, false)}}
130
+ : {}),
127
131
  };
128
132
  }
129
133
 
@@ -157,96 +161,43 @@ function getAllModeDisplayState(
157
161
  };
158
162
  }
159
163
 
160
- function getMissingStatusDisplayState(mode: DiskDisplayMode | undefined): PDiskDisplayState {
161
- return {
162
- severity: NOT_AVAILABLE_SEVERITY,
163
- icon: undefined,
164
- mode,
165
- isLegendInactive: false,
166
- showNoDataPlaceholder: true,
167
- allocatedPercent: undefined,
168
- width: mode ? EXPERT_MODE_PDISK_WIDTH : undefined,
169
- };
170
- }
171
-
172
- interface GetStatusModeDisplayStateParams {
173
- hasWhiteboardData: boolean;
174
- mode: DiskDisplayMode | undefined;
175
- pDisk: Parameters<PDiskDisplayStateGetter>[0];
176
- pdisksGroupBy: PDisksGroupByValue;
177
- }
178
-
179
- function getStatusModeDisplayState({
180
- hasWhiteboardData,
181
- mode,
182
- pDisk,
183
- pdisksGroupBy,
184
- }: GetStatusModeDisplayStateParams): PDiskDisplayState | undefined {
185
- if (pdisksGroupBy === PDisksGroupBy.Drive) {
186
- if (!hasWhiteboardData && pDisk.DriveStatus === undefined) {
187
- return getMissingStatusDisplayState(mode);
188
- }
189
-
190
- const driveDisplayState = getPDiskDriveDisplayState(pDisk.DriveStatus);
191
-
192
- return {
193
- ...driveDisplayState,
194
- icon: pDisk.DriveStatus === undefined ? CircleQuestionFill : driveDisplayState.icon,
195
- mode,
196
- isLegendInactive: false,
197
- showNoDataPlaceholder: false,
198
- allocatedPercent: undefined,
199
- width: EXPERT_MODE_PDISK_WIDTH,
200
- };
201
- }
202
-
203
- if (pdisksGroupBy === PDisksGroupBy.Decommit) {
204
- if (!hasWhiteboardData && pDisk.DecommitStatus === undefined) {
205
- return getMissingStatusDisplayState(mode);
206
- }
207
-
208
- const decommitDisplayState = getPDiskDecommitDisplayState(pDisk.DecommitStatus);
209
-
210
- return {
211
- ...decommitDisplayState,
212
- icon:
213
- pDisk.DecommitStatus === undefined ? CircleQuestionFill : decommitDisplayState.icon,
214
- mode,
215
- isLegendInactive: false,
216
- showNoDataPlaceholder: false,
217
- allocatedPercent: undefined,
218
- width: EXPERT_MODE_PDISK_WIDTH,
219
- };
220
- }
221
-
222
- if (pdisksGroupBy === PDisksGroupBy.Maintenance) {
223
- if (!hasWhiteboardData && pDisk.MaintenanceStatus === undefined) {
224
- return getMissingStatusDisplayState(mode);
225
- }
226
-
227
- const maintenanceDisplayState = getPDiskMaintenanceDisplayState(pDisk.MaintenanceStatus);
228
-
229
- return {
230
- ...maintenanceDisplayState,
231
- icon:
232
- pDisk.MaintenanceStatus === undefined
233
- ? CircleQuestionFill
234
- : maintenanceDisplayState.icon,
235
- mode,
236
- isLegendInactive: false,
237
- showNoDataPlaceholder: false,
238
- allocatedPercent: undefined,
239
- width: EXPERT_MODE_PDISK_WIDTH,
240
- };
164
+ function getBSCStatusDisplayState(
165
+ pDisk: Parameters<PDiskDisplayStateGetter>[0],
166
+ mode: DiskDisplayMode | undefined,
167
+ hasWhiteboardData: boolean,
168
+ ) {
169
+ let status: string | undefined;
170
+ let displayState: ReturnType<typeof getPDiskDriveDisplayState>;
171
+
172
+ switch (mode) {
173
+ case 'drive':
174
+ status = pDisk.DriveStatus;
175
+ displayState = getPDiskDriveDisplayState(pDisk.DriveStatus);
176
+ break;
177
+ case 'decommit':
178
+ status = pDisk.DecommitStatus;
179
+ displayState = getPDiskDecommitDisplayState(pDisk.DecommitStatus);
180
+ break;
181
+ case 'maintenance':
182
+ status = pDisk.MaintenanceStatus;
183
+ displayState = getPDiskMaintenanceDisplayState(pDisk.MaintenanceStatus);
184
+ break;
185
+ default:
186
+ return undefined;
241
187
  }
242
188
 
243
- return undefined;
189
+ return {
190
+ ...displayState,
191
+ icon: status === undefined && hasWhiteboardData ? CircleQuestionFill : displayState.icon,
192
+ };
244
193
  }
245
194
 
246
- export function useStoragePDiskDisplayStateGetter(): PDiskDisplayStateGetter {
195
+ function usePDiskDisplayStateGetter(
196
+ pdisksGroupBy: PDisksGroupByValue,
197
+ selectionScope: SpaceLegendSelectionScope,
198
+ ): PDiskDisplayStateGetter {
247
199
  const isExpertMode = useIsStorageExpertMode();
248
- const pdisksGroupBy = usePDisksGroupByParam();
249
- const inactiveAlerts = useSpaceLegendSelection('pdisks');
200
+ const inactiveAlerts = useSpaceLegendSelection(selectionScope);
250
201
 
251
202
  return React.useCallback(
252
203
  (pDisk) => {
@@ -255,31 +206,25 @@ export function useStoragePDiskDisplayStateGetter(): PDiskDisplayStateGetter {
255
206
  }
256
207
 
257
208
  const mode = getMode(pdisksGroupBy);
258
- const hasWhiteboardData = pDisk.WhiteboardSize !== undefined;
259
-
260
- if (
261
- pdisksGroupBy === PDisksGroupBy.All &&
262
- !hasWhiteboardData &&
263
- !hasBSCStatusData(pDisk)
264
- ) {
265
- return getMissingAllModeDisplayState(pDisk);
266
- }
209
+ const hasWhiteboardData = pDisk.HasWhiteboardData ?? pDisk.WhiteboardSize !== undefined;
267
210
 
268
- if (!hasWhiteboardData && requiresWhiteboardData(pdisksGroupBy)) {
269
- return getMissingStatusDisplayState(mode);
211
+ if (!hasWhiteboardData) {
212
+ return getMissingPDiskDisplayState(pDisk, mode, inactiveAlerts);
270
213
  }
271
214
 
272
215
  const allocatedPercent = getAllocatedPercent(pDisk);
273
216
 
274
217
  if (pdisksGroupBy === PDisksGroupBy.Space) {
275
218
  const capacityAlert = pDisk.PDiskCapacityAlert;
219
+ const isCapacityAlertInactive =
220
+ isCapacityAlert(capacityAlert) && inactiveAlerts.has(capacityAlert);
276
221
 
277
222
  return {
278
223
  severity: calculateSpaceSeverity({CapacityAlert: capacityAlert}),
279
224
  icon: calculateSpaceIcon({CapacityAlert: capacityAlert}),
280
225
  mode,
281
- isLegendInactive:
282
- isCapacityAlert(capacityAlert) && inactiveAlerts.has(capacityAlert),
226
+ isLegendInactive: isCapacityAlertInactive,
227
+ borderless: isCapacityAlertInactive,
283
228
  showNoDataPlaceholder: false,
284
229
  allocatedPercent,
285
230
  width: EXPERT_MODE_PDISK_WIDTH,
@@ -290,15 +235,17 @@ export function useStoragePDiskDisplayStateGetter(): PDiskDisplayStateGetter {
290
235
  return getAllModeDisplayState(pDisk, inactiveAlerts);
291
236
  }
292
237
 
293
- const statusDisplayState = getStatusModeDisplayState({
294
- hasWhiteboardData,
295
- mode,
296
- pDisk,
297
- pdisksGroupBy,
298
- });
238
+ const statusDisplayState = getBSCStatusDisplayState(pDisk, mode, hasWhiteboardData);
299
239
 
300
240
  if (statusDisplayState) {
301
- return statusDisplayState;
241
+ return {
242
+ ...statusDisplayState,
243
+ mode,
244
+ isLegendInactive: false,
245
+ showNoDataPlaceholder: false,
246
+ allocatedPercent: undefined,
247
+ width: EXPERT_MODE_PDISK_WIDTH,
248
+ };
302
249
  }
303
250
 
304
251
  if (pdisksGroupBy === PDisksGroupBy.Device) {
@@ -335,3 +282,15 @@ export function useStoragePDiskDisplayStateGetter(): PDiskDisplayStateGetter {
335
282
  [inactiveAlerts, isExpertMode, pdisksGroupBy],
336
283
  );
337
284
  }
285
+
286
+ export function useStoragePDiskDisplayStateGetter(): PDiskDisplayStateGetter {
287
+ const pdisksGroupBy = usePDisksGroupByParam();
288
+
289
+ return usePDiskDisplayStateGetter(pdisksGroupBy, 'pdisks');
290
+ }
291
+
292
+ export function useStorageNodesPDiskDisplayStateGetter(): PDiskDisplayStateGetter {
293
+ const pdisksGroupBy = useNodesPDisksGroupByParam();
294
+
295
+ return usePDiskDisplayStateGetter(pdisksGroupBy, 'nodes-pdisks');
296
+ }
@@ -22,10 +22,17 @@ import {storageNodesGroupByParamSchema} from './PaginatedStorageNodesTable/colum
22
22
  import {
23
23
  PDisksGroupBy,
24
24
  VDisksGroupBy,
25
+ nodesPdisksGroupBySchema,
26
+ nodesVdisksGroupBySchema,
25
27
  pdisksGroupBySchema,
26
28
  vdisksGroupBySchema,
27
29
  } from './StorageExpertModePanel/constants';
28
- import type {PDisksGroupByValue, VDisksGroupByValue} from './StorageExpertModePanel/constants';
30
+ import type {
31
+ NodesPDisksGroupByValue,
32
+ NodesVDisksGroupByValue,
33
+ PDisksGroupByValue,
34
+ VDisksGroupByValue,
35
+ } from './StorageExpertModePanel/constants';
29
36
  import {STORAGE_SEARCH_PARAM_BY_TYPE} from './constants';
30
37
 
31
38
  interface StorageGroupByCleanupParams {
@@ -81,6 +88,8 @@ export function useStorageQueryParams() {
81
88
  storageExpertMode: BooleanParam,
82
89
  vdisksGroupBy: StringParam,
83
90
  pdisksGroupBy: StringParam,
91
+ nodesVdisksGroupBy: StringParam,
92
+ nodesPdisksGroupBy: StringParam,
84
93
  });
85
94
 
86
95
  const [savedStorageType, setSavedStorageType] = useSetting<StorageType>(
@@ -128,6 +137,26 @@ export function useStorageQueryParams() {
128
137
  queryParams.pdisksGroupBy ?? savedPDisksGroupBy,
129
138
  );
130
139
 
140
+ const [savedNodesVDisksGroupBy, setSavedNodesVDisksGroupBy] =
141
+ useSetting<NodesVDisksGroupByValue>(
142
+ SETTING_KEYS.STORAGE_NODES_VDISKS_GROUP_BY,
143
+ VDisksGroupBy.State,
144
+ );
145
+
146
+ const nodesVdisksGroupBy = nodesVdisksGroupBySchema.parse(
147
+ queryParams.nodesVdisksGroupBy ?? savedNodesVDisksGroupBy,
148
+ );
149
+
150
+ const [savedNodesPDisksGroupBy, setSavedNodesPDisksGroupBy] =
151
+ useSetting<NodesPDisksGroupByValue>(
152
+ SETTING_KEYS.STORAGE_NODES_PDISKS_GROUP_BY,
153
+ PDisksGroupBy.State,
154
+ );
155
+
156
+ const nodesPdisksGroupBy = nodesPdisksGroupBySchema.parse(
157
+ queryParams.nodesPdisksGroupBy ?? savedNodesPDisksGroupBy,
158
+ );
159
+
131
160
  React.useEffect(() => {
132
161
  if (queryParams.search) {
133
162
  const patch: Record<string, string | undefined> = {search: undefined};
@@ -198,6 +227,22 @@ export function useStorageQueryParams() {
198
227
  [setQueryParams, setSavedPDisksGroupBy],
199
228
  );
200
229
 
230
+ const handleNodesVDisksGroupByChange = React.useCallback(
231
+ (value: NodesVDisksGroupByValue) => {
232
+ setQueryParams({nodesVdisksGroupBy: value}, 'replaceIn');
233
+ setSavedNodesVDisksGroupBy(value);
234
+ },
235
+ [setQueryParams, setSavedNodesVDisksGroupBy],
236
+ );
237
+
238
+ const handleNodesPDisksGroupByChange = React.useCallback(
239
+ (value: NodesPDisksGroupByValue) => {
240
+ setQueryParams({nodesPdisksGroupBy: value}, 'replaceIn');
241
+ setSavedNodesPDisksGroupBy(value);
242
+ },
243
+ [setQueryParams, setSavedNodesPDisksGroupBy],
244
+ );
245
+
201
246
  const handleShowAllGroups = () => {
202
247
  handleVisibleEntitiesChange('all');
203
248
  };
@@ -235,6 +280,8 @@ export function useStorageQueryParams() {
235
280
  storageExpertMode,
236
281
  vdisksGroupBy,
237
282
  pdisksGroupBy,
283
+ nodesVdisksGroupBy,
284
+ nodesPdisksGroupBy,
238
285
 
239
286
  handleTextFilterGroupsChange,
240
287
  handleTextFilterNodesChange,
@@ -247,6 +294,8 @@ export function useStorageQueryParams() {
247
294
  handleStorageExpertModeChange,
248
295
  handleVDisksGroupByChange,
249
296
  handlePDisksGroupByChange,
297
+ handleNodesVDisksGroupByChange,
298
+ handleNodesPDisksGroupByChange,
250
299
 
251
300
  handleShowAllGroups,
252
301
  handleShowAllNodes,
@@ -296,6 +345,32 @@ export function usePDisksGroupByParam() {
296
345
  );
297
346
  }
298
347
 
348
+ export function useNodesVDisksGroupByParam() {
349
+ const [queryNodesVDisksGroupBy] = useQueryParam('nodesVdisksGroupBy', StringParam);
350
+ const [savedNodesVDisksGroupBy] = useSetting<NodesVDisksGroupByValue>(
351
+ SETTING_KEYS.STORAGE_NODES_VDISKS_GROUP_BY,
352
+ VDisksGroupBy.State,
353
+ );
354
+
355
+ return React.useMemo(
356
+ () => nodesVdisksGroupBySchema.parse(queryNodesVDisksGroupBy ?? savedNodesVDisksGroupBy),
357
+ [queryNodesVDisksGroupBy, savedNodesVDisksGroupBy],
358
+ );
359
+ }
360
+
361
+ export function useNodesPDisksGroupByParam() {
362
+ const [queryNodesPDisksGroupBy] = useQueryParam('nodesPdisksGroupBy', StringParam);
363
+ const [savedNodesPDisksGroupBy] = useSetting<NodesPDisksGroupByValue>(
364
+ SETTING_KEYS.STORAGE_NODES_PDISKS_GROUP_BY,
365
+ PDisksGroupBy.State,
366
+ );
367
+
368
+ return React.useMemo(
369
+ () => nodesPdisksGroupBySchema.parse(queryNodesPDisksGroupBy ?? savedNodesPDisksGroupBy),
370
+ [queryNodesPDisksGroupBy, savedNodesPDisksGroupBy],
371
+ );
372
+ }
373
+
299
374
  export function useSaveVDisksGroupBy() {
300
375
  const [queryVDisksGroupBy, setQueryVDisksGroupBy] = useQueryParam('vdisksGroupBy', StringParam);
301
376
  const [savedVDisksGroupBy] = useSetting<VDisksGroupByValue>(
@@ -334,6 +409,50 @@ export function useSavePDisksGroupBy() {
334
409
  }, [normalizedPDisksGroupBy, queryPDisksGroupBy, setQueryPDisksGroupBy]);
335
410
  }
336
411
 
412
+ export function useSaveNodesVDisksGroupBy() {
413
+ const [queryNodesVDisksGroupBy, setQueryNodesVDisksGroupBy] = useQueryParam(
414
+ 'nodesVdisksGroupBy',
415
+ StringParam,
416
+ );
417
+ const [savedNodesVDisksGroupBy] = useSetting<NodesVDisksGroupByValue>(
418
+ SETTING_KEYS.STORAGE_NODES_VDISKS_GROUP_BY,
419
+ VDisksGroupBy.State,
420
+ );
421
+
422
+ const normalizedNodesVDisksGroupBy = React.useMemo(
423
+ () => nodesVdisksGroupBySchema.parse(queryNodesVDisksGroupBy ?? savedNodesVDisksGroupBy),
424
+ [queryNodesVDisksGroupBy, savedNodesVDisksGroupBy],
425
+ );
426
+
427
+ React.useEffect(() => {
428
+ if (normalizedNodesVDisksGroupBy !== queryNodesVDisksGroupBy) {
429
+ setQueryNodesVDisksGroupBy(normalizedNodesVDisksGroupBy, 'replaceIn');
430
+ }
431
+ }, [normalizedNodesVDisksGroupBy, queryNodesVDisksGroupBy, setQueryNodesVDisksGroupBy]);
432
+ }
433
+
434
+ export function useSaveNodesPDisksGroupBy() {
435
+ const [queryNodesPDisksGroupBy, setQueryNodesPDisksGroupBy] = useQueryParam(
436
+ 'nodesPdisksGroupBy',
437
+ StringParam,
438
+ );
439
+ const [savedNodesPDisksGroupBy] = useSetting<NodesPDisksGroupByValue>(
440
+ SETTING_KEYS.STORAGE_NODES_PDISKS_GROUP_BY,
441
+ PDisksGroupBy.State,
442
+ );
443
+
444
+ const normalizedNodesPDisksGroupBy = React.useMemo(
445
+ () => nodesPdisksGroupBySchema.parse(queryNodesPDisksGroupBy ?? savedNodesPDisksGroupBy),
446
+ [queryNodesPDisksGroupBy, savedNodesPDisksGroupBy],
447
+ );
448
+
449
+ React.useEffect(() => {
450
+ if (normalizedNodesPDisksGroupBy !== queryNodesPDisksGroupBy) {
451
+ setQueryNodesPDisksGroupBy(normalizedNodesPDisksGroupBy, 'replaceIn');
452
+ }
453
+ }, [normalizedNodesPDisksGroupBy, queryNodesPDisksGroupBy, setQueryNodesPDisksGroupBy]);
454
+ }
455
+
337
456
  export function useSaveStorageExpertMode() {
338
457
  const [queryStorageExpertMode, setQueryStorageExpertMode] = useQueryParam(
339
458
  'storageExpertMode',
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
+ import {CircleXmarkFill, ClockFill} from '@gravity-ui/icons';
4
+
3
5
  import {ECapacityAlert, EFlag, isCapacityAlert} from '../../types/api/enums';
4
6
  import {EVDiskState} from '../../types/api/vdisk';
5
7
  import {
@@ -22,11 +24,17 @@ import {
22
24
  calculateCompactionIcon,
23
25
  calculateFrontQueuesIcon,
24
26
  calculateSpaceIcon,
27
+ calculateStateIcon,
25
28
  } from '../../utils/disks/iconCalculators';
26
29
  import type {PreparedVDisk} from '../../utils/disks/types';
27
30
 
31
+ import type {SpaceLegendSelectionScope} from './StorageExpertModePanel/components/getSpaceLegendSelection';
28
32
  import {useSpaceLegendSelection} from './StorageExpertModePanel/components/useSpaceLegendSelection';
29
- import {useIsStorageExpertMode, useVDisksGroupByParam} from './useStorageQueryParams';
33
+ import {
34
+ useIsStorageExpertMode,
35
+ useNodesVDisksGroupByParam,
36
+ useVDisksGroupByParam,
37
+ } from './useStorageQueryParams';
30
38
 
31
39
  function getMode(groupBy: VDisksGroupByValue): DiskDisplayMode {
32
40
  switch (groupBy) {
@@ -71,7 +79,7 @@ function getAllModeIndicators(
71
79
  return {
72
80
  ...(capacityAlert ? {capacityAlert} : {}),
73
81
  ...(frontQueues ? {frontQueues} : {}),
74
- ...(compaction ? {compaction} : {}),
82
+ ...(compaction?.length ? {compaction} : {}),
75
83
  };
76
84
  }
77
85
 
@@ -103,14 +111,22 @@ function getMissingVDiskDisplayState(
103
111
  vDisk: PreparedVDisk,
104
112
  isDonor: boolean | undefined,
105
113
  mode: DiskDisplayMode,
114
+ showNoDataPlaceholder: boolean,
106
115
  ): VDiskDisplayState {
107
116
  const isAllMode = mode === 'all';
117
+ let icon: VDiskDisplayState['icon'];
118
+ if (isDonor) {
119
+ icon = calculateStateIcon(vDisk, isDonor);
120
+ } else if (mode === 'state' || isAllMode) {
121
+ icon = getKnownVDiskStateIcon(vDisk);
122
+ }
108
123
  const displayState: VDiskDisplayState = {
109
124
  severity: NOT_AVAILABLE_SEVERITY,
110
- icon: undefined,
125
+ icon,
111
126
  mode,
127
+ isNoData: true,
112
128
  isLegendInactive: false,
113
- showNoDataPlaceholder: true,
129
+ showNoDataPlaceholder,
114
130
  allocatedPercent: isAllMode ? vDisk.AllocatedPercent : undefined,
115
131
  showAllocatedPercentLabel: !isAllMode,
116
132
  striped: Boolean(isDonor),
@@ -124,9 +140,25 @@ function getMissingVDiskDisplayState(
124
140
  return displayState;
125
141
  }
126
142
 
143
+ function getKnownVDiskStateIcon(vDisk: PreparedVDisk) {
144
+ if (vDisk.VDiskState !== undefined) {
145
+ return calculateStateIcon(vDisk);
146
+ }
147
+
148
+ switch (vDisk.Status) {
149
+ case 'ERROR':
150
+ return CircleXmarkFill;
151
+ case 'INIT_PENDING':
152
+ return ClockFill;
153
+ default:
154
+ return undefined;
155
+ }
156
+ }
157
+
127
158
  interface GetExpertVDiskDisplayStateParams {
128
159
  inactiveLegendItems: Set<ECapacityAlert>;
129
160
  isDonor?: boolean;
161
+ selectionScope: SpaceLegendSelectionScope;
130
162
  vDisk: PreparedVDisk;
131
163
  vdisksGroupBy: VDisksGroupByValue;
132
164
  }
@@ -134,12 +166,13 @@ interface GetExpertVDiskDisplayStateParams {
134
166
  function getExpertVDiskDisplayState({
135
167
  inactiveLegendItems,
136
168
  isDonor,
169
+ selectionScope,
137
170
  vDisk,
138
171
  vdisksGroupBy,
139
172
  }: GetExpertVDiskDisplayStateParams): VDiskDisplayState {
140
173
  const mode = getMode(vdisksGroupBy);
141
- if (!vDisk.VDiskId) {
142
- return getMissingVDiskDisplayState(vDisk, isDonor, mode);
174
+ if (!(vDisk.HasWhiteboardData ?? Boolean(vDisk.VDiskId))) {
175
+ return getMissingVDiskDisplayState(vDisk, isDonor, mode, selectionScope !== 'nodes-vdisks');
143
176
  }
144
177
 
145
178
  const severity = getSeverityCalculator(vdisksGroupBy)(vDisk);
@@ -147,11 +180,18 @@ function getExpertVDiskDisplayState({
147
180
  const isCapacityAlertInactive =
148
181
  isCapacityAlert(vDisk.CapacityAlert) && inactiveLegendItems.has(vDisk.CapacityAlert);
149
182
  const allMode = getAllModeDisplayState(mode, vDisk, isDonor, isCapacityAlertInactive);
183
+ const spaceBorderless = mode === 'space' && isCapacityAlertInactive;
184
+ const stateBorderless =
185
+ mode === 'state' &&
186
+ !isDonor &&
187
+ (severity === DISK_COLOR_STATE_TO_NUMERIC_SEVERITY.Green ||
188
+ severity === DISK_COLOR_STATE_TO_NUMERIC_SEVERITY.Yellow);
150
189
  const displayState: VDiskDisplayState = {
151
190
  severity,
152
191
  icon,
153
192
  mode,
154
193
  isLegendInactive: mode === 'space' && isCapacityAlertInactive,
194
+ borderless: spaceBorderless || stateBorderless,
155
195
  showNoDataPlaceholder: false,
156
196
  allocatedPercent: mode === 'all' ? vDisk.AllocatedPercent : undefined,
157
197
  showAllocatedPercentLabel: mode !== 'all',
@@ -166,10 +206,12 @@ function getExpertVDiskDisplayState({
166
206
  return displayState;
167
207
  }
168
208
 
169
- export function useStorageVDiskDisplayStateGetter(): VDiskDisplayStateGetter {
209
+ function useVDiskDisplayStateGetter(
210
+ vdisksGroupBy: VDisksGroupByValue,
211
+ selectionScope: SpaceLegendSelectionScope,
212
+ ): VDiskDisplayStateGetter {
170
213
  const isExpertMode = useIsStorageExpertMode();
171
- const vdisksGroupBy = useVDisksGroupByParam();
172
- const inactiveLegendItems = useSpaceLegendSelection();
214
+ const inactiveLegendItems = useSpaceLegendSelection(selectionScope);
173
215
 
174
216
  return React.useCallback(
175
217
  (vDisk, isDonor) => {
@@ -180,10 +222,23 @@ export function useStorageVDiskDisplayStateGetter(): VDiskDisplayStateGetter {
180
222
  return getExpertVDiskDisplayState({
181
223
  inactiveLegendItems,
182
224
  isDonor,
225
+ selectionScope,
183
226
  vDisk,
184
227
  vdisksGroupBy,
185
228
  });
186
229
  },
187
- [inactiveLegendItems, isExpertMode, vdisksGroupBy],
230
+ [inactiveLegendItems, isExpertMode, selectionScope, vdisksGroupBy],
188
231
  );
189
232
  }
233
+
234
+ export function useStorageVDiskDisplayStateGetter(): VDiskDisplayStateGetter {
235
+ const vdisksGroupBy = useVDisksGroupByParam();
236
+
237
+ return useVDiskDisplayStateGetter(vdisksGroupBy, 'vdisks');
238
+ }
239
+
240
+ export function useStorageNodesVDiskDisplayStateGetter(): VDiskDisplayStateGetter {
241
+ const vdisksGroupBy = useNodesVDisksGroupByParam();
242
+
243
+ return useVDiskDisplayStateGetter(vdisksGroupBy, 'nodes-vdisks');
244
+ }