ydb-embedded-ui 4.5.2 → 4.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/components/NodeHostWrapper/NodeHostWrapper.tsx +1 -1
  3. package/dist/containers/App/Content.js +3 -2
  4. package/dist/containers/AsideNavigation/AsideNavigation.tsx +4 -50
  5. package/dist/containers/Cluster/Cluster.scss +7 -48
  6. package/dist/containers/Cluster/Cluster.tsx +136 -20
  7. package/dist/containers/Cluster/ClusterInfo/ClusterInfo.scss +34 -17
  8. package/dist/containers/Cluster/ClusterInfo/ClusterInfo.tsx +57 -91
  9. package/dist/containers/Cluster/ClusterInfoSkeleton/ClusterInfoSkeleton.scss +48 -0
  10. package/dist/containers/Cluster/ClusterInfoSkeleton/ClusterInfoSkeleton.tsx +34 -0
  11. package/dist/containers/Cluster/utils.ts +34 -0
  12. package/dist/containers/Header/Header.scss +0 -24
  13. package/dist/containers/Header/Header.tsx +14 -44
  14. package/dist/containers/Node/Node.tsx +22 -20
  15. package/dist/containers/Nodes/Nodes.tsx +0 -16
  16. package/dist/containers/Nodes/getNodesColumns.tsx +1 -1
  17. package/dist/containers/Storage/Storage.js +1 -11
  18. package/dist/containers/Tablet/Tablet.tsx +28 -0
  19. package/dist/containers/TabletsFilters/TabletsFilters.js +16 -1
  20. package/dist/containers/Tenant/Diagnostics/Describe/Describe.tsx +1 -1
  21. package/dist/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.scss +3 -0
  22. package/dist/containers/Tenant/Diagnostics/Diagnostics.tsx +3 -3
  23. package/dist/containers/Tenant/Diagnostics/Overview/ChangefeedInfo/ChangefeedInfo.tsx +4 -6
  24. package/dist/containers/Tenant/Diagnostics/Overview/Overview.tsx +56 -53
  25. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.tsx +1 -1
  26. package/dist/containers/Tenant/ObjectSummary/ObjectSummary.tsx +1 -1
  27. package/dist/containers/Tenant/Preview/Preview.js +1 -1
  28. package/dist/containers/Tenant/QueryEditor/QueryEditor.js +26 -22
  29. package/dist/containers/Tenant/QueryEditor/QueryEditorControls/OldQueryEditorControls.tsx +10 -3
  30. package/dist/containers/Tenant/QueryEditor/QueryEditorControls/QueryEditorControls.tsx +8 -1
  31. package/dist/containers/Tenant/QueryEditor/QueryEditorControls/shared.ts +1 -6
  32. package/dist/containers/Tenant/Schema/SchemaTree/SchemaTree.tsx +1 -1
  33. package/dist/containers/Tenant/Tenant.tsx +7 -12
  34. package/dist/containers/Tenant/utils/schemaActions.ts +1 -1
  35. package/dist/containers/Tenants/Tenants.js +18 -28
  36. package/dist/containers/Tenants/Tenants.scss +2 -4
  37. package/dist/containers/UserSettings/i18n/en.json +2 -2
  38. package/dist/containers/UserSettings/i18n/ru.json +2 -2
  39. package/dist/containers/UserSettings/settings.ts +4 -4
  40. package/dist/containers/Versions/Versions.scss +0 -4
  41. package/dist/containers/Versions/Versions.tsx +74 -66
  42. package/dist/routes.ts +0 -7
  43. package/dist/services/api.ts +6 -2
  44. package/dist/store/reducers/clusterNodes/clusterNodes.tsx +4 -0
  45. package/dist/store/reducers/index.ts +3 -1
  46. package/dist/store/reducers/overview/overview.ts +109 -0
  47. package/dist/store/reducers/overview/types.ts +24 -0
  48. package/dist/store/reducers/{schema.ts → schema/schema.ts} +24 -50
  49. package/dist/{types/store/schema.ts → store/reducers/schema/types.ts} +16 -15
  50. package/dist/store/reducers/settings/settings.ts +5 -3
  51. package/dist/types/api/query.ts +78 -44
  52. package/dist/types/store/explainQuery.ts +2 -2
  53. package/dist/types/store/query.ts +4 -2
  54. package/dist/utils/constants.ts +3 -1
  55. package/dist/utils/nodes.ts +1 -1
  56. package/dist/utils/query.ts +3 -3
  57. package/package.json +1 -1
