import _ from 'lodash'; import React, { PureComponent } from 'react'; // Types import { FormLabel, Select, Switch } from '@grafana/ui'; import { SelectableValue, QueryEditorProps } from '@grafana/data'; import { PrometheusDatasource } from '../datasource'; import { PromQuery, PromOptions } from '../types'; import PromQueryField from './PromQueryField'; import PromLink from './PromLink'; export type Props = QueryEditorProps; const FORMAT_OPTIONS: Array> = [ { label: 'Time series', value: 'time_series' }, { label: 'Table', value: 'table' }, { label: 'Heatmap', value: 'heatmap' }, ]; const INTERVAL_FACTOR_OPTIONS: Array> = _.map([1, 2, 3, 4, 5, 10], (value: number) => ({ value, label: '1/' + value, })); interface State { legendFormat: string; formatOption: SelectableValue; interval: string; intervalFactorOption: SelectableValue; instant: boolean; } export class PromQueryEditor extends PureComponent { // Query target to be modified and used for queries query: PromQuery; constructor(props: Props) { super(props); const { query } = props; this.query = query; // Query target properties that are fully controlled inputs this.state = { // Fully controlled text inputs interval: query.interval, legendFormat: query.legendFormat, // Select options formatOption: FORMAT_OPTIONS.find(option => option.value === query.format) || FORMAT_OPTIONS[0], intervalFactorOption: INTERVAL_FACTOR_OPTIONS.find(option => option.value === query.intervalFactor) || INTERVAL_FACTOR_OPTIONS[0], // Switch options instant: Boolean(query.instant), }; } onFieldChange = (query: PromQuery, override?: any) => { this.query.expr = query.expr; }; onFormatChange = (option: SelectableValue) => { this.query.format = option.value; this.setState({ formatOption: option }, this.onRunQuery); }; onInstantChange = (e: React.ChangeEvent) => { const instant = e.target.checked; this.query.instant = instant; this.setState({ instant }, this.onRunQuery); }; onIntervalChange = (e: React.SyntheticEvent) => { const interval = e.currentTarget.value; this.query.interval = interval; this.setState({ interval }); }; onIntervalFactorChange = (option: SelectableValue) => { this.query.intervalFactor = option.value; this.setState({ intervalFactorOption: option }, this.onRunQuery); }; onLegendChange = (e: React.SyntheticEvent) => { const legendFormat = e.currentTarget.value; this.query.legendFormat = legendFormat; this.setState({ legendFormat }); }; onRunQuery = () => { const { query } = this; this.props.onChange(query); this.props.onRunQuery(); }; render() { const { datasource, query, data } = this.props; const { formatOption, instant, interval, intervalFactorOption, legendFormat } = this.state; return (
Legend
Min step
Resolution
); } }