Skip to content

Commit 88cfc52

Browse files
authored
feat: add setting to enable autocomplete, fix constants for completion (#765)
* feat: add setting to enable autocomplete, fix constants for completion * fix: code-review
1 parent c1d3f99 commit 88cfc52

File tree

11 files changed

+87
-98
lines changed

11 files changed

+87
-98
lines changed

src/assets/icons/flask.svg

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/assets/icons/star.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/containers/AppWithClusters/AppWithClusters.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export interface AppWithClustersProps {
2929

3030
const defaultUserSettings = settings;
3131

32-
defaultUserSettings[1].sections[0].settings.push({
32+
defaultUserSettings[2].sections[0].settings.push({
3333
title: i18n('settings.useClusterBalancerAsBackend.title'),
3434
helpPopoverContent: i18n('settings.useClusterBalancerAsBackend.popover'),
3535
settingKey: USE_CLUSTER_BALANCER_AS_BACKEND_KEY,

src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
import {useSetting, useQueryModes} from '../../../../utils/hooks';
2727
import {QUERY_ACTIONS} from '../../../../utils/query';
2828
import {parseJson} from '../../../../utils/utils';
29+
import {useEditorOptions} from './helpers';
2930

3031
import {
3132
InitialPaneState,
@@ -48,14 +49,6 @@ import i18n from '../i18n';
4849

4950
import './QueryEditor.scss';
5051

51-
const EDITOR_OPTIONS = {
52-
automaticLayout: true,
53-
selectOnLineNumbers: true,
54-
minimap: {
55-
enabled: false,
56-
},
57-
};
58-
5952
const CONTEXT_MENU_GROUP_ID = 'navigation';
6053
const RESULT_TYPES = {
6154
EXECUTE: 'execute',
@@ -93,6 +86,7 @@ interface QueryEditorProps {
9386
}
9487

9588
function QueryEditor(props: QueryEditorProps) {
89+
const editorOptions = useEditorOptions();
9690
const {
9791
path,
9892
setTenantPath: setPath,
@@ -422,7 +416,7 @@ function QueryEditor(props: QueryEditorProps) {
422416
<MonacoEditor
423417
language="sql"
424418
value={executeQuery.input}
425-
options={EDITOR_OPTIONS}
419+
options={editorOptions}
426420
onChange={onChange}
427421
editorDidMount={editorDidMount}
428422
theme={`vs-${theme}`}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import type Monaco from 'monaco-editor';
2+
import {ENABLE_AUTOCOMPLETE, useSetting} from '../../../../lib';
3+
import {useMemo} from 'react';
4+
5+
export type EditorOptions = Monaco.editor.IEditorOptions & Monaco.editor.IGlobalEditorOptions;
6+
7+
export const EDITOR_OPTIONS: EditorOptions = {
8+
automaticLayout: true,
9+
selectOnLineNumbers: true,
10+
minimap: {
11+
enabled: false,
12+
},
13+
};
14+
15+
export function useEditorOptions() {
16+
const [enableAutocomplete] = useSetting(ENABLE_AUTOCOMPLETE);
17+
18+
const options = useMemo<EditorOptions>(() => {
19+
const useAutocomplete = Boolean(enableAutocomplete);
20+
return {
21+
quickSuggestions: useAutocomplete,
22+
suggestOnTriggerCharacters: useAutocomplete,
23+
...EDITOR_OPTIONS,
24+
};
25+
}, [enableAutocomplete]);
26+
27+
return options;
28+
}

src/containers/UserSettings/i18n/en.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
"page.experiments": "Experiments",
66
"section.experiments": "Experiments",
77

8+
"page.editor": "Editor",
9+
"section.dev-setting": "Development settings",
10+
11+
"settings.editor.autocomplete.title": "Enable autocomplete",
12+
"settings.editor.autocomplete.description": "You’re always able to get suggestions by pressing Ctrl+Space.",
13+
814
"settings.theme.title": "Interface theme",
915
"settings.theme.option-dark": "Dark",
1016
"settings.theme.option-light": "Light",

src/containers/UserSettings/settings.tsx

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type {IconProps} from '@gravity-ui/uikit';
22

3-
import favoriteFilledIcon from '../../assets/icons/star.svg';
4-
import flaskIcon from '../../assets/icons/flask.svg';
3+
import {PencilToSquare, Flask, StarFill} from '@gravity-ui/icons';
54

65
import {
76
INVERTED_DISKS_KEY,
@@ -11,6 +10,7 @@ import {
1110
USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
1211
QUERY_USE_MULTI_SCHEMA_KEY,
1312
BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
13+
ENABLE_AUTOCOMPLETE,
1414
} from '../../utils/constants';
1515
import {Lang, defaultLang} from '../../utils/i18n';
1616

@@ -107,6 +107,12 @@ export const queryUseMultiSchemaSetting: SettingProps = {
107107
helpPopoverContent: i18n('settings.queryUseMultiSchema.popover'),
108108
};
109109

110+
export const enableAutocompleteSetting: SettingProps = {
111+
settingKey: ENABLE_AUTOCOMPLETE,
112+
title: i18n('settings.editor.autocomplete.title'),
113+
description: i18n('settings.editor.autocomplete.description'),
114+
};
115+
110116
export const appearanceSection: SettingsSection = {
111117
id: 'appearanceSection',
112118
title: i18n('section.appearance'),
@@ -117,18 +123,29 @@ export const experimentsSection: SettingsSection = {
117123
title: i18n('section.experiments'),
118124
settings: [useNodesEndpointSetting, useVirtualTables, queryUseMultiSchemaSetting],
119125
};
126+
export const devSettingsSection: SettingsSection = {
127+
id: 'devSettingsSection',
128+
title: i18n('section.dev-setting'),
129+
settings: [enableAutocompleteSetting],
130+
};
120131

121132
export const generalPage: SettingsPage = {
122133
id: 'generalPage',
123134
title: i18n('page.general'),
124-
icon: {data: favoriteFilledIcon, height: 14, width: 14},
135+
icon: {data: StarFill, height: 14, width: 14},
125136
sections: [appearanceSection],
126137
};
127138
export const experimentsPage: SettingsPage = {
128139
id: 'experimentsPage',
129140
title: i18n('page.experiments'),
130-
icon: {data: flaskIcon},
141+
icon: {data: Flask},
131142
sections: [experimentsSection],
132143
};
144+
export const editorPage: SettingsPage = {
145+
id: 'editorPage',
146+
title: i18n('page.editor'),
147+
icon: {data: PencilToSquare},
148+
sections: [devSettingsSection],
149+
};
133150

134-
export const settings: YDBEmbeddedUISettings = [generalPage, experimentsPage];
151+
export const settings: YDBEmbeddedUISettings = [generalPage, editorPage, experimentsPage];

src/services/settings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
1616
USE_CLUSTER_BALANCER_AS_BACKEND_KEY,
1717
BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
18+
ENABLE_AUTOCOMPLETE,
1819
} from '../utils/constants';
1920
import {QUERY_ACTIONS, QUERY_MODES} from '../utils/query';
2021
import {parseJson} from '../utils/utils';
@@ -37,6 +38,7 @@ export const DEFAULT_USER_SETTINGS: SettingsObject = {
3738
[PARTITIONS_HIDDEN_COLUMNS_KEY]: [],
3839
[USE_BACKEND_PARAMS_FOR_TABLES_KEY]: false,
3940
[USE_CLUSTER_BALANCER_AS_BACKEND_KEY]: true,
41+
[ENABLE_AUTOCOMPLETE]: false,
4042
};
4143

4244
class SettingsManager {

src/utils/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,5 @@ export const USE_BACKEND_PARAMS_FOR_TABLES_KEY = 'useBackendParamsForTables';
130130
export const QUERY_USE_MULTI_SCHEMA_KEY = 'queryUseMultiSchema';
131131

132132
export const USE_CLUSTER_BALANCER_AS_BACKEND_KEY = 'useClusterBalancerAsBacked';
133+
134+
export const ENABLE_AUTOCOMPLETE = 'enableAutocomplete';

src/utils/yqlSuggestions/constants.ts

Lines changed: 2 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,8 @@ export const SimpleFunctions = [
8989
'Unwrap',
9090
'Nothing',
9191
'Callable',
92-
'Pickle',
93-
'StablePickle',
94-
'Unpickle',
9592
'StaticMap',
9693
'StaticZip',
97-
'AggregationFactory',
98-
'AggregateTransformInput',
99-
'AggregateTransformOutput',
100-
'AggregateFlatten',
10194
'ListCreate',
10295
'AsListStrict',
10396
'ListLength',
@@ -380,10 +373,6 @@ const RawUdfs = {
380373
'UnescapeC',
381374
],
382375

383-
Compress: ['BZip2', 'Brotli', 'Gzip', 'Lzma', 'Snappy', 'Zlib', 'Zstd'],
384-
385-
TryDecompress: ['BZip2', 'Brotli', 'Gzip', 'Lzma', 'Snappy', 'Xz', 'Zlib', 'Zstd'],
386-
387376
Unicode: [
388377
'Find',
389378
'Fold',
@@ -658,8 +647,6 @@ const RawUdfs = {
658647
'Replace',
659648
],
660649

661-
Protobuf: ['Parse', 'Serialize', 'TryParse'],
662-
663650
Digest: [
664651
'Argon2',
665652
'Blake2B',
@@ -692,8 +679,6 @@ const RawUdfs = {
692679
'XXH3_128',
693680
],
694681

695-
Decompress: ['BZip2', 'Brotli', 'Gzip', 'Lzma', 'Snappy', 'Xz', 'Zlib', 'Zstd'],
696-
697682
Histogram: [
698683
'CalcLowerBound',
699684
'CalcLowerBoundSafe',
@@ -724,47 +709,6 @@ export const WindowFunctions = [
724709
'SessionState',
725710
];
726711

727-
export const TableFunction = [
728-
'CONCAT',
729-
'EACH',
730-
'RANGE',
731-
'LIKE',
732-
'REGEXP',
733-
'CONCAT_STRICT',
734-
'RANGE_STRICT',
735-
'FILTER',
736-
'FOLDER',
737-
'WalkFolders',
738-
];
712+
export const TableFunction = [];
739713

740-
export const Pragmas = [
741-
'TablePathPrefix',
742-
'AnsiInForEmptyOrNullableItemsCollections',
743-
'File',
744-
'Folder',
745-
'Library',
746-
'Warning',
747-
'package',
748-
'override_library',
749-
'AutoCommit',
750-
'DqEngine',
751-
'SimpleColumns',
752-
'DisableSimpleColumns',
753-
'CoalesceJoinKeysOnQualifiedAll',
754-
'StrictJoinKeyTypes',
755-
'AnsiRankForNullableKeys',
756-
'AnsiCurrentRow',
757-
'AnsiOrderByLimitInUnionAll',
758-
'OrderedColumns',
759-
'DisableOrderedColumns',
760-
'PositionalUnionAll',
761-
'RegexUseRe2',
762-
'ClassicDivision',
763-
'AllowDotInAlias',
764-
'WarnUnnamedColumns',
765-
'GroupByLimit',
766-
'GroupByCubeLimit',
767-
'config.flags',
768-
'kikimr.IsolationLevel',
769-
'Kikimr.ScanQuery',
770-
];
714+
export const Pragmas = ['TablePathPrefix', 'Warning'];

0 commit comments

Comments
 (0)