{"version":3,"file":"QueryPattern.mjs","sources":["../../../src/querybuilder/QueryPattern.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/QueryPattern.tsx\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { Button, Card, useStyles2 } from '@grafana/ui';\n\nimport { promqlGrammar } from '../promql';\n\nimport { RawQuery } from './shared/RawQuery';\nimport { promQueryModeller } from './shared/modeller_instance';\nimport { type PromQueryPattern } from './types';\n\ntype Props = {\n  pattern: PromQueryPattern;\n  hasNewQueryOption: boolean;\n  hasPreviousQuery: boolean | string;\n  selectedPatternName: string | null;\n  setSelectedPatternName: (name: string | null) => void;\n  onPatternSelect: (pattern: PromQueryPattern, selectAsNewQuery?: boolean) => void;\n};\n\nexport const QueryPattern = (props: Props) => {\n  const { pattern, onPatternSelect, hasNewQueryOption, hasPreviousQuery, selectedPatternName, setSelectedPatternName } =\n    props;\n\n  const styles = useStyles2(getStyles);\n  const lang = { grammar: promqlGrammar, name: 'promql' };\n\n  return (\n    <Card noMargin className={styles.card}>\n      <Card.Heading>{pattern.name}</Card.Heading>\n      <div className={styles.rawQueryContainer}>\n        <RawQuery\n          aria-label={t(\n            'grafana-prometheus.querybuilder.query-pattern.aria-label-raw-query',\n            '{{patternName}} raw query',\n            {\n              patternName: pattern.name,\n            }\n          )}\n          query={promQueryModeller.renderQuery({\n            metric: '',\n            labels: [],\n            operations: pattern.operations,\n            binaryQueries: pattern.binaryQueries,\n          })}\n          lang={lang}\n          className={styles.rawQuery}\n        />\n      </div>\n      <Card.Actions>\n        {selectedPatternName !== pattern.name ? (\n          <Button\n            size=\"sm\"\n            aria-label={t(\n              'grafana-prometheus.querybuilder.query-pattern.aria-label-use-this-query-button',\n              'use this query button'\n            )}\n            onClick={() => {\n              if (hasPreviousQuery) {\n                // If user has previous query, we need to confirm that they want to apply this query pattern\n                setSelectedPatternName(pattern.name);\n              } else {\n                onPatternSelect(pattern);\n              }\n            }}\n          >\n            <Trans i18nKey=\"grafana-prometheus.querybuilder.query-pattern.use-this-query\">Use this query</Trans>\n          </Button>\n        ) : (\n          <>\n            <div className={styles.spacing}>\n              {`If you would like to use this query, ${\n                hasNewQueryOption\n                  ? 'you can either apply this query pattern or create a new query'\n                  : 'this query pattern will be applied to your current query'\n              }.`}\n            </div>\n            <Button\n              size=\"sm\"\n              aria-label={t('grafana-prometheus.querybuilder.query-pattern.aria-label-back-button', 'back button')}\n              fill=\"outline\"\n              onClick={() => setSelectedPatternName(null)}\n            >\n              <Trans i18nKey=\"grafana-prometheus.querybuilder.query-pattern.back\">Back</Trans>\n            </Button>\n            <Button\n              size=\"sm\"\n              aria-label={t(\n                'grafana-prometheus.querybuilder.query-pattern.aria-label-apply-query-starter-button',\n                'apply query starter button'\n              )}\n              onClick={() => {\n                onPatternSelect(pattern);\n              }}\n            >\n              <Trans i18nKey=\"grafana-prometheus.querybuilder.query-pattern.apply-query\">Apply query</Trans>\n            </Button>\n            {hasNewQueryOption && (\n              <Button\n                size=\"sm\"\n                aria-label={t(\n                  'grafana-prometheus.querybuilder.query-pattern.aria-label-create-new-query-button',\n                  'create new query button'\n                )}\n                onClick={() => {\n                  onPatternSelect(pattern, true);\n                }}\n              >\n                <Trans i18nKey=\"grafana-prometheus.querybuilder.query-pattern.create-new-query\">Create new query</Trans>\n              </Button>\n            )}\n          </>\n        )}\n      </Card.Actions>\n    </Card>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    card: css({\n      width: '49.5%',\n      display: 'flex',\n      flexDirection: 'column',\n    }),\n    rawQueryContainer: css({\n      flexGrow: 1,\n    }),\n    rawQuery: css({\n      backgroundColor: theme.colors.background.primary,\n      padding: theme.spacing(1),\n      marginTop: theme.spacing(1),\n    }),\n    spacing: css({\n      marginBottom: theme.spacing(1),\n    }),\n  };\n};\n"],"names":[],"mappings":"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"}