|
1 | 1 | import React, { useState } from 'react'; |
2 | | -import { HaystackQuery, HaystackVariableQuery } from '../types'; |
| 2 | +import { HaystackVariableQuery } from '../types'; |
3 | 3 | import { HaystackQueryTypeSelector } from './HaystackQueryTypeSelector'; |
4 | 4 | import { HaystackQueryInput } from './HaystackQueryInput'; |
| 5 | +import { InlineField, Input } from '@grafana/ui'; |
5 | 6 |
|
6 | 7 | interface VariableQueryProps { |
7 | 8 | query: HaystackVariableQuery; |
8 | 9 | onChange: (query: HaystackVariableQuery, definition: string) => void; |
9 | 10 | } |
10 | 11 |
|
11 | | -const blankQuery: Partial<HaystackQuery> = { |
12 | | - refId: "variable", |
13 | | - type: '', |
14 | | - eval: '', |
15 | | - hisRead: '', |
16 | | - read: '', |
17 | | -}; |
| 12 | +const refId = "variable"; |
18 | 13 |
|
19 | 14 | export const VariableQueryEditor: React.FC<VariableQueryProps> = ({ onChange, query: variableQuery }) => { |
20 | | - const [state, setState] = useState(variableQuery); |
| 15 | + const [query, setState] = useState(variableQuery); |
21 | 16 |
|
22 | 17 | const saveQuery = () => { |
23 | | - let query = state.query ?? blankQuery |
| 18 | + // refId must match but doesn't get set originally so set should set it on every change |
| 19 | + setState({ ...query, refId: refId}); |
| 20 | + |
24 | 21 | let type = query.type; |
25 | 22 | let queryCmd = ""; |
26 | | - if (query.type === "hisRead") { |
27 | | - queryCmd = query.hisRead |
28 | | - } else if (query.type === "eval") { |
| 23 | + if (query.type === "eval") { |
29 | 24 | queryCmd = query.eval |
| 25 | + } else if (query.type === "hisRead") { |
| 26 | + queryCmd = query.hisRead |
| 27 | + } else if (query.type === "hisReadFilter") { |
| 28 | + queryCmd = query.hisReadFilter |
30 | 29 | } else if (query.type === "read") { |
31 | 30 | queryCmd = query.read |
32 | 31 | } |
33 | 32 | let column = "none"; |
34 | | - if (state.column !== undefined && state.column !== '') { |
35 | | - column = `'${state.column}'`; |
| 33 | + if (query.column !== undefined && query.column !== '') { |
| 34 | + column = `'${query.column}'`; |
36 | 35 | } |
37 | | - onChange(state, `Type: '${type}' Query: '${queryCmd}' Column: ${column}`); |
| 36 | + let displayString = `${type}: '${queryCmd}', Column: ${column}` |
| 37 | + onChange(query, displayString); |
38 | 38 | }; |
39 | 39 |
|
40 | 40 | const onTypeChange = (newType: string) => { |
41 | | - let query = {...state.query ?? blankQuery}; |
42 | | - query.type = newType; |
43 | | - setState({ ...state, query: query}); |
| 41 | + setState({ ...query, type: newType}); |
44 | 42 | }; |
45 | 43 |
|
46 | 44 | const onQueryChange = (newQuery: string) => { |
47 | | - let query = {...state.query ?? blankQuery}; |
48 | | - if (state.query.type === "hisRead") { |
49 | | - query.hisRead = newQuery |
50 | | - } else if (state.query.type === "eval") { |
51 | | - query.eval = newQuery |
52 | | - } else if (state.query.type === "read") { |
53 | | - query.read = newQuery |
| 45 | + if (query.type === "eval") { |
| 46 | + setState({ ...query, eval: newQuery }); |
| 47 | + } else if (query.type === "hisRead") { |
| 48 | + setState({ ...query, hisRead: newQuery }); |
| 49 | + } else if (query.type === "hisReadFilter") { |
| 50 | + setState({ ...query, hisReadFilter: newQuery }); |
| 51 | + } else if (query.type === "read") { |
| 52 | + setState({ ...query, read: newQuery }); |
54 | 53 | } |
55 | | - setState({ ...state, query: query}); |
56 | 54 | }; |
57 | 55 |
|
58 | 56 | const onColumnChange = (event: React.FormEvent<HTMLInputElement>) => { |
59 | | - setState({...state, column: event.currentTarget.value,}); |
| 57 | + setState({...query, column: event.currentTarget.value,}); |
60 | 58 | }; |
61 | 59 |
|
62 | 60 | return ( |
63 | 61 | <div onBlur={saveQuery}> |
64 | 62 | <HaystackQueryTypeSelector |
65 | 63 | datasource={null} |
66 | | - type={state.query?.type ?? blankQuery.type} |
67 | | - refId={state.query?.refId ?? blankQuery.refId} |
| 64 | + type={query.type} |
| 65 | + refId={query.refId ?? refId} |
68 | 66 | onChange={onTypeChange} |
69 | 67 | /> |
70 | 68 | <HaystackQueryInput |
71 | | - query={state.query ?? blankQuery} |
| 69 | + query={query} |
72 | 70 | onChange={onQueryChange} |
73 | 71 | /> |
74 | | - <div className="gf-form"> |
75 | | - <span className="gf-form-label width-10">Column</span> |
76 | | - <input |
77 | | - name="column" |
78 | | - className="gf-form-input" |
| 72 | + <InlineField label="Column"> |
| 73 | + <Input |
79 | 74 | onChange={onColumnChange} |
80 | | - value={state.column} |
| 75 | + value={query.column} |
81 | 76 | /> |
82 | | - </div> |
| 77 | + </InlineField> |
83 | 78 | </div> |
84 | 79 | ); |
85 | 80 | }; |
0 commit comments