mirror of
https://github.com/grafana/grafana.git
synced 2025-09-18 18:02:53 +08:00

* First draft autocomplete * Better naming * Change suggestion to table/column population * Remove all suggestions, just use table/column population but trigger on space * Gate feature flag behind a feature flag * Reorganize and add function list * Add blurb about autocomplete to docs * Update public/app/features/expressions/utils/metaSqlExpr.ts Co-authored-by: Alex Spencer <52186778+alexjonspencer1@users.noreply.github.com> * Add try catch, remove promise resolve --------- Co-authored-by: Alex Spencer <52186778+alexjonspencer1@users.noreply.github.com>
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { SelectableValue } from '@grafana/data';
|
|
import { ColumnDefinition, LanguageCompletionProvider, TableDefinition, TableIdentifier } from '@grafana/plugin-ui';
|
|
import { config } from '@grafana/runtime';
|
|
|
|
import { ALLOWED_FUNCTIONS } from '../utils/metaSqlExpr';
|
|
|
|
interface CompletionProviderGetterArgs {
|
|
getFields: (t: TableIdentifier) => Promise<ColumnDefinition[]>;
|
|
refIds: Array<SelectableValue<string>>;
|
|
}
|
|
|
|
export const getSqlCompletionProvider: (args: CompletionProviderGetterArgs) => LanguageCompletionProvider =
|
|
(args) => (monaco, language) => ({
|
|
...language,
|
|
triggerCharacters: [' '],
|
|
tables: {
|
|
resolve: async () => {
|
|
const refIdsToTableDefs = args.refIds.map((refId) => {
|
|
const tableDef: TableDefinition = {
|
|
name: refId.label || refId.value || '',
|
|
completion: refId.label || refId.value || '',
|
|
};
|
|
return tableDef;
|
|
});
|
|
return refIdsToTableDefs;
|
|
},
|
|
},
|
|
columns: {
|
|
resolve: async (t?: TableIdentifier) => {
|
|
if (config.featureToggles.sqlExpressionsColumnAutoComplete) {
|
|
try {
|
|
return await args.getFields({ table: t?.table });
|
|
} catch {
|
|
return [];
|
|
}
|
|
} else {
|
|
return [];
|
|
}
|
|
},
|
|
},
|
|
supportedFunctions: () => {
|
|
return ALLOWED_FUNCTIONS.map((func) => {
|
|
return { id: func, name: func };
|
|
});
|
|
},
|
|
});
|