@@ -1,10 +1,14 @@
1
1
  import {useState} from 'react';
2
+ import {useDispatch} from 'react-redux';
2
3
  import block from 'bem-cn-lite';
3
4
 
4
5
  import {Checkbox, RadioButton} from '@gravity-ui/uikit';
5
6
 
6
- import type {PreparedClusterNode} from '../../store/reducers/clusterNodes/types';
7
7
  import type {VersionToColorMap} from '../../types/versions';
8
+ import {useAutofetcher, useTypedSelector} from '../../utils/hooks';
9
+ import {getClusterNodes} from '../../store/reducers/clusterNodes/clusterNodes';
10
+ import {Loader} from '../../components/Loader';
11
+
8
12
  import {getGroupedStorageNodes, getGroupedTenantNodes, getOtherNodes} from './groupNodes';
9
13
  import {GroupedNodesTree} from './GroupedNodesTree/GroupedNodesTree';
10
14
  import {GroupByValue} from './types';
@@ -14,11 +18,16 @@ import './Versions.scss';
14
18
  const b = block('ydb-versions');
15
19
 
16
20
  interface VersionsProps {
17
- nodes?: PreparedClusterNode[];
18
21
  versionToColor?: VersionToColorMap;
19
22
  }
20
23
 
21
- export const Versions = ({nodes = [], versionToColor}: VersionsProps) => {
24
+ export const Versions = ({versionToColor}: VersionsProps) => {
25
+ const dispatch = useDispatch();
26
+
27
+ const {nodes = [], loading, wasLoaded} = useTypedSelector((state) => state.clusterNodes);
28
+
29
+ useAutofetcher(() => dispatch(getClusterNodes()), [dispatch], true);
30
+
22
31
  const [groupByValue, setGroupByValue] = useState<GroupByValue>(GroupByValue.VERSION);
23
32
  const [expanded, setExpanded] = useState(false);
24
33
 
@@ -55,67 +64,66 @@ export const Versions = ({nodes = [], versionToColor}: VersionsProps) => {
55
64
  </div>
56
65
  );
57
66
  };
58
- const renderGroupedNodes = () => {
59
- const tenantNodes = getGroupedTenantNodes(nodes, versionToColor, groupByValue);
60
- const storageNodes = getGroupedStorageNodes(nodes, versionToColor);
61
- const otherNodes = getOtherNodes(nodes, versionToColor);
62
- const storageNodesContent = storageNodes?.length ? (
63
- <>
64
- <h3>Storage nodes</h3>
65
- {storageNodes.map(({title, nodes: itemNodes, items, versionColor}, index) => (
66
- <GroupedNodesTree
67
- key={`storage-nodes-${index}`}
68
- title={title}
69
- nodes={itemNodes}
70
- items={items}
71
- versionColor={versionColor}
72
- />
73
- ))}
74
- </>
75
- ) : null;
76
- const tenantNodesContent = tenantNodes?.length ? (
77
- <>
78
- <h3>Database nodes</h3>
79
- {renderControls()}
80
- {tenantNodes.map(
81
- ({title, nodes: itemNodes, items, versionColor, versionsValues}, index) => (
82
- <GroupedNodesTree
83
- key={`tenant-nodes-${index}`}
84
- title={title}
85
- nodes={itemNodes}
86
- items={items}
87
- expanded={expanded}
88
- versionColor={versionColor}
89
- versionsValues={versionsValues}
90
- />
91
- ),
92
- )}
93
- </>
94
- ) : null;
95
- const otherNodesContent = otherNodes?.length ? (
96
- <>
97
- <h3>Other nodes</h3>
98
- {otherNodes.map(
99
- ({title, nodes: itemNodes, items, versionColor, versionsValues}, index) => (
100
- <GroupedNodesTree
101
- key={`other-nodes-${index}`}
102
- title={title}
103
- nodes={itemNodes}
104
- items={items}
105
- versionColor={versionColor}
106
- versionsValues={versionsValues}
107
- />
108
- ),
109
- )}
110
- </>
111
- ) : null;
112
- return (
113
- <div className={b('versions')}>
114
- {storageNodesContent}
115
- {tenantNodesContent}
116
- {otherNodesContent}
117
- </div>
118
- );
119
- };
120
- return <div className={b('content')}>{renderGroupedNodes()}</div>;
67
+
68
+ if (loading && !wasLoaded) {
69
+ return <Loader />;
70
+ }
71
+
72
+ const tenantNodes = getGroupedTenantNodes(nodes, versionToColor, groupByValue);
73
+ const storageNodes = getGroupedStorageNodes(nodes, versionToColor);
74
+ const otherNodes = getOtherNodes(nodes, versionToColor);
75
+ const storageNodesContent = storageNodes?.length ? (
76
+ <>
77
+ <h3>Storage nodes</h3>
78
+ {storageNodes.map(({title, nodes: itemNodes, items, versionColor}) => (
79
+ <GroupedNodesTree
80
+ key={`storage-nodes-${title}`}
81
+ title={title}
82
+ nodes={itemNodes}
83
+ items={items}
84
+ versionColor={versionColor}
85
+ />
86
+ ))}
87
+ </>
88
+ ) : null;
89
+ const tenantNodesContent = tenantNodes?.length ? (
90
+ <>
91
+ <h3>Database nodes</h3>
92
+ {renderControls()}
93
+ {tenantNodes.map(({title, nodes: itemNodes, items, versionColor, versionsValues}) => (
94
+ <GroupedNodesTree
95
+ key={`tenant-nodes-${title}`}
96
+ title={title}
97
+ nodes={itemNodes}
98
+ items={items}
99
+ expanded={expanded}
100
+ versionColor={versionColor}
101
+ versionsValues={versionsValues}
102
+ />
103
+ ))}
104
+ </>
105
+ ) : null;
106
+ const otherNodesContent = otherNodes?.length ? (
107
+ <>
108
+ <h3>Other nodes</h3>
109
+ {otherNodes.map(({title, nodes: itemNodes, items, versionColor, versionsValues}) => (
110
+ <GroupedNodesTree
111
+ key={`other-nodes-${title}`}
112
+ title={title}
113
+ nodes={itemNodes}
114
+ items={items}
115
+ versionColor={versionColor}
116
+ versionsValues={versionsValues}
117
+ />
118
+ ))}
119
+ </>
120
+ ) : null;
121
+
122
+ return (
123
+ <div className={b('versions')}>
124
+ {storageNodesContent}
125
+ {tenantNodesContent}
126
+ {otherNodesContent}
127
+ </div>
128
+ );
121
129
  };
