{"version":3,"file":"LabelParamEditor.mjs","sources":["../../../../src/querybuilder/components/LabelParamEditor.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/components/LabelParamEditor.tsx\nimport { useState } from 'react';\n\nimport { type DataSourceApi, type SelectableValue, type TimeRange, toOption } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { getOperationParamId } from '../shared/param_utils';\nimport { type QueryBuilderLabelFilter, type QueryBuilderOperationParamEditorProps } from '../shared/types';\nimport { type PromVisualQuery, type PromQueryModellerInterface } from '../types';\n\n/**\n * Props for the LabelParamEditor component.\n * This editor specifically requires a Prometheus query modeller instance.\n */\ninterface LabelParamEditorProps extends Omit<QueryBuilderOperationParamEditorProps, 'queryModeller'> {\n  queryModeller: PromQueryModellerInterface;\n}\n\n/**\n * Editor for label parameters that requires a Prometheus query modeller instance.\n * This is used by the OperationParamEditorWrapper which ensures the modeller is always provided.\n */\nexport function LabelParamEditor({\n  onChange,\n  index,\n  operationId,\n  value,\n  query,\n  datasource,\n  timeRange,\n  queryModeller,\n}: LabelParamEditorProps) {\n  const [state, setState] = useState<{\n    options?: SelectableValue[];\n    isLoading?: boolean;\n  }>({});\n\n  return (\n    <Select\n      inputId={getOperationParamId(operationId, index)}\n      autoFocus={value === '' ? true : undefined}\n      openMenuOnFocus\n      onOpenMenu={async () => {\n        setState({ isLoading: true });\n        const options = await loadGroupByLabels(timeRange, query, datasource, queryModeller);\n        setState({ options, isLoading: undefined });\n      }}\n      isLoading={state.isLoading}\n      allowCustomValue\n      noOptionsMessage={t(\n        'grafana-prometheus.querybuilder.label-param-editor.noOptionsMessage-no-labels-found',\n        'No labels found'\n      )}\n      loadingMessage={t(\n        'grafana-prometheus.querybuilder.label-param-editor.loadingMessage-loading-labels',\n        'Loading labels'\n      )}\n      options={state.options}\n      value={toOption(value as string)}\n      onChange={(value) => onChange(index, value.value!)}\n    />\n  );\n}\n\nasync function loadGroupByLabels(\n  timeRange: TimeRange,\n  query: PromVisualQuery,\n  datasource: DataSourceApi,\n  modeller: PromQueryModellerInterface\n): Promise<SelectableValue[]> {\n  let labels: QueryBuilderLabelFilter[] = query.labels;\n\n  // This function is used by both Prometheus and Loki and this the only difference.\n  if (datasource.type === 'prometheus') {\n    // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n    labels = [{ label: '__name__', op: '=', value: query.metric }, ...query.labels];\n  }\n\n  const expr = modeller.renderLabels(labels);\n  const result: string[] = await datasource.languageProvider.queryLabelKeys(timeRange, expr);\n\n  return result.map((x) => ({\n    label: x,\n    value: x,\n  }));\n}\n"],"names":["value"],"mappings":";;;;;;;;AAuBO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,QAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAGvB,EAAE,CAAA;AAEL,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,mBAAA,CAAoB,WAAA,EAAa,KAAK,CAAA;AAAA,MAC/C,SAAA,EAAW,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,KAAA,CAAA;AAAA,MACjC,eAAA,EAAe,IAAA;AAAA,MACf,YAAY,YAAY;AACtB,QAAA,QAAA,CAAS,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC5B,QAAA,MAAM,UAAU,MAAM,iBAAA,CAAkB,SAAA,EAAW,KAAA,EAAO,YAAY,aAAa,CAAA;AACnF,QAAA,QAAA,CAAS,EAAE,OAAA,EAAS,SAAA,EAAW,KAAA,CAAA,EAAW,CAAA;AAAA,MAC5C,CAAA;AAAA,MACA,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,gBAAA,EAAgB,IAAA;AAAA,MAChB,gBAAA,EAAkB,CAAA;AAAA,QAChB,qFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,cAAA,EAAgB,CAAA;AAAA,QACd,kFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,KAAA,EAAO,SAAS,KAAe,CAAA;AAAA,MAC/B,UAAU,CAACA,MAAAA,KAAU,QAAA,CAAS,KAAA,EAAOA,OAAM,KAAM;AAAA;AAAA,GACnD;AAEJ;AAEA,eAAe,iBAAA,CACb,SAAA,EACA,KAAA,EACA,UAAA,EACA,QAAA,EAC4B;AAC5B,EAAA,IAAI,SAAoC,KAAA,CAAM,MAAA;AAG9C,EAAA,IAAI,UAAA,CAAW,SAAS,YAAA,EAAc;AAEpC,IAAA,MAAA,GAAS,CAAC,EAAE,KAAA,EAAO,UAAA,EAAY,EAAA,EAAI,GAAA,EAAK,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO,EAAG,GAAG,KAAA,CAAM,MAAM,CAAA;AAAA,EAChF;AAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,YAAA,CAAa,MAAM,CAAA;AACzC,EAAA,MAAM,SAAmB,MAAM,UAAA,CAAW,gBAAA,CAAiB,cAAA,CAAe,WAAW,IAAI,CAAA;AAEzF,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACxB,KAAA,EAAO,CAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT,CAAE,CAAA;AACJ;;;;"}