{"version":3,"file":"MetricSelector.mjs","sources":["../../../../src/components/metrics-browser/MetricSelector.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { FixedSizeList } from 'react-window';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { BrowserLabel as PromLabel, Input, Label, useStyles2 } from '@grafana/ui';\n\nimport { LIST_ITEM_SIZE } from '../../constants';\n\nimport { useMetricsBrowser } from './MetricsBrowserContext';\nimport { getStylesMetricSelector } from './styles';\n\nexport function MetricSelector() {\n  const styles = useStyles2(getStylesMetricSelector);\n  const [metricSearchTerm, setMetricSearchTerm] = useState('');\n  const { metrics, selectedMetric, seriesLimit, setSeriesLimit, onMetricClick } = useMetricsBrowser();\n\n  const filteredMetrics = useMemo(() => {\n    return metrics.filter((m) => m.name === selectedMetric || m.name.includes(metricSearchTerm));\n  }, [metrics, selectedMetric, metricSearchTerm]);\n\n  return (\n    <div>\n      <div className={styles.section}>\n        <Label\n          description={t(\n            'grafana-prometheus.components.metric-selector.label-select-metric',\n            'Once a metric is selected only possible labels are shown. Labels are limited by the series limit below.'\n          )}\n        >\n          <Trans i18nKey=\"grafana-prometheus.components.metric-selector.select-a-metric\">1. Select a metric</Trans>\n        </Label>\n        <div>\n          <Input\n            onChange={(e) => setMetricSearchTerm(e.currentTarget.value)}\n            aria-label={t(\n              'grafana-prometheus.components.metric-selector.aria-label-filter-expression-for-metric',\n              'Filter expression for metric'\n            )}\n            value={metricSearchTerm}\n            data-testid={selectors.components.DataSource.Prometheus.queryEditor.code.metricsBrowser.selectMetric}\n          />\n        </div>\n        <Label\n          description={t(\n            'grafana-prometheus.components.metric-selector.description-series-limit',\n            'The limit applies to all metrics, labels, and values. Leave the field empty to use the default limit. Set to 0 to disable the limit and fetch everything — this may cause performance issues.'\n          )}\n        >\n          <Trans i18nKey=\"grafana-prometheus.components.metric-selector.series-limit\">Series limit</Trans>\n        </Label>\n        <div>\n          <Input\n            onChange={(e) => setSeriesLimit(parseInt(e.currentTarget.value.trim(), 10))}\n            aria-label={t(\n              'grafana-prometheus.components.metric-selector.aria-label-limit-results-from-series-endpoint',\n              'Limit results from series endpoint'\n            )}\n            value={seriesLimit}\n            data-testid={selectors.components.DataSource.Prometheus.queryEditor.code.metricsBrowser.seriesLimit}\n          />\n        </div>\n        <div\n          role=\"list\"\n          className={styles.valueListWrapper}\n          data-testid={selectors.components.DataSource.Prometheus.queryEditor.code.metricsBrowser.metricList}\n        >\n          <FixedSizeList\n            height={Math.min(450, filteredMetrics.length * LIST_ITEM_SIZE)}\n            itemCount={filteredMetrics.length}\n            itemSize={LIST_ITEM_SIZE}\n            itemKey={(i) => filteredMetrics[i].name}\n            width={300}\n            className={styles.valueList}\n          >\n            {({ index, style }) => {\n              const metric = filteredMetrics[index];\n              return (\n                <div style={style}>\n                  <PromLabel\n                    name={metric.name}\n                    value={metric.name}\n                    title={metric.details}\n                    active={metric.name === selectedMetric}\n                    onClick={(name: string, value: string | undefined) => {\n                      // Resetting search to prevent empty results\n                      setMetricSearchTerm('');\n                      onMetricClick(name);\n                    }}\n                    searchTerm={metricSearchTerm}\n                  />\n                </div>\n              );\n            }}\n          </FixedSizeList>\n        </div>\n      </div>\n    </div>\n  );\n}\n"],"names":["PromLabel"],"mappings":"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"}