ydb-embedded-ui 4.19.3 → 4.20.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 (86) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/components/CellWithPopover/CellWithPopover.scss +13 -0
  3. package/dist/components/CellWithPopover/CellWithPopover.tsx +26 -0
  4. package/dist/components/LinkToSchemaObject/LinkToSchemaObject.tsx +20 -0
  5. package/dist/components/NodeHostWrapper/NodeHostWrapper.scss +0 -2
  6. package/dist/components/NodeHostWrapper/NodeHostWrapper.tsx +28 -29
  7. package/dist/components/QueryExecutionStatus/QueryExecutionStatus.tsx +3 -2
  8. package/dist/components/TruncatedQuery/TruncatedQuery.scss +8 -0
  9. package/dist/components/TruncatedQuery/TruncatedQuery.tsx +15 -1
  10. package/dist/components/UsageLabel/UsageLabel.scss +6 -0
  11. package/dist/components/UsageLabel/UsageLabel.tsx +22 -0
  12. package/dist/containers/AsideNavigation/AsideNavigation.tsx +13 -8
  13. package/dist/containers/AsideNavigation/i18n/en.json +13 -0
  14. package/dist/containers/AsideNavigation/i18n/index.ts +11 -0
  15. package/dist/containers/AsideNavigation/i18n/ru.json +13 -0
  16. package/dist/containers/Node/NodeStructure/Pdisk.tsx +74 -68
  17. package/dist/containers/Node/NodeStructure/Vdisk.tsx +9 -33
  18. package/dist/containers/Nodes/Nodes.tsx +10 -2
  19. package/dist/containers/Nodes/getNodesColumns.tsx +207 -123
  20. package/dist/containers/Storage/Storage.tsx +9 -2
  21. package/dist/containers/Storage/StorageGroups/StorageGroups.scss +0 -11
  22. package/dist/containers/Storage/StorageGroups/getStorageGroupsColumns.tsx +11 -11
  23. package/dist/containers/Storage/utils/index.ts +1 -22
  24. package/dist/containers/Tenant/Diagnostics/Describe/Describe.tsx +2 -3
  25. package/dist/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.scss +0 -1
  26. package/dist/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.tsx +4 -2
  27. package/dist/containers/Tenant/Diagnostics/Diagnostics.tsx +1 -0
  28. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.tsx +8 -1
  29. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.tsx +11 -1
  30. package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.tsx +0 -1
  31. package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx +3 -0
  32. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx +21 -0
  33. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx +53 -0
  34. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx +53 -0
  35. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopQueries.tsx +83 -0
  36. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopShards.tsx +53 -0
  37. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TenantMemory.tsx +9 -0
  38. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx +55 -0
  39. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss +44 -0
  40. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +35 -19
  41. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverviewTableLayout.tsx +53 -0
  42. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TenantStorage.tsx +4 -2
  43. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopGroups.tsx +9 -36
  44. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TopTables.tsx +22 -41
  45. package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/en.json +3 -3
  46. package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/ru.json +3 -3
  47. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.scss +0 -2
  48. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.tsx +19 -61
  49. package/dist/containers/Tenant/Diagnostics/TopQueries/getTopQueriesColumns.tsx +102 -0
  50. package/dist/containers/Tenant/Diagnostics/TopShards/Filters/Filters.tsx +2 -2
  51. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.tsx +18 -97
  52. package/dist/containers/Tenant/Diagnostics/TopShards/getTopShardsColumns.tsx +138 -0
  53. package/dist/containers/Tenant/Info/ExternalTable/ExternalTable.tsx +2 -4
  54. package/dist/containers/Tenant/Query/ExecuteResult/{ExecuteResult.js → ExecuteResult.tsx} +51 -31
  55. package/dist/containers/Tenant/Query/Issues/Issues.tsx +4 -6
  56. package/dist/containers/Tenant/Query/QueryDuration/QueryDuration.tsx +1 -1
  57. package/dist/containers/Tenant/utils/paneVisibilityToggleHelpers.tsx +1 -1
  58. package/dist/routes.ts +26 -1
  59. package/dist/store/reducers/{executeTopQueries.ts → executeTopQueries/executeTopQueries.ts} +23 -75
  60. package/dist/{types/store/executeTopQueries.ts → store/reducers/executeTopQueries/types.ts} +3 -7
  61. package/dist/store/reducers/executeTopQueries/utils.ts +36 -0
  62. package/dist/store/reducers/index.ts +12 -2
  63. package/dist/store/reducers/nodes/types.ts +1 -0
  64. package/dist/store/reducers/nodes/utils.ts +16 -6
  65. package/dist/store/reducers/{shardsWorkload.ts → shardsWorkload/shardsWorkload.ts} +5 -11
  66. package/dist/{types/store/shardsWorkload.ts → store/reducers/shardsWorkload/types.ts} +3 -7
  67. package/dist/store/reducers/tenantOverview/topNodesByCpu/topNodesByCpu.ts +87 -0
  68. package/dist/store/reducers/tenantOverview/topNodesByCpu/types.ts +29 -0
  69. package/dist/store/reducers/tenantOverview/topNodesByLoad/topNodesByLoad.ts +87 -0
  70. package/dist/store/reducers/tenantOverview/topNodesByLoad/types.ts +29 -0
  71. package/dist/store/reducers/tenantOverview/topNodesByMemory/topNodesByMemory.ts +87 -0
  72. package/dist/store/reducers/tenantOverview/topNodesByMemory/types.ts +29 -0
  73. package/dist/store/reducers/tenantOverview/topQueries/tenantOverviewTopQueries.ts +93 -0
  74. package/dist/store/reducers/tenantOverview/topQueries/types.ts +14 -0
  75. package/dist/store/reducers/tenantOverview/topShards/tenantOverviewTopShards.ts +103 -0
  76. package/dist/store/reducers/tenantOverview/topShards/types.ts +14 -0
  77. package/dist/store/reducers/tenantOverview/topShards/utils.ts +3 -0
  78. package/dist/styles/mixins.scss +4 -0
  79. package/dist/types/additionalProps.ts +3 -1
  80. package/dist/types/api/compute.ts +1 -1
  81. package/dist/types/react-json-inspector.d.ts +21 -0
  82. package/dist/utils/diagnostics.ts +23 -0
  83. package/dist/utils/generateEvaluator.ts +21 -0
  84. package/dist/utils/generateHash.ts +11 -0
  85. package/package.json +3 -2
  86. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TenantStorage.scss +0 -41
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.20.1](https://github.com/ydb-platform/ydb-embedded-ui/compare/v4.20.0...v4.20.1) (2023-10-24)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * fix createExternalUILink ([#571](https://github.com/ydb-platform/ydb-embedded-ui/issues/571)) ([52546f1](https://github.com/ydb-platform/ydb-embedded-ui/commit/52546f17dbfdb255b2429836e880d6812b19d66a))
9
+ * fix incorrect truncate strings with popover ([#567](https://github.com/ydb-platform/ydb-embedded-ui/issues/567)) ([d82e65b](https://github.com/ydb-platform/ydb-embedded-ui/commit/d82e65b925b76dc539a76520eccf601951654e94))
10
+ * fix top queries table row height ([#565](https://github.com/ydb-platform/ydb-embedded-ui/issues/565)) ([b12dceb](https://github.com/ydb-platform/ydb-embedded-ui/commit/b12dcebdb0167fd5852c247bca48844ef6ab35af))
11
+ * refactor metrics storage section ([#568](https://github.com/ydb-platform/ydb-embedded-ui/issues/568)) ([db5d922](https://github.com/ydb-platform/ydb-embedded-ui/commit/db5d922d06b88c9d8a792220d2a178c81806c09e))
12
+ * update @types/react ([#570](https://github.com/ydb-platform/ydb-embedded-ui/issues/570)) ([1e38c5b](https://github.com/ydb-platform/ydb-embedded-ui/commit/1e38c5bb3b4b2139b2141636d6434c2a2ec65772))
13
+
14
+ ## [4.20.0](https://github.com/ydb-platform/ydb-embedded-ui/compare/v4.19.3...v4.20.0) (2023-10-19)
15
+
16
+
17
+ ### Features
18
+
19
+ * add top nodes by memory table ([#562](https://github.com/ydb-platform/ydb-embedded-ui/issues/562)) ([0d4ccf2](https://github.com/ydb-platform/ydb-embedded-ui/commit/0d4ccf2a85251fadad66182ab7d6ccd54a58e6cf))
20
+ * add top tables links ([#564](https://github.com/ydb-platform/ydb-embedded-ui/issues/564)) ([e9b918f](https://github.com/ydb-platform/ydb-embedded-ui/commit/e9b918f0abace890cfafd9d7b219be5b69cac820))
21
+ * **Storage:** hide nodes table for node page ([#557](https://github.com/ydb-platform/ydb-embedded-ui/issues/557)) ([9a25a00](https://github.com/ydb-platform/ydb-embedded-ui/commit/9a25a002b28824f7e616ac8143dbde12de0b0fb7))
22
+ * **TenantOverview:** add cpu tab to tenant diagnostics ([#550](https://github.com/ydb-platform/ydb-embedded-ui/issues/550)) ([3048f84](https://github.com/ydb-platform/ydb-embedded-ui/commit/3048f8478d97249da4f7b66c26ed55f6f21e0f81))
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * add loader for healthcheck ([#563](https://github.com/ydb-platform/ydb-embedded-ui/issues/563)) ([6caea3d](https://github.com/ydb-platform/ydb-embedded-ui/commit/6caea3dec8f901090b0f8f7c1796880d7dc90a99))
28
+ * **LinkToSchemaObject:** fix schema link ([#566](https://github.com/ydb-platform/ydb-embedded-ui/issues/566)) ([6ca8a70](https://github.com/ydb-platform/ydb-embedded-ui/commit/6ca8a705b6ddacb1f845aabb7761fd22c0c3b4e0))
29
+
3
30
  ## [4.19.3](https://github.com/ydb-platform/ydb-embedded-ui/compare/v4.19.2...v4.19.3) (2023-10-13)
4
31
 
5
32
 
@@ -0,0 +1,13 @@
1
+ .ydb-cell-with-popover {
2
+ display: flex;
3
+
4
+ &__popover {
5
+ display: inline-block;
6
+ overflow: hidden;
7
+
8
+ max-width: 100%;
9
+
10
+ white-space: nowrap;
11
+ text-overflow: ellipsis;
12
+ }
13
+ }
@@ -0,0 +1,26 @@
1
+ import cn from 'bem-cn-lite';
2
+
3
+ import {Popover, type PopoverProps} from '@gravity-ui/uikit';
4
+
5
+ import './CellWithPopover.scss';
6
+
7
+ const b = cn('ydb-cell-with-popover');
8
+
9
+ interface CellWithPopoverProps extends PopoverProps {
10
+ wrapperClassName?: string;
11
+ }
12
+
13
+ export function CellWithPopover({
14
+ children,
15
+ className,
16
+ wrapperClassName,
17
+ ...props
18
+ }: CellWithPopoverProps) {
19
+ return (
20
+ <div className={b(null, wrapperClassName)}>
21
+ <Popover className={b('popover', className)} {...props}>
22
+ {children}
23
+ </Popover>
24
+ </div>
25
+ );
26
+ }
@@ -0,0 +1,20 @@
1
+ import type {Location} from 'history';
2
+
3
+ import {Link, type LinkProps} from '@gravity-ui/uikit';
4
+
5
+ import {createExternalUILink, parseQuery} from '../../routes';
6
+
7
+ interface LinkToSchemaObjectProps extends LinkProps {
8
+ path: string;
9
+ location: Location;
10
+ }
11
+
12
+ export function LinkToSchemaObject({path, location, ...props}: LinkToSchemaObjectProps) {
13
+ const queryParams = parseQuery(location);
14
+ const pathToSchemaObject = createExternalUILink({
15
+ ...queryParams,
16
+ schema: path,
17
+ });
18
+
19
+ return <Link view="normal" href={pathToSchemaObject} {...props} />;
20
+ }
@@ -1,6 +1,4 @@
1
1
  .ydb-node-host-wrapper {
2
- display: flex;
3
-
4
2
  &__host-wrapper {
5
3
  display: flex;
6
4
 
@@ -1,6 +1,6 @@
1
1
  import block from 'bem-cn-lite';
2
2
 
3
- import {Button, Popover, PopoverBehavior} from '@gravity-ui/uikit';
3
+ import {Button, PopoverBehavior} from '@gravity-ui/uikit';
4
4
 
5
5
  import type {NodesPreparedEntity} from '../../store/reducers/nodes/types';
6
6
  import type {NodeAddress} from '../../types/additionalProps';
@@ -10,6 +10,7 @@ import {isUnavailableNode} from '../../utils/nodes';
10
10
  import EntityStatus from '../EntityStatus/EntityStatus';
11
11
  import {NodeEndpointsTooltipContent} from '../TooltipsContent';
12
12
  import {IconWrapper} from '../Icon';
13
+ import {CellWithPopover} from '../CellWithPopover/CellWithPopover';
13
14
 
14
15
  import './NodeHostWrapper.scss';
15
16
 
@@ -34,33 +35,31 @@ export const NodeHostWrapper = ({node, getNodeRef}: NodeHostWrapperProps) => {
34
35
  : undefined;
35
36
 
36
37
  return (
37
- <div className={b()}>
38
- <Popover
39
- disabled={!isNodeAvailable}
40
- content={<NodeEndpointsTooltipContent data={node} />}
41
- placement={['top', 'bottom']}
42
- behavior={PopoverBehavior.Immediate}
43
- >
44
- <div className={b('host-wrapper')}>
45
- <EntityStatus
46
- name={node.Host}
47
- status={node.SystemState}
48
- path={nodePath}
49
- hasClipboardButton
50
- className={b('host')}
51
- />
52
- {nodeRef && (
53
- <Button
54
- size="s"
55
- href={nodeRef}
56
- className={b('external-button')}
57
- target="_blank"
58
- >
59
- <IconWrapper name="external" />
60
- </Button>
61
- )}
62
- </div>
63
- </Popover>
64
- </div>
38
+ <CellWithPopover
39
+ disabled={!isNodeAvailable}
40
+ content={<NodeEndpointsTooltipContent data={node} />}
41
+ placement={['top', 'bottom']}
42
+ behavior={PopoverBehavior.Immediate}
43
+ >
44
+ <div className={b('host-wrapper')}>
45
+ <EntityStatus
46
+ name={node.Host}
47
+ status={node.SystemState}
48
+ path={nodePath}
49
+ hasClipboardButton
50
+ className={b('host')}
51
+ />
52
+ {nodeRef && (
53
+ <Button
54
+ size="s"
55
+ href={nodeRef}
56
+ className={b('external-button')}
57
+ target="_blank"
58
+ >
59
+ <IconWrapper name="external" />
60
+ </Button>
61
+ )}
62
+ </div>
63
+ </CellWithPopover>
65
64
  );
66
65
  };
@@ -14,14 +14,15 @@ const b = cn('kv-query-execution-status');
14
14
 
15
15
  interface QueryExecutionStatusProps {
16
16
  className?: string;
17
- error?: AxiosError | Record<string, any>;
17
+ // TODO: Remove Record<string, any> when ECONNABORTED error case is fully typed
18
+ error?: AxiosError | Record<string, any> | string;
18
19
  }
19
20
 
20
21
  export const QueryExecutionStatus = ({className, error}: QueryExecutionStatusProps) => {
21
22
  let icon: ReactNode;
22
23
  let label: string;
23
24
 
24
- if (error?.code === 'ECONNABORTED') {
25
+ if (typeof error === 'object' && error?.code === 'ECONNABORTED') {
25
26
  icon = <UiKitIcon data={questionIcon} size={16} />;
26
27
  label = 'Connection aborted';
27
28
  } else {
@@ -14,4 +14,12 @@
14
14
  }
15
15
  }
16
16
  }
17
+
18
+ &__popover-content {
19
+ overflow: hidden;
20
+
21
+ max-width: 600px;
22
+
23
+ white-space: pre;
24
+ }
17
25
  }
@@ -1,11 +1,13 @@
1
1
  import cn from 'bem-cn-lite';
2
2
 
3
+ import {CellWithPopover} from '../CellWithPopover/CellWithPopover';
4
+
3
5
  import './TruncatedQuery.scss';
4
6
 
5
7
  const b = cn('kv-truncated-query');
6
8
 
7
9
  interface TruncatedQueryProps {
8
- value: string | undefined;
10
+ value?: string;
9
11
  maxQueryHeight?: number;
10
12
  }
11
13
 
@@ -26,3 +28,15 @@ export const TruncatedQuery = ({value = '', maxQueryHeight = 6}: TruncatedQueryP
26
28
  }
27
29
  return <>{value}</>;
28
30
  };
31
+
32
+ interface OneLineQueryWithPopoverProps {
33
+ value?: string;
34
+ }
35
+
36
+ export const OneLineQueryWithPopover = ({value = ''}: OneLineQueryWithPopoverProps) => {
37
+ return (
38
+ <CellWithPopover contentClassName={b('popover-content')} content={value}>
39
+ {value}
40
+ </CellWithPopover>
41
+ );
42
+ };
@@ -0,0 +1,6 @@
1
+ .ydb-usage-label {
2
+ &_overload {
3
+ color: var(--yc-color-text-light-primary);
4
+ background-color: var(--yc-color-base-danger-heavy);
5
+ }
6
+ }
@@ -0,0 +1,22 @@
1
+ import cn from 'bem-cn-lite';
2
+
3
+ import {Label, type LabelProps} from '@gravity-ui/uikit';
4
+
5
+ const b = cn('ydb-usage-label');
6
+
7
+ interface UsageLabelProps extends LabelProps {
8
+ value: number | string;
9
+ overloadThreshold?: number;
10
+ }
11
+
12
+ export function UsageLabel({value, overloadThreshold = 90, theme, ...props}: UsageLabelProps) {
13
+ return (
14
+ <Label
15
+ theme={theme}
16
+ className={b({overload: Number(value) >= overloadThreshold})}
17
+ {...props}
18
+ >
19
+ {value || 0}%
20
+ </Label>
21
+ );
22
+ }
@@ -28,6 +28,7 @@ import {ASIDE_HEADER_COMPACT_KEY, TENANT_INITIAL_PAGE_KEY} from '../../utils/con
28
28
  import {getTenantPath} from '../Tenant/TenantPages';
29
29
  import {UserSettings} from '../UserSettings/UserSettings';
30
30
 
31
+ import i18n from './i18n';
31
32
  import './AsideNavigation.scss';
32
33
 
33
34
  const b = cn('kv-navigation');
@@ -58,15 +59,19 @@ function YbdInternalUser({ydbUser, logout}: YbdInternalUserProps) {
58
59
  return (
59
60
  <div className={b('internal-user')}>
60
61
  <div className={b('user-info-wrapper')}>
61
- <div className={b('ydb-internal-user-title')}>YDB user</div>
62
+ <div className={b('ydb-internal-user-title')}>{i18n('account.user')}</div>
62
63
  {ydbUser && <div className={b('username')}>{ydbUser}</div>}
63
64
  </div>
64
65
  {ydbUser ? (
65
- <Button view="flat-secondary" onClick={logout} title="logout">
66
+ <Button view="flat-secondary" title={i18n('account.logout')} onClick={logout}>
66
67
  <Icon data={signOutIcon} size={16} />
67
68
  </Button>
68
69
  ) : (
69
- <Button view="flat-secondary" title="login" onClick={handleLoginClick}>
70
+ <Button
71
+ view="flat-secondary"
72
+ title={i18n('account.login')}
73
+ onClick={handleLoginClick}
74
+ >
70
75
  <Icon data={signInIcon} size={16} />
71
76
  </Button>
72
77
  )}
@@ -91,7 +96,7 @@ function YdbUserDropdown({isCompact, popupAnchor, ydbUser}: YdbUserDropdownProps
91
96
  compact={isCompact}
92
97
  item={{
93
98
  id: 'user-popup',
94
- title: ydbUser?.login ?? 'Account',
99
+ title: ydbUser?.login ?? i18n('navigation-item.account'),
95
100
  current: isUserDropdownVisible,
96
101
  icon: iconData,
97
102
  iconSize: 22,
@@ -142,7 +147,7 @@ export const useGetLeftNavigationItems = () => {
142
147
  const items: MenuItem[] = [
143
148
  {
144
149
  id: TENANT_PAGES_IDS.query,
145
- title: 'Query',
150
+ title: i18n('pages.query'),
146
151
  icon: terminalIcon,
147
152
  iconSize: 20,
148
153
  location: getTenantPath({
@@ -152,7 +157,7 @@ export const useGetLeftNavigationItems = () => {
152
157
  },
153
158
  {
154
159
  id: TENANT_PAGES_IDS.diagnostics,
155
- title: 'Diagnostics',
160
+ title: i18n('pages.diagnostics'),
156
161
  icon: pulseIcon,
157
162
  iconSize: 20,
158
163
  location: getTenantPath({
@@ -212,7 +217,7 @@ function AsideNavigation(props: AsideNavigationProps) {
212
217
  compact={compact}
213
218
  item={{
214
219
  id: 'documentation',
215
- title: 'Documentation',
220
+ title: i18n('navigation-item.documentation'),
216
221
  icon: supportIcon,
217
222
  iconSize: 24,
218
223
  onItemClick: () => {
@@ -224,7 +229,7 @@ function AsideNavigation(props: AsideNavigationProps) {
224
229
  <FooterItem
225
230
  item={{
226
231
  id: 'user-settings',
227
- title: 'Settings',
232
+ title: i18n('navigation-item.settings'),
228
233
  icon: settingsIcon,
229
234
  iconSize: 24,
230
235
  current: visiblePanel === Panel.UserSettings,
@@ -0,0 +1,13 @@
1
+ {
2
+ "pages.query": "Query",
3
+ "pages.diagnostics": "Diagnostics",
4
+
5
+ "navigation-item.documentation": "Documentation",
6
+ "navigation-item.settings": "Settings",
7
+ "navigation-item.account": "Account",
8
+
9
+ "account.user": "YDB User",
10
+
11
+ "account.login": "Login",
12
+ "account.logout": "Logout"
13
+ }
@@ -0,0 +1,11 @@
1
+ import {i18n, Lang} from '../../../utils/i18n';
2
+
3
+ import en from './en.json';
4
+ import ru from './ru.json';
5
+
6
+ const COMPONENT = 'ydb-aside-navigation';
7
+
8
+ i18n.registerKeyset(Lang.En, COMPONENT, en);
9
+ i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
10
+
11
+ export default i18n.keyset(COMPONENT);
@@ -0,0 +1,13 @@
1
+ {
2
+ "pages.query": "Редактор запросов",
3
+ "pages.diagnostics": "Диагностика",
4
+
5
+ "navigation-item.documentation": "Документация",
6
+ "navigation-item.settings": "Настройки",
7
+ "navigation-item.account": "Аккаунт",
8
+
9
+ "account.user": "Пользователь YDB",
10
+
11
+ "account.login": "Войти",
12
+ "account.logout": "Выйти"
13
+ }