Skip to content

Commit d7f71e7

Browse files
[Data plugin] Add configuration property to enable / disable autocomplete (#67847)
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com> # Conflicts: # src/plugins/data/public/plugin.ts # src/plugins/data/public/public.api.md # src/plugins/data/server/server.api.md
1 parent 3610e9e commit d7f71e7

16 files changed

Lines changed: 190 additions & 101 deletions

docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin._constructor_.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ Constructs a new instance of the `DataPublicPlugin` class
99
<b>Signature:</b>
1010

1111
```typescript
12-
constructor(initializerContext: PluginInitializerContext);
12+
constructor(initializerContext: PluginInitializerContext<ConfigSchema>);
1313
```
1414

1515
## Parameters
1616

1717
| Parameter | Type | Description |
1818
| --- | --- | --- |
19-
| initializerContext | <code>PluginInitializerContext</code> | |
19+
| initializerContext | <code>PluginInitializerContext&lt;ConfigSchema&gt;</code> | |
2020

docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
<b>Signature:</b>
88

99
```typescript
10-
export declare function plugin(initializerContext: PluginInitializerContext): DataPublicPlugin;
10+
export declare function plugin(initializerContext: PluginInitializerContext<ConfigSchema>): DataPublicPlugin;
1111
```
1212

1313
## Parameters
1414

1515
| Parameter | Type | Description |
1616
| --- | --- | --- |
17-
| initializerContext | <code>PluginInitializerContext</code> | |
17+
| initializerContext | <code>PluginInitializerContext&lt;ConfigSchema&gt;</code> | |
1818

1919
<b>Returns:</b>
2020

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
2+
3+
[Home](./index.md) &gt; [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) &gt; [config](./kibana-plugin-plugins-data-server.config.md)
4+
5+
## config variable
6+
7+
<b>Signature:</b>
8+
9+
```typescript
10+
config: PluginConfigDescriptor<ConfigSchema>
11+
```

docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
| Function | Description |
2424
| --- | --- |
2525
| [getDefaultSearchParams(config)](./kibana-plugin-plugins-data-server.getdefaultsearchparams.md) | |
26-
| [getTotalLoaded({ total, failed, successful })](./kibana-plugin-plugins-data-server.gettotalloaded.md) | |
2726
| [parseInterval(interval)](./kibana-plugin-plugins-data-server.parseinterval.md) | |
2827
| [plugin(initializerContext)](./kibana-plugin-plugins-data-server.plugin.md) | Static code to be shared externally |
2928
| [shouldReadFieldFromDocValues(aggregatable, esType)](./kibana-plugin-plugins-data-server.shouldreadfieldfromdocvalues.md) | |
@@ -56,6 +55,7 @@
5655
| Variable | Description |
5756
| --- | --- |
5857
| [castEsToKbnFieldTypeName](./kibana-plugin-plugins-data-server.castestokbnfieldtypename.md) | Get the KbnFieldType name for an esType string |
58+
| [config](./kibana-plugin-plugins-data-server.config.md) | |
5959
| [esFilters](./kibana-plugin-plugins-data-server.esfilters.md) | |
6060
| [esKuery](./kibana-plugin-plugins-data-server.eskuery.md) | |
6161
| [esQuery](./kibana-plugin-plugins-data-server.esquery.md) | |

docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin._constructor_.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ Constructs a new instance of the `DataServerPlugin` class
99
<b>Signature:</b>
1010

1111
```typescript
12-
constructor(initializerContext: PluginInitializerContext);
12+
constructor(initializerContext: PluginInitializerContext<ConfigSchema>);
1313
```
1414

1515
## Parameters
1616

1717
| Parameter | Type | Description |
1818
| --- | --- | --- |
19-
| initializerContext | <code>PluginInitializerContext</code> | |
19+
| initializerContext | <code>PluginInitializerContext&lt;ConfigSchema&gt;</code> | |
2020

docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ Static code to be shared externally
99
<b>Signature:</b>
1010

1111
```typescript
12-
export declare function plugin(initializerContext: PluginInitializerContext): DataServerPlugin;
12+
export declare function plugin(initializerContext: PluginInitializerContext<ConfigSchema>): DataServerPlugin;
1313
```
1414

1515
## Parameters
1616

1717
| Parameter | Type | Description |
1818
| --- | --- | --- |
19-
| initializerContext | <code>PluginInitializerContext</code> | |
19+
| initializerContext | <code>PluginInitializerContext&lt;ConfigSchema&gt;</code> | |
2020

2121
<b>Returns:</b>
2222

src/plugins/data/config.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Licensed to Elasticsearch B.V. under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch B.V. licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
import { schema, TypeOf } from '@kbn/config-schema';
21+
22+
export const configSchema = schema.object({
23+
autocomplete: schema.object({
24+
querySuggestions: schema.object({
25+
enabled: schema.boolean({ defaultValue: true }),
26+
}),
27+
valueSuggestions: schema.object({
28+
enabled: schema.boolean({ defaultValue: true }),
29+
}),
30+
}),
31+
});
32+
33+
export type ConfigSchema = TypeOf<typeof configSchema>;

src/plugins/data/public/autocomplete/autocomplete_service.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,30 @@
1717
* under the License.
1818
*/
1919

20-
import { CoreSetup } from 'src/core/public';
20+
import { CoreSetup, PluginInitializerContext } from 'src/core/public';
2121
import { QuerySuggestionGetFn } from './providers/query_suggestion_provider';
2222
import {
23+
getEmptyValueSuggestions,
2324
setupValueSuggestionProvider,
2425
ValueSuggestionsGetFn,
2526
} from './providers/value_suggestion_provider';
2627

28+
import { ConfigSchema } from '../../config';
29+
2730
export class AutocompleteService {
31+
autocompleteConfig: ConfigSchema['autocomplete'];
32+
33+
constructor(initializerContext: PluginInitializerContext<ConfigSchema>) {
34+
const { autocomplete } = initializerContext.config.get<ConfigSchema>();
35+
36+
this.autocompleteConfig = autocomplete;
37+
}
38+
2839
private readonly querySuggestionProviders: Map<string, QuerySuggestionGetFn> = new Map();
2940
private getValueSuggestions?: ValueSuggestionsGetFn;
3041

3142
private addQuerySuggestionProvider = (language: string, provider: QuerySuggestionGetFn): void => {
32-
if (language && provider) {
43+
if (language && provider && this.autocompleteConfig.querySuggestions.enabled) {
3344
this.querySuggestionProviders.set(language, provider);
3445
}
3546
};
@@ -47,7 +58,9 @@ export class AutocompleteService {
4758

4859
/** @public **/
4960
public setup(core: CoreSetup) {
50-
this.getValueSuggestions = setupValueSuggestionProvider(core);
61+
this.getValueSuggestions = this.autocompleteConfig.valueSuggestions.enabled
62+
? setupValueSuggestionProvider(core)
63+
: getEmptyValueSuggestions;
5164

5265
return {
5366
addQuerySuggestionProvider: this.addQuerySuggestionProvider,

src/plugins/data/public/autocomplete/providers/value_suggestion_provider.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ interface ValueSuggestionsGetFnArgs {
3838
signal?: AbortSignal;
3939
}
4040

41+
export const getEmptyValueSuggestions = (() => Promise.resolve([])) as ValueSuggestionsGetFn;
42+
4143
export const setupValueSuggestionProvider = (core: CoreSetup): ValueSuggestionsGetFn => {
4244
const requestSuggestions = memoize(
4345
(index: string, field: IFieldType, query: string, boolFilter: any = [], signal?: AbortSignal) =>

src/plugins/data/public/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import './index.scss';
2121

2222
import { PluginInitializerContext } from '../../../core/public';
23+
import { ConfigSchema } from '../config';
2324

2425
/*
2526
* Filters:
@@ -459,7 +460,7 @@ export {
459460

460461
import { DataPublicPlugin } from './plugin';
461462

462-
export function plugin(initializerContext: PluginInitializerContext) {
463+
export function plugin(initializerContext: PluginInitializerContext<ConfigSchema>) {
463464
return new DataPublicPlugin(initializerContext);
464465
}
465466

0 commit comments

Comments
 (0)