import React, { PureComponent } from 'react'; import { parseLegacyVariableQuery } from '../utils'; import { SelectableValue } from '@grafana/data'; import { VariableQuery, VariableQueryData, VariableQueryProps, VariableQueryTypes } from '../types'; import { ZabbixInput } from './ZabbixInput'; import { InlineField, InlineFieldRow, InlineFormLabel, Input, Select } from '@grafana/ui'; export class ZabbixVariableQueryEditor extends PureComponent { queryTypes: Array> = [ { value: VariableQueryTypes.Group, label: 'Group' }, { value: VariableQueryTypes.Host, label: 'Host' }, { value: VariableQueryTypes.Application, label: 'Application' }, { value: VariableQueryTypes.ItemTag, label: 'Item tag' }, { value: VariableQueryTypes.Item, label: 'Item' }, { value: VariableQueryTypes.ItemValues, label: 'Item values' }, ]; defaults: VariableQueryData = { selectedQueryType: { value: VariableQueryTypes.Group, label: 'Group' }, queryType: VariableQueryTypes.Group, group: '/.*/', host: '', application: '', itemTag: '', 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, itemTag, item } = this.state; const queryModel = { queryType, group, host, application, itemTag, item }; this.props.onChange(queryModel, `Zabbix - ${queryType}`); }; handleQueryTypeChange = (selectedItem: SelectableValue) => { this.setState({ ...this.state, selectedQueryType: selectedItem, queryType: selectedItem.value, }); const { group, host, application, itemTag, item } = this.state; const queryType = selectedItem.value; const queryModel = { queryType, group, host, application, itemTag, item }; this.props.onChange(queryModel, `Zabbix - ${queryType}`); }; render() { const { selectedQueryType, legacyQuery, group, host, application, itemTag, item } = this.state; const { datasource } = this.props; const supportsItemTags = datasource?.zabbix?.isZabbix54OrHigherSync() || false; return ( <> )} ); } }