{"version":3,"file":"QueryHeader.mjs","sources":["../../../src/components/QueryHeader.tsx"],"sourcesContent":["import { useCallback, useId, useState } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { QueryWithAssistantButton } from '@grafana/assistant';\nimport { CoreApp, type DataSourceInstanceSettings, type SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { EditorField, EditorHeader, EditorMode, EditorRow, FlexItem, InlineSelect } from '@grafana/plugin-ui';\nimport { reportInteraction, config } from '@grafana/runtime';\nimport { Button, InlineSwitch, RadioButtonGroup, Tooltip, Space } from '@grafana/ui';\n\nimport { type QueryWithDefaults } from '../defaults';\nimport {\n  type SQLQuery,\n  QueryFormat,\n  type QueryRowFilter,\n  QUERY_FORMAT_OPTIONS,\n  type DB,\n  type SQLDialect,\n} from '../types';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { TableSelector } from './TableSelector';\n\nexport interface QueryHeaderProps {\n  db: DB;\n  dialect: SQLDialect;\n  isQueryRunnable: boolean;\n  onChange: (query: SQLQuery) => void;\n  onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n  onRunQuery: () => void;\n  preconfiguredDataset: string;\n  query: QueryWithDefaults;\n  queryRowFilter: QueryRowFilter;\n  hideFormatSelector?: boolean;\n  hideRunButton?: boolean;\n  dataSourceInstanceSettings?: DataSourceInstanceSettings;\n  app?: CoreApp;\n}\n\nexport function QueryHeader({\n  db,\n  dialect,\n  isQueryRunnable,\n  onChange,\n  onQueryRowChange,\n  onRunQuery,\n  preconfiguredDataset,\n  query,\n  queryRowFilter,\n  hideFormatSelector,\n  hideRunButton,\n  dataSourceInstanceSettings,\n  app,\n}: QueryHeaderProps) {\n  const { editorMode } = query;\n  const [_, copyToClipboard] = useCopyToClipboard();\n  const [showConfirm, setShowConfirm] = useState(false);\n  const toRawSql = db.toRawSql;\n\n  const htmlId = useId();\n\n  const showAssistant =\n    config.featureToggles.queryWithAssistant &&\n    (dataSourceInstanceSettings?.type === 'mysql' ||\n      dataSourceInstanceSettings?.type === 'grafana-postgresql-datasource') &&\n    (app === CoreApp.Explore || app === CoreApp.Dashboard || app === CoreApp.PanelEditor);\n\n  const editorModes = [\n    {\n      label: t('grafana-sql.components.query-header.editor-modes.label-builder', 'Builder'),\n      value: EditorMode.Builder,\n    },\n    { label: t('grafana-sql.components.query-header.editor-modes.label-code', 'Code'), value: EditorMode.Code },\n  ];\n\n  const onEditorModeChange = useCallback(\n    (newEditorMode: EditorMode) => {\n      if (newEditorMode === EditorMode.Code) {\n        reportInteraction('grafana_sql_editor_mode_changed', {\n          datasource: query.datasource?.type,\n          selectedEditorMode: EditorMode.Code,\n        });\n      }\n\n      if (editorMode === EditorMode.Code) {\n        setShowConfirm(true);\n        return;\n      }\n      onChange({ ...query, editorMode: newEditorMode });\n    },\n    [editorMode, onChange, query]\n  );\n\n  const onFormatChange = (e: SelectableValue) => {\n    const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n\n    reportInteraction('grafana_sql_format_changed', {\n      datasource: query.datasource?.type,\n      selectedFormat: next.format,\n    });\n    onChange(next);\n  };\n\n  const onDatasetChange = (e: SelectableValue) => {\n    if (e.value === query.dataset) {\n      return;\n    }\n\n    const next = {\n      ...query,\n      dataset: e.value,\n      table: undefined,\n      sql: undefined,\n      rawSql: '',\n    };\n\n    onChange(next);\n  };\n\n  const onTableChange = (e: SelectableValue) => {\n    if (e.value === query.table) {\n      return;\n    }\n\n    const next: SQLQuery = {\n      ...query,\n      table: e.value,\n      sql: undefined,\n      rawSql: '',\n    };\n\n    onChange(next);\n  };\n\n  const datasetDropdownIsAvailable = () => {\n    if (dialect === 'influx') {\n      return false;\n    }\n\n    return true;\n  };\n\n  return (\n    <>\n      <EditorHeader>\n        {showAssistant && (\n          <QueryWithAssistantButton\n            currentQuery={query}\n            queries={[query]}\n            dataSourceInstanceSettings={dataSourceInstanceSettings!}\n            datasourceApi={null}\n            app={app}\n          />\n        )}\n\n        {!hideFormatSelector && (\n          <InlineSelect\n            label={t('grafana-sql.components.query-header.label-format', 'Format')}\n            value={query.format}\n            placeholder={t('grafana-sql.components.query-header.placeholder-select-format', 'Select format')}\n            menuShouldPortal\n            onChange={onFormatChange}\n            options={QUERY_FORMAT_OPTIONS}\n          />\n        )}\n\n        {editorMode === EditorMode.Builder && (\n          <>\n            <InlineSwitch\n              id={`sql-filter-${htmlId}`}\n              label={t('grafana-sql.components.query-header.label-filter', 'Filter')}\n              data-testid={selectors.components.SQLQueryEditor.headerFilterSwitch}\n              transparent={true}\n              showLabel={true}\n              value={queryRowFilter.filter}\n              onChange={(ev) => {\n                if (!(ev.target instanceof HTMLInputElement)) {\n                  return;\n                }\n\n                reportInteraction('grafana_sql_filter_toggled', {\n                  datasource: query.datasource?.type,\n                  displayed: ev.target.checked,\n                });\n\n                onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked });\n              }}\n            />\n\n            <InlineSwitch\n              id={`sql-group-${htmlId}`}\n              label={t('grafana-sql.components.query-header.label-group', 'Group')}\n              data-testid={selectors.components.SQLQueryEditor.headerGroupSwitch}\n              transparent={true}\n              showLabel={true}\n              value={queryRowFilter.group}\n              onChange={(ev) => {\n                if (!(ev.target instanceof HTMLInputElement)) {\n                  return;\n                }\n\n                reportInteraction('grafana_sql_group_toggled', {\n                  datasource: query.datasource?.type,\n                  displayed: ev.target.checked,\n                });\n\n                onQueryRowChange({ ...queryRowFilter, group: ev.target.checked });\n              }}\n            />\n\n            <InlineSwitch\n              id={`sql-order-${htmlId}`}\n              label={t('grafana-sql.components.query-header.label-order', 'Order')}\n              data-testid={selectors.components.SQLQueryEditor.headerOrderSwitch}\n              transparent={true}\n              showLabel={true}\n              value={queryRowFilter.order}\n              onChange={(ev) => {\n                if (!(ev.target instanceof HTMLInputElement)) {\n                  return;\n                }\n\n                reportInteraction('grafana_sql_order_toggled', {\n                  datasource: query.datasource?.type,\n                  displayed: ev.target.checked,\n                });\n\n                onQueryRowChange({ ...queryRowFilter, order: ev.target.checked });\n              }}\n            />\n\n            <InlineSwitch\n              id={`sql-preview-${htmlId}`}\n              label={t('grafana-sql.components.query-header.label-preview', 'Preview')}\n              data-testid={selectors.components.SQLQueryEditor.headerPreviewSwitch}\n              transparent={true}\n              showLabel={true}\n              value={queryRowFilter.preview}\n              onChange={(ev) => {\n                if (!(ev.target instanceof HTMLInputElement)) {\n                  return;\n                }\n\n                reportInteraction('grafana_sql_preview_toggled', {\n                  datasource: query.datasource?.type,\n                  displayed: ev.target.checked,\n                });\n\n                onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked });\n              }}\n            />\n          </>\n        )}\n\n        <FlexItem grow={1} />\n\n        {!hideRunButton &&\n          (isQueryRunnable ? (\n            <Button icon=\"play\" variant=\"primary\" size=\"sm\" onClick={() => onRunQuery()}>\n              <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n            </Button>\n          ) : (\n            <Tooltip\n              theme=\"error\"\n              content={\n                <Trans i18nKey=\"grafana-sql.components.query-header.content-invalid-query\">\n                  Your query is invalid. Check below for details. <br />\n                  However, you can still run this query.\n                </Trans>\n              }\n              placement=\"top\"\n            >\n              <Button icon=\"exclamation-triangle\" variant=\"secondary\" size=\"sm\" onClick={() => onRunQuery()}>\n                <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n              </Button>\n            </Tooltip>\n          ))}\n\n        <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n        <ConfirmModal\n          isOpen={showConfirm}\n          onCopy={() => {\n            reportInteraction('grafana_sql_editor_mode_changed', {\n              datasource: query.datasource?.type,\n              selectedEditorMode: EditorMode.Builder,\n              type: 'copy',\n            });\n\n            setShowConfirm(false);\n            copyToClipboard(query.rawSql!);\n            onChange({\n              ...query,\n              rawSql: toRawSql(query),\n              editorMode: EditorMode.Builder,\n            });\n          }}\n          onDiscard={() => {\n            reportInteraction('grafana_sql_editor_mode_changed', {\n              datasource: query.datasource?.type,\n              selectedEditorMode: EditorMode.Builder,\n              type: 'discard',\n            });\n\n            setShowConfirm(false);\n            onChange({\n              ...query,\n              rawSql: toRawSql(query),\n              editorMode: EditorMode.Builder,\n            });\n          }}\n          onCancel={() => {\n            reportInteraction('grafana_sql_editor_mode_changed', {\n              datasource: query.datasource?.type,\n              selectedEditorMode: EditorMode.Builder,\n              type: 'cancel',\n            });\n\n            setShowConfirm(false);\n          }}\n        />\n      </EditorHeader>\n\n      {editorMode === EditorMode.Builder && (\n        <>\n          <Space v={0.5} />\n          <EditorRow>\n            {datasetDropdownIsAvailable() && (\n              <EditorField label={t('grafana-sql.components.query-header.label-dataset', 'Dataset')} width={25}>\n                <DatasetSelector\n                  db={db}\n                  inputId={`sql-dataset-${htmlId}`}\n                  dataset={query.dataset}\n                  dialect={dialect}\n                  preconfiguredDataset={preconfiguredDataset}\n                  onChange={onDatasetChange}\n                />\n              </EditorField>\n            )}\n            <EditorField label={t('grafana-sql.components.query-header.label-table', 'Table')} width={25}>\n              <TableSelector\n                db={db}\n                inputId={`sql-tableselect-${htmlId}`}\n                dataset={query.dataset || preconfiguredDataset}\n                table={query.table}\n                onChange={onTableChange}\n              />\n            </EditorField>\n          </EditorRow>\n        </>\n      )}\n    </>\n  );\n}\n"],"names":[],"mappings":"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"}