import debounce from 'debounce-promise'; import { SelectableValue, toOption } from '@grafana/data'; import { Select, Input, InlineFormLabel, AsyncSelect, Stack, InlineLabel } from '@grafana/ui'; import { OpenTsdbQuery } from '../types'; export interface MetricSectionProps { query: OpenTsdbQuery; onChange: (query: OpenTsdbQuery) => void; onRunQuery: () => void; suggestMetrics: (value: string) => Promise; aggregators: string[]; } export function MetricSection({ query, onChange, onRunQuery, suggestMetrics, aggregators }: MetricSectionProps) { const aggregatorOptions = aggregators.map((value: string) => toOption(value)); const metricSearch = debounce((query: string) => suggestMetrics(query), 350); return ( Metric {/* metric async select: autocomplete calls opentsdb suggest API */} { if (value) { onChange({ ...query, metric: value }); onRunQuery(); } }} /> Aggregator { const value = e.currentTarget.value; onChange({ ...query, alias: value }); }} onBlur={() => onRunQuery()} /> ); } export const testIds = { section: 'opentsdb-metricsection', alias: 'metric-alias', };