From 2536049ffd4ed50d0a1e4beee16e48b5f55ccd06 Mon Sep 17 00:00:00 2001 From: ismail simsek Date: Mon, 29 Jul 2024 22:51:52 +0200 Subject: [PATCH] Chore: Remove MetricCategoryCascader from Explore Metrics (#91039) remove MetricCategoryCascader --- .../MetricCategory/MetricCategoryCascader.tsx | 62 ------------------- .../MetricCategory/useMetricCategories.ts | 43 ------------- 2 files changed, 105 deletions(-) delete mode 100644 public/app/features/trails/MetricCategory/MetricCategoryCascader.tsx delete mode 100644 public/app/features/trails/MetricCategory/useMetricCategories.ts diff --git a/public/app/features/trails/MetricCategory/MetricCategoryCascader.tsx b/public/app/features/trails/MetricCategory/MetricCategoryCascader.tsx deleted file mode 100644 index dc7b1e417d9..00000000000 --- a/public/app/features/trails/MetricCategory/MetricCategoryCascader.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { useMemo } from 'react'; - -import { Cascader, CascaderOption } from '@grafana/ui'; - -import { useMetricCategories } from './useMetricCategories'; - -type Props = { - metricNames: string[]; - onSelect: (prefix: string | undefined) => void; - disabled?: boolean; - initialValue?: string; -}; - -export function MetricCategoryCascader({ metricNames, onSelect, disabled, initialValue }: Props) { - const categoryTree = useMetricCategories(metricNames); - const options = useMemo(() => createCasaderOptions(categoryTree), [categoryTree]); - - return ( - { - onSelect(prefix); - }} - {...{ options, disabled, initialValue }} - /> - ); -} - -function createCasaderOptions(tree: ReturnType, currentPrefix = '') { - const categories = Object.entries(tree.children); - - const options = categories.map(([metricPart, node]) => { - let subcategoryEntries = Object.entries(node.children); - - while (subcategoryEntries.length === 1 && !node.isMetric) { - // There is only one subcategory, so we will join it with the current metricPart to reduce depth - const [subMetricPart, subNode] = subcategoryEntries[0]; - metricPart = `${metricPart}_${subMetricPart}`; - // Extend the metric part name, because there is only one subcategory - node = subNode; - subcategoryEntries = Object.entries(node.children); - } - - const value = currentPrefix + metricPart; - const subOptions = createCasaderOptions(node, value + '_'); - - const option: CascaderOption = { - value: value, - label: metricPart, - items: subOptions, - }; - - return option; - }); - - return options; -} diff --git a/public/app/features/trails/MetricCategory/useMetricCategories.ts b/public/app/features/trails/MetricCategory/useMetricCategories.ts deleted file mode 100644 index 8e000a858c9..00000000000 --- a/public/app/features/trails/MetricCategory/useMetricCategories.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { useMemo } from 'react'; - -export function useMetricCategories(metrics: string[]) { - return useMemo(() => processMetrics(metrics), [metrics]); -} - -interface MetricPartNode { - isMetric?: boolean; - children: Record; -} - -function processMetrics(metrics: string[]) { - const categoryTree: MetricPartNode = { children: {} }; - - function insertMetric(metric: string) { - if (metric.indexOf(':') !== -1) { - // Ignore recording rules. - return; - } - - const metricParts = metric.split('_'); - - let cursor = categoryTree; - for (const metricPart of metricParts) { - let node = cursor.children[metricPart]; - if (!node) { - // Create new node - node = { - children: {}, - }; - // Insert it - cursor.children[metricPart] = node; - } - cursor = node; - } - // We know this node is a metric because it was for the last metricPart - cursor.isMetric = true; - } - - metrics.forEach((metric) => insertMetric(metric)); - - return categoryTree; -}