ydb-embedded-ui 9.3.1 → 9.4.1

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 (237) hide show
  1. package/dist/components/AutoRefreshControl/i18n/index.d.ts +1 -1
  2. package/dist/components/Drawer/Drawer.d.ts +2 -1
  3. package/dist/components/Drawer/Drawer.js +4 -4
  4. package/dist/components/Drawer/Drawer.js.map +1 -1
  5. package/dist/{containers/Storage → components}/EmptyFilter/EmptyFilter.js +2 -2
  6. package/dist/components/EmptyFilter/EmptyFilter.js.map +1 -0
  7. package/dist/{containers/App → components/EmptyFilter}/i18n/index.js +1 -1
  8. package/dist/components/EmptyFilter/i18n/index.js.map +1 -0
  9. package/dist/components/EmptyState/EmptyState.d.ts +1 -0
  10. package/dist/components/EmptyState/EmptyState.js +1 -0
  11. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  12. package/dist/components/EmptyState/EmptyState.scss +9 -0
  13. package/dist/components/EnableFullscreenButton/EnableFullscreenButton.js +3 -2
  14. package/dist/components/EnableFullscreenButton/EnableFullscreenButton.js.map +1 -1
  15. package/dist/components/EnableFullscreenButton/i18n/en.json +3 -0
  16. package/dist/components/EnableFullscreenButton/i18n/index.d.ts +2 -0
  17. package/dist/components/EnableFullscreenButton/i18n/index.js +5 -0
  18. package/dist/components/EnableFullscreenButton/i18n/index.js.map +1 -0
  19. package/dist/components/FixedHeightQuery/FixedHeightQuery.d.ts +9 -0
  20. package/dist/components/FixedHeightQuery/FixedHeightQuery.js +23 -0
  21. package/dist/components/FixedHeightQuery/FixedHeightQuery.js.map +1 -0
  22. package/dist/components/FixedHeightQuery/FixedHeightQuery.scss +42 -0
  23. package/dist/components/HealthcheckStatus/HealthcheckStatus.d.ts +8 -0
  24. package/dist/components/HealthcheckStatus/HealthcheckStatus.js +41 -0
  25. package/dist/components/HealthcheckStatus/HealthcheckStatus.js.map +1 -0
  26. package/dist/components/HealthcheckStatus/i18n/en.json +7 -0
  27. package/dist/components/HealthcheckStatus/i18n/index.d.ts +2 -0
  28. package/dist/components/HealthcheckStatus/i18n/index.js +5 -0
  29. package/dist/components/HealthcheckStatus/i18n/index.js.map +1 -0
  30. package/dist/components/ProgressViewer/ProgressViewer.d.ts +2 -1
  31. package/dist/components/ProgressViewer/ProgressViewer.js +3 -2
  32. package/dist/components/ProgressViewer/ProgressViewer.js.map +1 -1
  33. package/dist/components/SplitPane/SplitPane.scss +0 -1
  34. package/dist/containers/App/Content.js +18 -14
  35. package/dist/containers/App/Content.js.map +1 -1
  36. package/dist/containers/Clusters/Clusters.js +19 -7
  37. package/dist/containers/Clusters/Clusters.js.map +1 -1
  38. package/dist/containers/Clusters/Clusters.scss +7 -53
  39. package/dist/containers/Clusters/columns.d.ts +18 -1
  40. package/dist/containers/Clusters/columns.js +43 -9
  41. package/dist/containers/Clusters/columns.js.map +1 -1
  42. package/dist/containers/Clusters/i18n/en.json +3 -1
  43. package/dist/containers/Clusters/i18n/index.d.ts +1 -1
  44. package/dist/containers/Clusters/i18n/index.js +1 -2
  45. package/dist/containers/Clusters/i18n/index.js.map +1 -1
  46. package/dist/containers/Header/Header.d.ts +1 -5
  47. package/dist/containers/Header/Header.js +14 -10
  48. package/dist/containers/Header/Header.js.map +1 -1
  49. package/dist/containers/Header/Header.scss +1 -1
  50. package/dist/containers/Header/breadcrumbs.d.ts +3 -1
  51. package/dist/containers/Header/breadcrumbs.js +18 -6
  52. package/dist/containers/Header/breadcrumbs.js.map +1 -1
  53. package/dist/containers/Header/i18n/en.json +3 -1
  54. package/dist/containers/Header/i18n/index.d.ts +1 -1
  55. package/dist/containers/Operations/columns.js +2 -2
  56. package/dist/containers/Operations/columns.js.map +1 -1
  57. package/dist/containers/Storage/PaginatedStorageGroupsTable/StorageGroupsEmptyDataMessage.js +1 -1
  58. package/dist/containers/Storage/PaginatedStorageGroupsTable/StorageGroupsEmptyDataMessage.js.map +1 -1
  59. package/dist/containers/Storage/PaginatedStorageNodesTable/StorageNodesEmptyDataMessage.js +1 -1
  60. package/dist/containers/Storage/PaginatedStorageNodesTable/StorageNodesEmptyDataMessage.js.map +1 -1
  61. package/dist/containers/Tablet/components/TabletStorageInfo/i18n/index.d.ts +1 -1
  62. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.d.ts +1 -1
  63. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.js +30 -29
  64. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.js.map +1 -1
  65. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.scss +41 -0
  66. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/en.json +8 -6
  67. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.d.ts +1 -1
  68. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.js +1 -2
  69. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.js.map +1 -1
  70. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.d.ts +3 -1
  71. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js +9 -2
  72. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js.map +1 -1
  73. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.scss +7 -0
  74. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.d.ts +2 -2
  75. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js +27 -8
  76. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js.map +1 -1
  77. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +5 -10
  78. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
  79. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss +1 -5
  80. package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/en.json +2 -0
  81. package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/index.d.ts +1 -1
  82. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js +11 -1
  83. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js.map +1 -1
  84. package/dist/containers/Tenant/Diagnostics/TopQueries/columns/columns.js +2 -3
  85. package/dist/containers/Tenant/Diagnostics/TopQueries/columns/columns.js.map +1 -1
  86. package/dist/containers/Tenant/Diagnostics/TopQueries/hooks/useScrollToSelected.d.ts +19 -0
  87. package/dist/containers/Tenant/Diagnostics/TopQueries/hooks/useScrollToSelected.js +31 -0
  88. package/dist/containers/Tenant/Diagnostics/TopQueries/hooks/useScrollToSelected.js.map +1 -0
  89. package/dist/containers/Tenant/Diagnostics/TopQueries/utils.js +1 -0
  90. package/dist/containers/Tenant/Diagnostics/TopQueries/utils.js.map +1 -1
  91. package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js +1 -1
  92. package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js.map +1 -1
  93. package/dist/containers/Tenant/Diagnostics/TopicData/i18n/index.d.ts +1 -1
  94. package/dist/containers/Tenant/Healthcheck/Healthcheck.d.ts +9 -0
  95. package/dist/containers/Tenant/Healthcheck/Healthcheck.js +49 -0
  96. package/dist/containers/Tenant/Healthcheck/Healthcheck.js.map +1 -0
  97. package/dist/containers/Tenant/Healthcheck/Healthcheck.scss +112 -0
  98. package/dist/containers/Tenant/Healthcheck/components/HealthcheckFilter.d.ts +1 -0
  99. package/dist/containers/Tenant/Healthcheck/components/HealthcheckFilter.js +9 -0
  100. package/dist/containers/Tenant/Healthcheck/components/HealthcheckFilter.js.map +1 -0
  101. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.d.ts +7 -0
  102. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js +25 -0
  103. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js.map +1 -0
  104. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/ComputeLocation.d.ts +9 -0
  105. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/ComputeLocation.js +67 -0
  106. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/ComputeLocation.js.map +1 -0
  107. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/HealthcheckIssueDetails.d.ts +6 -0
  108. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/HealthcheckIssueDetails.js +67 -0
  109. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/HealthcheckIssueDetails.js.map +1 -0
  110. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/NodeInfo.d.ts +7 -0
  111. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/NodeInfo.js +19 -0
  112. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/NodeInfo.js.map +1 -0
  113. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/PoolInfo.d.ts +6 -0
  114. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/PoolInfo.js +12 -0
  115. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/PoolInfo.js.map +1 -0
  116. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.d.ts +9 -0
  117. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.js +95 -0
  118. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.js.map +1 -0
  119. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/utils.d.ts +25 -0
  120. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/utils.js +17 -0
  121. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/utils.js.map +1 -0
  122. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueTabs.d.ts +8 -0
  123. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueTabs.js +23 -0
  124. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueTabs.js.map +1 -0
  125. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssues.d.ts +6 -0
  126. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssues.js +41 -0
  127. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssues.js.map +1 -0
  128. package/dist/containers/Tenant/Healthcheck/components/HealthcheckRefresh.d.ts +6 -0
  129. package/dist/containers/Tenant/Healthcheck/components/HealthcheckRefresh.js +47 -0
  130. package/dist/containers/Tenant/Healthcheck/components/HealthcheckRefresh.js.map +1 -0
  131. package/dist/containers/Tenant/Healthcheck/components/HealthcheckView.d.ts +8 -0
  132. package/dist/containers/Tenant/Healthcheck/components/HealthcheckView.js +42 -0
  133. package/dist/containers/Tenant/Healthcheck/components/HealthcheckView.js.map +1 -0
  134. package/dist/containers/Tenant/Healthcheck/i18n/en.json +41 -0
  135. package/dist/containers/Tenant/Healthcheck/i18n/index.d.ts +2 -0
  136. package/dist/containers/Tenant/Healthcheck/i18n/index.js +5 -0
  137. package/dist/containers/Tenant/Healthcheck/i18n/index.js.map +1 -0
  138. package/dist/containers/Tenant/Healthcheck/shared.d.ts +11 -0
  139. package/dist/containers/Tenant/Healthcheck/shared.js +36 -0
  140. package/dist/containers/Tenant/Healthcheck/shared.js.map +1 -0
  141. package/dist/containers/Tenant/Healthcheck/useHealthcheck.d.ts +14 -0
  142. package/dist/containers/Tenant/Healthcheck/useHealthcheck.js +19 -0
  143. package/dist/containers/Tenant/Healthcheck/useHealthcheck.js.map +1 -0
  144. package/dist/containers/Tenant/Query/Preview/components/TopicPreview.js +1 -1
  145. package/dist/containers/Tenant/Query/Preview/components/TopicPreview.js.map +1 -1
  146. package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js +1 -1
  147. package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js.map +1 -1
  148. package/dist/containers/Tenant/Query/QueryResult/components/QueryInfoDropdown/useQueryInfoMenuItems.js +1 -1
  149. package/dist/containers/Tenant/Query/QueryResult/components/QueryInfoDropdown/useQueryInfoMenuItems.js.map +1 -1
  150. package/dist/containers/Tenant/Tenant.js +14 -25
  151. package/dist/containers/Tenant/Tenant.js.map +1 -1
  152. package/dist/containers/Tenant/TenantDrawerWrappers.d.ts +7 -0
  153. package/dist/containers/Tenant/TenantDrawerWrappers.js +47 -0
  154. package/dist/containers/Tenant/TenantDrawerWrappers.js.map +1 -0
  155. package/dist/containers/Tenant/TenantPages.d.ts +2 -0
  156. package/dist/containers/Tenant/TenantPages.js.map +1 -1
  157. package/dist/containers/Tenant/constants.d.ts +4 -0
  158. package/dist/containers/Tenant/constants.js +18 -0
  159. package/dist/containers/Tenant/constants.js.map +1 -0
  160. package/dist/containers/Tenant/i18n/en.json +7 -1
  161. package/dist/containers/Tenant/i18n/index.d.ts +1 -1
  162. package/dist/containers/Tenant/useTenantQueryParams.d.ts +12 -0
  163. package/dist/containers/Tenant/useTenantQueryParams.js +39 -0
  164. package/dist/containers/Tenant/useTenantQueryParams.js.map +1 -0
  165. package/dist/containers/Tenant/utils/schemaActions.js +2 -2
  166. package/dist/containers/Tenant/utils/schemaActions.js.map +1 -1
  167. package/dist/containers/UserSettings/i18n/en.json +1 -1
  168. package/dist/store/reducers/capabilities/hooks.d.ts +3 -0
  169. package/dist/store/reducers/capabilities/hooks.js +9 -0
  170. package/dist/store/reducers/capabilities/hooks.js.map +1 -1
  171. package/dist/store/reducers/clusters/selectors.d.ts +1 -2
  172. package/dist/store/reducers/clusters/selectors.js +0 -28
  173. package/dist/store/reducers/clusters/selectors.js.map +1 -1
  174. package/dist/store/reducers/clusters/types.d.ts +0 -10
  175. package/dist/store/reducers/header/types.d.ts +4 -2
  176. package/dist/store/reducers/healthcheckInfo/healthcheckInfo.d.ts +631 -331
  177. package/dist/store/reducers/healthcheckInfo/healthcheckInfo.js +8 -35
  178. package/dist/store/reducers/healthcheckInfo/healthcheckInfo.js.map +1 -1
  179. package/dist/store/reducers/healthcheckInfo/types.d.ts +2 -0
  180. package/dist/store/reducers/healthcheckInfo/utils.d.ts +3 -0
  181. package/dist/store/reducers/healthcheckInfo/utils.js +34 -0
  182. package/dist/store/reducers/healthcheckInfo/utils.js.map +1 -1
  183. package/dist/store/reducers/tenant/constants.d.ts +0 -1
  184. package/dist/store/reducers/tenant/constants.js +0 -1
  185. package/dist/store/reducers/tenant/constants.js.map +1 -1
  186. package/dist/store/reducers/tenants/utils.d.ts +2 -1
  187. package/dist/store/reducers/tenants/utils.js +15 -2
  188. package/dist/store/reducers/tenants/utils.js.map +1 -1
  189. package/dist/styles/index.scss +3 -0
  190. package/dist/types/api/capabilities.d.ts +1 -1
  191. package/dist/types/api/healthcheck.d.ts +80 -13
  192. package/dist/types/api/healthcheck.js +1 -0
  193. package/dist/types/api/healthcheck.js.map +1 -1
  194. package/dist/types/api/tenant.d.ts +4 -0
  195. package/dist/types/api/tenant.js.map +1 -1
  196. package/dist/uiFactory/types.d.ts +18 -0
  197. package/dist/uiFactory/uiFactory.d.ts +1 -1
  198. package/dist/uiFactory/uiFactory.js +6 -0
  199. package/dist/uiFactory/uiFactory.js.map +1 -1
  200. package/dist/utils/createToast.d.ts +2 -9
  201. package/dist/utils/createToast.js +5 -6
  202. package/dist/utils/createToast.js.map +1 -1
  203. package/package.json +1 -1
  204. package/dist/containers/App/i18n/en.json +0 -3
  205. package/dist/containers/App/i18n/index.d.ts +0 -2
  206. package/dist/containers/App/i18n/index.js.map +0 -1
  207. package/dist/containers/App/i18n/ru.json +0 -3
  208. package/dist/containers/Clusters/ClustersStatistics.d.ts +0 -7
  209. package/dist/containers/Clusters/ClustersStatistics.js +0 -10
  210. package/dist/containers/Clusters/ClustersStatistics.js.map +0 -1
  211. package/dist/containers/Clusters/i18n/ru.json +0 -15
  212. package/dist/containers/Storage/EmptyFilter/EmptyFilter.js.map +0 -1
  213. package/dist/containers/Storage/EmptyFilter/i18n/index.js +0 -6
  214. package/dist/containers/Storage/EmptyFilter/i18n/index.js.map +0 -1
  215. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/Healthcheck.scss +0 -106
  216. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.d.ts +0 -6
  217. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.js +0 -34
  218. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.js.map +0 -1
  219. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.d.ts +0 -7
  220. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.js +0 -37
  221. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.js.map +0 -1
  222. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.scss +0 -51
  223. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.d.ts +0 -10
  224. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.js +0 -9
  225. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.js.map +0 -1
  226. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.scss +0 -50
  227. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/index.d.ts +0 -1
  228. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/index.js +0 -2
  229. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/index.js.map +0 -1
  230. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/ru.json +0 -8
  231. package/dist/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.d.ts +0 -15
  232. package/dist/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.js +0 -20
  233. package/dist/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.js.map +0 -1
  234. /package/dist/{containers/Storage → components}/EmptyFilter/EmptyFilter.d.ts +0 -0
  235. /package/dist/{containers/Storage → components}/EmptyFilter/i18n/en.json +0 -0
  236. /package/dist/{containers/Storage → components}/EmptyFilter/i18n/index.d.ts +0 -0
  237. /package/dist/{containers/Storage → components}/EmptyFilter/i18n/ru.json +0 -0
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { InternalLink } from '../../../../../components/InternalLink';
3
+ import { getDefaultNodePath } from '../../../../Node/NodePages';
4
+ import { useTenantQueryParams } from '../../../useTenantQueryParams';
5
+ import i18n from '../../i18n';
6
+ import { LocationDetails } from './utils';
7
+ export function NodeInfo({ node, title }) {
8
+ const { database } = useTenantQueryParams();
9
+ if (!node) {
10
+ return null;
11
+ }
12
+ const nodeLink = node.id ? (_jsx(InternalLink, { to: getDefaultNodePath(node.id, { database }), children: node.id })) : undefined;
13
+ return (_jsx(LocationDetails, { title: title, fields: [
14
+ { value: nodeLink, title: i18n('label_node-id') },
15
+ { value: node.host, title: i18n('label_node-host'), copy: node.host },
16
+ { value: node.port, title: i18n('label_node-port') },
17
+ ] }));
18
+ }
19
+ //# sourceMappingURL=NodeInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeInfo.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/NodeInfo.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,wCAAwC,CAAC;AAEpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAC,oBAAoB,EAAC,MAAM,+BAA+B,CAAC;AACnE,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAOxC,MAAM,UAAU,QAAQ,CAAC,EAAC,IAAI,EAAE,KAAK,EAAgB;IACjD,MAAM,EAAC,QAAQ,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CACvB,KAAC,YAAY,IAAC,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAC,QAAQ,EAAC,CAAC,YAAG,IAAI,CAAC,EAAE,GAAgB,CACtF,CAAC,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,CACH,KAAC,eAAe,IACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE;YACJ,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,EAAC;YAC/C,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC;YACnE,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAC;SACrD,GACH,CACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Location } from '../../../../../types/api/healthcheck';
2
+ interface PoolInfoProps {
3
+ location?: Location['storage'] | Location['compute'];
4
+ }
5
+ export declare function PoolInfo({ location }: PoolInfoProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import i18n from '../../i18n';
3
+ import { LocationDetails } from './utils';
4
+ export function PoolInfo({ location }) {
5
+ const { pool } = location !== null && location !== void 0 ? location : {};
6
+ const { name } = pool !== null && pool !== void 0 ? pool : {};
7
+ if (!name) {
8
+ return null;
9
+ }
10
+ return _jsx(LocationDetails, { fields: [{ value: name, title: i18n('label_pool-name') }] });
11
+ }
12
+ //# sourceMappingURL=PoolInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PoolInfo.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/PoolInfo.tsx"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAMxC,MAAM,UAAU,QAAQ,CAAC,EAAC,QAAQ,EAAgB;IAC9C,MAAM,EAAC,IAAI,EAAC,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE,CAAC;IAC9B,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IAE1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAC,eAAe,IAAC,MAAM,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAC,CAAC,GAAI,CAAC;AACxF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Location } from '../../../../../types/api/healthcheck';
2
+ export type LocationFieldStorage = 'pool' | 'node' | 'pdisk' | 'vdisk' | 'group';
3
+ type StorageLocationType = Location['storage'];
4
+ interface StorageLocationProps {
5
+ location: StorageLocationType;
6
+ hiddenFields?: LocationFieldStorage[];
7
+ }
8
+ export declare function StorageLocation({ location, hiddenFields }: StorageLocationProps): import("react/jsx-runtime").JSX.Element | null;
9
+ export {};
@@ -0,0 +1,95 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Flex } from '@gravity-ui/uikit';
4
+ import { isEmpty } from 'lodash';
5
+ import { InternalLink } from '../../../../../components/InternalLink';
6
+ import { getPDiskPagePath, getVDiskPagePath } from '../../../../../routes';
7
+ import i18n from '../../i18n';
8
+ import { NodeInfo } from './NodeInfo';
9
+ import { PoolInfo } from './PoolInfo';
10
+ import { IdList, LocationDetails, SectionWithTitle } from './utils';
11
+ const LocationFieldRenderer = {
12
+ node: (location) => _jsx(NodeInfo, { node: location === null || location === void 0 ? void 0 : location.node }, "node"),
13
+ pool: (location) => _jsx(PoolInfo, { location: location }, "pool"),
14
+ group: (location) => _jsx(GroupInfo, { location: location }, "group"),
15
+ vdisk: (location) => _jsx(VDiskInfo, { location: location }, "vdisk"),
16
+ pdisk: (location) => _jsx(PDiskInfo, { location: location }, "pdisk"),
17
+ };
18
+ export function StorageLocation({ location, hiddenFields = [] }) {
19
+ const { node, pool } = location !== null && location !== void 0 ? location : {};
20
+ const { group } = pool !== null && pool !== void 0 ? pool : {};
21
+ const { vdisk } = group !== null && group !== void 0 ? group : {};
22
+ const { pdisk } = vdisk !== null && vdisk !== void 0 ? vdisk : {};
23
+ const fields = React.useMemo(() => {
24
+ const fields = [];
25
+ if (node) {
26
+ fields.push('node');
27
+ }
28
+ if (pool) {
29
+ fields.push('pool');
30
+ }
31
+ if (group) {
32
+ fields.push('group');
33
+ }
34
+ if (vdisk) {
35
+ fields.push('vdisk');
36
+ }
37
+ if (pdisk) {
38
+ fields.push('pdisk');
39
+ }
40
+ return fields.filter((field) => !hiddenFields.includes(field));
41
+ }, [node, pool, group, vdisk, pdisk, hiddenFields]);
42
+ if (!location || isEmpty(location) || fields.length === 0) {
43
+ return null;
44
+ }
45
+ return (_jsx(SectionWithTitle, { title: i18n('label_storage_location'), titleVariant: "subheader-2", children: _jsx(Flex, { direction: "column", gap: 2, children: fields.map((field) => LocationFieldRenderer[field](location)) }) }));
46
+ }
47
+ function GroupInfo({ location }) {
48
+ const { pool } = location !== null && location !== void 0 ? location : {};
49
+ const { group } = pool !== null && pool !== void 0 ? pool : {};
50
+ const ids = group === null || group === void 0 ? void 0 : group.id;
51
+ if (!(ids === null || ids === void 0 ? void 0 : ids.length)) {
52
+ return null;
53
+ }
54
+ return (_jsx(LocationDetails, { fields: [
55
+ {
56
+ value: (ids === null || ids === void 0 ? void 0 : ids.length) ? _jsx(IdList, { ids: ids }) : undefined,
57
+ title: i18n('label_group-id'),
58
+ },
59
+ ] }));
60
+ }
61
+ function VDiskInfo({ location }) {
62
+ const { node, pool } = location !== null && location !== void 0 ? location : {};
63
+ const { group } = pool !== null && pool !== void 0 ? pool : {};
64
+ const { vdisk } = group !== null && group !== void 0 ? group : {};
65
+ const ids = vdisk === null || vdisk === void 0 ? void 0 : vdisk.id;
66
+ if (!(ids === null || ids === void 0 ? void 0 : ids.length)) {
67
+ return null;
68
+ }
69
+ return (_jsx(LocationDetails, { fields: [
70
+ {
71
+ value: (ids === null || ids === void 0 ? void 0 : ids.length) ? (_jsx(IdList, { ids: ids, renderItem: (id) => (_jsx(InternalLink, { to: getVDiskPagePath({
72
+ vDiskId: id,
73
+ nodeId: node === null || node === void 0 ? void 0 : node.id,
74
+ }), children: id })) })) : undefined,
75
+ title: i18n('label_vdisk-id'),
76
+ },
77
+ ] }));
78
+ }
79
+ function PDiskInfo({ location }) {
80
+ const { node, pool } = location !== null && location !== void 0 ? location : {};
81
+ const { group } = pool !== null && pool !== void 0 ? pool : {};
82
+ const { vdisk } = group !== null && group !== void 0 ? group : {};
83
+ const { pdisk } = vdisk !== null && vdisk !== void 0 ? vdisk : {};
84
+ if (!(pdisk === null || pdisk === void 0 ? void 0 : pdisk.length)) {
85
+ return null;
86
+ }
87
+ return pdisk.map((disk) => (_jsx(LocationDetails, { fields: [
88
+ {
89
+ value: disk.id && (node === null || node === void 0 ? void 0 : node.id) ? (_jsx(InternalLink, { to: getPDiskPagePath(disk.id, node.id), children: disk.id })) : (disk.id),
90
+ title: i18n('label_pdisk-id'),
91
+ },
92
+ { value: disk.path, title: i18n('label_pdisk-path') },
93
+ ] }, disk.id)));
94
+ }
95
+ //# sourceMappingURL=StorageLocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageLocation.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import type { FlexProps, TextProps } from '@gravity-ui/uikit';
3
+ interface SectionWithTitleProps {
4
+ title?: string;
5
+ children: React.ReactNode;
6
+ titleVariant?: TextProps['variant'];
7
+ gap?: FlexProps['gap'];
8
+ }
9
+ export declare function SectionWithTitle({ title, children, titleVariant, gap, }: SectionWithTitleProps): import("react/jsx-runtime").JSX.Element;
10
+ interface LocationDetailsProps {
11
+ title?: string;
12
+ fields: {
13
+ value?: React.ReactNode;
14
+ title: string;
15
+ copy?: string;
16
+ }[];
17
+ titleVariant?: TextProps['variant'];
18
+ }
19
+ export declare function LocationDetails({ title, fields, titleVariant }: LocationDetailsProps): import("react/jsx-runtime").JSX.Element | null;
20
+ interface IdListProps {
21
+ ids: string[];
22
+ renderItem?: (id: string) => React.ReactNode;
23
+ }
24
+ export declare function IdList({ ids, renderItem }: IdListProps): import("react/jsx-runtime").JSX.Element;
25
+ export {};
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { DefinitionList, Flex, Text } from '@gravity-ui/uikit';
4
+ export function SectionWithTitle({ title, children, titleVariant = 'body-2', gap = 2, }) {
5
+ return (_jsxs(Flex, { direction: "column", gap: gap, children: [title && _jsx(Text, { variant: titleVariant, children: title }), children] }));
6
+ }
7
+ export function LocationDetails({ title, fields, titleVariant }) {
8
+ const filteredFields = fields.filter((f) => f.value);
9
+ if (filteredFields.length === 0) {
10
+ return null;
11
+ }
12
+ return (_jsx(SectionWithTitle, { title: title, titleVariant: titleVariant, children: _jsx(DefinitionList, { nameMaxWidth: 200, children: filteredFields.map((field) => (_jsx(DefinitionList.Item, { name: field.title, copyText: field.copy, children: field.value }, field.title))) }) }));
13
+ }
14
+ export function IdList({ ids, renderItem }) {
15
+ return (_jsx(Flex, { direction: "column", gap: 1, children: ids.map((id) => (_jsx(React.Fragment, { children: renderItem ? renderItem(id) : id }, id))) }));
16
+ }
17
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/utils.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAS7D,MAAM,UAAU,gBAAgB,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,YAAY,GAAG,QAAQ,EACvB,GAAG,GAAG,CAAC,GACa;IACpB,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,GAAG,aAC5B,KAAK,IAAI,KAAC,IAAI,IAAC,OAAO,EAAE,YAAY,YAAG,KAAK,GAAQ,EACpD,QAAQ,IACN,CACV,CAAC;AACN,CAAC;AAQD,MAAM,UAAU,eAAe,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAuB;IAC/E,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAErD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,YACtD,KAAC,cAAc,IAAC,YAAY,EAAE,GAAG,YAC5B,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3B,KAAC,cAAc,CAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAoB,QAAQ,EAAE,KAAK,CAAC,IAAI,YACzE,KAAK,CAAC,KAAK,IAD6B,KAAK,CAAC,KAAK,CAElC,CACzB,CAAC,GACW,GACF,CACtB,CAAC;AACN,CAAC;AAOD,MAAM,UAAU,MAAM,CAAC,EAAC,GAAG,EAAE,UAAU,EAAc;IACjD,OAAO,CACH,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,YAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CACb,KAAC,KAAK,CAAC,QAAQ,cAAW,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAArC,EAAE,CAAqD,CAC/E,CAAC,GACC,CACV,CAAC;AACN,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { IssuesTree } from '../../../../store/reducers/healthcheckInfo/types';
2
+ interface HealthcheckIssueTabsProps {
3
+ parents: IssuesTree[];
4
+ selectedTab: string;
5
+ setSelectedTab: (tab: string) => void;
6
+ }
7
+ export declare function HealthcheckIssueTabs({ parents, selectedTab, setSelectedTab, }: HealthcheckIssueTabsProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Flex, Text } from '@gravity-ui/uikit';
3
+ import { b } from '../shared';
4
+ function getTypeText(type) {
5
+ const normalizedType = type.split('_').join(' ');
6
+ let result = normalizedType.charAt(0).toUpperCase() + normalizedType.slice(1).toLowerCase();
7
+ result = result.replace(/\bvdisk\b/gi, 'VDisk').replace(/\bpdisk\b/gi, 'PDisk');
8
+ return result;
9
+ }
10
+ export function HealthcheckIssueTabs({ parents, selectedTab, setSelectedTab, }) {
11
+ //parent.length === 1 means that it's only issue itself, no need to render tabs
12
+ if (parents.length <= 1) {
13
+ return null;
14
+ }
15
+ return (_jsx(Flex, { gap: 2, wrap: "nowrap", children: parents.map((parent, index) => (_jsxs(Flex, { gap: 2, wrap: "nowrap", children: [_jsx(HealthcjeckIssueTab, { active: parent.id === selectedTab, onClick: () => setSelectedTab(parent.id), children: _jsxs(Flex, { gap: 2, wrap: "nowrap", alignItems: "center", children: [_jsx(TabStatus, { status: parent.status }), getTypeText(parent.type)] }) }), index !== parents.length - 1 && _jsx(Text, { color: "secondary", children: "/" })] }, parent.id))) }));
16
+ }
17
+ function HealthcjeckIssueTab({ children, active, onClick }) {
18
+ return (_jsx(Text, { variant: "body-2", color: active ? 'primary' : 'secondary', className: b('issue-tab', { active }), onClick: onClick, children: children }));
19
+ }
20
+ function TabStatus({ status }) {
21
+ return _jsx("div", { className: b('tab-status', { [status.toLowerCase()]: true }) });
22
+ }
23
+ //# sourceMappingURL=HealthcheckIssueTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthcheckIssueTabs.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueTabs.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAI7C,OAAO,EAAC,CAAC,EAAC,MAAM,WAAW,CAAC;AAE5B,SAAS,WAAW,CAAC,IAAY;IAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5F,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC;AAClB,CAAC;AAQD,MAAM,UAAU,oBAAoB,CAAC,EACjC,OAAO,EACP,WAAW,EACX,cAAc,GACU;IACxB,+EAA+E;IAC/E,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAC,QAAQ,YACtB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAkB,IAAI,EAAC,QAAQ,aACvC,KAAC,mBAAmB,IAChB,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,WAAW,EACjC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,YAExC,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,aAC3C,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAI,EACnC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IACtB,GACW,EACrB,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,kBAAS,KAVlD,MAAM,CAAC,EAAE,CAWrB,CACV,CAAC,GACC,CACV,CAAC;AACN,CAAC;AAQD,SAAS,mBAAmB,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAA2B;IAC9E,OAAO,CACH,KAAC,IAAI,IACD,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EACvC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,EAAC,MAAM,EAAC,CAAC,EACnC,OAAO,EAAE,OAAO,YAEf,QAAQ,GACN,CACV,CAAC;AACN,CAAC;AAMD,SAAS,SAAS,CAAC,EAAC,MAAM,EAAiB;IACvC,OAAO,cAAK,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,EAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAC,CAAC,GAAI,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { IssuesTree } from '../../../../store/reducers/healthcheckInfo/types';
2
+ interface IssuesProps {
3
+ issues: IssuesTree[];
4
+ }
5
+ export declare function Issues({ issues }: IssuesProps): import("react/jsx-runtime").JSX.Element | import("react/jsx-runtime").JSX.Element[];
6
+ export {};
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { NoSearchResults } from '@gravity-ui/illustrations';
4
+ import { Flex } from '@gravity-ui/uikit';
5
+ import { EmptyState } from '../../../../components/EmptyState';
6
+ import { useTenantQueryParams } from '../../useTenantQueryParams';
7
+ import i18n from '../i18n';
8
+ import { HealthcheckIssue } from './HealthcheckIssue';
9
+ export function Issues({ issues }) {
10
+ const { view, issuesFilter } = useTenantQueryParams();
11
+ const filteredIssues = React.useMemo(() => {
12
+ const normalizedFilter = issuesFilter === null || issuesFilter === void 0 ? void 0 : issuesFilter.toLowerCase().trim();
13
+ if (!normalizedFilter) {
14
+ return issues;
15
+ }
16
+ return issues.filter((issue) => {
17
+ const stack = Object.values(issue);
18
+ while (stack.length) {
19
+ const value = stack.pop();
20
+ if (typeof value === 'object') {
21
+ stack.push(...Object.values(value));
22
+ }
23
+ else if (String(value).toLowerCase().includes(normalizedFilter)) {
24
+ return true;
25
+ }
26
+ }
27
+ return false;
28
+ });
29
+ }, [issues, issuesFilter]);
30
+ const filteredIssuesCurrentView = React.useMemo(() => view
31
+ ? filteredIssues.filter((issue) => {
32
+ const type = issue.firstParentType || issue.type;
33
+ return type.toLowerCase().startsWith(view);
34
+ })
35
+ : [], [filteredIssues, view]);
36
+ if (filteredIssuesCurrentView.length === 0) {
37
+ return (_jsx(Flex, { grow: 1, justifyContent: "center", alignItems: "center", children: _jsx(EmptyState, { image: _jsx(NoSearchResults, { width: 100, height: 100 }), position: "center", size: "xs", title: i18n('label_no-issues'), description: i18n('description_no-issues') }) }));
38
+ }
39
+ return filteredIssuesCurrentView.map((issue) => (_jsx(HealthcheckIssue, { issue: issue, expanded: Boolean(issuesFilter) }, issue.id + Boolean(issuesFilter))));
40
+ }
41
+ //# sourceMappingURL=HealthcheckIssues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthcheckIssues.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssues.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAC,UAAU,EAAC,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAChE,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAMpD,MAAM,UAAU,MAAM,CAAC,EAAC,MAAM,EAAc;IACxC,MAAM,EAAC,IAAI,EAAE,YAAY,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEpD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtC,MAAM,gBAAgB,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,WAAW,GAAG,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxC,CAAC;qBAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAChE,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3B,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAC3C,GAAG,EAAE,CACD,IAAI;QACA,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC;YACjD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC;QACJ,CAAC,CAAC,EAAE,EACZ,CAAC,cAAc,EAAE,IAAI,CAAC,CACzB,CAAC;IAEF,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CACH,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,EAAE,cAAc,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,YACtD,KAAC,UAAU,IACP,KAAK,EAAE,KAAC,eAAe,IAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAI,EACnD,QAAQ,EAAC,QAAQ,EACjB,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAC9B,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC,GAC5C,GACC,CACV,CAAC;IACN,CAAC;IAED,OAAO,yBAAyB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC5C,KAAC,gBAAgB,IACb,KAAK,EAAE,KAAK,EAEZ,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,IAD1B,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAEvC,CACL,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface HealthcheckRefreshProps {
2
+ lastFullfiled?: number;
3
+ refresh: () => void;
4
+ }
5
+ export declare function HealthcheckRefresh({ lastFullfiled, refresh }: HealthcheckRefreshProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { duration } from '@gravity-ui/date-utils';
4
+ import { ArrowsRotateLeft } from '@gravity-ui/icons';
5
+ import { ActionTooltip, Button, Flex, Text } from '@gravity-ui/uikit';
6
+ import { isNil } from 'lodash';
7
+ import { DAY_IN_SECONDS, HOUR_IN_SECONDS, SECOND_IN_MS } from '../../../../utils/constants';
8
+ import i18n from '../i18n';
9
+ function getPassedMilliseconds(lastFullfiled = 0) {
10
+ return Date.now() - lastFullfiled;
11
+ }
12
+ export function HealthcheckRefresh({ lastFullfiled, refresh }) {
13
+ const [passedFromLastFullfiled, setPassedFromLastFullfiled] = React.useState(getPassedMilliseconds(lastFullfiled));
14
+ React.useEffect(() => {
15
+ setPassedFromLastFullfiled(getPassedMilliseconds(lastFullfiled));
16
+ const interval = setInterval(() => {
17
+ setPassedFromLastFullfiled(getPassedMilliseconds(lastFullfiled));
18
+ }, 60 * SECOND_IN_MS);
19
+ return () => clearInterval(interval);
20
+ }, [lastFullfiled]);
21
+ const renderPassedFromLastFullfiled = () => {
22
+ if (isNil(lastFullfiled)) {
23
+ return null;
24
+ }
25
+ const showHours = passedFromLastFullfiled > HOUR_IN_SECONDS * SECOND_IN_MS;
26
+ const showDays = passedFromLastFullfiled > DAY_IN_SECONDS * SECOND_IN_MS;
27
+ const preparedDuration = duration(passedFromLastFullfiled);
28
+ let durationText = '';
29
+ if (showDays) {
30
+ const days = preparedDuration.asDays();
31
+ durationText = i18n('description_days', { count: Math.round(days) });
32
+ }
33
+ else if (showHours) {
34
+ const hours = preparedDuration.asHours();
35
+ durationText = i18n('description_hours', { count: Math.round(hours) });
36
+ }
37
+ else {
38
+ const minutes = preparedDuration.asMinutes();
39
+ durationText = i18n('description_minutes', { count: Math.round(minutes) });
40
+ }
41
+ return _jsx(Text, { color: "secondary", children: durationText });
42
+ };
43
+ return (_jsxs(Flex, { gap: 2, alignItems: "center", children: [renderPassedFromLastFullfiled(), _jsx(ActionTooltip, { title: i18n('action_refresh'), children: _jsx(Button, { view: "outlined", onClick: () => {
44
+ refresh();
45
+ }, children: _jsx(Button.Icon, { children: _jsx(ArrowsRotateLeft, {}) }) }) })] }));
46
+ }
47
+ //# sourceMappingURL=HealthcheckRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthcheckRefresh.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckRefresh.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CommonIssueType } from '../shared';
2
+ interface HealthcheckViewProps<T extends string = CommonIssueType> {
3
+ issuesCount: Record<T, number>;
4
+ viewTitles?: Record<T, string>;
5
+ sortOrder?: T[];
6
+ }
7
+ export declare function HealthcheckView({ issuesCount, viewTitles, sortOrder, }: HealthcheckViewProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { RadioButton, Text } from '@gravity-ui/uikit';
4
+ import { uiFactory } from '../../../../uiFactory/uiFactory';
5
+ import { useTenantQueryParams } from '../../useTenantQueryParams';
6
+ import { b } from '../shared';
7
+ const HealthcheckViewValues = {
8
+ storage: 'storage',
9
+ compute: 'compute',
10
+ };
11
+ export function HealthcheckView({ issuesCount, viewTitles = uiFactory.healthcheck.getHealthckechViewTitles(), sortOrder = uiFactory.healthcheck.getHealthcheckViewsOrder(), }) {
12
+ const { view, handleHealthcheckViewChange, handleIssuesFilterChange } = useTenantQueryParams();
13
+ const issuesTypes = React.useMemo(() => Object.keys(issuesCount), [issuesCount]);
14
+ React.useEffect(() => {
15
+ if (view) {
16
+ return;
17
+ }
18
+ if (issuesCount[HealthcheckViewValues.storage]) {
19
+ handleHealthcheckViewChange(HealthcheckViewValues.storage);
20
+ }
21
+ else if (issuesCount[HealthcheckViewValues.compute]) {
22
+ handleHealthcheckViewChange(HealthcheckViewValues.compute);
23
+ }
24
+ else {
25
+ const firstIssueTypeWithIssues = sortOrder.find((issueType) => issuesCount[issueType] > 0);
26
+ handleHealthcheckViewChange(firstIssueTypeWithIssues);
27
+ }
28
+ }, [view, handleHealthcheckViewChange, issuesCount, issuesTypes, sortOrder]);
29
+ const renderCount = (view) => {
30
+ var _a;
31
+ return _jsx(Text, { color: "secondary", children: (_a = issuesCount[view]) !== null && _a !== void 0 ? _a : 0 });
32
+ };
33
+ const renderHealthcheckViewOption = (view) => {
34
+ var _a;
35
+ return (_jsxs(RadioButton.Option, { value: view, children: [(_a = viewTitles[view]) !== null && _a !== void 0 ? _a : view, "\u00A0", renderCount(view)] }, view));
36
+ };
37
+ return (_jsx(RadioButton, { value: view, onUpdate: (newView) => {
38
+ handleHealthcheckViewChange(newView);
39
+ handleIssuesFilterChange('');
40
+ }, className: b('control-wrapper'), children: sortOrder.map((type) => renderHealthcheckViewOption(type)) }));
41
+ }
42
+ //# sourceMappingURL=HealthcheckView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthcheckView.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckView.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,WAAW,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAC,SAAS,EAAC,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAC,CAAC,EAAC,MAAM,WAAW,CAAC;AAE5B,MAAM,qBAAqB,GAAoC;IAC3D,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACrB,CAAC;AAQF,MAAM,UAAU,eAAe,CAAC,EAC5B,WAAW,EACX,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,wBAAwB,EAAE,EAC7D,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,wBAAwB,EAAE,GACzC;IACnB,MAAM,EAAC,IAAI,EAAE,2BAA2B,EAAE,wBAAwB,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAE7F,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,IAAI,EAAE,CAAC;YACP,OAAO;QACX,CAAC;QACD,IAAI,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,2BAA2B,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,2BAA2B,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,MAAM,wBAAwB,GAAG,SAAS,CAAC,IAAI,CAC3C,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAC5C,CAAC;YACF,2BAA2B,CAAC,wBAAwB,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7E,MAAM,WAAW,GAAG,CAAC,IAAgC,EAAE,EAAE;;QACrD,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,YAAE,MAAA,WAAW,CAAC,IAAI,CAAC,mCAAI,CAAC,GAAQ,CAAC;IACnE,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,CAAC,IAAgC,EAAE,EAAE;;QACrE,OAAO,CACH,MAAC,WAAW,CAAC,MAAM,IAAC,KAAK,EAAE,IAAI,aAC1B,MAAA,UAAU,CAAC,IAAI,CAAC,mCAAI,IAAI,YACxB,WAAW,CAAC,IAAI,CAAC,KAFgB,IAAI,CAGrB,CACxB,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,CACH,KAAC,WAAW,IACR,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;YAClB,2BAA2B,CAAC,OAAO,CAAC,CAAC;YACrC,wBAAwB,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,YAE9B,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,GACjD,CACjB,CAAC;AACN,CAAC"}
@@ -0,0 +1,41 @@
1
+ {
2
+ "description_no-data": "No healthcheck data",
3
+ "label_storage": "Storage",
4
+ "label_compute": "Compute",
5
+ "description_search-issue": "Search issue...",
6
+ "action_refresh": "Refresh",
7
+ "description_minutes": "{{count}} min ago",
8
+ "description_hours": [
9
+ "{{count}} hour ago",
10
+ "{{count}} hours ago",
11
+ "{{count}} hours ago",
12
+ "{{count}} hours ago"
13
+ ],
14
+ "description_days": [
15
+ "{{count}} day ago",
16
+ "{{count}} days ago",
17
+ "{{count}} days ago",
18
+ "{{count}} days ago"
19
+ ],
20
+ "label_no-issues": "No issues",
21
+ "description_no-issues": "Here you will see issues that require your attention",
22
+ "label_details": "Details",
23
+ "label_storage_location": "Storage Location",
24
+ "label_compute_location": "Compute Location",
25
+ "label_description": "Description",
26
+ "label_node-id": "Node ID",
27
+ "label_node-host": "Node Host",
28
+ "label_node-port": "Node Port",
29
+ "label_pool-name": "Pool Name",
30
+ "label_tablet-id": "Tablet ID",
31
+ "label_tablet-type": "Tablet Type",
32
+ "label_tablet-count": "Tablets Count",
33
+ "label_schema-type": "Schema Type",
34
+ "label_schema-path": "Schema Path",
35
+ "label_group-id": "Group ID",
36
+ "label_vdisk-id": "VDisk ID",
37
+ "label_pdisk-id": "Pdisk ID",
38
+ "label_pdisk-path": "PDisk Path",
39
+ "label_node_location": "Node Location",
40
+ "label_peer_location": "Peer Node Location"
41
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: (key: "description_no-data" | "label_storage" | "label_compute" | "description_search-issue" | "action_refresh" | "description_minutes" | "description_hours" | "description_days" | "label_no-issues" | "description_no-issues" | "label_details" | "label_storage_location" | "label_compute_location" | "label_description" | "label_node-id" | "label_node-host" | "label_node-port" | "label_pool-name" | "label_tablet-id" | "label_tablet-type" | "label_tablet-count" | "label_schema-type" | "label_schema-path" | "label_group-id" | "label_vdisk-id" | "label_pdisk-id" | "label_pdisk-path" | "label_node_location" | "label_peer_location", params?: import("@gravity-ui/i18n").Params) => string;
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import { registerKeysets } from '../../../../utils/i18n';
2
+ import en from './en.json';
3
+ const COMPONENT = 'ydb-healthcheck-details';
4
+ export default registerKeysets(COMPONENT, { en });
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3B,MAAM,SAAS,GAAG,yBAAyB,CAAC;AAE5C,eAAe,eAAe,CAAC,SAAS,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { IssuesTree } from '../../../store/reducers/healthcheckInfo/types';
2
+ export declare const b: import("@bem-react/classname").ClassNameFormatter;
3
+ export type CommonIssueType = 'compute' | 'storage';
4
+ export declare function getHealthckechViewTitles(): {
5
+ readonly storage: string;
6
+ readonly compute: string;
7
+ };
8
+ export declare function getHealthcheckViewsOrder(): CommonIssueType[];
9
+ export declare function countHealthcheckIssuesByType(issueTrees: IssuesTree[]): Record<CommonIssueType, number>;
10
+ export type GetHealthcheckViewTitles<T extends string> = () => Record<T, string>;
11
+ export type GetHealthcheckViewsOrder<T> = () => T[];
@@ -0,0 +1,36 @@
1
+ import { cn } from '../../../utils/cn';
2
+ import i18n from './i18n';
3
+ export const b = cn('ydb-healthcheck');
4
+ const HealthcheckViewTitles = {
5
+ get storage() {
6
+ return i18n('label_storage');
7
+ },
8
+ get compute() {
9
+ return i18n('label_compute');
10
+ },
11
+ };
12
+ const DefaultSortOrder = ['storage', 'compute'];
13
+ export function getHealthckechViewTitles() {
14
+ return HealthcheckViewTitles;
15
+ }
16
+ export function getHealthcheckViewsOrder() {
17
+ return DefaultSortOrder;
18
+ }
19
+ export function countHealthcheckIssuesByType(issueTrees) {
20
+ var _a;
21
+ const result = {
22
+ storage: 0,
23
+ compute: 0,
24
+ };
25
+ for (const issue of issueTrees) {
26
+ const type = (_a = issue.firstParentType) !== null && _a !== void 0 ? _a : issue.type;
27
+ if (type.startsWith('STORAGE')) {
28
+ result.storage++;
29
+ }
30
+ else if (type.startsWith('COMPUTE')) {
31
+ result.compute++;
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/containers/Tenant/Healthcheck/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,mBAAmB,CAAC;AAErC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAIvC,MAAM,qBAAqB,GAAG;IAC1B,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;CACJ,CAAC;AAEF,MAAM,gBAAgB,GAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAEnE,MAAM,UAAU,wBAAwB;IACpC,OAAO,qBAAqB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB;IACpC,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,4BAA4B,CACxC,UAAwB;;IAExB,MAAM,MAAM,GAAoC;QAC5C,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;KACb,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,eAAe,mCAAI,KAAK,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { IssuesTree } from '../../../store/reducers/healthcheckInfo/types';
2
+ import { SelfCheckResult } from '../../../types/api/healthcheck';
3
+ interface HealthcheckParams {
4
+ leavesIssues: IssuesTree[];
5
+ loading: boolean;
6
+ error?: unknown;
7
+ refetch: () => void;
8
+ selfCheckResult: SelfCheckResult;
9
+ fulfilledTimeStamp?: number;
10
+ }
11
+ export declare const useHealthcheck: (tenantName: string, { autorefresh }?: {
12
+ autorefresh?: number;
13
+ }) => HealthcheckParams;
14
+ export {};
@@ -0,0 +1,19 @@
1
+ import { healthcheckApi, selectLeavesIssues, } from '../../../store/reducers/healthcheckInfo/healthcheckInfo';
2
+ import { SelfCheckResult } from '../../../types/api/healthcheck';
3
+ import { useTypedSelector } from '../../../utils/hooks';
4
+ export const useHealthcheck = (tenantName, { autorefresh } = {}) => {
5
+ const { currentData: data, isFetching, error, refetch, fulfilledTimeStamp, } = healthcheckApi.useGetHealthcheckInfoQuery({ database: tenantName }, {
6
+ pollingInterval: autorefresh,
7
+ });
8
+ const selfCheckResult = (data === null || data === void 0 ? void 0 : data.self_check_result) || SelfCheckResult.UNSPECIFIED;
9
+ const leavesIssues = useTypedSelector((state) => selectLeavesIssues(state, tenantName));
10
+ return {
11
+ loading: data === undefined && isFetching,
12
+ error,
13
+ refetch,
14
+ selfCheckResult,
15
+ fulfilledTimeStamp,
16
+ leavesIssues,
17
+ };
18
+ };
19
+ //# sourceMappingURL=useHealthcheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHealthcheck.js","sourceRoot":"","sources":["../../../../src/containers/Tenant/Healthcheck/useHealthcheck.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,kBAAkB,GACrB,MAAM,yDAAyD,CAAC;AAEjE,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAWtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,UAAkB,EAClB,EAAC,WAAW,KAA4B,EAAE,EACzB,EAAE;IACnB,MAAM,EACF,WAAW,EAAE,IAAI,EACjB,UAAU,EACV,KAAK,EACL,OAAO,EACP,kBAAkB,GACrB,GAAG,cAAc,CAAC,0BAA0B,CACzC,EAAC,QAAQ,EAAE,UAAU,EAAC,EACtB;QACI,eAAe,EAAE,WAAW;KAC/B,CACJ,CAAC;IAEF,MAAM,eAAe,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,iBAAiB,KAAI,eAAe,CAAC,WAAW,CAAC;IAC/E,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAExF,OAAO;QACH,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,UAAU;QACzC,KAAK;QACL,OAAO;QACP,eAAe;QACf,kBAAkB;QAClB,YAAY;KACf,CAAC;AACN,CAAC,CAAC"}
@@ -40,7 +40,7 @@ export function TopicPreview({ database, path }) {
40
40
  }
41
41
  return {
42
42
  start: safeParseNumber(firstPartition.startOffset),
43
- end: safeParseNumber(firstPartition.endOffset) - 1,
43
+ end: Math.max(safeParseNumber(firstPartition.endOffset) - 1, 0),
44
44
  };
45
45
  }, [firstPartition]);
46
46
  const renderResult = React.useCallback(() => {