import React, { PureComponent } from 'react'; import { parseLegacyVariableQuery } from '../utils'; import { Select, Input } from '@grafana/ui'; import { SelectableValue } from '@grafana/data'; import { VariableQuery, VariableQueryTypes, VariableQueryProps, VariableQueryData } from '../types'; import { ZabbixInput } from './ZabbixInput'; // FormLabel was renamed to InlineFormLabel in Grafana 7.0 import * as grafanaUi from '@grafana/ui'; const FormLabel = grafanaUi.FormLabel || (grafanaUi as any).InlineFormLabel; export class ZabbixVariableQueryEditor extends PureComponent { queryTypes: Array> = [ { value: VariableQueryTypes.Group, label: 'Group'}, { value: VariableQueryTypes.Host, label: 'Host' }, { value: VariableQueryTypes.Application, label: 'Application' }, { value: VariableQueryTypes.Item, label: 'Item' }, ]; defaults: VariableQueryData = { selectedQueryType: { value: VariableQueryTypes.Group, label: 'Group' }, queryType: VariableQueryTypes.Group, group: '/.*/', host: '', application: '', item: '', }; constructor(props: VariableQueryProps) { super(props); if (this.props.query && typeof this.props.query === 'string') { // Backward compatibility const query = parseLegacyVariableQuery(this.props.query); const selectedQueryType = this.getSelectedQueryType(query.queryType); this.state = { selectedQueryType, legacyQuery: this.props.query, ...query }; } else if (this.props.query) { const query = (this.props.query as VariableQuery); const selectedQueryType = this.getSelectedQueryType(query.queryType); this.state = { ...this.defaults, ...query, selectedQueryType, }; } else { this.state = this.defaults; } } getSelectedQueryType(queryType: VariableQueryTypes) { return this.queryTypes.find(q => q.value === queryType); } handleQueryUpdate = (evt: React.ChangeEvent, prop: string) => { const value = evt.currentTarget.value; this.setState((prevState: VariableQueryData) => { const newQuery = { ...prevState, }; newQuery[prop] = value; return { ...newQuery, }; }); } handleQueryChange = () => { const { queryType, group, host, application, item } = this.state; const queryModel = { queryType, group, host, application, item }; this.props.onChange(queryModel, `Zabbix - ${queryType}`); } handleQueryTypeChange = (selectedItem: SelectableValue) => { this.setState({ ...this.state, selectedQueryType: selectedItem, queryType: selectedItem.value, }); const { group, host, application, item } = this.state; const queryType = selectedItem.value; const queryModel = { queryType, group, host, application, item }; this.props.onChange(queryModel, `Zabbix - ${queryType}`); } render() { const { selectedQueryType, legacyQuery, group, host, application, item } = this.state; return ( <>
Query Type
} ); } }