{"version":3,"file":"MetricsModal.mjs","sources":["../../../../../src/querybuilder/components/metrics-modal/MetricsModal.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/MetricsModal.tsx\nimport { cx } from '@emotion/css';\n\nimport { type SelectableValue, type TimeRange } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { Icon, Input, Modal, MultiSelect, Pagination, Spinner, useStyles2 } from '@grafana/ui';\n\nimport { type PrometheusDatasource } from '../../../datasource';\nimport { type PromVisualQuery } from '../../types';\n\nimport { FeedbackLink } from './FeedbackLink';\nimport { MetricsModalContextProvider, useMetricsModal } from './MetricsModalContext';\nimport { ResultsTable } from './ResultsTable';\nimport { getPlaceholders, getPromTypes } from './helpers';\nimport { getMetricsModalStyles } from './styles';\nimport { metricsModaltestIds } from './testIds';\nimport { type PromFilterOption } from './types';\n\ninterface MetricsModalProps {\n  datasource: PrometheusDatasource;\n  timeRange: TimeRange;\n  isOpen: boolean;\n  query: PromVisualQuery;\n  onClose: () => void;\n  onChange: (query: PromVisualQuery) => void;\n}\n\nconst MetricsModalContent = (props: MetricsModalProps) => {\n  const { isOpen, onClose, onChange, query, timeRange } = props;\n\n  const {\n    isLoading,\n    filteredMetricsData,\n    debouncedBackendSearch,\n    pagination,\n    setPagination,\n    selectedTypes,\n    setSelectedTypes,\n    searchedText,\n    setSearchedText,\n  } = useMetricsModal();\n  const styles = useStyles2(getMetricsModalStyles);\n  const placeholders = getPlaceholders();\n  const promTypes = getPromTypes();\n\n  const typeOptions: SelectableValue[] = promTypes.map((t: PromFilterOption) => {\n    return {\n      value: t.value,\n      label: t.label,\n      description: t.description,\n    };\n  });\n\n  const searchCallback = (query: string, fullMetaSearchVal?: boolean) => {\n    setSearchedText(query);\n    debouncedBackendSearch(timeRange, query);\n  };\n\n  return (\n    <Modal\n      data-testid={metricsModaltestIds.metricModal}\n      isOpen={isOpen}\n      title={t('grafana-prometheus.querybuilder.metrics-modal.title-metrics-explorer', 'Metrics explorer')}\n      onDismiss={onClose}\n      aria-label={t('grafana-prometheus.querybuilder.metrics-modal.aria-label-browse-metrics', 'Browse metrics')}\n      className={styles.modal}\n    >\n      <FeedbackLink feedbackUrl=\"https://forms.gle/DEMAJHoAMpe3e54CA\" />\n      <div\n        className={styles.inputWrapper}\n        data-testid={selectors.components.DataSource.Prometheus.queryEditor.builder.metricsExplorer}\n      >\n        <div className={cx(styles.inputItem, styles.inputItemFirst)}>\n          <Input\n            autoFocus={true}\n            data-testid={metricsModaltestIds.searchMetric}\n            placeholder={placeholders.browse}\n            value={searchedText}\n            onInput={(e) => {\n              const value = e.currentTarget.value ?? '';\n              setSearchedText(value);\n              setPagination({ ...pagination, pageNum: 1 });\n              searchCallback(value);\n            }}\n          />\n        </div>\n        <div className={styles.inputItem}>\n          <MultiSelect\n            data-testid={metricsModaltestIds.selectType}\n            inputId=\"my-select\"\n            options={typeOptions}\n            value={selectedTypes}\n            placeholder={placeholders.filterType}\n            onChange={setSelectedTypes}\n          />\n        </div>\n        <div>\n          <Spinner className={`${styles.loadingSpinner} ${isLoading ? styles.visible : ''}`} />\n        </div>\n      </div>\n      <div className={styles.resultsData}>\n        {query.metric && (\n          <i className={styles.currentlySelected}>\n            <Trans\n              i18nKey=\"grafana-prometheus.querybuilder.metrics-modal.currently-selected\"\n              values={{ selected: query.metric }}\n            >\n              Currently selected: {'{{selected}}'}\n            </Trans>\n          </i>\n        )}\n        {query.labels.length > 0 && (\n          <div className={styles.resultsDataFiltered}>\n            <Icon name=\"info-circle\" size=\"sm\" />\n            <div className={styles.resultsDataFilteredText}>\n              &nbsp;\n              <Trans i18nKey=\"grafana-prometheus.querybuilder.metrics-modal.metrics-pre-filtered\">\n                These metrics have been pre-filtered by labels chosen in the label filters.\n              </Trans>\n            </div>\n          </div>\n        )}\n      </div>\n      <div className={styles.results}>\n        {filteredMetricsData && <ResultsTable onChange={onChange} onClose={onClose} query={query} />}\n      </div>\n      <div className={styles.resultsFooter}>\n        <Pagination\n          currentPage={pagination.pageNum > pagination.totalPageNum ? 1 : pagination.pageNum}\n          numberOfPages={pagination.totalPageNum}\n          onNavigate={(val: number) => setPagination({ ...pagination, pageNum: val ?? 1 })}\n        />\n      </div>\n    </Modal>\n  );\n};\n\nexport const MetricsModal = (props: MetricsModalProps) => {\n  return (\n    <MetricsModalContextProvider languageProvider={props.datasource.languageProvider} timeRange={props.timeRange}>\n      <MetricsModalContent {...props} />\n    </MetricsModalContextProvider>\n  );\n};\n"],"names":["t","query"],"mappings":"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"}