From 56487884512b266b4b20a36fb92717a02858d4cb Mon Sep 17 00:00:00 2001 From: bohandley Date: Mon, 13 Mar 2023 15:38:42 -0400 Subject: [PATCH] each filter is don;t explicitly, subtracting from the results of each --- .../components/MetricEncyclopediaModal.tsx | 61 +++++++------------ 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.tsx index 33f459ad2cf..72601ae5679 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.tsx @@ -240,50 +240,35 @@ export const MetricEncyclopediaModal = (props: Props) => { function filterMetrics(metrics: MetricsData, skipLetterSearch?: boolean): MetricsData { let filteredMetrics: MetricsData = metrics; - if (fuzzySearchQuery || excludeNullMetadata || (letterSearch && !skipLetterSearch) || selectedTypes.length > 0) { + if (fuzzySearchQuery) { filteredMetrics = filteredMetrics.filter((m: MetricData, idx) => { - let keepMetric = false; - // keepMetric should progessively filter - // if it is true in fuzzy search then we can check the others - // come up with a set of rules for progression of filtering - - // search by text - if (fuzzySearchQuery) { - if (useBackend) { - // skip for backend! - keepMetric = true; - } else if (fullMetaSearch) { - keepMetric = fuzzyMetaSearchResults.includes(idx); - } else { - keepMetric = fuzzyNameSearchResults.includes(idx); - } + if (useBackend) { + // skip for backend! + return true; + } else if (fullMetaSearch) { + return fuzzyMetaSearchResults.includes(idx); + } else { + return fuzzyNameSearchResults.includes(idx); } + }); + } - // user clicks the alphabet search - // backend and frontend - // skipLetterSearch is purely for setting letter spans as active so they can be clicked - // where we don't filter out by letter search and keep letters of all other filters - if ((keepMetric || !fuzzySearchQuery) && letterSearch && !skipLetterSearch) { - const letters: string[] = [letterSearch, letterSearch.toLowerCase()]; - keepMetric = letters.includes(m.value[0]); - } + if (letterSearch && !skipLetterSearch) { + filteredMetrics = filteredMetrics.filter((m: MetricData, idx) => { + const letters: string[] = [letterSearch, letterSearch.toLowerCase()]; + return letters.includes(m.value[0]); + }); + } - // select by type, counter, gauge, etc - // skip for backend because no metadata is returned - if (keepMetric && selectedTypes.length > 0 && !useBackend) { - // return the metric that matches the type - // return the metric if it has no type AND we are NOT excluding metrics without metadata + if (selectedTypes.length > 0 && !useBackend) { + filteredMetrics = filteredMetrics.filter((m: MetricData, idx) => { + // Matches type + const matchesSelectedType = selectedTypes.some((t) => t.value === m.type); - // Matches type - const matchesSelectedType = selectedTypes.some((t) => t.value === m.type); + // missing type + const hasNoType = !m.type; - // missing type - const hasNoType = !m.type; - - return matchesSelectedType || (hasNoType && !excludeNullMetadata); - } - - return keepMetric; + return matchesSelectedType || (hasNoType && !excludeNullMetadata); }); }