{"version":3,"file":"PromQueryEditorSelector.cjs","sources":["../../../../src/querybuilder/components/PromQueryEditorSelector.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx\nimport { isEqual } from 'lodash';\nimport { memo, type SyntheticEvent, useCallback, useEffect, useState } from 'react';\n\nimport { QueryWithAssistantButton } from '@grafana/assistant';\nimport { CoreApp, LoadingState } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { EditorHeader, EditorRows, FlexItem } from '@grafana/plugin-ui';\nimport { config, reportInteraction } from '@grafana/runtime';\nimport { Button, ConfirmModal, Space } from '@grafana/ui';\n\nimport { type PromQueryEditorProps } from '../../components/types';\nimport { type PromQuery } from '../../types';\nimport { QueryPatternsModal } from '../QueryPatternsModal';\nimport { promQueryEditorExplainKey, useFlag } from '../hooks/useFlag';\nimport { buildVisualQueryFromString } from '../parsing';\nimport { QueryEditorModeToggle } from '../shared/QueryEditorModeToggle';\nimport { QueryHeaderSwitch } from '../shared/QueryHeaderSwitch';\nimport { QueryEditorMode } from '../shared/types';\nimport { changeEditorMode, getQueryWithDefaults } from '../state';\n\nimport { PromQueryBuilderContainer } from './PromQueryBuilderContainer';\nimport { PromQueryBuilderOptions } from './PromQueryBuilderOptions';\nimport { PromQueryCodeEditor } from './PromQueryCodeEditor';\n\ntype Props = PromQueryEditorProps;\n\nexport const PromQueryEditorSelector = memo<Props>((props) => {\n  const {\n    onChange,\n    onRunQuery,\n    data,\n    app,\n    onAddQuery,\n    datasource,\n    datasource: { defaultEditor },\n    queries,\n  } = props;\n\n  const [parseModalOpen, setParseModalOpen] = useState(false);\n  const [queryPatternsModalOpen, setQueryPatternsModalOpen] = useState(false);\n  const [dataIsStale, setDataIsStale] = useState(false);\n  const { flag: explain, setFlag: setExplain } = useFlag(promQueryEditorExplainKey);\n\n  const query = getQueryWithDefaults(props.query, app, defaultEditor);\n  // This should be filled in from the defaults by now.\n  const editorMode = query.editorMode!;\n\n  const showAssistant =\n    config.featureToggles.queryWithAssistant &&\n    (app === CoreApp.Explore || app === CoreApp.Dashboard || app === CoreApp.PanelEditor);\n\n  const onEditorModeChange = useCallback(\n    (newMetricEditorMode: QueryEditorMode) => {\n      reportInteraction('user_grafana_prometheus_editor_mode_clicked', {\n        newEditor: newMetricEditorMode,\n        previousEditor: query.editorMode ?? '',\n        newQuery: !query.expr,\n        app: app ?? '',\n      });\n\n      if (newMetricEditorMode === QueryEditorMode.Builder) {\n        const result = buildVisualQueryFromString(query.expr || '');\n        // If there are errors, give user a chance to decide if they want to go to builder as that can lose some data.\n        if (result.errors.length) {\n          setParseModalOpen(true);\n          return;\n        }\n      }\n      changeEditorMode(query, newMetricEditorMode, onChange);\n    },\n    [onChange, query, app]\n  );\n\n  useEffect(() => {\n    setDataIsStale(false);\n  }, [data]);\n\n  const onChangeInternal = (query: PromQuery) => {\n    if (!isEqual(query, props.query)) {\n      setDataIsStale(true);\n    }\n    onChange(query);\n  };\n\n  const onShowExplainChange = (e: SyntheticEvent<HTMLInputElement>) => {\n    setExplain(e.currentTarget.checked);\n  };\n\n  const handleOpenQueryPatternsModal = useCallback(() => {\n    reportInteraction('grafana_prometheus_open_kickstart_clicked', {\n      app: app ?? '',\n    });\n    setQueryPatternsModalOpen(true);\n  }, [app]);\n\n  return (\n    <>\n      <ConfirmModal\n        isOpen={parseModalOpen}\n        title={t(\n          'grafana-prometheus.querybuilder.prom-query-editor-selector.title-parsing-error-switch-builder',\n          'Parsing error: Switch to the builder mode?'\n        )}\n        body={t(\n          'grafana-prometheus.querybuilder.prom-query-editor-selector.body-syntax-error',\n          'There is a syntax error, or the query structure cannot be visualized when switching to the builder mode. Parts of the query may be lost.'\n        )}\n        confirmText={t('grafana-prometheus.querybuilder.prom-query-editor-selector.confirmText-continue', 'Continue')}\n        onConfirm={() => {\n          changeEditorMode(query, QueryEditorMode.Builder, onChange);\n          setParseModalOpen(false);\n        }}\n        onDismiss={() => setParseModalOpen(false)}\n      />\n      <QueryPatternsModal\n        isOpen={queryPatternsModalOpen}\n        onClose={() => setQueryPatternsModalOpen(false)}\n        query={query}\n        queries={queries}\n        app={app}\n        onChange={onChange}\n        onAddQuery={onAddQuery}\n      />\n      <EditorHeader>\n        {showAssistant && (\n          <QueryWithAssistantButton\n            currentQuery={query}\n            queries={queries ?? [query]}\n            dataSourceInstanceSettings={datasource.instanceSettings}\n            datasourceApi={null}\n            app={app}\n          />\n        )}\n        {!query.expr && (\n          <Button\n            data-testid={selectors.components.QueryBuilder.queryPatterns}\n            variant=\"secondary\"\n            size=\"sm\"\n            onClick={handleOpenQueryPatternsModal}\n          >\n            <Trans i18nKey=\"grafana-prometheus.querybuilder.prom-query-editor-selector.kick-start-your-query\">\n              Kick start your query\n            </Trans>\n          </Button>\n        )}\n        <div data-testid={selectors.components.DataSource.Prometheus.queryEditor.explain}>\n          <QueryHeaderSwitch\n            label={t('grafana-prometheus.querybuilder.prom-query-editor-selector.label-explain', 'Explain')}\n            value={explain}\n            onChange={onShowExplainChange}\n          />\n        </div>\n        <FlexItem grow={1} />\n        {app !== CoreApp.Explore && app !== CoreApp.Correlations && (\n          <Button\n            variant={dataIsStale ? 'primary' : 'secondary'}\n            size=\"sm\"\n            onClick={onRunQuery}\n            icon={data?.state === LoadingState.Loading ? 'spinner' : undefined}\n            disabled={data?.state === LoadingState.Loading}\n          >\n            <Trans i18nKey=\"grafana-prometheus.querybuilder.prom-query-editor-selector.run-queries\">Run queries</Trans>\n          </Button>\n        )}\n        <div data-testid={selectors.components.DataSource.Prometheus.queryEditor.editorToggle}>\n          <QueryEditorModeToggle mode={editorMode} onChange={onEditorModeChange} />\n        </div>\n      </EditorHeader>\n      <Space v={0.5} />\n      <EditorRows>\n        {editorMode === QueryEditorMode.Code && (\n          <PromQueryCodeEditor {...props} query={query} showExplain={explain} onChange={onChangeInternal} />\n        )}\n        {editorMode === QueryEditorMode.Builder && (\n          <PromQueryBuilderContainer\n            query={query}\n            datasource={props.datasource}\n            onChange={onChangeInternal}\n            onRunQuery={props.onRunQuery}\n            data={data}\n            showExplain={explain}\n          />\n        )}\n        <PromQueryBuilderOptions query={query} app={props.app} onChange={onChange} onRunQuery={onRunQuery} />\n      </EditorRows>\n    </>\n  );\n});\n\nPromQueryEditorSelector.displayName = 'PromQueryEditorSelector';\n"],"names":["memo","data","useState","useFlag","promQueryEditorExplainKey","getQueryWithDefaults","config","CoreApp","useCallback","reportInteraction","QueryEditorMode","buildVisualQueryFromString","changeEditorMode","useEffect","query","isEqual","jsxs","Fragment","jsx","ConfirmModal","t","QueryPatternsModal","EditorHeader","QueryWithAssistantButton","Button","selectors","Trans","QueryHeaderSwitch","FlexItem","LoadingState","QueryEditorModeToggle","Space","EditorRows","PromQueryCodeEditor","PromQueryBuilderContainer","PromQueryBuilderOptions"],"mappings":"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"}