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
@@ -0,0 +1,9 @@
1
+ {
2
+ "title_pool-settings": "Pool Settings",
3
+ "group_queue": "Queue & Concurrency",
4
+ "group_cpu": "CPU",
5
+ "field_concurrent-query-limit": "Concurrent query limit",
6
+ "field_queue-size": "Queue size",
7
+ "field_database-load-cpu-threshold": "Database load CPU threshold",
8
+ "field_total-cpu-limit-percent-per-node": "Total CPU limit % per node"
9
+ }
@@ -0,0 +1,7 @@
1
+ import {registerKeysets} from '../../../../../../utils/i18n';
2
+
3
+ import en from './en.json';
4
+
5
+ const COMPONENT = 'ydb-diagnostics-resource-pool-info';
6
+
7
+ export default registerKeysets(COMPONENT, {en});
@@ -0,0 +1 @@
1
+ export * from './ResourcePoolInfo';
@@ -22,10 +22,10 @@ export const prepareTopicSchemaInfo = (data?: TEvDescribeSchemeResult): Array<In
22
22
  return [];
23
23
  }
24
24
 
25
- const {Partitions = [], PQTabletConfig = {PartitionConfig: {LifetimeSeconds: 0}}} = pqGroupData;
25
+ const {Partitions = [], PQTabletConfig} = pqGroupData;
26
26
 
27
- const {Codecs, MeteringMode, PartitionStrategy} = PQTabletConfig;
28
- const {WriteSpeedInBytesPerSecond, StorageLimitBytes} = PQTabletConfig.PartitionConfig;
27
+ const {Codecs, MeteringMode, PartitionStrategy, PartitionConfig} = PQTabletConfig ?? {};
28
+ const {WriteSpeedInBytesPerSecond, StorageLimitBytes} = PartitionConfig ?? {};
29
29
 
30
30
  //@ts-expect-error