package/dist/routes.ts CHANGED
@@ -13,13 +13,6 @@ const routes = {
13
13
  auth: '/auth',
14
14
  };
15
15
 
16
- export const CLUSTER_PAGES = {
17
- tenants: {id: 'tenants', name: 'Databases', title: 'Database list'},
18
- nodes: {id: 'nodes', name: 'Nodes', title: 'Nodes'},
19
- storage: {id: 'storage', name: 'Storage', title: 'Storage'},
20
- cluster: {id: 'cluster', name: 'Cluster', title: 'Cluster'},
21
- };
22
-
23
16
  export function createHref(
24
17
  route: string,
25
18
  params?: Record<string, string | number>,
@@ -50,8 +50,12 @@ export class YdbEmbeddedAPI extends AxiosWrapper {
50
50
  tablets: true,
51
51
  });
52
52
  }
53
- getClusterNodes() {
54
- return this.get<TEvSystemStateResponse>(this.getPath('/viewer/json/sysinfo'), {});
53
+ getClusterNodes({concurrentId}: AxiosOptions = {}) {
54
+ return this.get<TEvSystemStateResponse>(
55
+ this.getPath('/viewer/json/sysinfo'),
56
+ {},
57
+ {concurrentId: concurrentId || `getClusterNodes`},
58
+ );
55
59
  }
56
60
  getNodeInfo(id?: string) {
57
61
  return this.get<TEvSystemStateResponse>(this.getPath('/viewer/json/sysinfo?enums=true'), {
@@ -34,6 +34,10 @@ const clusterNodes: Reducer<ClusterNodesState, ClusterNodesAction> = (
34
34
  };
35
35
  }
36
36
  case FETCH_CLUSTER_NODES.FAILURE: {
37
+ if (action.error?.isCancelled) {
38
+ return state;
39
+ }
40
+
37
41
  return {
38
42
  ...state,
39
43
  error: action.error,
@@ -9,7 +9,8 @@ import node from './node/node';
9
9
  import tooltip from './tooltip';
10
10
  import tablets from './tablets';
11
11
  import heatmap from './heatmap';
12
- import schema from './schema';
12
+ import schema from './schema/schema';
13
+ import overview from './overview/overview';
13
14
  import host from './host';
14
15
  import network from './network/network';
15
16
  import tenants from './tenants/tenants';
@@ -46,6 +47,7 @@ export const rootReducer = {
46
47
  tooltip,
47
48
  tablets,
48
49
  schema,
50
+ overview,
49
51
  olapStats,
50
52
  host,
51
53
  network,
@@ -0,0 +1,109 @@
1
+ import type {Reducer} from 'redux';
2
+
3
+ import type {OverviewState, OverviewAction, OverviewHandledResponse} from './types';
4
+
5
+ import '../../../services/api';
6
+ import {createRequestActionTypes, createApiRequest} from '../../utils';
7
+
8
+ export const FETCH_OVERVIEW = createRequestActionTypes('overview', 'FETCH_OVERVIEW');
9
+ const SET_CURRENT_OVERVIEW_PATH = 'overview/SET_CURRENT_OVERVIEW_PATH';
10
+ const SET_DATA_WAS_NOT_LOADED = 'overview/SET_DATA_WAS_NOT_LOADED';
11
+
12
+ export const initialState = {
13
+ loading: true,
14
+ wasLoaded: false,
15
+ };
16
+
17
+ const schema: Reducer<OverviewState, OverviewAction> = (state = initialState, action) => {
18
+ switch (action.type) {
19
+ case FETCH_OVERVIEW.REQUEST: {
20
+ return {
21
+ ...state,
22
+ loading: true,
23
+ };
24
+ }
25
+ case FETCH_OVERVIEW.SUCCESS: {
26
+ if (action.data.data.Path !== state.currentOverviewPath) {
27
+ return state;
28
+ }
29
+
30
+ return {
31
+ ...state,
32
+ error: undefined,
33
+ data: action.data.data,
34
+ additionalData: action.data.additionalData,
35
+ loading: false,
36
+ wasLoaded: true,
37
+ };
38
+ }
39
+ case FETCH_OVERVIEW.FAILURE: {
40
+ if (action.error?.isCancelled) {
41
+ return state;
42
+ }
43
+
44
+ return {
45
+ ...state,
46
+ error: action.error,
47
+ loading: false,
48
+ };
49
+ }
50
+ case SET_CURRENT_OVERVIEW_PATH: {
51
+ return {
52
+ ...state,
53
+ currentOverviewPath: action.data,
54
+ };
55
+ }
56
+ case SET_DATA_WAS_NOT_LOADED: {
57
+ return {
58
+ ...state,
59
+ wasLoaded: false,
60
+ };
61
+ }
62
+ default:
63
+ return state;
64
+ }
65
+ };
66
+
67
+ export function getOverview({path}: {path: string}) {
68
+ const request = window.api.getDescribe({path}, {concurrentId: 'getOverview'});
69
+ return createApiRequest({
70
+ request,
71
+ actions: FETCH_OVERVIEW,
72
+ dataHandler: (data): OverviewHandledResponse => {
73
+ return {data};
74
+ },
75
+ });
76
+ }
77
+
78
+ export function getOverviewBatched(paths: string[]) {
79
+ const requestArray = paths.map((p) =>
80
+ window.api.getDescribe({path: p}, {concurrentId: `getOverviewBatched|${p}`}),
81
+ );
82
+ const request = Promise.all(requestArray);
83
+
84
+ return createApiRequest({
85
+ request,
86
+ actions: FETCH_OVERVIEW,
87
+ dataHandler: ([item, ...rest]): OverviewHandledResponse => {
88
+ return {
89
+ data: item,
90
+ additionalData: rest,
91
+ };
92
+ },
93
+ });
94
+ }
95
+
96
+ export function setDataWasNotLoaded() {
97
+ return {
98
+ type: SET_DATA_WAS_NOT_LOADED,
99
+ } as const;
100
+ }
101
+
102
+ export const setCurrentOverviewPath = (path?: string) => {
103
+ return {
104
+ type: SET_CURRENT_OVERVIEW_PATH,
105
+ data: path,
106
+ } as const;
107
+ };
108
+
109
+ export default schema;
@@ -0,0 +1,24 @@
1
+ import type {ApiRequestAction} from '../../utils';
2
+ import type {IResponseError} from '../../../types/api/error';
3
+ import type {TEvDescribeSchemeResult} from '../../../types/api/schema';
4
+
5
+ import {FETCH_OVERVIEW, setDataWasNotLoaded, setCurrentOverviewPath} from './overview';
6
+
7
+ export interface OverviewState {
8
+ loading: boolean;
9
+ wasLoaded: boolean;
10
+ currentOverviewPath?: string;
11
+ data?: TEvDescribeSchemeResult;
12
+ additionalData?: TEvDescribeSchemeResult[];
13
+ error?: IResponseError;
14
+ }
15
+
16
+ export interface OverviewHandledResponse {
17
+ data: TEvDescribeSchemeResult;
18
+ additionalData?: TEvDescribeSchemeResult[];
19
+ }
20
+
21
+ export type OverviewAction =
22
+ | ApiRequestAction<typeof FETCH_OVERVIEW, OverviewHandledResponse, IResponseError>
23
+ | ReturnType<typeof setCurrentOverviewPath>
24
+ | ReturnType<typeof setDataWasNotLoaded>;
@@ -1,18 +1,20 @@
1
- import {Reducer} from 'redux';
2
- import {createSelector, Selector} from 'reselect';
3
-
4
- import {
5
- ISchemaAction,
6
- ISchemaData,
7
- ISchemaHandledResponse,
8
- ISchemaRootStateSlice,
9
- ISchemaState,
10
- } from '../../types/store/schema';
11
- import {EPathType} from '../../types/api/schema';
12
- import '../../services/api';
13
- import {isEntityWithMergedImplementation} from '../../containers/Tenant/utils/schema';
14
-
15
- import {createRequestActionTypes, createApiRequest} from '../utils';
1
+ import type {Reducer} from 'redux';
2
+ import type {Selector} from 'reselect';
3
+
4
+ import {createSelector} from 'reselect';
5
+
6
+ import type {EPathType} from '../../../types/api/schema';
7
+ import type {
8
+ SchemaAction,
9
+ SchemaData,
10
+ SchemaHandledResponse,
11
+ SchemaStateSlice,
12
+ SchemaState,
13
+ } from './types';
14
+
15
+ import '../../../services/api';
16
+ import {isEntityWithMergedImplementation} from '../../../containers/Tenant/utils/schema';
17
+ import {createRequestActionTypes, createApiRequest} from '../../utils';
16
18
 
17
19
  export const FETCH_SCHEMA = createRequestActionTypes('schema', 'FETCH_SCHEMA');
18
20
  const PRELOAD_SCHEMAS = 'schema/PRELOAD_SCHEMAS';
@@ -31,7 +33,7 @@ export const initialState = {
31
33
  showPreview: false,
32
34
  };
33
35
 
34
- const schema: Reducer<ISchemaState, ISchemaAction> = (state = initialState, action) => {
36
+ const schema: Reducer<SchemaState, SchemaAction> = (state = initialState, action) => {
35
37
  switch (action.type) {
36
38
  case FETCH_SCHEMA.REQUEST: {
37
39
  return {
@@ -87,7 +89,6 @@ const schema: Reducer<ISchemaState, ISchemaAction> = (state = initialState, acti
87
89
  return {
88
90
  ...state,
89
91
  currentSchemaPath: action.data,
90
- wasLoaded: false,
91
92
  };
92
93
  }
93
94
  case ENABLE_AUTOREFRESH: {
@@ -124,8 +125,8 @@ export function getSchema({path}: {path: string}) {
124
125
  return createApiRequest({
125
126
  request,
126
127
  actions: FETCH_SCHEMA,
127
- dataHandler: (data): ISchemaHandledResponse => {
128
- const newData: ISchemaData = {};
128
+ dataHandler: (data): SchemaHandledResponse => {
129
+ const newData: SchemaData = {};
129
130
  if (data.Path) {
130
131
  newData[data.Path] = data;
131
132
  }
@@ -138,33 +139,6 @@ export function getSchema({path}: {path: string}) {
138
139
  });
139
140
  }
140
141
 
141
- export function getSchemaBatched(paths: string[]) {
142
- const requestArray = paths.map((p) =>
143
- window.api.getSchema({path: p}, {concurrentId: `getSchemaBatched|${p}`}),
144
- );
145
- const request = Promise.all(requestArray);
146
-
147
- return createApiRequest({
148
- request,
149
- actions: FETCH_SCHEMA,
150
- dataHandler: (data): ISchemaHandledResponse => {
151
- const newData: ISchemaData = {};
152
-
153
- data.forEach((dataItem) => {
154
- if (dataItem.Path) {
155
- newData[dataItem.Path] = dataItem;
156
- }
157
- });
158
-
159
- return {
160
- path: data[0].Path,
161
- currentSchema: data[0],
162
- data: newData,
163
- };
164
- },
165
- });
166
- }
167
-
168
142
  export function setCurrentSchemaPath(currentSchemaPath: string) {
169
143
  return {
170
144
  type: SET_SCHEMA,
@@ -190,7 +164,7 @@ export function setShowPreview(value: boolean) {
190
164
 
191
165
  // only stores data for paths that are not in the store yet
192
166
  // existing paths are ignored
193
- export function preloadSchemas(data: ISchemaData) {
167
+ export function preloadSchemas(data: SchemaData) {
194
168
  return {
195
169
  type: PRELOAD_SCHEMAS,
196
170
  data,
@@ -203,14 +177,14 @@ export function resetLoadingState() {
203
177
  } as const;
204
178
  }
205
179
 
206
- export const selectSchemaChildren = (state: ISchemaRootStateSlice, path?: string) =>
180
+ const selectSchemaChildren = (state: SchemaStateSlice, path?: string) =>
207
181
  path ? state.schema.data[path]?.PathDescription?.Children : undefined;
208
182
 
209
- export const selectSchemaData = (state: ISchemaRootStateSlice, path?: string) =>
183
+ export const selectSchemaData = (state: SchemaStateSlice, path?: string) =>
210
184
  path ? state.schema.data[path] : undefined;
211
185
 
212
186
  export const selectSchemaMergedChildrenPaths: Selector<
213
- ISchemaRootStateSlice,
187
+ SchemaStateSlice,
214
188
  string[] | undefined,
215
189
  [string | undefined, EPathType | undefined]
216
190
  > = createSelector(
@@ -1,3 +1,7 @@
1
+ import type {ApiRequestAction} from '../../utils';
2
+ import type {IResponseError} from '../../../types/api/error';
3
+ import type {TEvDescribeSchemeResult} from '../../../types/api/schema';
4
+
1
5
  import {
2
6
  disableAutorefresh,
3
7
  enableAutorefresh,
@@ -6,17 +10,14 @@ import {
6
10
  resetLoadingState,
7
11
  setCurrentSchemaPath,
8
12
  setShowPreview,
9
- } from '../../store/reducers/schema';
10
- import {ApiRequestAction} from '../../store/utils';
11
- import {IResponseError} from '../api/error';
12
- import {TEvDescribeSchemeResult} from '../api/schema';
13
+ } from './schema';
13
14
 
14
- export type ISchemaData = Record<string, TEvDescribeSchemeResult>;
15
+ export type SchemaData = Record<string, TEvDescribeSchemeResult>;
15
16
 
16
- export interface ISchemaState {
17
+ export interface SchemaState {
17
18
  loading: boolean;
18
19
  wasLoaded: boolean;
19
- data: ISchemaData;
20
+ data: SchemaData;
20
21
  currentSchema?: TEvDescribeSchemeResult;
21
22
  currentSchemaPath?: string;
22
23
  autorefresh: boolean;
@@ -24,20 +25,20 @@ export interface ISchemaState {
24
25
  error?: IResponseError;
25
26
  }
26
27
 
27
- export interface ISchemaHandledResponse {
28
+ export interface SchemaHandledResponse {
28
29
  path?: string;
29
30
  currentSchema?: TEvDescribeSchemeResult;
30
- data?: ISchemaData;
31
+ data?: SchemaData;
31
32
  }
32
33
 
33
- type ISchemaApiRequestAction = ApiRequestAction<
34
+ type SchemaApiRequestAction = ApiRequestAction<
34
35
  typeof FETCH_SCHEMA,
35
- ISchemaHandledResponse,
36
+ SchemaHandledResponse,
36
37
  IResponseError
37
38
  >;
38
39
 
39
- export type ISchemaAction =
40
- | ISchemaApiRequestAction
40
+ export type SchemaAction =
41
+ | SchemaApiRequestAction
41
42
  | (
42
43
  | ReturnType<typeof setCurrentSchemaPath>
43
44
  | ReturnType<typeof enableAutorefresh>
@@ -47,6 +48,6 @@ export type ISchemaAction =
47
48
  | ReturnType<typeof resetLoadingState>
48
49
  );
49
50
 
50
- export interface ISchemaRootStateSlice {
51
- schema: ISchemaState;
51
+ export interface SchemaStateSlice {
52
+ schema: SchemaState;
52
53
  }
@@ -11,7 +11,8 @@ import {
11
11
  USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
12
12
  PARTITIONS_HIDDEN_COLUMNS_KEY,
13
13
  QUERY_INITIAL_MODE_KEY,
14
- ENABLE_QUERY_MODES_FOR_EXPLAIN,
14
+ ENABLE_ADDITIONAL_QUERY_MODES,
15
+ CLUSTER_INFO_HIDDEN_KEY,
15
16
  } from '../../../utils/constants';
16
17
  import '../../../services/api';
17
18
  import {getValueFromLS, parseJson} from '../../../utils/utils';
@@ -52,8 +53,8 @@ export const initialState = {
52
53
  USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
53
54
  'false',
54
55
  ),
55
- [ENABLE_QUERY_MODES_FOR_EXPLAIN]: readSavedSettingsValue(
56
- ENABLE_QUERY_MODES_FOR_EXPLAIN,
56
+ [ENABLE_ADDITIONAL_QUERY_MODES]: readSavedSettingsValue(
57
+ ENABLE_ADDITIONAL_QUERY_MODES,
57
58
  'false',
58
59
  ),
59
60
  [SAVED_QUERIES_KEY]: readSavedSettingsValue(SAVED_QUERIES_KEY, '[]'),
@@ -61,6 +62,7 @@ export const initialState = {
61
62
  [QUERY_INITIAL_MODE_KEY]: readSavedSettingsValue(QUERY_INITIAL_MODE_KEY, QueryModes.script),
62
63
  [ASIDE_HEADER_COMPACT_KEY]: readSavedSettingsValue(ASIDE_HEADER_COMPACT_KEY, 'true'),
63
64
  [PARTITIONS_HIDDEN_COLUMNS_KEY]: readSavedSettingsValue(PARTITIONS_HIDDEN_COLUMNS_KEY),
65
+ [CLUSTER_INFO_HIDDEN_KEY]: readSavedSettingsValue(CLUSTER_INFO_HIDDEN_KEY, 'false'),
64
66
  },
65
67
  systemSettings,
66
68
  };