1
1
import { useRef , useEffect } from 'react' ;
2
2
import { type Monaco , type monacoTypes } from '@grafana/ui' ;
3
3
import { languages } from 'monaco-editor' ;
4
+ import { DataSourceApi } from '@grafana/data' ;
4
5
5
6
// Supports JSON only right now
6
7
class CompletionProvider implements monacoTypes . languages . CompletionItemProvider {
7
8
constructor (
9
+ private readonly datasource : DataSourceApi ,
8
10
private readonly monaco : Monaco ,
9
11
private readonly editor : monacoTypes . editor . IStandaloneCodeEditor ,
10
12
) { }
@@ -67,7 +69,7 @@ class CompletionProvider implements monacoTypes.languages.CompletionItemProvider
67
69
{
68
70
label : '"$limit"' ,
69
71
kind : languages . CompletionItemKind . Function ,
70
- insertText : '"\\$match ": ${1:number}' ,
72
+ insertText : '"\\$limit ": ${1:number}' ,
71
73
range : range ,
72
74
detail : 'stage' ,
73
75
insertTextRules : languages . CompletionItemInsertTextRule . InsertAsSnippet ,
@@ -118,7 +120,7 @@ class CompletionProvider implements monacoTypes.languages.CompletionItemProvider
118
120
}
119
121
}
120
122
121
- export function useAutocomplete ( ) {
123
+ export function useAutocomplete ( datasource : DataSourceApi ) {
122
124
const autocompleteDisposeFun = useRef < ( ( ) => void ) | null > ( null ) ;
123
125
useEffect ( ( ) => {
124
126
return ( ) => {
@@ -127,7 +129,7 @@ export function useAutocomplete() {
127
129
} , [ ] ) ;
128
130
129
131
return ( editor : monacoTypes . editor . IStandaloneCodeEditor , monaco : Monaco ) => {
130
- const provider = new CompletionProvider ( monaco , editor ) ;
132
+ const provider = new CompletionProvider ( datasource , monaco , editor ) ;
131
133
const { dispose } = monaco . languages . registerCompletionItemProvider ( 'json' , provider ) ;
132
134
autocompleteDisposeFun . current = dispose ;
133
135
} ;
0 commit comments