Skip to content

Commit 137c800

Browse files
refactor: Refactor variable editor
1 parent 3af4b37 commit 137c800

File tree

3 files changed

+36
-41
lines changed

3 files changed

+36
-41
lines changed
Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,80 @@
11
import React, { useState } from 'react';
2-
import { HaystackQuery, HaystackVariableQuery } from '../types';
2+
import { HaystackVariableQuery } from '../types';
33
import { HaystackQueryTypeSelector } from './HaystackQueryTypeSelector';
44
import { HaystackQueryInput } from './HaystackQueryInput';
5+
import { InlineField, Input } from '@grafana/ui';
56

67
interface VariableQueryProps {
78
query: HaystackVariableQuery;
89
onChange: (query: HaystackVariableQuery, definition: string) => void;
910
}
1011

11-
const blankQuery: Partial<HaystackQuery> = {
12-
refId: "variable",
13-
type: '',
14-
eval: '',
15-
hisRead: '',
16-
read: '',
17-
};
12+
const refId = "variable";
1813

1914
export const VariableQueryEditor: React.FC<VariableQueryProps> = ({ onChange, query: variableQuery }) => {
20-
const [state, setState] = useState(variableQuery);
15+
const [query, setState] = useState(variableQuery);
2116

2217
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+
2421
let type = query.type;
2522
let queryCmd = "";
26-
if (query.type === "hisRead") {
27-
queryCmd = query.hisRead
28-
} else if (query.type === "eval") {
23+
if (query.type === "eval") {
2924
queryCmd = query.eval
25+
} else if (query.type === "hisRead") {
26+
queryCmd = query.hisRead
27+
} else if (query.type === "hisReadFilter") {
28+
queryCmd = query.hisReadFilter
3029
} else if (query.type === "read") {
3130
queryCmd = query.read
3231
}
3332
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}'`;
3635
}
37-
onChange(state, `Type: '${type}' Query: '${queryCmd}' Column: ${column}`);
36+
let displayString = `${type}: '${queryCmd}', Column: ${column}`
37+
onChange(query, displayString);
3838
};
3939

4040
const onTypeChange = (newType: string) => {
41-
let query = {...state.query ?? blankQuery};
42-
query.type = newType;
43-
setState({ ...state, query: query});
41+
setState({ ...query, type: newType});
4442
};
4543

4644
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 });
5453
}
55-
setState({ ...state, query: query});
5654
};
5755

5856
const onColumnChange = (event: React.FormEvent<HTMLInputElement>) => {
59-
setState({...state, column: event.currentTarget.value,});
57+
setState({...query, column: event.currentTarget.value,});
6058
};
6159

6260
return (
6361
<div onBlur={saveQuery}>
6462
<HaystackQueryTypeSelector
6563
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}
6866
onChange={onTypeChange}
6967
/>
7068
<HaystackQueryInput
71-
query={state.query ?? blankQuery}
69+
query={query}
7270
onChange={onQueryChange}
7371
/>
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
7974
onChange={onColumnChange}
80-
value={state.column}
75+
value={query.column}
8176
/>
82-
</div>
77+
</InlineField>
8378
</div>
8479
);
8580
};

src/datasource.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export class DataSource extends DataSourceWithBackend<HaystackQuery, HaystackDat
9898

9999
// This is called when the user is selecting a variable value
100100
async metricFindQuery(variableQuery: HaystackVariableQuery, options?: any) {
101-
let request: HaystackQuery = variableQuery.query;
101+
let request: HaystackQuery = variableQuery;
102102
let observable = this.query({ targets: [request] } as DataQueryRequest<HaystackQuery>);
103103
let response = await firstValueFrom(observable);
104104

src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ export interface QueryType extends SelectableValue<string> {
2828
apiRequirements: string[];
2929
}
3030

31-
export interface HaystackVariableQuery {
32-
query: HaystackQuery;
31+
export interface HaystackVariableQuery extends HaystackQuery {
3332
column: string;
33+
refId: string;
3434
}
3535

3636
export const DEFAULT_QUERY: Partial<HaystackQuery> = {

0 commit comments

Comments
 (0)