ydb-embedded-ui 6.2.2 → 6.4.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +38 -16
- package/dist/assets/icons/disableFullscreen.svg +4 -0
- package/dist/assets/icons/emptyState.svg +13 -0
- package/dist/assets/icons/key.svg +6 -0
- package/dist/assets/icons/monitoring.svg +9 -0
- package/dist/assets/icons/network.svg +21 -0
- package/dist/components/BasicNodeViewer/BasicNodeViewer.js +11 -5
- package/dist/components/CriticalActionDialog/CriticalActionDialog.js +3 -4
- package/dist/components/CriticalActionDialog/CriticalActionDialog.scss +2 -0
- package/dist/components/EmptyState/EmptyState.js +3 -2
- package/dist/components/EnableFullscreenButton/EnableFullscreenButton.js +3 -3
- package/dist/components/Fullscreen/Fullscreen.js +3 -3
- package/dist/components/MonitoringButton/MonitoringButton.js +3 -3
- package/dist/components/NodeHostWrapper/NodeHostWrapper.js +3 -3
- package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/QueryExecutionStatus/QueryExecutionStatus.js +4 -5
- package/dist/components/StatusIcon/StatusIcon.js +5 -7
- package/dist/containers/App/App.js +1 -2
- package/dist/containers/AsideNavigation/AsideNavigation.js +4 -9
- package/dist/containers/AsideNavigation/YdbInternalUser/YdbInternalUser.js +2 -3
- package/dist/containers/AsideNavigation/useNavigationMenuItems.js +5 -6
- package/dist/containers/Authentication/Authentication.js +2 -4
- package/dist/containers/Node/NodeStructure/Pdisk.js +4 -4
- package/dist/containers/Nodes/Nodes.js +19 -15
- package/dist/containers/Nodes/VirtualNodes.js +23 -6
- package/dist/containers/PDiskPage/PDiskPage.js +2 -2
- package/dist/containers/PDiskPage/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/Storage.js +50 -22
- package/dist/containers/Storage/StorageGroups/getStorageGroupsColumns.js +2 -2
- package/dist/containers/Storage/VirtualStorage.js +32 -10
- package/dist/containers/Storage/utils/index.d.ts +4 -1
- package/dist/containers/Storage/utils/index.js +29 -0
- package/dist/containers/Tablet/Tablet.js +3 -3
- package/dist/containers/Tablet/i18n/index.d.ts +1 -1
- package/dist/containers/Tablets/Tablets.d.ts +1 -2
- package/dist/containers/Tablets/Tablets.js +112 -53
- package/dist/containers/Tablets/i18n/en.json +9 -4
- package/dist/containers/Tablets/i18n/index.d.ts +1 -1
- package/dist/containers/Tablets/i18n/index.js +1 -2
- package/dist/containers/Tenant/Diagnostics/Diagnostics.js +5 -5
- package/dist/containers/Tenant/Diagnostics/DiagnosticsPages.d.ts +7 -0
- package/dist/containers/Tenant/Diagnostics/DiagnosticsPages.js +2 -0
- package/dist/containers/Tenant/Diagnostics/HotKeys/HotKeys.js +3 -2
- package/dist/containers/Tenant/Diagnostics/Network/Network.js +3 -3
- package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +1 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.js +2 -2
- package/dist/containers/Tenant/ObjectGeneral/ObjectGeneral.js +2 -8
- package/dist/containers/Tenant/ObjectSummary/ObjectSummary.js +10 -7
- package/dist/containers/Tenant/Query/ExplainResult/ExplainResult.js +1 -1
- package/dist/containers/Tenant/Query/Issues/Issues.js +6 -9
- package/dist/containers/Tenant/Query/Preview/Preview.js +5 -5
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.d.ts +1 -1
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js +4 -4
- package/dist/containers/Tenant/Query/SavedQueries/SavedQueries.js +3 -3
- package/dist/containers/Tenant/Schema/SchemaViewer/helpers.js +7 -6
- package/dist/containers/Tenant/i18n/en.json +2 -1
- package/dist/containers/Tenant/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/i18n/index.js +1 -2
- package/dist/containers/Tenant/utils/ToggleButton.scss +0 -2
- package/dist/containers/Tenant/utils/paneVisibilityToggleHelpers.js +4 -4
- package/dist/containers/Tenant/utils/queryTemplates.d.ts +2 -0
- package/dist/containers/Tenant/utils/queryTemplates.js +6 -0
- package/dist/containers/Tenant/utils/schema.d.ts +4 -3
- package/dist/containers/Tenant/utils/schema.js +12 -3
- package/dist/containers/Tenant/utils/schemaActions.js +10 -1
- package/dist/containers/Tenant/utils/schemaControls.js +4 -3
- package/dist/containers/VDiskPage/VDiskPage.js +2 -2
- package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/services/settings.d.ts +18 -1
- package/dist/store/configureStore.d.ts +0 -8
- package/dist/store/defaultStore.d.ts +0 -4
- package/dist/store/reducers/authentication/authentication.d.ts +0 -6
- package/dist/store/reducers/executeQuery.d.ts +0 -2
- package/dist/store/reducers/explainQuery.d.ts +0 -4
- package/dist/store/reducers/healthcheckInfo/healthcheckInfo.d.ts +0 -40
- package/dist/store/reducers/host.d.ts +0 -2
- package/dist/store/reducers/index.d.ts +0 -6
- package/dist/store/reducers/index.js +0 -4
- package/dist/store/reducers/node/selectors.d.ts +0 -2
- package/dist/store/reducers/nodes/nodes.d.ts +1 -5
- package/dist/store/reducers/nodes/nodes.js +0 -27
- package/dist/store/reducers/nodes/types.d.ts +4 -13
- package/dist/store/reducers/nodesList.d.ts +0 -2
- package/dist/store/reducers/schema/schema.d.ts +0 -2
- package/dist/store/reducers/schemaAcl/schemaAcl.d.ts +0 -2
- package/dist/store/reducers/storage/selectors.d.ts +2 -17
- package/dist/store/reducers/storage/selectors.js +1 -36
- package/dist/store/reducers/storage/storage.d.ts +2 -6
- package/dist/store/reducers/storage/storage.js +0 -44
- package/dist/store/reducers/storage/types.d.ts +15 -22
- package/dist/store/reducers/storage/types.js +4 -1
- package/dist/store/reducers/tablets.d.ts +92 -1
- package/dist/store/reducers/tablets.js +16 -1
- package/dist/store/reducers/tabletsFilters.d.ts +0 -2
- package/dist/store/reducers/tenant/tenant.d.ts +2 -2
- package/dist/store/reducers/tenant/tenant.js +10 -1
- package/dist/store/reducers/tenant/types.d.ts +8 -3
- package/dist/store/reducers/tenant/types.js +3 -1
- package/dist/store/reducers/tenants/selectors.d.ts +0 -18
- package/dist/store/reducers/tenants/utils.d.ts +4 -4
- package/dist/store/reducers/tenants/utils.js +8 -8
- package/dist/store/reducers/topic.d.ts +0 -30
- package/dist/store/state-url-mapping.js +0 -22
- package/dist/types/api/schema/schema.d.ts +4 -1
- package/dist/types/api/schema/schema.js +1 -0
- package/dist/types/api/schema/view.d.ts +8 -0
- package/dist/types/api/schema/view.js +1 -0
- package/dist/utils/nodes.d.ts +2 -0
- package/dist/utils/nodes.js +4 -0
- package/dist/utils/tablet.d.ts +2 -0
- package/dist/utils/tablet.js +14 -0
- package/package.json +4 -3
- package/dist/assets/icons/bug.svg +0 -1
- package/dist/assets/icons/circle-exclamation.svg +0 -1
- package/dist/assets/icons/circle-info.svg +0 -1
- package/dist/assets/icons/circle-xmark.svg +0 -1
- package/dist/assets/icons/close.svg +0 -1
- package/dist/assets/icons/control-menu-button.svg +0 -1
- package/dist/assets/icons/dots.svg +0 -1
- package/dist/assets/icons/hide.svg +0 -1
- package/dist/assets/icons/question.svg +0 -1
- package/dist/assets/icons/server.svg +0 -1
- package/dist/assets/icons/settings-with-dot.svg +0 -1
- package/dist/assets/icons/settings.svg +0 -1
- package/dist/assets/icons/shield.svg +0 -3
- package/dist/assets/icons/show.svg +0 -1
- package/dist/assets/icons/signIn.svg +0 -1
- package/dist/assets/icons/signOut.svg +0 -1
- package/dist/assets/icons/storage.svg +0 -1
- package/dist/assets/icons/support.svg +0 -1
- package/dist/assets/icons/triangle-exclamation.svg +0 -1
- package/dist/assets/icons/update-arrow.svg +0 -6
- package/dist/components/Icon/Icon.d.ts +0 -14
- package/dist/components/Icon/Icon.js +0 -16
- package/dist/components/Icon/index.d.ts +0 -1
- package/dist/components/Icon/index.js +0 -1
- package/dist/containers/AppIcons/AppIcons.d.ts +0 -2
- package/dist/containers/AppIcons/AppIcons.js +0 -9
- package/dist/containers/Tablets/Tablets.scss +0 -35
- package/dist/containers/Tablets/i18n/ru.json +0 -6
- package/dist/containers/Tenant/i18n/ru.json +0 -22
@@ -1,8 +1,9 @@
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
2
2
|
import DataTable from '@gravity-ui/react-data-table';
|
3
|
-
import { Icon } from '
|
3
|
+
import { Icon } from '@gravity-ui/uikit';
|
4
4
|
import { EColumnCodec } from '../../../../types/api/schema';
|
5
|
-
import { isColumnEntityType,
|
5
|
+
import { isColumnEntityType, isExternalTableType, isRowTableType, isTableType, } from '../../utils/schema';
|
6
|
+
import keyIcon from '../../../../assets/icons/key.svg';
|
6
7
|
export const SchemaViewerColumns = {
|
7
8
|
id: 'Id',
|
8
9
|
name: 'Name',
|
@@ -51,7 +52,7 @@ export function prepareColumnDescriptions(type, scheme) {
|
|
51
52
|
keyColumnIds = (_b = columnTableSchema.KeyColumnIds) !== null && _b !== void 0 ? _b : [];
|
52
53
|
columns = (_c = columnTableSchema.Columns) !== null && _c !== void 0 ? _c : [];
|
53
54
|
}
|
54
|
-
else if (
|
55
|
+
else if (isExternalTableType(type)) {
|
55
56
|
columns = (_f = (_e = (_d = scheme === null || scheme === void 0 ? void 0 : scheme.PathDescription) === null || _d === void 0 ? void 0 : _d.ExternalTableDescription) === null || _e === void 0 ? void 0 : _e.Columns) !== null && _f !== void 0 ? _f : [];
|
56
57
|
}
|
57
58
|
else {
|
@@ -83,7 +84,7 @@ export function prepareSchemaTableColumns(options) {
|
|
83
84
|
width: 60,
|
84
85
|
},
|
85
86
|
];
|
86
|
-
if (!
|
87
|
+
if (!isExternalTableType(options.type)) {
|
87
88
|
// External tables don't have key columns
|
88
89
|
columns.push({
|
89
90
|
name: SchemaViewerColumns.key,
|
@@ -94,7 +95,7 @@ export function prepareSchemaTableColumns(options) {
|
|
94
95
|
// Values in keyColumnsOrderValues are always negative, so it will be 1 for not key columns
|
95
96
|
sortAccessor: (row) => (row.Id && keyColumnsOrderValues[row.Id]) || 1,
|
96
97
|
render: ({ row }) => {
|
97
|
-
return row.Id && options.keyColumnIds.includes(row.Id) ? (_jsx("div", { className: options.b('key-icon'), children: _jsx(Icon, {
|
98
|
+
return row.Id && options.keyColumnIds.includes(row.Id) ? (_jsx("div", { className: options.b('key-icon'), children: _jsx(Icon, { data: keyIcon, width: 12, height: 7 }) })) : null;
|
98
99
|
},
|
99
100
|
});
|
100
101
|
}
|
@@ -116,7 +117,7 @@ export function prepareSchemaTableColumns(options) {
|
|
116
117
|
return undefined;
|
117
118
|
},
|
118
119
|
});
|
119
|
-
if (options.withFamilies &&
|
120
|
+
if (options.withFamilies && isRowTableType(options.type)) {
|
120
121
|
columns.push({
|
121
122
|
name: SchemaViewerColumns.familyName,
|
122
123
|
width: 100,
|
@@ -7,14 +7,15 @@
|
|
7
7
|
"summary.copySchemaPath": "Copy schema path",
|
8
8
|
"actions.copied": "The path is copied to the clipboard",
|
9
9
|
"actions.notCopied": "Couldn’t copy the path",
|
10
|
-
"actions.externalTableSelectUnavailable": "Select query for external tables available only with 'YQL - QueryService' query mode. You need to turn in additional query modes in settings to enable it",
|
11
10
|
"actions.copyPath": "Copy path",
|
12
11
|
"actions.openPreview": "Open preview",
|
13
12
|
"actions.createTable": "Create table...",
|
14
13
|
"actions.createExternalTable": "Create external table...",
|
15
14
|
"actions.createTopic": "Create topic...",
|
15
|
+
"actions.createView": "Create view...",
|
16
16
|
"actions.dropTable": "Drop table...",
|
17
17
|
"actions.dropTopic": "Drop topic...",
|
18
|
+
"actions.dropView": "Drop view...",
|
18
19
|
"actions.alterTable": "Alter table...",
|
19
20
|
"actions.alterTopic": "Alter topic...",
|
20
21
|
"actions.selectQuery": "Select query...",
|
@@ -1,2 +1,2 @@
|
|
1
|
-
declare const _default: (key: "page.title" | "acl.owner" | "acl.empty" | "summary.navigation" | "summary.showPreview" | "summary.copySchemaPath" | "actions.copied" | "actions.notCopied" | "actions.
|
1
|
+
declare const _default: (key: "page.title" | "acl.owner" | "acl.empty" | "summary.navigation" | "summary.showPreview" | "summary.copySchemaPath" | "actions.copied" | "actions.notCopied" | "actions.copyPath" | "actions.openPreview" | "actions.createTable" | "actions.createExternalTable" | "actions.createTopic" | "actions.createView" | "actions.dropTable" | "actions.dropTopic" | "actions.dropView" | "actions.alterTable" | "actions.alterTopic" | "actions.selectQuery" | "actions.upsertQuery", params?: import("@gravity-ui/i18n").Params | undefined) => string;
|
2
2
|
export default _default;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import React from 'react';
|
3
|
-
import {
|
4
|
-
import { Icon } from '
|
3
|
+
import { ChevronsUp } from '@gravity-ui/icons';
|
4
|
+
import { Button, Icon } from '@gravity-ui/uikit';
|
5
5
|
import { cn } from '../../../utils/cn';
|
6
6
|
import './ToggleButton.scss';
|
7
7
|
export var PaneVisibilityActionTypes;
|
@@ -44,7 +44,7 @@ const b = cn('kv-pane-visibility-button');
|
|
44
44
|
export function PaneVisibilityToggleButtons({ onCollapse, onExpand, isCollapsed, initialDirection = 'top', className, }) {
|
45
45
|
return (_jsxs(React.Fragment, { children: [_jsx(Button, { view: "flat-secondary", onClick: onCollapse, className: b({
|
46
46
|
hidden: isCollapsed,
|
47
|
-
}, className), title: "Collapse", children: _jsx(Icon, {
|
47
|
+
}, className), title: "Collapse", children: _jsx(Icon, { data: ChevronsUp, className: b({ [initialDirection]: true }) }) }), _jsx(Button, { view: "flat-secondary", onClick: onExpand, className: b({
|
48
48
|
hidden: !isCollapsed,
|
49
|
-
}, className), title: "Expand", children: _jsx(Icon, {
|
49
|
+
}, className), title: "Expand", children: _jsx(Icon, { data: ChevronsUp, className: b({ [initialDirection]: true }, 'rotate') }) })] }));
|
50
50
|
}
|
@@ -7,3 +7,5 @@ export declare const createExternalTableTemplate: (path: string) => string;
|
|
7
7
|
export declare const createTopicTemplate: (path: string) => string;
|
8
8
|
export declare const alterTopicTemplate: (path: string) => string;
|
9
9
|
export declare const dropTopicTemplate: (path: string) => string;
|
10
|
+
export declare const createViewTemplate: (path: string) => string;
|
11
|
+
export declare const dropViewTemplate: (path: string) => string;
|
@@ -105,3 +105,9 @@ ALTER TOPIC \`${path}\`
|
|
105
105
|
export const dropTopicTemplate = (path) => {
|
106
106
|
return `DROP TOPIC \`${path}\`;`;
|
107
107
|
};
|
108
|
+
export const createViewTemplate = (path) => {
|
109
|
+
return `CREATE VIEW \`${path}/my_view\` WITH (security_invoker = TRUE) AS SELECT 1;`;
|
110
|
+
};
|
111
|
+
export const dropViewTemplate = (path) => {
|
112
|
+
return `DROP VIEW \`${path}\`;`;
|
113
|
+
};
|
@@ -5,12 +5,13 @@ export declare const mapPathTypeToNavigationTreeType: (type?: EPathType, subType
|
|
5
5
|
export declare const mapPathTypeToEntityName: (type?: EPathType, subType?: EPathSubType) => string | undefined;
|
6
6
|
export declare const mapDatabaseTypeToDBName: (type?: ETenantType) => string | undefined;
|
7
7
|
export declare const isTableType: (pathType?: EPathType) => boolean;
|
8
|
-
export declare const
|
8
|
+
export declare const isIndexTableType: (subType?: EPathSubType) => boolean;
|
9
9
|
export declare const isColumnEntityType: (type?: EPathType) => boolean;
|
10
10
|
export declare const isDatabaseEntityType: (type?: EPathType) => boolean;
|
11
11
|
export declare const isCdcStreamEntityType: (type?: EPathType) => boolean;
|
12
12
|
export declare const isEntityWithMergedImplementation: (type?: EPathType) => boolean;
|
13
13
|
export declare const isChildlessPathType: (type?: EPathType, subType?: EPathSubType) => boolean;
|
14
14
|
export declare const isPathTypeWithTopic: (type?: EPathType) => boolean;
|
15
|
-
export declare const
|
16
|
-
export declare const
|
15
|
+
export declare const isExternalTableType: (type?: EPathType) => boolean;
|
16
|
+
export declare const isRowTableType: (type?: EPathType) => boolean;
|
17
|
+
export declare const isViewType: (type?: EPathType) => boolean;
|
@@ -22,6 +22,7 @@ const pathTypeToNodeType = {
|
|
22
22
|
[EPathType.EPathTypePersQueueGroup]: 'topic',
|
23
23
|
[EPathType.EPathTypeExternalDataSource]: 'external_data_source',
|
24
24
|
[EPathType.EPathTypeExternalTable]: 'external_table',
|
25
|
+
[EPathType.EPathTypeView]: 'view',
|
25
26
|
};
|
26
27
|
export const mapPathTypeToNavigationTreeType = (type = EPathType.EPathTypeDir, subType, defaultType = 'directory') => (subType && pathSubTypeToNodeType[subType]) || pathTypeToNodeType[type] || defaultType;
|
27
28
|
// ====================
|
@@ -44,6 +45,7 @@ const pathTypeToEntityName = {
|
|
44
45
|
[EPathType.EPathTypePersQueueGroup]: 'Topic',
|
45
46
|
[EPathType.EPathTypeExternalDataSource]: 'External Data Source',
|
46
47
|
[EPathType.EPathTypeExternalTable]: 'External Table',
|
48
|
+
[EPathType.EPathTypeView]: 'View',
|
47
49
|
};
|
48
50
|
export const mapPathTypeToEntityName = (type, subType) => (subType && pathSubTypeToEntityName[subType]) || (type && pathTypeToEntityName[type]);
|
49
51
|
// ====================
|
@@ -60,6 +62,7 @@ const pathTypeToIsTable = {
|
|
60
62
|
[EPathType.EPathTypeTable]: true,
|
61
63
|
[EPathType.EPathTypeColumnTable]: true,
|
62
64
|
[EPathType.EPathTypeExternalTable]: true,
|
65
|
+
[EPathType.EPathTypeView]: true,
|
63
66
|
[EPathType.EPathTypeInvalid]: false,
|
64
67
|
[EPathType.EPathTypeDir]: false,
|
65
68
|
[EPathType.EPathTypeSubDomain]: false,
|
@@ -78,7 +81,7 @@ const pathSubTypeToIsIndexImpl = {
|
|
78
81
|
[EPathSubType.EPathSubTypeStreamImpl]: false,
|
79
82
|
[EPathSubType.EPathSubTypeEmpty]: false,
|
80
83
|
};
|
81
|
-
export const
|
84
|
+
export const isIndexTableType = (subType) => { var _a; return (_a = (subType && pathSubTypeToIsIndexImpl[subType])) !== null && _a !== void 0 ? _a : false; };
|
82
85
|
// ====================
|
83
86
|
const pathTypeToIsColumn = {
|
84
87
|
[EPathType.EPathTypeColumnStore]: true,
|
@@ -93,6 +96,7 @@ const pathTypeToIsColumn = {
|
|
93
96
|
[EPathType.EPathTypePersQueueGroup]: false,
|
94
97
|
[EPathType.EPathTypeExternalDataSource]: false,
|
95
98
|
[EPathType.EPathTypeExternalTable]: false,
|
99
|
+
[EPathType.EPathTypeView]: false,
|
96
100
|
};
|
97
101
|
export const isColumnEntityType = (type) => { var _a; return (_a = (type && pathTypeToIsColumn[type])) !== null && _a !== void 0 ? _a : false; };
|
98
102
|
// ====================
|
@@ -109,6 +113,7 @@ const pathTypeToIsDatabase = {
|
|
109
113
|
[EPathType.EPathTypePersQueueGroup]: false,
|
110
114
|
[EPathType.EPathTypeExternalDataSource]: false,
|
111
115
|
[EPathType.EPathTypeExternalTable]: false,
|
116
|
+
[EPathType.EPathTypeView]: false,
|
112
117
|
};
|
113
118
|
export const isDatabaseEntityType = (type) => { var _a; return (_a = (type && pathTypeToIsDatabase[type])) !== null && _a !== void 0 ? _a : false; };
|
114
119
|
// ====================
|
@@ -127,6 +132,7 @@ const pathTypeToEntityWithMergedImplementation = {
|
|
127
132
|
[EPathType.EPathTypeExtSubDomain]: false,
|
128
133
|
[EPathType.EPathTypeExternalDataSource]: false,
|
129
134
|
[EPathType.EPathTypeExternalTable]: false,
|
135
|
+
[EPathType.EPathTypeView]: false,
|
130
136
|
};
|
131
137
|
export const isEntityWithMergedImplementation = (type) => { var _a; return (_a = (type && pathTypeToEntityWithMergedImplementation[type])) !== null && _a !== void 0 ? _a : false; };
|
132
138
|
// ====================
|
@@ -141,6 +147,7 @@ const pathTypeToChildless = {
|
|
141
147
|
[EPathType.EPathTypePersQueueGroup]: true,
|
142
148
|
[EPathType.EPathTypeExternalDataSource]: true,
|
143
149
|
[EPathType.EPathTypeExternalTable]: true,
|
150
|
+
[EPathType.EPathTypeView]: true,
|
144
151
|
[EPathType.EPathTypeInvalid]: false,
|
145
152
|
[EPathType.EPathTypeColumnStore]: false,
|
146
153
|
[EPathType.EPathTypeColumnTable]: false,
|
@@ -165,8 +172,10 @@ const mapPathTypeToIsWithTopic = {
|
|
165
172
|
[EPathType.EPathTypeExtSubDomain]: false,
|
166
173
|
[EPathType.EPathTypeExternalDataSource]: false,
|
167
174
|
[EPathType.EPathTypeExternalTable]: false,
|
175
|
+
[EPathType.EPathTypeView]: false,
|
168
176
|
};
|
169
177
|
export const isPathTypeWithTopic = (type) => { var _a; return (_a = (type && mapPathTypeToIsWithTopic[type])) !== null && _a !== void 0 ? _a : false; };
|
170
178
|
// ====================
|
171
|
-
export const
|
172
|
-
export const
|
179
|
+
export const isExternalTableType = (type) => type === EPathType.EPathTypeExternalTable;
|
180
|
+
export const isRowTableType = (type) => type === EPathType.EPathTypeTable;
|
181
|
+
export const isViewType = (type) => type === EPathType.EPathTypeView;
|
@@ -4,7 +4,7 @@ import { TENANT_PAGES_IDS, TENANT_QUERY_TABS_ID } from '../../../store/reducers/
|
|
4
4
|
import { setQueryTab, setTenantPage } from '../../../store/reducers/tenant/tenant';
|
5
5
|
import createToast from '../../../utils/createToast';
|
6
6
|
import i18n from '../i18n';
|
7
|
-
import { alterTableTemplate, alterTopicTemplate, createExternalTableTemplate, createTableTemplate, createTopicTemplate, dropExternalTableTemplate, dropTopicTemplate, selectQueryTemplate, upsertQueryTemplate, } from './queryTemplates';
|
7
|
+
import { alterTableTemplate, alterTopicTemplate, createExternalTableTemplate, createTableTemplate, createTopicTemplate, createViewTemplate, dropExternalTableTemplate, dropTopicTemplate, dropViewTemplate, selectQueryTemplate, upsertQueryTemplate, } from './queryTemplates';
|
8
8
|
const bindActions = (path, dispatch, additionalEffects) => {
|
9
9
|
const { setActivePath, setQueryMode } = additionalEffects;
|
10
10
|
const inputQuery = (tmpl, mode) => () => {
|
@@ -27,6 +27,8 @@ const bindActions = (path, dispatch, additionalEffects) => {
|
|
27
27
|
createTopic: inputQuery(createTopicTemplate, 'script'),
|
28
28
|
alterTopic: inputQuery(alterTopicTemplate, 'script'),
|
29
29
|
dropTopic: inputQuery(dropTopicTemplate, 'script'),
|
30
|
+
createView: inputQuery(createViewTemplate, 'script'),
|
31
|
+
dropView: inputQuery(dropViewTemplate, 'script'),
|
30
32
|
copyPath: () => {
|
31
33
|
try {
|
32
34
|
copy(path);
|
@@ -54,6 +56,7 @@ export const getActions = (dispatch, additionalEffects) => (path, type) => {
|
|
54
56
|
[
|
55
57
|
{ text: i18n('actions.createTable'), action: actions.createTable },
|
56
58
|
{ text: i18n('actions.createTopic'), action: actions.createTopic },
|
59
|
+
{ text: i18n('actions.createView'), action: actions.createView },
|
57
60
|
],
|
58
61
|
];
|
59
62
|
const TABLE_SET = [
|
@@ -85,6 +88,11 @@ export const getActions = (dispatch, additionalEffects) => (path, type) => {
|
|
85
88
|
[copyItem],
|
86
89
|
[{ text: i18n('actions.createExternalTable'), action: actions.createExternalTable }],
|
87
90
|
];
|
91
|
+
const VIEW_SET = [
|
92
|
+
[copyItem],
|
93
|
+
[{ text: i18n('actions.selectQuery'), action: actions.selectQuery }],
|
94
|
+
[{ text: i18n('actions.dropView'), action: actions.dropView }],
|
95
|
+
];
|
88
96
|
const JUST_COPY = [copyItem];
|
89
97
|
// verbose mapping to guarantee a correct actions set for new node types
|
90
98
|
// TS will error when a new type is added in the lib but is not mapped here
|
@@ -99,6 +107,7 @@ export const getActions = (dispatch, additionalEffects) => (path, type) => {
|
|
99
107
|
index: JUST_COPY,
|
100
108
|
external_table: EXTERNAL_TABLE_SET,
|
101
109
|
external_data_source: EXTERNAL_DATA_SOURCE_SET,
|
110
|
+
view: VIEW_SET,
|
102
111
|
};
|
103
112
|
return nodeTypeToActions[type];
|
104
113
|
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
-
import {
|
3
|
-
import { Icon } from '
|
2
|
+
import { LayoutHeaderCellsLargeFill } from '@gravity-ui/icons';
|
3
|
+
import { Button, Icon } from '@gravity-ui/uikit';
|
4
4
|
import { setShowPreview } from '../../../store/reducers/schema/schema';
|
5
5
|
import { TENANT_PAGES_IDS, TENANT_QUERY_TABS_ID } from '../../../store/reducers/tenant/constants';
|
6
6
|
import { setQueryTab, setTenantPage } from '../../../store/reducers/tenant/tenant';
|
@@ -18,7 +18,7 @@ const bindActions = (path, dispatch, additionalEffects) => {
|
|
18
18
|
};
|
19
19
|
export const getControls = (dispatch, additionalEffects) => (path, type) => {
|
20
20
|
const options = bindActions(path, dispatch, additionalEffects);
|
21
|
-
const openPreview = (_jsx(Button, { view: "flat-secondary", onClick: options.openPreview, title: i18n('actions.openPreview'), size: "s", children: _jsx(Icon, {
|
21
|
+
const openPreview = (_jsx(Button, { view: "flat-secondary", onClick: options.openPreview, title: i18n('actions.openPreview'), size: "s", children: _jsx(Icon, { data: LayoutHeaderCellsLargeFill }) }));
|
22
22
|
const nodeTypeToControls = {
|
23
23
|
database: undefined,
|
24
24
|
directory: undefined,
|
@@ -30,6 +30,7 @@ export const getControls = (dispatch, additionalEffects) => (path, type) => {
|
|
30
30
|
index: undefined,
|
31
31
|
external_table: openPreview,
|
32
32
|
external_data_source: undefined,
|
33
|
+
view: openPreview,
|
33
34
|
};
|
34
35
|
return nodeTypeToControls[type];
|
35
36
|
};
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import React from 'react';
|
3
|
+
import { ArrowsOppositeToDots } from '@gravity-ui/icons';
|
3
4
|
import { Icon } from '@gravity-ui/uikit';
|
4
5
|
import { skipToken } from '@reduxjs/toolkit/query';
|
5
6
|
import { Helmet } from 'react-helmet-async';
|
@@ -21,7 +22,6 @@ import { stringifyVdiskId } from '../../utils/dataFormatters/dataFormatters';
|
|
21
22
|
import { getSeverityColor } from '../../utils/disks/helpers';
|
22
23
|
import { useTypedDispatch, useTypedSelector } from '../../utils/hooks';
|
23
24
|
import { vDiskPageKeyset } from './i18n';
|
24
|
-
import ArrowsOppositeToDotsIcon from '@gravity-ui/icons/svgs/arrows-opposite-to-dots.svg';
|
25
25
|
import './VDiskPage.scss';
|
26
26
|
const vDiskPageCn = cn('ydb-vdisk-page');
|
27
27
|
export function VDiskPage() {
|
@@ -84,7 +84,7 @@ export function VDiskPage() {
|
|
84
84
|
return (_jsx(DiskPageTitle, { entityName: vDiskPageKeyset('vdisk'), status: getSeverityColor(Severity), id: stringifyVdiskId(vDiskData === null || vDiskData === void 0 ? void 0 : vDiskData.VDiskId) }));
|
85
85
|
};
|
86
86
|
const renderControls = () => {
|
87
|
-
return (_jsx("div", { children: _jsxs(ButtonWithConfirmDialog, { onConfirmAction: handleEvictVDisk, onConfirmActionSuccess: handleAfterEvictVDisk, buttonDisabled: !VDiskId, buttonView: "normal", dialogContent: vDiskPageKeyset('evict-vdisk-dialog'), children: [_jsx(Icon, { data:
|
87
|
+
return (_jsx("div", { children: _jsxs(ButtonWithConfirmDialog, { onConfirmAction: handleEvictVDisk, onConfirmActionSuccess: handleAfterEvictVDisk, buttonDisabled: !VDiskId, buttonView: "normal", dialogContent: vDiskPageKeyset('evict-vdisk-dialog'), children: [_jsx(Icon, { data: ArrowsOppositeToDots }), vDiskPageKeyset('evict-vdisk-button')] }) }));
|
88
88
|
};
|
89
89
|
const renderInfo = () => {
|
90
90
|
return _jsx(VDiskInfo, { data: vDiskData, isVDiskPage: true });
|
@@ -1 +1 @@
|
|
1
|
-
export declare const vDiskPageKeyset: (key: "node" | "
|
1
|
+
export declare const vDiskPageKeyset: (key: "node" | "fqdn" | "group" | "pdisk" | "vdisk" | "evict-vdisk-button" | "evict-vdisk-dialog", params?: import("@gravity-ui/i18n").Params | undefined) => string;
|
package/dist/routes.d.ts
CHANGED
@@ -20,7 +20,7 @@ declare const routes: {
|
|
20
20
|
};
|
21
21
|
export default routes;
|
22
22
|
export declare const parseQuery: (location: Location) => qs.ParsedQs;
|
23
|
-
export type Query = Record<string | number, string | number | string[] | number[] | undefined>;
|
23
|
+
export type Query = Record<string | number, string | number | string[] | number[] | undefined | null>;
|
24
24
|
export declare function createHref(route: string, params?: Record<string, string | number>, query?: Query): string;
|
25
25
|
export declare const createExternalUILink: (query?: {}) => string;
|
26
26
|
export declare function getLocationObjectFromHref(href: string): {
|
@@ -1,6 +1,23 @@
|
|
1
1
|
export type SettingsObject = Record<string, unknown>;
|
2
2
|
/** User settings keys and their default values */
|
3
|
-
export declare const DEFAULT_USER_SETTINGS:
|
3
|
+
export declare const DEFAULT_USER_SETTINGS: {
|
4
|
+
readonly theme: "system";
|
5
|
+
readonly language: undefined;
|
6
|
+
readonly invertedDisks: false;
|
7
|
+
readonly useNodesEndpointInDiagnostics: false;
|
8
|
+
readonly queryUseMultiSchema: false;
|
9
|
+
readonly binaryDataInPlainTextDisplay: true;
|
10
|
+
readonly saved_queries: readonly [];
|
11
|
+
readonly saved_tenant_initial_tab: "query";
|
12
|
+
readonly query_initial_mode: "script";
|
13
|
+
readonly last_used_query_action: "execute";
|
14
|
+
readonly asideHeaderCompact: true;
|
15
|
+
readonly partitionsHiddenColumns: readonly [];
|
16
|
+
readonly useBackendParamsForTables: false;
|
17
|
+
readonly useClusterBalancerAsBacked: true;
|
18
|
+
readonly enableAutocomplete: false;
|
19
|
+
readonly autocompleteOnEnter: true;
|
20
|
+
};
|
4
21
|
declare class SettingsManager {
|
5
22
|
/**
|
6
23
|
* Returns parsed settings value.
|
@@ -8,10 +8,8 @@ export declare function configureStore({ aRootReducer, singleClusterMode, api, }
|
|
8
8
|
aRootReducer?: Reducer<{
|
9
9
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
10
10
|
singleClusterMode: boolean;
|
11
|
-
nodes: import("./reducers/nodes/types").NodesState;
|
12
11
|
cluster: import("./reducers/cluster/types").ClusterState;
|
13
12
|
tenant: import("./reducers/tenant/types").TenantState;
|
14
|
-
storage: import("./reducers/storage/types").StorageState;
|
15
13
|
tooltip: import("../types/store/tooltip").ITooltipState;
|
16
14
|
tablets: import("../types/store/tablets").TabletsState;
|
17
15
|
schema: import("./reducers/schema/types").SchemaState;
|
@@ -71,10 +69,8 @@ export declare function configureStore({ aRootReducer, singleClusterMode, api, }
|
|
71
69
|
}, any, Partial<{
|
72
70
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api"> | undefined;
|
73
71
|
singleClusterMode: boolean | undefined;
|
74
|
-
nodes: import("./reducers/nodes/types").NodesState | undefined;
|
75
72
|
cluster: import("./reducers/cluster/types").ClusterState | undefined;
|
76
73
|
tenant: import("./reducers/tenant/types").TenantState | undefined;
|
77
|
-
storage: import("./reducers/storage/types").StorageState | undefined;
|
78
74
|
tooltip: never;
|
79
75
|
tablets: import("../types/store/tablets").TabletsState | undefined;
|
80
76
|
schema: never;
|
@@ -109,10 +105,8 @@ export declare function configureStore({ aRootReducer, singleClusterMode, api, }
|
|
109
105
|
store: import("@reduxjs/toolkit").EnhancedStore<{
|
110
106
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
111
107
|
singleClusterMode: boolean;
|
112
|
-
nodes: import("./reducers/nodes/types").NodesState;
|
113
108
|
cluster: import("./reducers/cluster/types").ClusterState;
|
114
109
|
tenant: import("./reducers/tenant/types").TenantState;
|
115
|
-
storage: import("./reducers/storage/types").StorageState;
|
116
110
|
tooltip: import("../types/store/tooltip").ITooltipState;
|
117
111
|
tablets: import("../types/store/tablets").TabletsState;
|
118
112
|
schema: import("./reducers/schema/types").SchemaState;
|
@@ -173,10 +167,8 @@ export declare function configureStore({ aRootReducer, singleClusterMode, api, }
|
|
173
167
|
dispatch: import("redux-thunk").ThunkDispatch<{
|
174
168
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
175
169
|
singleClusterMode: boolean;
|
176
|
-
nodes: import("./reducers/nodes/types").NodesState;
|
177
170
|
cluster: import("./reducers/cluster/types").ClusterState;
|
178
171
|
tenant: import("./reducers/tenant/types").TenantState;
|
179
|
-
storage: import("./reducers/storage/types").StorageState;
|
180
172
|
tooltip: import("../types/store/tooltip").ITooltipState;
|
181
173
|
tablets: import("../types/store/tablets").TabletsState;
|
182
174
|
schema: import("./reducers/schema/types").SchemaState;
|
@@ -1,10 +1,8 @@
|
|
1
1
|
export declare const store: import("@reduxjs/toolkit").EnhancedStore<{
|
2
2
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
3
3
|
singleClusterMode: boolean;
|
4
|
-
nodes: import("./reducers/nodes/types").NodesState;
|
5
4
|
cluster: import("./reducers/cluster/types").ClusterState;
|
6
5
|
tenant: import("./reducers/tenant/types").TenantState;
|
7
|
-
storage: import("./reducers/storage/types").StorageState;
|
8
6
|
tooltip: import("../types/store/tooltip").ITooltipState;
|
9
7
|
tablets: import("../types/store/tablets").TabletsState;
|
10
8
|
schema: import("./reducers/schema/types").SchemaState;
|
@@ -65,10 +63,8 @@ export declare const store: import("@reduxjs/toolkit").EnhancedStore<{
|
|
65
63
|
dispatch: import("redux-thunk").ThunkDispatch<{
|
66
64
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
67
65
|
singleClusterMode: boolean;
|
68
|
-
nodes: import("./reducers/nodes/types").NodesState;
|
69
66
|
cluster: import("./reducers/cluster/types").ClusterState;
|
70
67
|
tenant: import("./reducers/tenant/types").TenantState;
|
71
|
-
storage: import("./reducers/storage/types").StorageState;
|
72
68
|
tooltip: import("../types/store/tooltip").ITooltipState;
|
73
69
|
tablets: import("../types/store/tablets").TabletsState;
|
74
70
|
schema: import("./reducers/schema/types").SchemaState;
|
@@ -19,10 +19,8 @@ declare const authentication: Reducer<AuthenticationState, AuthenticationAction>
|
|
19
19
|
export declare const authenticate: (user: string, password: string) => (dispatch: import("redux").Dispatch<import("redux").UnknownAction>, getState: () => {
|
20
20
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
21
21
|
singleClusterMode: boolean;
|
22
|
-
nodes: import("../nodes/types").NodesState;
|
23
22
|
cluster: import("../cluster/types").ClusterState;
|
24
23
|
tenant: import("../tenant/types").TenantState;
|
25
|
-
storage: import("../storage/types").StorageState;
|
26
24
|
tooltip: import("../../../types/store/tooltip").ITooltipState;
|
27
25
|
tablets: import("../../../types/store/tablets").TabletsState;
|
28
26
|
schema: import("../schema/types").SchemaState;
|
@@ -83,10 +81,8 @@ export declare const authenticate: (user: string, password: string) => (dispatch
|
|
83
81
|
export declare const logout: () => (dispatch: import("redux").Dispatch<import("redux").UnknownAction>, getState: () => {
|
84
82
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
85
83
|
singleClusterMode: boolean;
|
86
|
-
nodes: import("../nodes/types").NodesState;
|
87
84
|
cluster: import("../cluster/types").ClusterState;
|
88
85
|
tenant: import("../tenant/types").TenantState;
|
89
|
-
storage: import("../storage/types").StorageState;
|
90
86
|
tooltip: import("../../../types/store/tooltip").ITooltipState;
|
91
87
|
tablets: import("../../../types/store/tablets").TabletsState;
|
92
88
|
schema: import("../schema/types").SchemaState;
|
@@ -147,10 +143,8 @@ export declare const logout: () => (dispatch: import("redux").Dispatch<import("r
|
|
147
143
|
export declare const getUser: () => (dispatch: import("redux").Dispatch<import("redux").UnknownAction>, getState: () => {
|
148
144
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
149
145
|
singleClusterMode: boolean;
|
150
|
-
nodes: import("../nodes/types").NodesState;
|
151
146
|
cluster: import("../cluster/types").ClusterState;
|
152
147
|
tenant: import("../tenant/types").TenantState;
|
153
|
-
storage: import("../storage/types").StorageState;
|
154
148
|
tooltip: import("../../../types/store/tooltip").ITooltipState;
|
155
149
|
tablets: import("../../../types/store/tablets").TabletsState;
|
156
150
|
schema: import("../schema/types").SchemaState;
|
@@ -15,10 +15,8 @@ interface SendQueryParams extends QueryRequestParams {
|
|
15
15
|
export declare const sendExecuteQuery: ({ query, database, mode, schema }: SendQueryParams) => (dispatch: import("redux").Dispatch<import("redux").UnknownAction>, getState: () => {
|
16
16
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
17
17
|
singleClusterMode: boolean;
|
18
|
-
nodes: import("./nodes/types").NodesState;
|
19
18
|
cluster: import("./cluster/types").ClusterState;
|
20
19
|
tenant: import("./tenant/types").TenantState;
|
21
|
-
storage: import("./storage/types").StorageState;
|
22
20
|
tooltip: import("../../types/store/tooltip").ITooltipState;
|
23
21
|
tablets: import("../../types/store/tablets").TabletsState;
|
24
22
|
schema: import("./schema/types").SchemaState;
|
@@ -15,10 +15,8 @@ declare const explainQuery: Reducer<ExplainQueryState, ExplainQueryAction>;
|
|
15
15
|
export declare const getExplainQueryAst: ({ query, database }: QueryRequestParams) => (dispatch: import("redux").Dispatch<import("redux").UnknownAction>, getState: () => {
|
16
16
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
17
17
|
singleClusterMode: boolean;
|
18
|
-
nodes: import("./nodes/types").NodesState;
|
19
18
|
cluster: import("./cluster/types").ClusterState;
|
20
19
|
tenant: import("./tenant/types").TenantState;
|
21
|
-
storage: import("./storage/types").StorageState;
|
22
20
|
tooltip: import("../../types/store/tooltip").ITooltipState;
|
23
21
|
tablets: import("../../types/store/tablets").TabletsState;
|
24
22
|
schema: import("./schema/types").SchemaState;
|
@@ -85,10 +83,8 @@ interface ExplainQueryParams extends QueryRequestParams {
|
|
85
83
|
export declare const getExplainQuery: ({ query, database, mode }: ExplainQueryParams) => (dispatch: import("redux").Dispatch<import("redux").UnknownAction>, getState: () => {
|
86
84
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "All", "api">;
|
87
85
|
singleClusterMode: boolean;
|
88
|
-
nodes: import("./nodes/types").NodesState;
|
89
86
|
cluster: import("./cluster/types").ClusterState;
|
90
87
|
tenant: import("./tenant/types").TenantState;
|
91
|
-
storage: import("./storage/types").StorageState;
|
92
88
|
tooltip: import("../../types/store/tooltip").ITooltipState;
|
93
89
|
tablets: import("../../types/store/tablets").TabletsState;
|
94
90
|
schema: import("./schema/types").SchemaState;
|