@@ -12,34 +12,20 @@ import {
12
12
useTheme ,
13
13
InfoBox ,
14
14
} from '@grafana/ui' ;
15
- import { SelectableValue , FieldType , TimeRange } from '@grafana/data' ;
16
- import { JsonApiQuery , defaultQuery } from '../types' ;
15
+ import { SelectableValue , FieldType , QueryEditorProps } from '@grafana/data' ;
16
+ import { JsonApiQuery , defaultQuery , JsonApiDataSourceOptions } from '../types' ;
17
17
import { JsonPathQueryField } from './JsonPathQueryField' ;
18
18
import { KeyValueEditor } from './KeyValueEditor' ;
19
19
import AutoSizer from 'react-virtualized-auto-sizer' ;
20
20
import { css } from 'emotion' ;
21
21
import { Pair } from '../types' ;
22
22
import { JsonDataSource } from 'datasource' ;
23
23
24
- interface Props {
25
- onRunQuery : ( ) => void ;
26
- onChange : ( query : JsonApiQuery ) => void ;
27
- query : JsonApiQuery ;
24
+ interface Props extends QueryEditorProps < JsonDataSource , JsonApiQuery , JsonApiDataSourceOptions > {
28
25
limitFields ?: number ;
29
- datasource : JsonDataSource ;
30
- range ?: TimeRange ;
31
- disableSuggestions : boolean ;
32
26
}
33
27
34
- export const QueryEditor : React . FC < Props > = ( {
35
- onRunQuery,
36
- onChange,
37
- query,
38
- limitFields,
39
- datasource,
40
- range,
41
- disableSuggestions,
42
- } ) => {
28
+ export const QueryEditor : React . FC < Props > = ( { onRunQuery, onChange, query, limitFields, datasource, range } ) => {
43
29
const [ bodyType , setBodyType ] = useState ( 'plaintext' ) ;
44
30
const [ tabIndex , setTabIndex ] = useState ( 0 ) ;
45
31
const theme = useTheme ( ) ;
@@ -77,31 +63,36 @@ export const QueryEditor: React.FC<Props> = ({
77
63
} ;
78
64
79
65
const onChangePath = ( i : number ) => ( e : string ) => {
80
- fields [ i ] = { ...fields [ i ] , jsonPath : e } ;
81
- onChange ( { ...query , fields } ) ;
66
+ onChange ( {
67
+ ...query ,
68
+ fields : fields . map ( ( field , n ) => ( i === n ? { ...fields [ i ] , jsonPath : e } : field ) ) ,
69
+ } ) ;
82
70
} ;
83
71
84
72
const onChangeType = ( i : number ) => ( e : SelectableValue < string > ) => {
85
- fields [ i ] = { ...fields [ i ] , type : ( e . value === 'auto' ? undefined : e . value ) as FieldType } ;
86
- onChange ( { ...query , fields } ) ;
73
+ onChange ( {
74
+ ...query ,
75
+ fields : fields . map ( ( field , n ) =>
76
+ i === n ? { ...fields [ i ] , type : ( e . value === 'auto' ? undefined : e . value ) as FieldType } : field
77
+ ) ,
78
+ } ) ;
87
79
onRunQuery ( ) ;
88
80
} ;
89
81
90
82
const addField = ( i : number ) => ( ) => {
91
- console . log ( limitFields , fields . length ) ;
92
83
if ( ! limitFields || fields . length < limitFields ) {
93
- if ( fields ) {
94
- fields . splice ( i + 1 , 0 , { name : '' , jsonPath : '' } ) ;
95
- }
96
- onChange ( { ... query , fields } ) ;
84
+ onChange ( {
85
+ ... query ,
86
+ fields : [ ... fields . slice ( 0 , i + 1 ) , { name : '' , jsonPath : '' } , ... fields . slice ( i + 1 ) ] ,
87
+ } ) ;
97
88
}
98
89
} ;
99
90
100
91
const removeField = ( i : number ) => ( ) => {
101
- if ( fields ) {
102
- fields . splice ( i , 1 ) ;
103
- }
104
- onChange ( { ... query , fields } ) ;
92
+ onChange ( {
93
+ ... query ,
94
+ fields : [ ... fields . slice ( 0 , i ) , ... fields . slice ( i + 1 ) ] ,
95
+ } ) ;
105
96
onRunQuery ( ) ;
106
97
} ;
107
98
@@ -125,7 +116,6 @@ export const QueryEditor: React.FC<Props> = ({
125
116
onBlur = { onRunQuery }
126
117
onChange = { onChangePath ( index ) }
127
118
query = { field . jsonPath }
128
- suggestions = { ! disableSuggestions }
129
119
onData = { ( ) => datasource . metadataRequest ( query , range ) }
130
120
/>
131
121
</ InlineField >
0 commit comments