-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathVictoriaLogsFieldNamesVariableEditor.tsx
More file actions
96 lines (91 loc) · 3 KB
/
VictoriaLogsFieldNamesVariableEditor.tsx
File metadata and controls
96 lines (91 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Copyright 2025 The Perses Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { FormControl, Stack, TextField } from '@mui/material';
import {
DatasourceSelect,
DatasourceSelectProps,
OptionsEditorProps,
isVariableDatasource,
useDatasourceSelectValueToSelector,
} from '@perses-dev/plugin-system';
import { produce } from 'immer';
import { ReactElement, useCallback } from 'react';
import {
DEFAULT_VICTORIALOGS,
isDefaultVictoriaLogsSelector,
isVictoriaLogsDatasourceSelector,
VICTORIALOGS_DATASOURCE_KIND,
VictoriaLogsDatasourceSelector,
} from '../../model';
import { VictoriaLogsFieldNamesVariableOptions } from '../types';
export function VictoriaLogsFieldNamesVariableEditor(
props: OptionsEditorProps<VictoriaLogsFieldNamesVariableOptions>
): ReactElement {
const {
onChange,
value,
value: { datasource, query },
} = props;
const datasourceSelectValue = datasource ?? DEFAULT_VICTORIALOGS;
const selectedDatasource = useDatasourceSelectValueToSelector(
datasourceSelectValue,
VICTORIALOGS_DATASOURCE_KIND
) as VictoriaLogsDatasourceSelector;
const handleDatasourceChange: DatasourceSelectProps['onChange'] = useCallback(
(next) => {
if (isVariableDatasource(next) || isVictoriaLogsDatasourceSelector(next)) {
onChange(
produce(value, (draft) => {
draft.datasource = !isVariableDatasource(next) && isDefaultVictoriaLogsSelector(next) ? undefined : next;
})
);
return;
}
throw new Error('Got unexpected non-VictoriaLogs datasource selector');
},
[onChange, value]
);
const handleQueryChange = useCallback(
(event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
onChange(
produce(value, (draft) => {
draft.query = event.target.value;
})
);
},
[onChange, value]
);
return (
<Stack spacing={2}>
<FormControl margin="dense">
<DatasourceSelect
datasourcePluginKind="VictoriaLogsDatasource"
value={selectedDatasource}
onChange={handleDatasourceChange}
disabled={props.isReadonly}
labelId="victorialogs-datasource-field"
label="VictoriaLogs Datasource"
/>
</FormControl>
<TextField
label="Query"
InputLabelProps={{ shrink: props.isReadonly ? true : undefined }}
InputProps={{
readOnly: props.isReadonly,
}}
value={query}
onChange={handleQueryChange}
/>
</Stack>
);
}