Skip to content

Commit ce6407c

Browse files
authored
feat(Query): add explanation to the query method selector (#492)
1 parent 2add1dc commit ce6407c

File tree

4 files changed

+65
-16
lines changed

4 files changed

+65
-16
lines changed

src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.scss

+13
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,17 @@
5656
}
5757
}
5858
}
59+
60+
&__item-with-popover {
61+
display: flex;
62+
align-items: center;
63+
64+
height: 24px;
65+
66+
line-height: initial;
67+
}
68+
69+
&__popover {
70+
max-width: 340px;
71+
}
5972
}

src/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.tsx

+40-14
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {useMemo} from 'react';
66
import type {QueryAction, QueryMode} from '../../../../types/store/query';
77
import {QUERY_MODES} from '../../../../utils/query';
88
import {Icon} from '../../../../components/Icon';
9+
import {LabelWithPopover} from '../../../../components/LabelWithPopover';
910

1011
import SaveQuery from '../SaveQuery/SaveQuery';
1112

@@ -18,16 +19,34 @@ const queryModeSelectorPopupQa = 'query-mode-selector-popup';
1819

1920
const b = block('ydb-query-editor-controls');
2021

21-
const OldQueryModeSelectorTitles = {
22-
[QUERY_MODES.script]: 'YQL Script',
23-
[QUERY_MODES.scan]: 'Scan',
22+
const OldQueryModeSelectorOptions = {
23+
[QUERY_MODES.script]: {
24+
title: 'YQL Script',
25+
description: i18n('method-description.script'),
26+
},
27+
[QUERY_MODES.scan]: {
28+
title: 'Scan',
29+
description: i18n('method-description.scan'),
30+
},
2431
} as const;
2532

26-
const QueryModeSelectorTitles = {
27-
[QUERY_MODES.script]: 'YQL Script',
28-
[QUERY_MODES.scan]: 'Scan',
29-
[QUERY_MODES.data]: 'Data',
30-
[QUERY_MODES.query]: 'YQL - QueryService',
33+
const QueryModeSelectorOptions = {
34+
[QUERY_MODES.script]: {
35+
title: 'YQL Script',
36+
description: i18n('method-description.script'),
37+
},
38+
[QUERY_MODES.scan]: {
39+
title: 'Scan',
40+
description: i18n('method-description.scan'),
41+
},
42+
[QUERY_MODES.data]: {
43+
title: 'Data',
44+
description: i18n('method-description.data'),
45+
},
46+
[QUERY_MODES.query]: {
47+
title: 'YQL - QueryService',
48+
description: i18n('method-description.query'),
49+
},
3150
} as const;
3251

3352
interface QueryEditorControlsProps {
@@ -58,13 +77,20 @@ export const QueryEditorControls = ({
5877
enableAdditionalQueryModes,
5978
}: QueryEditorControlsProps) => {
6079
const querySelectorMenuItems = useMemo(() => {
61-
const titles = enableAdditionalQueryModes
62-
? QueryModeSelectorTitles
63-
: OldQueryModeSelectorTitles;
80+
const options = enableAdditionalQueryModes
81+
? QueryModeSelectorOptions
82+
: OldQueryModeSelectorOptions;
6483

65-
return Object.entries(titles).map(([mode, title]) => {
84+
return Object.entries(options).map(([mode, {title, description}]) => {
6685
return {
67-
text: title,
86+
text: (
87+
<LabelWithPopover
88+
className={b('item-with-popover')}
89+
contentClassName={b('popover')}
90+
text={title}
91+
popoverContent={description}
92+
/>
93+
),
6894
action: () => {
6995
onUpdateQueryMode(mode as QueryMode);
7096
},
@@ -119,7 +145,7 @@ export const QueryEditorControls = ({
119145
<Button className={b('mode-selector__button')} qa={queryModeSelectorQa}>
120146
<span className={b('mode-selector__button-content')}>
121147
{`${i18n('controls.query-mode-selector_type')} ${
122-
QueryModeSelectorTitles[queryMode]
148+
QueryModeSelectorOptions[queryMode].title
123149
}`}
124150
<Icon name="chevron-down" width={16} height={16} />
125151
</span>

src/containers/Tenant/Query/i18n/en.json

+6-1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,10 @@
1515

1616
"preview.title": "Preview",
1717
"preview.not-available": "Preview is not available",
18-
"preview.close": "Close preview"
18+
"preview.close": "Close preview",
19+
20+
"method-description.script": "For YQL-scripts combining DDL and DML. API call: schema.scripting",
21+
"method-description.scan": "Read-only queries, potentially reading a lot of data. API call: table.ExecuteScan",
22+
"method-description.data": "DML queries for changing and fetching data in serialization mode. API call: table.executeDataQuery",
23+
"method-description.query": "Any queries. An experimental API call supposed to replace all existing methods. API Call: query.ExecuteScript"
1924
}

src/containers/Tenant/Query/i18n/ru.json

+6-1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,10 @@
1515

1616
"preview.title": "Предпросмотр",
1717
"preview.not-available": "Предпросмотр недоступен",
18-
"preview.close": "Закрыть предпросмотр"
18+
"preview.close": "Закрыть предпросмотр",
19+
20+
"method-description.script": "Для скриптов, совмещающих DDL и DML-конструкции. API call: schema.scripting",
21+
"method-description.scan": "Только читающие запросы, потенциально читающие много данных. API call: table.ExecuteScan",
22+
"method-description.data": "DML-запросы для изменения и выборки данных в режиме изоляции Serializable. API call: table.executeDataQuery",
23+
"method-description.query": "Любые запросы. Экспериментальный перспективный метод, который в будущем заменит все остальные. API call: query.ExecuteScript"
1924
}

0 commit comments

Comments
 (0)