{"version":3,"file":"LabelFilters.cjs","sources":["../../../../src/querybuilder/components/LabelFilters.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilters.tsx\nimport { css, cx } from '@emotion/css';\nimport { isEqual } from 'lodash';\nimport { useEffect, useState } from 'react';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { EditorField, EditorFieldGroup, EditorList } from '@grafana/plugin-ui';\nimport { InlineFieldRow, InlineLabel } from '@grafana/ui';\n\nimport { type QueryBuilderLabelFilter } from '../shared/types';\n\nimport { LabelFilterItem } from './LabelFilterItem';\n\nexport const MISSING_LABEL_FILTER_ERROR_MESSAGE = 'Select at least 1 label filter (label and value)';\n\nexport interface LabelFiltersProps {\n  labelsFilters: QueryBuilderLabelFilter[];\n  onChange: (labelFilters: Array<Partial<QueryBuilderLabelFilter>>) => void;\n  onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n  onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n  /** If set to true, component will show error message until at least 1 filter is selected */\n  labelFilterRequired?: boolean;\n  getLabelValuesAutofillSuggestions: (query: string, labelName?: string) => Promise<SelectableValue[]>;\n  debounceDuration: number;\n  variableEditor?: boolean;\n}\n\nexport function LabelFilters({\n  labelsFilters,\n  onChange,\n  onGetLabelNames,\n  onGetLabelValues,\n  labelFilterRequired,\n  getLabelValuesAutofillSuggestions,\n  debounceDuration,\n  variableEditor,\n}: LabelFiltersProps) {\n  const defaultOp = '=';\n  const [items, setItems] = useState<Array<Partial<QueryBuilderLabelFilter>>>([{ op: defaultOp }]);\n\n  useEffect(() => {\n    if (labelsFilters.length > 0) {\n      setItems(labelsFilters);\n    } else {\n      setItems([{ op: defaultOp }]);\n    }\n  }, [labelsFilters]);\n\n  const onLabelsChange = (newItems: Array<Partial<QueryBuilderLabelFilter>>) => {\n    setItems(newItems);\n\n    // Extract full label filters with both label & value\n    const newLabels = newItems.filter((x) => x.label != null && x.value != null);\n    if (!isEqual(newLabels, labelsFilters)) {\n      onChange(newLabels);\n    }\n  };\n\n  const hasLabelFilter = items.some((item) => item.label && item.value);\n\n  const editorList = () => {\n    return (\n      <EditorList\n        items={items}\n        onChange={onLabelsChange}\n        renderItem={(item: Partial<QueryBuilderLabelFilter>, onChangeItem, onDelete) => (\n          <LabelFilterItem\n            debounceDuration={debounceDuration}\n            item={item}\n            defaultOp={defaultOp}\n            onChange={onChangeItem}\n            onDelete={onDelete}\n            onGetLabelNames={onGetLabelNames}\n            onGetLabelValues={onGetLabelValues}\n            invalidLabel={labelFilterRequired && !item.label}\n            invalidValue={labelFilterRequired && !item.value}\n            getLabelValuesAutofillSuggestions={getLabelValuesAutofillSuggestions}\n          />\n        )}\n      />\n    );\n  };\n\n  return (\n    <>\n      {variableEditor ? (\n        <InlineFieldRow>\n          <div\n            className={cx(\n              css({\n                display: 'flex',\n              })\n            )}\n          >\n            <InlineLabel\n              width={20}\n              tooltip={\n                <div>\n                  <Trans i18nKey=\"grafana-prometheus.querybuilder.label-filters.tooltip-label-filters\">\n                    Optional: used to filter the metric select for this query type.\n                  </Trans>\n                </div>\n              }\n            >\n              <Trans i18nKey=\"grafana-prometheus.querybuilder.label-filters.label-filters\">Label filters</Trans>\n            </InlineLabel>\n            {editorList()}\n          </div>\n        </InlineFieldRow>\n      ) : (\n        <EditorFieldGroup>\n          <EditorField\n            label={t('grafana-prometheus.querybuilder.label-filters.label-label-filters', 'Label filters')}\n            error={MISSING_LABEL_FILTER_ERROR_MESSAGE}\n            invalid={labelFilterRequired && !hasLabelFilter}\n          >\n            {editorList()}\n          </EditorField>\n        </EditorFieldGroup>\n      )}\n    </>\n  );\n}\n"],"names":["useState","useEffect","isEqual","jsx","EditorList","LabelFilterItem","Fragment","InlineFieldRow","jsxs","cx","css","InlineLabel","Trans","EditorFieldGroup","EditorField","t"],"mappings":"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"}