Skip to content

Commit 195c0c0

Browse files
committed
Add hover
1 parent e37526f commit 195c0c0

File tree

7 files changed

+240
-228
lines changed

7 files changed

+240
-228
lines changed

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,4 @@ venv/
4343
mongodb-datasource/
4444
grafana-storage/
4545

46-
mongo-docs/
47-
48-
src/editor/completions.json
46+
mongo-docs/

scripts/completions.js

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

src/components/QueryEditorRaw.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useRef, useCallback } from 'react';
22
import { CodeEditor, type MonacoEditor } from '@grafana/ui';
33
import { useAutocomplete } from '../editor/autocomplete';
44
import { useValidation } from '../editor/validation';
5+
import { useHover } from '../editor/hover';
56

67
interface QueryEditorRawProps {
78
query: string;
@@ -17,6 +18,7 @@ export function QueryEditorRaw({ query, onBlur, language, width, height, fontSiz
1718
const monacoRef = useRef<MonacoEditor | null>(null);
1819

1920
const setupAutocompleteFn = useAutocomplete();
21+
const setupHoverFn = useHover();
2022
const setupValidationFn = useValidation();
2123

2224
const formatQuery = useCallback(() => {
@@ -32,6 +34,7 @@ export function QueryEditorRaw({ query, onBlur, language, width, height, fontSiz
3234
monacoRef.current = editor;
3335
setupValidationFn(editor, monaco);
3436
setupAutocompleteFn(editor, monaco);
37+
setupHoverFn(editor, monaco);
3538
}}
3639
height={height || '240px'}
3740
width={width ? `${width - 2}px` : undefined}

src/editor/autocomplete.tsx

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useRef, useEffect } from 'react';
2-
import { type Monaco, type monacoTypes } from '@grafana/ui';
2+
import { type Monaco, type monacoTypes, type MonacoEditor } from '@grafana/ui';
33
import { languages } from 'monaco-editor';
44
import completionData from './completions.json';
55

@@ -9,10 +9,9 @@ interface CompletionState {
99
fields?: string[] | string;
1010
}
1111

12-
1312
// Supports JSON only right now
1413
class CompletionProvider implements monacoTypes.languages.CompletionItemProvider {
15-
constructor(private readonly editor: monacoTypes.editor.IStandaloneCodeEditor) { }
14+
constructor(private readonly editor: MonacoEditor) {}
1615

1716
provideCompletionItems(
1817
model: monacoTypes.editor.ITextModel,
@@ -71,36 +70,34 @@ export function useAutocomplete() {
7170
};
7271
}, []);
7372

74-
return (editor: monacoTypes.editor.IStandaloneCodeEditor, monaco: Monaco) => {
73+
return (editor: MonacoEditor, monaco: Monaco) => {
7574
const provider = new CompletionProvider(editor);
7675
const { dispose } = monaco.languages.registerCompletionItemProvider('json', provider);
7776
autocompleteDisposeFun.current = dispose;
7877
};
7978
}
8079

81-
82-
83-
8480
function createInsertText({ name, fields }: CompletionState) {
8581
if (fields) {
8682
if (Array.isArray(fields)) {
87-
let insertText = `"\\${name}": {\n\t`
83+
let insertText = `"\\${name}": {\n\t`;
8884
for (let i = 0; i < fields.length; i++) {
89-
const field = fields[i]
90-
insertText += `"${field}": \${${i + 1}:${field}}`
85+
const field = fields[i];
86+
insertText += `"${field}": \${${i + 1}:${field}}`;
9187

9288
if (i == 0) {
93-
insertText += '$0'
89+
insertText += '$0';
9490
}
9591

9692
if (i != fields.length - 1) {
97-
insertText += ',\n\t'
93+
insertText += ',\n\t';
9894
}
9995
}
96+
insertText += '\n}';
10097

101-
return insertText
98+
return insertText;
10299
}
103-
return `"\\${name}": \${1:${fields}}`
100+
return `"\\${name}": \${1:${fields}}`;
104101
}
105-
return `"\\${name}": {\n\t$0\n}`
106-
}
102+
return `"\\${name}": {\n\t$0\n}`;
103+
}

0 commit comments

Comments
 (0)