{"version":3,"file":"MetricSelector.cjs","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":["styles","useStyles2","getStylesMetricSelector","useState","useMetricsBrowser","useMemo","jsxs","jsx","Label","t","Trans","Input","selectors","FixedSizeList","LIST_ITEM_SIZE","PromLabel"],"mappings":"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"}