{"version":3,"file":"PromExploreExtraField.cjs","sources":["../../../src/components/PromExploreExtraField.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx\nimport { css, cx } from '@emotion/css';\nimport { isEqual } from 'lodash';\nimport { memo, useCallback } from 'react';\nimport * as React from 'react';\nimport { usePrevious } from 'react-use';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { InlineFormLabel, RadioButtonGroup, useStyles2 } from '@grafana/ui';\n\nimport { type PrometheusDatasource } from '../datasource';\nimport { type PromQuery } from '../types';\n\nimport { PromExemplarField } from './PromExemplarField';\n\nexport interface PromExploreExtraFieldProps {\n  query: PromQuery;\n  onChange: (value: PromQuery) => void;\n  onRunQuery: () => void;\n  datasource: PrometheusDatasource;\n}\n\nexport const PromExploreExtraField = memo(({ query, datasource, onChange, onRunQuery }: PromExploreExtraFieldProps) => {\n  const rangeOptions = getQueryTypeOptions(true);\n  const prevQuery = usePrevious(query);\n  const styles = useStyles2(getStyles);\n\n  const onExemplarChange = useCallback(\n    (exemplar: boolean) => {\n      if (!isEqual(query, prevQuery) || exemplar !== query.exemplar) {\n        onChange({ ...query, exemplar });\n      }\n    },\n    [prevQuery, query, onChange]\n  );\n\n  function onChangeQueryStep(interval: string) {\n    onChange({ ...query, interval });\n  }\n\n  function onStepChange(e: React.SyntheticEvent<HTMLInputElement>) {\n    if (e.currentTarget.value !== query.interval) {\n      onChangeQueryStep(e.currentTarget.value);\n    }\n  }\n\n  function onReturnKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n    if (e.key === 'Enter' && e.shiftKey) {\n      onRunQuery();\n    }\n  }\n\n  const onQueryTypeChange = getQueryTypeChangeHandler(query, onChange);\n\n  return (\n    <div\n      aria-label={t(\n        'grafana-prometheus.components.prom-explore-extra-field.aria-label-prometheus-extra-field',\n        'Prometheus extra field'\n      )}\n      className=\"gf-form-inline\"\n      data-testid={promExploreExtraFieldTestIds.extraFieldEditor}\n    >\n      {/*Query type field*/}\n      <div\n        data-testid={promExploreExtraFieldTestIds.queryTypeField}\n        className={cx(\n          'gf-form',\n          styles.queryTypeField,\n          css({\n            flexWrap: 'nowrap',\n          })\n        )}\n        aria-label={t(\n          'grafana-prometheus.components.prom-explore-extra-field.aria-label-query-type-field',\n          'Query type field'\n        )}\n      >\n        <InlineFormLabel width=\"auto\">\n          <Trans i18nKey=\"grafana-prometheus.components.prom-explore-extra-field.query-type\">Query type</Trans>\n        </InlineFormLabel>\n\n        <RadioButtonGroup\n          options={rangeOptions}\n          value={query.range && query.instant ? 'both' : query.instant ? 'instant' : 'range'}\n          onChange={onQueryTypeChange}\n        />\n      </div>\n      {/*Step field*/}\n      <div\n        data-testid={promExploreExtraFieldTestIds.stepField}\n        className={cx(\n          'gf-form',\n          css({\n            flexWrap: 'nowrap',\n          })\n        )}\n        aria-label={t('grafana-prometheus.components.prom-explore-extra-field.aria-label-step-field', 'Step field')}\n      >\n        <InlineFormLabel\n          width={6}\n          tooltip={t(\n            'grafana-prometheus.components.prom-explore-extra-field.tooltip-units-builtin-variables-example-interval-rateinterval',\n            'Time units and built-in variables can be used here, for example: {{example1}}, {{example2}}, {{example3}}, {{example4}}, {{example5}}, {{example6}}, {{example7}} (Default if no unit is specified: {{default}})',\n            {\n              example1: '$__interval',\n              example2: '$__rate_interval',\n              example3: '5s',\n              example4: '1m',\n              example5: '3h',\n              example6: '1d',\n              example7: '1y',\n              default: 's',\n            }\n          )}\n        >\n          <Trans i18nKey=\"grafana-prometheus.components.prom-explore-extra-field.min-step\">Min step</Trans>\n        </InlineFormLabel>\n        <input\n          type={'text'}\n          className=\"gf-form-input width-4\"\n          // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n          placeholder=\"auto\"\n          onChange={onStepChange}\n          onKeyDown={onReturnKeyDown}\n          value={query.interval ?? ''}\n        />\n      </div>\n\n      <PromExemplarField onChange={onExemplarChange} datasource={datasource} query={query} />\n    </div>\n  );\n});\n\nPromExploreExtraField.displayName = 'PromExploreExtraField';\n\nexport function getQueryTypeOptions(includeBoth: boolean) {\n  const rangeOptions = [\n    {\n      value: 'range',\n      label: t('grafana-prometheus.components.get-query-type-options.range-options.label.range', 'Range'),\n      description: t(\n        'grafana-prometheus.components.get-query-type-options.range-options.description.query-range',\n        'Run query over a range of time'\n      ),\n    },\n    {\n      value: 'instant',\n      label: t('grafana-prometheus.components.get-query-type-options.range-options.label.instant', 'Instant'),\n      description: 'Run query against a single point in time. For this query, the \"To\" time is used',\n    },\n  ];\n\n  if (includeBoth) {\n    rangeOptions.push({\n      value: 'both',\n      label: t('grafana-prometheus.components.get-query-type-options.label.both', 'Both'),\n      description: t(\n        'grafana-prometheus.components.get-query-type-options.description.instant-query-range',\n        'Run an Instant query and a Range query'\n      ),\n    });\n  }\n\n  return rangeOptions;\n}\n\nexport function getQueryTypeChangeHandler(query: PromQuery, onChange: (update: PromQuery) => void) {\n  return (queryType: string) => {\n    if (queryType === 'instant') {\n      onChange({ ...query, instant: true, range: false, exemplar: false });\n    } else if (queryType === 'range') {\n      onChange({ ...query, instant: false, range: true });\n    } else {\n      onChange({ ...query, instant: true, range: true });\n    }\n  };\n}\n\nexport const promExploreExtraFieldTestIds = {\n  extraFieldEditor: 'prom-editor-extra-field',\n  stepField: 'prom-editor-extra-field-step',\n  queryTypeField: 'prom-editor-extra-field-query-type',\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  queryTypeField: css({\n    marginRight: theme.spacing(0.5),\n  }),\n});\n"],"names":["memo","usePrevious","useStyles2","useCallback","isEqual","jsxs","t","cx","css","jsx","InlineFormLabel","Trans","RadioButtonGroup","PromExemplarField"],"mappings":"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"}