From 70c18508887f50185fbdbb5032aaede070a355c1 Mon Sep 17 00:00:00 2001 From: Brendan O'Handley Date: Thu, 2 Feb 2023 17:46:22 -0500 Subject: [PATCH] OpenTSDB: Allow metric autocomplete to use suggest api on every input (#62045) * allow metric autocomplete by suggest api * debounce sugggest metrics * debounce sugggest metrics with debounce-promise * commit for tests --- .../opentsdb/components/MetricSection.tsx | 37 +++++-------------- .../components/OpenTsdbQueryEditor.tsx | 6 +-- 2 files changed, 11 insertions(+), 32 deletions(-) diff --git a/public/app/plugins/datasource/opentsdb/components/MetricSection.tsx b/public/app/plugins/datasource/opentsdb/components/MetricSection.tsx index e90b7c8e96d..edb3adad010 100644 --- a/public/app/plugins/datasource/opentsdb/components/MetricSection.tsx +++ b/public/app/plugins/datasource/opentsdb/components/MetricSection.tsx @@ -1,7 +1,8 @@ -import React, { useCallback, useState } from 'react'; +import debounce from 'debounce-promise'; +import React from 'react'; import { SelectableValue, toOption } from '@grafana/data'; -import { Select, Input, InlineFormLabel } from '@grafana/ui'; +import { Select, Input, InlineFormLabel, AsyncSelect } from '@grafana/ui'; import { OpenTsdbQuery } from '../types'; @@ -9,26 +10,13 @@ export interface MetricSectionProps { query: OpenTsdbQuery; onChange: (query: OpenTsdbQuery) => void; onRunQuery: () => void; - suggestMetrics: () => Promise; + suggestMetrics: (value: string) => Promise; aggregators: string[]; } export function MetricSection({ query, onChange, onRunQuery, suggestMetrics, aggregators }: MetricSectionProps) { - const [state, setState] = useState<{ - metrics?: Array>; - isLoading?: boolean; - }>({}); - - // We are matching words split with space - const splitSeparator = ' '; - const customFilterOption = useCallback((option: SelectableValue, searchQuery: string) => { - const label = option.value ?? ''; - - const searchWords = searchQuery.split(splitSeparator); - return searchWords.reduce((acc, cur) => acc && label.toLowerCase().includes(cur.toLowerCase()), true); - }, []); - const aggregatorOptions = aggregators.map((value: string) => toOption(value)); + const metricSearch = debounce((query: string) => suggestMetrics(query), 350); return (
@@ -36,23 +24,16 @@ export function MetricSection({ query, onChange, onRunQuery, suggestMetrics, agg Metric -