{"version":3,"file":"PromQueryField.mjs","sources":["../../../src/components/PromQueryField.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx\nimport { css, cx } from '@emotion/css';\nimport { type ReactNode, useCallback, useEffect, useState } from 'react';\n\nimport {\n  type DataFrame,\n  getDefaultTimeRange,\n  isDataFrame,\n  type QueryEditorProps,\n  type QueryHint,\n  toLegacyResponseData,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { clearButtonStyles, Icon, useTheme2 } from '@grafana/ui';\n\nimport { type PrometheusDatasource } from '../datasource';\nimport { getInitHints } from '../query_hints';\nimport { type PromOptions, type PromQuery } from '../types';\n\nimport { MetricsBrowser } from './metrics-browser/MetricsBrowser';\nimport { MetricsBrowserProvider } from './metrics-browser/MetricsBrowserContext';\nimport { MonacoQueryFieldWrapper } from './monaco-query-field/MonacoQueryFieldWrapper';\n\ninterface PromQueryFieldProps extends QueryEditorProps<PrometheusDatasource, PromQuery, PromOptions> {\n  ExtraFieldElement?: ReactNode;\n  hideMetricsBrowser?: boolean;\n  'data-testid'?: string;\n}\n\nexport const PromQueryField = (props: PromQueryFieldProps) => {\n  const {\n    app,\n    datasource,\n    datasource: { languageProvider },\n    query,\n    ExtraFieldElement,\n    history = [],\n    data,\n    range,\n    onChange,\n    onRunQuery,\n    hideMetricsBrowser = false,\n  } = props;\n\n  const theme = useTheme2();\n\n  const [hint, setHint] = useState<QueryHint | null>(null);\n  const [labelBrowserVisible, setLabelBrowserVisible] = useState(false);\n\n  const refreshHint = useCallback(\n    (series: DataFrame[]) => {\n      const initHints = getInitHints(datasource);\n      const initHint = initHints[0] ?? null;\n\n      // If no data or empty series, use default hint\n      if (!data?.series?.length) {\n        setHint(initHint);\n        return;\n      }\n\n      const result = isDataFrame(series[0]) ? series.map(toLegacyResponseData) : series;\n      const queryHints = datasource.getQueryHints(query, result);\n      let queryHint = queryHints.length > 0 ? queryHints[0] : null;\n\n      setHint(queryHint ?? initHint);\n    },\n    [data, datasource, query]\n  );\n\n  useEffect(() => {\n    refreshHint(data?.series ?? []);\n  }, [data?.series, refreshHint]);\n\n  const onChangeQuery = (value: string, override?: boolean) => {\n    if (!onChange) {\n      return;\n    }\n    // Send text change to parent\n    const nextQuery: PromQuery = { ...query, expr: value };\n    onChange(nextQuery);\n\n    if (override && onRunQuery) {\n      onRunQuery();\n    }\n  };\n\n  const onChangeLabelBrowser = (selector: string) => {\n    onChangeQuery(selector, true);\n    setLabelBrowserVisible(false);\n  };\n\n  const onClickChooserButton = () => {\n    setLabelBrowserVisible(!labelBrowserVisible);\n\n    reportInteraction('user_grafana_prometheus_metrics_browser_clicked', {\n      editorMode: labelBrowserVisible ? 'metricViewClosed' : 'metricViewOpen',\n      app: app ?? '',\n    });\n  };\n\n  const onClickHintFix = () => {\n    if (hint?.fix?.action) {\n      onChange(datasource.modifyQuery(query, hint.fix.action));\n    }\n    onRunQuery();\n  };\n\n  return (\n    <>\n      <div\n        className=\"gf-form-inline gf-form-inline--xs-view-flex-column flex-grow-1\"\n        data-testid={props['data-testid']}\n      >\n        {!hideMetricsBrowser && (\n          <button\n            className=\"gf-form-label query-keyword pointer\"\n            onClick={onClickChooserButton}\n            disabled={datasource.lookupsDisabled}\n            type=\"button\"\n            data-testid={selectors.components.DataSource.Prometheus.queryEditor.code.metricsBrowser.openButton}\n          >\n            {datasource.lookupsDisabled ? (\n              <Trans i18nKey=\"grafana-prometheus.metrics-browser.disabled-label\">(Disabled)</Trans>\n            ) : (\n              <Trans i18nKey=\"grafana-prometheus.metrics-browser.enabled-label\">Metrics browser</Trans>\n            )}\n            <Icon name={labelBrowserVisible ? 'angle-down' : 'angle-right'} />\n          </button>\n        )}\n\n        <div className=\"flex-grow-1 min-width-15\">\n          <MonacoQueryFieldWrapper\n            languageProvider={languageProvider}\n            history={history}\n            onChange={onChangeQuery}\n            onRunQuery={onRunQuery}\n            initialValue={query.expr ?? ''}\n            placeholder={t(\n              'grafana-prometheus.components.prom-query-field.placeholder-enter-a-prom-ql-query',\n              'Enter a PromQL query…'\n            )}\n            datasource={datasource}\n            timeRange={range ?? getDefaultTimeRange()}\n          />\n        </div>\n      </div>\n      {labelBrowserVisible && (\n        <div>\n          <MetricsBrowserProvider\n            timeRange={range ?? getDefaultTimeRange()}\n            languageProvider={languageProvider}\n            onChange={onChangeLabelBrowser}\n          >\n            <MetricsBrowser />\n          </MetricsBrowserProvider>\n        </div>\n      )}\n      {ExtraFieldElement}\n      {hint ? (\n        <div\n          className={css({\n            flexBasis: '100%',\n          })}\n        >\n          <div className=\"text-warning\">\n            {hint.label}{' '}\n            {hint.fix ? (\n              <button\n                type=\"button\"\n                className={cx(clearButtonStyles(theme), 'text-link', 'muted')}\n                onClick={onClickHintFix}\n              >\n                {hint.fix.label}\n              </button>\n            ) : null}\n          </div>\n        </div>\n      ) : null}\n    </>\n  );\n};\n"],"names":["_a"],"mappings":"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"}