31
31
  const pqGeneralInfo = formatObject<TPersQueueGroupDescription>(formatPQGroupItem, {
@@ -8,6 +8,7 @@ import type {DrawerControl} from '../../../../components/Drawer/Drawer';
8
8
  import {ResizeableDataTable} from '../../../../components/ResizeableDataTable/ResizeableDataTable';
9
9
  import type {KeyValueRow} from '../../../../types/api/query';
10
10
  import {cn} from '../../../../utils/cn';
11
+ import {getQueryShortText} from '../../../../utils/query';
11
12
 
12
13
  import {QueryDetailsDrawerContent} from './QueryDetails/QueryDetailsDrawerContent';
13
14
  import i18n from './i18n';
@@ -18,6 +19,7 @@ const b = cn('kv-top-queries');
18
19
  interface SimpleTableWithDrawerProps {
19
20
  columns: Column<KeyValueRow>[];
20
21
  data: KeyValueRow[];
22
+ getKeyboardRowKey?: (row: KeyValueRow) => string | number | undefined;
21
23
  isFetching?: boolean;
22
24
  isLoading?: boolean;
23
25
  onRowClick?: (
@@ -40,6 +42,7 @@ interface SimpleTableWithDrawerProps {
40
42
  export function QueriesTableWithDrawer({
41
43
  columns,
42
44
  data,
45
+ getKeyboardRowKey,
43
46
  isFetching,
44
47
  isLoading,
45
48
  onRowClick,
@@ -102,6 +105,9 @@ export function QueriesTableWithDrawer({
102
105
  drawerControls={finalDrawerControls}
103
106
  >
104
107
  <ResizeableDataTable
108
+ onKeyboardActivate={handleRowClick}
109
+ getKeyboardRowKey={getKeyboardRowKey}
110
+ getKeyboardRowLabel={(row) => getQueryShortText(row.QueryText?.toString())}
105
111
  emptyDataMessage={emptyDataMessage || i18n('no-data')}
106
112
  columnsWidthLSKey={columnsWidthLSKey}
107
113
  columns={columns}
@@ -86,6 +86,7 @@ export const RunningQueriesData = ({
86
86
  <TableWithControlsLayout.Controls renderExtraControls={renderExtraControls}>
87
87
  {renderQueryModeControl()}
88
88
  <Search
89
+ tableFilter
89
90
  value={filters.text}
90
91
  onChange={handleTextSearchUpdate}
91
92
  placeholder={i18n('filter.text.placeholder')}
@@ -97,6 +98,9 @@ export const RunningQueriesData = ({
97
98
  {error ? <ResponseError error={error} /> : null}
98
99
  <TableWithControlsLayout.Table>
99
100
  <QueriesTableWithDrawer
101
+ getKeyboardRowKey={(row) =>
102
+ JSON.stringify([database, row.SessionId, row.QueryStartAt])
103
+ }
100
104
  columns={columnsToShow}
101
105
  data={rows || []}
102
106
  isFetching={isFetching && currentData === undefined}
@@ -137,7 +137,9 @@ export const TopQueriesData = ({
137
137
  };
138
138
 
139
139
  return (
140
- <TableWithControlsLayout>
140
+ <TableWithControlsLayout
141
+ keyboardNavigationResetKey={JSON.stringify([timeFrame, filters.from, filters.to])}
142
+ >
141
143
  <TableWithControlsLayout.Controls renderExtraControls={renderExtraControls}>
142
144
  {renderQueryModeControl()}
143
145
  <Select
@@ -152,6 +154,7 @@ export const TopQueriesData = ({
152
154
  defaultValue={DEFAULT_TIME_FILTER_VALUE}
153
155
  />
154
156
  <Search
157
+ tableFilter
155
158
  value={filters.text}
156
159
  inputRef={inputRef}
157
160
  onChange={handleTextSearchUpdate}
@@ -163,6 +166,9 @@ export const TopQueriesData = ({
163
166
  {error ? <ResponseError error={error} /> : null}
164
167
  <TableWithControlsLayout.Table>
165
168
  <QueriesTableWithDrawer
169
+ getKeyboardRowKey={(row) =>
170
+ JSON.stringify([database, row.IntervalEnd, row.EndTime, row.QueryText])
171
+ }
166
172
  columns={columnsToShow}
167
173
  data={rows || []}
168
174
  isFetching={isFetching && currentData === undefined}
@@ -153,7 +153,7 @@ export const TopShards = ({database, path, databaseFullPath}: TopShardsProps) =>
153
153
  };
154
154
 
155
155
  return (
156
- <TableWithControlsLayout>
156
+ <TableWithControlsLayout keyboardNavigation={false}>
157
157
  <TableWithControlsLayout.Controls>{renderControls()}</TableWithControlsLayout.Controls>
158
158
 
159
159
  {filters.mode === EShardsWorkloadMode.History && (
@@ -16,6 +16,7 @@ import {
16
16
  } from '../../../../store/reducers/query/query';
17
17
  import type {QueryInHistory} from '../../../../store/reducers/query/types';
18
18
  import {useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
19
+ import {getQueryShortText} from '../../../../utils/query';
19
20
  import {QUERY_TABLE_SETTINGS} from '../../utils/constants';
20
21
  import {SAVE_QUERY_DIALOG} from '../SaveQuery/SaveQuery';
21
22
  import {useOpenExternalQueryInEditor} from '../hooks/useOpenExternalQueryInEditor';
@@ -116,6 +117,7 @@ function QueriesHistory({queriesHistory}: QueriesHistoryProps) {
116
117
  <TableWithControlsLayout className={b('table-with-controls')}>
117
118
  <TableWithControlsLayout.Controls>
118
119
  <Search
120
+ tableFilter
119
121
  value={filter}
120
122
  onChange={onChangeFilter}
121
123
  placeholder={i18n('field_query-text-search')}
@@ -135,6 +137,9 @@ function QueriesHistory({queriesHistory}: QueriesHistoryProps) {
135
137
  defaultWidth={50}
136
138
  >
137
139
  <ResizeableDataTable
140
+ onKeyboardActivate={handleShowPreview}
141
+ getKeyboardRowKey={(query) => query.queryId}
142
+ getKeyboardRowLabel={(query) => getQueryShortText(query.queryText)}
138
143
  columnsWidthLSKey={QUERIES_HISTORY_COLUMNS_WIDTH_LS_KEY}
139
144
  columns={columns}
140
145
  data={queriesHistory.filteredHistoryQueries}
@@ -243,6 +243,7 @@ export const SavedQueries = () => {
243
243
  <TableWithControlsLayout className={b('table-with-controls')}>
244
244
  <TableWithControlsLayout.Controls>
245
245
  <Search
246
+ tableFilter
246
247
  value={filter}
247
248
  onChange={handleChangeFilter}
248
249
  placeholder={i18n('field_saved-query-search')}
@@ -262,6 +263,11 @@ export const SavedQueries = () => {
262
263
  defaultWidth={50}
263
264
  >
264
265
  <ResizeableDataTable
266
+ onKeyboardActivate={handleShowPreview}
267
+ getKeyboardRowKey={(query) => query.name}
268
+ getKeyboardRowLabel={(query) =>
269
+ query.name || EMPTY_DATA_PLACEHOLDER
270
+ }
265
271
  columnsWidthLSKey={SAVED_QUERIES_COLUMNS_WIDTH_LS_KEY}
266
272
  columns={columns}
267
273
  data={filteredSavedQueries}
@@ -5,6 +5,7 @@ import type {Column, SortOrder} from '@gravity-ui/react-data-table';
5
5
  import DataTable from '@gravity-ui/react-data-table';
6
6
  import type {LabelProps} from '@gravity-ui/uikit';
7
7
  import {Button, Flex, Icon, Label} from '@gravity-ui/uikit';
8
+ import {useHistory} from 'react-router-dom';
8
9
 
9
10
  import {EntitiesCount} from '../../components/EntitiesCount';
10
11
  import {ResponseError} from '../../components/Errors/ResponseError';
@@ -15,6 +16,7 @@ import {Search} from '../../components/Search';
15
16
  import {TableColumnSetup} from '../../components/TableColumnSetup/TableColumnSetup';
16
17
  import {TableWithControlsLayout} from '../../components/TableWithControlsLayout/TableWithControlsLayout';
17
18
  import {TenantNameWrapper} from '../../components/TenantNameWrapper/TenantNameWrapper';
19
+ import {getTenantLink} from '../../components/TenantNameWrapper/utils';
18
20
  import {useEmMetaAvailable} from '../../store/reducers/capabilities/hooks';
19
21
  import {useClusterBaseInfo} from '../../store/reducers/cluster/cluster';
20
22
  import {
@@ -131,6 +133,7 @@ const TenantsTableContent = ({
131
133
  onStatusClick,
132
134
  }: TenantsTableContentProps) => {
133
135
  const SuccessImage = getIllustration('SuccessOperation');
136
+ const history = useHistory();
134
137
 
135
138
  const [autoRefreshInterval] = useAutoRefreshInterval();
136
139
  const {currentData, isFetching, error} = tenantsApi.useGetTenantsInfoQuery(
@@ -144,7 +147,7 @@ const TenantsTableContent = ({
144
147
 
145
148
  const isCreateDBAvailable = useEmMetaAvailable() && uiFactory.onCreateDB !== undefined;
146
149
 
147
- const {domain: domainRoot} = useClusterBaseInfo();
150
+ const {domain: domainRoot, settings} = useClusterBaseInfo();
148
151
 
149
152
  const {search, withProblems, handleSearchChange, handleWithProblemsChange} =
150
153
  useTenantsQueryParams();
@@ -167,7 +170,40 @@ const TenantsTableContent = ({
167
170
  const filteredBySearch = filterTenantsBySearch(filteredByProblems, search);
168
171
 
169
172
  return filteredBySearch;
170
- }, [tenants, withProblems, search]);
173
+ }, [tenants, withProblems, search, showWithProblemsFilter]);
174
+
175
+ const tenantLinks = React.useMemo(
176
+ () =>
177
+ new Map(
178
+ tenants.map((tenant) => [
179
+ tenant,
180
+ getTenantLink({
181
+ tenant,
182
+ additionalTenantsProps,
183
+ externalLink: Boolean(environmentName),
184
+ useDatabaseId:
185
+ uiFactory.useDatabaseId && settings?.use_meta_proxy !== false,
186
+ }),
187
+ ]),
188
+ ),
189
+ [tenants, additionalTenantsProps, environmentName, settings?.use_meta_proxy],
190
+ );
191
+
192
+ const openTenant = React.useCallback(
193
+ (tenant: PreparedTenant) => {
194
+ const link = tenantLinks.get(tenant);
195
+ if (!link) {
196
+ return;
197
+ }
198
+ if (link.isExternalLink) {
199
+ window.open(link.href, '_blank', 'noopener,noreferrer');
200
+ return;
201
+ }
202
+
203
+ history.push(link.href);
204
+ },
205
+ [tenantLinks, history],
206
+ );
171
207
 
172
208
  const renderCreateDBButton = () => {
173
209
  const buttonAvailable = isCreateDBAvailable && clusterName;
@@ -192,6 +228,7 @@ const TenantsTableContent = ({
192
228
  return (
193
229
  <React.Fragment>
194
230
  <Search
231
+ tableFilter
195
232
  value={search}
196
233
  onChange={handleSearchChange}
197
234
  placeholder="Database name"
@@ -221,6 +258,7 @@ const TenantsTableContent = ({
221
258
  clusterName={clusterName}
222
259
  additionalTenantsProps={additionalTenantsProps}
223
260
  externalLink={Boolean(environmentName)}
261
+ link={tenantLinks.get(row)}
224
262
  onStatusClick={onStatusClick}
225
263
  />
226
264
  ),
@@ -362,6 +400,7 @@ const TenantsTableContent = ({
362
400
  handleSearchChange,
363
401
  onStatusClick,
364
402
  showPoolsColumn,
403
+ tenantLinks,
365
404
  ]);
366
405
 
367
406
  const {columnsToShow, columnsToSelect, setColumns} = useSelectedColumns(
@@ -378,14 +417,26 @@ const TenantsTableContent = ({
378
417
  }
379
418
 
380
419
  return (
381
- <ResizeableDataTable
382
- columnsWidthLSKey={DATABASES_COLUMNS_WIDTH_LS_KEY}
383
- data={filteredTenants}
384
- columns={columnsToShow}
385
- settings={DEFAULT_TABLE_SETTINGS}
386
- emptyDataMessage={i18n('no-databases')}
387
- onSortChange={setSortParams}
388
- />
420
+ <div>
421
+ <ResizeableDataTable
422
+ onKeyboardActivate={openTenant}
423
+ getKeyboardRowKey={(tenant) =>
424
+ JSON.stringify([tenant.Cluster, tenant.Id ?? tenant.Name])
425
+ }
426
+ getKeyboardRowLabel={(tenant) =>
427
+ tenant.controlPlaneName ||
428
+ tenant.Name ||
429
+ tenant.Id ||
430
+ EMPTY_DATA_PLACEHOLDER
431
+ }
432
+ columnsWidthLSKey={DATABASES_COLUMNS_WIDTH_LS_KEY}
433
+ data={filteredTenants}
434
+ columns={columnsToShow}
435
+ settings={DEFAULT_TABLE_SETTINGS}
436
+ emptyDataMessage={i18n('no-databases')}
437
+ onSortChange={setSortParams}
438
+ />
439
+ </div>
389
440
  );
390
441
  };
391
442
 
@@ -411,7 +462,14 @@ const TenantsTableContent = ({
411
462
 
412
463
  return (
413
464
  <div className={b('table-wrapper')}>
414
- <TableWithControlsLayout fullHeight>
465
+ <TableWithControlsLayout
466
+ fullHeight
467
+ keyboardNavigationResetKey={JSON.stringify([
468
+ withProblems,
469
+ showDomainDatabase,
470
+ showWithProblemsFilter,
471
+ ])}
472
+ >
415
473
  <TableWithControlsLayout.Controls renderExtraControls={renderExtraControls}>
416
474
  {renderControls()}
417
475
  </TableWithControlsLayout.Controls>
@@ -421,7 +479,7 @@ const TenantsTableContent = ({
421
479
  loading={loading}
422
480
  scrollDependencies={[search, withProblems, sortParams]}
423
481
  >
424
- {currentData ? renderTable() : null}
482
+ <div>{currentData ? renderTable() : null}</div>
425
483
  </TableWithControlsLayout.Table>
426
484
  </TableWithControlsLayout>
427
485
  </div>
@@ -174,7 +174,7 @@ export function VDiskPage() {
174
174
  return null;
175
175
  }
176
176
  return (
177
- <div className={vDiskPageCn('controls')}>
177
+ <div className={vDiskPageCn('controls')} data-qa="vdisk-controls">
178
178
  <EvictVDiskButton
179
179
  vDiskId={resolvedVDiskId}
180
180
  donorMode={vDiskData?.DonorMode}
@@ -1,4 +1,5 @@
1
1
  import type {TTabletHiveResponse} from '../../types/api/tablet';
2
+ import {getTabletDevUiAppPage} from '../../utils/developerUI/tabletDevUi';
2
3
  import type {Nullable} from '../../utils/typecheckers';
3
4
 
4
5
  import type {AxiosOptions} from './base';
@@ -11,6 +12,7 @@ export class TabletsAPI extends BaseYdbAPI {
11
12
  failRealmIdx,
12
13
  failDomainIdx,
13
14
  vDiskIdx,
15
+ useSecurePath = false,
14
16
  }: {
15
17
  groupId: string | number;
16
18
  groupGeneration: string | number;
@@ -18,12 +20,15 @@ export class TabletsAPI extends BaseYdbAPI {
18
20
  failDomainIdx: string | number;
19
21
  vDiskIdx: string | number;
20
22
  force?: boolean;
23
+ useSecurePath?: boolean;
21
24
  }) {
22
25
  // BSC Id is constant for all ydb clusters
23
26
  const BSC_TABLET_ID = '72057594037932033';
24
27
 
25
28
  return this.post(
26
- this.getPath(`/tablets/app?TabletID=${BSC_TABLET_ID}&exec=1`),
29
+ this.getPath(
30
+ `/tablets/${getTabletDevUiAppPage(useSecurePath)}?TabletID=${BSC_TABLET_ID}&exec=1`,
31
+ ),
27
32
  {
28
33
  Command: {
29
34
  ReassignGroupDisk: {
@@ -54,28 +59,32 @@ export class TabletsAPI extends BaseYdbAPI {
54
59
  );
55
60
  }
56
61
 
57
- stopTablet(id: string, hiveId: string) {
62
+ stopTablet(id: string, hiveId: string, useSecurePath = false) {
58
63
  return this.post<unknown>(
59
- this.getPath(`/tablets/app?TabletID=${hiveId}&page=StopTablet&tablet=${id}`),
64
+ this.getPath(
65
+ `/tablets/${getTabletDevUiAppPage(useSecurePath)}?TabletID=${hiveId}&page=StopTablet&tablet=${id}`,
66
+ ),
60
67
  {},
61
68
  {requestConfig: {'axios-retry': {retries: 0}}},
62
69
  );
63
70
  }
64
71
 
65
- resumeTablet(id: string, hiveId: string) {
72
+ resumeTablet(id: string, hiveId: string, useSecurePath = false) {
66
73
  return this.post<unknown>(
67
- this.getPath(`/tablets/app?TabletID=${hiveId}&page=ResumeTablet&tablet=${id}`),
74
+ this.getPath(
75
+ `/tablets/${getTabletDevUiAppPage(useSecurePath)}?TabletID=${hiveId}&page=ResumeTablet&tablet=${id}`,
76
+ ),
68
77
  {},
69
78
  {requestConfig: {'axios-retry': {retries: 0}}},
70
79
  );
71
80
  }
72
81
 
73
82
  getTabletFromHive(
74
- {id, hiveId}: {id: string; hiveId: string},
83
+ {id, hiveId, useSecurePath = false}: {id: string; hiveId: string; useSecurePath?: boolean},
75
84
  {concurrentId, signal}: AxiosOptions = {},
76
85
  ) {
77
86
  return this.get<Nullable<TTabletHiveResponse>>(
78
- this.getPath('/tablets/app'),
87
+ this.getPath(`/tablets/${getTabletDevUiAppPage(useSecurePath)}`),
79
88
  {
80
89
  TabletID: hiveId,
81
90
  page: 'TabletInfo',
@@ -199,6 +199,15 @@ export const useAnalyzeOperationAvailable = () => {
199
199
  return operationListVersion >= 2 && Boolean(analyzeLongRunningOperationEnabled);
200
200
  };
201
201
 
202
+ export const useTabletDevUiSecurePath = () => {
203
+ const database = useDatabaseFromQuery();
204
+
205
+ return useTypedSelector((state) => {
206
+ const {data, isError} = selectDatabaseCapabilities(state, database);
207
+ return !isError && data?.Settings?.Features?.EnableTabletDevUiSecurePath === true;
208
+ });
209
+ };
210
+
202
211
  export const useGraphShardExists = () => {
203
212
  const database = useDatabaseFromQuery();
204
213
 
@@ -27,7 +27,6 @@ const createGetNodesListSelector = createSelector(
27
27
  );
28
28
 
29
29
  export const selectNodesMap = createSelector(
30
- (state: RootState) => state,
31
- (_state: RootState, database?: string) => createGetNodesListSelector(database),
32
- (state, selectNodesList) => prepareNodesMap(selectNodesList(state).data),
30
+ (state: RootState, database?: string) => createGetNodesListSelector(database)(state).data,
31
+ prepareNodesMap,
33
32
  );
@@ -45,6 +45,8 @@ export const SETTING_KEYS = {
45
45
  STORAGE_EXPERT_MODE: 'storageExpertMode',
46
46
  STORAGE_VDISKS_GROUP_BY: 'storageVDisksGroupBy',
47
47
  STORAGE_PDISKS_GROUP_BY: 'storagePDisksGroupBy',
48
+ STORAGE_NODES_VDISKS_GROUP_BY: 'storageNodesVDisksGroupBy',
49
+ STORAGE_NODES_PDISKS_GROUP_BY: 'storageNodesPDisksGroupBy',
48
50
  } as const;
49
51
 
50
52
  export type SettingKey = ValueOf<typeof SETTING_KEYS>;
@@ -87,6 +89,8 @@ export const DEFAULT_USER_SETTINGS = {
87
89
  [SETTING_KEYS.STORAGE_EXPERT_MODE]: false,
88
90
  [SETTING_KEYS.STORAGE_VDISKS_GROUP_BY]: 'State',
89
91
  [SETTING_KEYS.STORAGE_PDISKS_GROUP_BY]: 'State',
92
+ [SETTING_KEYS.STORAGE_NODES_VDISKS_GROUP_BY]: 'State',
93
+ [SETTING_KEYS.STORAGE_NODES_PDISKS_GROUP_BY]: 'State',
90
94
  } as const satisfies Record<SettingKey, unknown>;
91
95
 
92
96
  export const SETTINGS_OPTIONS: Record<string, SettingOptions | undefined> = {
@@ -9,6 +9,7 @@ import type {PDiskType, PreparedVDisk} from '../../../utils/disks/types';
9
9
  import {parseOptionalNonNegativeNumber} from '../../../utils/utils';
10
10
 
11
11
  export function prepareGroupsVDisk(data: TStorageVDisk = {}): PreparedVDisk {
12
+ const hasWhiteboardData = data.HasWhiteboardData ?? Boolean(data.Whiteboard);
12
13
  const {Whiteboard: whiteboardVDisk = {}, PDisk, ...bscVDisk} = data;
13
14
 
14
15
  const mergedVDiskData = {
@@ -36,13 +37,14 @@ export function prepareGroupsVDisk(data: TStorageVDisk = {}): PreparedVDisk {
36
37
  const whiteboardSlotSize = parseOptionalNonNegativeNumber(
37
38
  PDisk?.Whiteboard?.EnforcedDynamicSlotSize,
38
39
  );
39
- const whiteboardSizeFields = data.Whiteboard
40
- ? prepareVDiskSizeFields({
41
- AvailableSize: whiteboardAvailableSize,
42
- AllocatedSize: whiteboardAllocatedSize,
43
- SlotSize: whiteboardSlotSize,
44
- })
45
- : undefined;
40
+ const whiteboardSizeFields =
41
+ hasWhiteboardData && data.Whiteboard
42
+ ? prepareVDiskSizeFields({
43
+ AvailableSize: whiteboardAvailableSize,
44
+ AllocatedSize: whiteboardAllocatedSize,
45
+ SlotSize: whiteboardSlotSize,
46
+ })
47
+ : undefined;
46
48
  const WhiteboardSize = whiteboardSizeFields
47
49
  ? {
48
50
  AllocatedSize:
@@ -72,6 +74,7 @@ export function prepareGroupsVDisk(data: TStorageVDisk = {}): PreparedVDisk {
72
74
  return {
73
75
  ...mergedVDiskData,
74
76
  ...vDiskSizeFields,
77
+ HasWhiteboardData: hasWhiteboardData,
75
78
  ...(WhiteboardSize ? {WhiteboardSize} : {}),
76
79
  PDisk: preparedPDisk,
77
80
  Donors: preparedDonors,
@@ -82,6 +85,7 @@ export function prepareGroupsVDisk(data: TStorageVDisk = {}): PreparedVDisk {
82
85
  }
83
86
 
84
87
  export function prepareGroupsPDisk(data: TStoragePDisk & {NodeId?: number} = {}) {
88
+ const hasWhiteboardData = data.HasWhiteboardData ?? Boolean(data.Whiteboard);
85
89
  const {Whiteboard: whiteboardPDisk, Status: DriveStatus, ...bscPDisk} = data;
86
90
 
87
91
  const mergedPDiskData = {
@@ -109,12 +113,12 @@ export function prepareGroupsPDisk(data: TStoragePDisk & {NodeId?: number} = {})
109
113
  const whiteboardAvailableSize = parseOptionalNonNegativeNumber(whiteboardPDisk?.AvailableSize);
110
114
  const whiteboardTotalSize = parseOptionalNonNegativeNumber(whiteboardPDisk?.TotalSize);
111
115
  const whiteboardSizeFields =
112
- whiteboardPDisk === undefined
113
- ? undefined
114
- : preparePDiskSizeFields({
116
+ hasWhiteboardData && whiteboardPDisk
117
+ ? preparePDiskSizeFields({
115
118
  AvailableSize: whiteboardAvailableSize,
116
119
  TotalSize: whiteboardTotalSize,
117
- });
120
+ })
121
+ : undefined;
118
122
  const WhiteboardSize = whiteboardSizeFields
119
123
  ? {
120
124
  AllocatedSize:
@@ -138,6 +142,7 @@ export function prepareGroupsPDisk(data: TStoragePDisk & {NodeId?: number} = {})
138
142
 
139
143
  return {
140
144
  ...mergedPDiskData,
145
+ HasWhiteboardData: hasWhiteboardData,
141
146
  StringifiedId,
142
147
  AllocatedPercent,
143
148
  AllocatedSize,
@@ -76,14 +76,21 @@ const prepareStorageNodeData = (
76
76
  }).length || 0;
77
77
 
78
78
  const pDisks = PDisks?.map((pDisk) => {
79
- return prepareWhiteboardPDiskData({
80
- ...pDisk,
81
- NodeId,
82
- });
79
+ // Older viewers have no marker; identity and sizes can also come from BSC.
80
+ const hasWhiteboardData =
81
+ pDisk.HasWhiteboardData ??
82
+ (pDisk.State !== undefined ||
83
+ pDisk.StateFlag !== undefined ||
84
+ pDisk.Overall !== undefined ||
85
+ pDisk.CreateTime !== undefined ||
86
+ pDisk.ChangeTime !== undefined ||
87
+ pDisk.Device !== undefined ||
88
+ pDisk.Realtime !== undefined);
89
+ return prepareWhiteboardPDiskData({...pDisk, NodeId}, hasWhiteboardData ? pDisk : null);
83
90
  });
84
91
  const vDisks = VDisks?.map((vDisk) => {
85
92
  return {
86
- ...prepareWhiteboardVDiskData(vDisk),
93
+ ...prepareWhiteboardVDiskData({...vDisk, VDiskId: vDisk.VDiskId}),
87
94
  NodeId,
88
95
  };
89
96
  });
@@ -16,7 +16,7 @@ interface PaginatedTableParams<T, F> {
16
16
  noBatching?: boolean;
17
17
  }
18
18
 
19
- function endpoints<T, F>(build: EndpointBuilder<BaseQueryFn, string, string>) {
19
+ function endpoints<T, F>(build: EndpointBuilder<BaseQueryFn, string, typeof api.reducerPath>) {
20
20
  return {
21
21
  fetchTableChunk: build.query<PaginatedTableData<T>, PaginatedTableParams<T, F>>({
22
22
  queryFn: async (
@@ -120,10 +120,13 @@ export const tabletApi = api.injectEndpoints({
120
120
  },
121
121
  }),
122
122
  getAdvancedTableInfo: build.query({
123
- queryFn: async ({id, hiveId}: {id: string; hiveId: string}, {signal}) => {
123
+ queryFn: async (
124
+ {id, hiveId, useSecurePath}: {id: string; hiveId: string; useSecurePath?: boolean},
125
+ {signal},
126
+ ) => {
124
127
  try {
125
128
  const tabletResponseData = await window.api.tablets.getTabletFromHive(
126
- {id, hiveId},
129
+ {id, hiveId, useSecurePath},
127
130
  {signal},
128
131
  );
129
132
 
@@ -153,9 +156,17 @@ export const tabletApi = api.injectEndpoints({
153
156
  },
154
157
  }),
155
158
  stopTablet: build.mutation({
156
- queryFn: async ({id, hiveId}: {id: string; hiveId: string}) => {
159
+ queryFn: async ({
160
+ id,
161
+ hiveId,
162
+ useSecurePath,
163
+ }: {
164
+ id: string;
165
+ hiveId: string;
166
+ useSecurePath?: boolean;
167
+ }) => {
157
168
  try {
158
- const data = await window.api.tablets.stopTablet(id, hiveId);
169
+ const data = await window.api.tablets.stopTablet(id, hiveId, useSecurePath);
159
170
  return {data};
160
171
  } catch (error) {
161
172
  return {error};
@@ -169,9 +180,17 @@ export const tabletApi = api.injectEndpoints({
169
180
  },
170
181
  }),
171
182
  resumeTablet: build.mutation({
172
- queryFn: async ({id, hiveId}: {id: string; hiveId: string}) => {
183
+ queryFn: async ({
184
+ id,
185
+ hiveId,
186
+ useSecurePath,
187
+ }: {
188
+ id: string;
189
+ hiveId: string;
190
+ useSecurePath?: boolean;
191
+ }) => {
173
192
  try {
174
- const data = await window.api.tablets.resumeTablet(id, hiveId);
193
+ const data = await window.api.tablets.resumeTablet(id, hiveId, useSecurePath);
175
194
  return {data};
176
195
  } catch (error) {
177
196
  return {error};
@@ -7,7 +7,7 @@ function createShardQuery(path: string, databaseFullPath: string) {
7
7
  return createPartitionStatsQuery({
8
8
  databaseFullPath,
9
9
  path,
10
- selectFields: ['Path', 'TabletId', 'CPUCores'],
10
+ selectFields: ['Path', 'TabletId', 'CPUCores', 'FollowerId'],
11
11
  sortOrder: [{columnId: 'CPUCores', order: -1}],
12
12
  limit: TENANT_OVERVIEW_TABLES_LIMIT,
13
13
  });
@@ -5,7 +5,7 @@ export interface CapabilitiesResponse {
5
5
  Capabilities: Record<Partial<Capability>, number>;
6
6
  Settings?: {
7
7
  Security?: Record<Partial<SecuritySetting>, boolean>;
8
- Features?: Record<Partial<FeatureSetting>, boolean>;
8
+ Features?: Partial<Record<FeatureSetting, boolean>>;
9
9
  Database?: {
10
10
  GraphShardExists?: boolean;
11
11
  };
@@ -34,7 +34,7 @@ export type Capability =
34
34
 
35
35
  export type SecuritySetting = 'UseLoginProvider' | 'DomainLoginOnly';
36
36
 
37
- export type FeatureSetting = 'EnableAnalyzeLongRunningOperation';
37
+ export type FeatureSetting = 'EnableAnalyzeLongRunningOperation' | 'EnableTabletDevUiSecurePath';
38
38
 
39
39
  export interface MetaCapabilitiesResponse {
40
40
  Capabilities: Record<Partial<MetaCapability>, number>;