{"version":3,"file":"ResultsTable.mjs","sources":["../../../../../src/querybuilder/components/metrics-modal/ResultsTable.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/ResultsTable.tsx\nimport { type ReactElement, useMemo } from 'react';\nimport Highlighter from 'react-highlight-words';\n\nimport { t, Trans } from '@grafana/i18n';\nimport { Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { docsTip } from '../../../configuration/shared/utils';\nimport { type PromVisualQuery } from '../../types';\n\nimport { useMetricsModal } from './MetricsModalContext';\nimport { getResultsTableStyles } from './styles';\nimport { type MetricData } from './types';\n\ntype ResultsTableProps = {\n  onChange: (query: PromVisualQuery) => void;\n  onClose: () => void;\n  query: PromVisualQuery;\n};\n\nexport function ResultsTable(props: ResultsTableProps) {\n  const { onChange, onClose, query } = props;\n  const {\n    isLoading,\n    filteredMetricsData,\n    pagination: { pageNum, resultsPerPage },\n    selectedTypes,\n    searchedText,\n  } = useMetricsModal();\n\n  const slicedMetrics = useMemo(() => {\n    const startIndex = (pageNum - 1) * resultsPerPage;\n    const endIndex = startIndex + resultsPerPage;\n    return filteredMetricsData.slice(startIndex, endIndex);\n  }, [filteredMetricsData, pageNum, resultsPerPage]);\n\n  const styles = useStyles2(getResultsTableStyles);\n\n  function selectMetric(metric: MetricData) {\n    if (metric.value) {\n      onChange({ ...query, metric: metric.value });\n      onClose();\n    }\n  }\n\n  function metaRows(metric: MetricData) {\n    return (\n      <>\n        <td>{displayType(metric.type ?? '')}</td>\n        <td>\n          <Highlighter\n            textToHighlight={metric.description ?? ''}\n            searchWords={[]}\n            autoEscape\n            highlightClassName={styles.matchHighLight}\n          />\n        </td>\n      </>\n    );\n  }\n\n  function addHelpIcon(fullType: string, descriptiveType: string, link: string) {\n    return (\n      <>\n        {fullType}\n        <span className={styles.tooltipSpace}>\n          <Tooltip\n            content={\n              <>\n                <Trans i18nKey=\"grafana-prometheus.querybuilder.results-table.content-descriptive-type\">\n                  When creating a {{ descriptiveType }}, Prometheus exposes multiple series with the type counter.{' '}\n                </Trans>\n                {docsTip(link)}\n              </>\n            }\n            placement=\"bottom-start\"\n            interactive={true}\n          >\n            <Icon name=\"info-circle\" size=\"xs\" />\n          </Tooltip>\n        </span>\n      </>\n    );\n  }\n\n  function displayType(type: string | null) {\n    if (!type) {\n      return '';\n    }\n\n    if (type.includes('(summary)')) {\n      return addHelpIcon(type, 'summary', 'https://prometheus.io/docs/concepts/metric_types/#summary');\n    }\n\n    if (type.includes('(histogram)')) {\n      return addHelpIcon(type, 'histogram', 'https://prometheus.io/docs/concepts/metric_types/#histogram');\n    }\n\n    return type;\n  }\n\n  function noMetricsMessages(): ReactElement {\n    let message;\n\n    if (!searchedText) {\n      message = t(\n        'grafana-prometheus.querybuilder.results-table.message-no-metrics-found',\n        'There are no metrics found in the data source.'\n      );\n    }\n\n    if (query.labels.length > 0) {\n      message = t(\n        'grafana-prometheus.querybuilder.results-table.message-expand-label-filters',\n        'There are no metrics found. Try to expand your label filters.'\n      );\n    }\n\n    if (searchedText || selectedTypes.length > 0) {\n      message = t(\n        'grafana-prometheus.querybuilder.results-table.message-expand-search',\n        'There are no metrics found. Try to expand your search and filters.'\n      );\n    }\n\n    return (\n      <tr className={styles.noResults}>\n        <td colSpan={3}>{message}</td>\n      </tr>\n    );\n  }\n\n  return (\n    <table className={styles.table}>\n      <thead className={styles.stickyHeader}>\n        <tr>\n          <th className={`${styles.nameWidth} ${styles.tableHeaderPadding}`}>\n            <Trans i18nKey=\"grafana-prometheus.querybuilder.results-table.name\">Name</Trans>\n          </th>\n          <th className={`${styles.typeWidth} ${styles.tableHeaderPadding}`}>\n            <Trans i18nKey=\"grafana-prometheus.querybuilder.results-table.type\">Type</Trans>\n          </th>\n          <th className={`${styles.descriptionWidth} ${styles.tableHeaderPadding}`}>\n            <Trans i18nKey=\"grafana-prometheus.querybuilder.results-table.description\">Description</Trans>\n          </th>\n        </tr>\n      </thead>\n      <tbody>\n        <>\n          {slicedMetrics.length > 0 &&\n            slicedMetrics.map((metric: MetricData, idx: number) => {\n              return (\n                <tr key={metric?.value ?? idx} className={styles.row} onClick={() => selectMetric(metric)}>\n                  <td className={styles.nameOverflow}>\n                    <Highlighter\n                      textToHighlight={metric?.value ?? ''}\n                      searchWords={searchedText.split(' ')}\n                      autoEscape\n                      highlightClassName={styles.matchHighLight}\n                    />\n                  </td>\n                  {metaRows(metric)}\n                </tr>\n              );\n            })}\n          {slicedMetrics.length === 0 && !isLoading && noMetricsMessages()}\n        </>\n      </tbody>\n    </table>\n  );\n}\n"],"names":[],"mappings":"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"}