{"version":3,"file":"FieldValueMatcher.cjs","sources":["../../../../src/components/MatchersUI/FieldValueMatcher.tsx"],"sourcesContent":["import { useMemo, useCallback, type FormEvent } from 'react';\n\nimport {\n  FieldMatcherID,\n  fieldMatchers,\n  type FieldValueMatcherConfig,\n  fieldReducers,\n  ReducerID,\n  type SelectableValue,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ComparisonOperation } from '@grafana/schema';\n\nimport { Combobox } from '../Combobox/Combobox';\nimport { type ComboboxOption } from '../Combobox/types';\nimport { Input } from '../Input/Input';\nimport { Stack } from '../Layout/Stack/Stack';\n\nimport { type MatcherUIProps, type FieldMatcherUIRegistryItem } from './types';\n\ntype Props = MatcherUIProps<FieldValueMatcherConfig>;\n\nconst toComboboxOption = <T extends string | number>(\n  value: SelectableValue<string | number | T>\n): ComboboxOption<T> => ({\n  label: value.label,\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  value: value.value! as T,\n  description: value.description,\n});\n\nexport const comparisonOperationOptions = [\n  { label: '==', value: ComparisonOperation.EQ },\n  { label: '!=', value: ComparisonOperation.NEQ },\n  { label: '>', value: ComparisonOperation.GT },\n  { label: '>=', value: ComparisonOperation.GTE },\n  { label: '<', value: ComparisonOperation.LT },\n  { label: '<=', value: ComparisonOperation.LTE },\n];\n\n// This should move to a utility function on the reducer registry\nfunction isBooleanReducer(r: ReducerID) {\n  return r === ReducerID.allIsNull || r === ReducerID.allIsZero;\n}\n\nexport const FieldValueMatcherEditor = ({ id, options, onChange }: Props) => {\n  const reducer = useMemo(() => fieldReducers.selectOptions([options?.reducer]), [options?.reducer]);\n\n  const onSetReducer = useCallback(\n    (selection: ComboboxOption<ReducerID>) => {\n      return onChange({ ...options, reducer: selection.value });\n    },\n    [options, onChange]\n  );\n\n  const onChangeOp = useCallback(\n    (v: SelectableValue<ComparisonOperation>) => {\n      return onChange({ ...options, op: v.value! });\n    },\n    [options, onChange]\n  );\n\n  const onChangeValue = useCallback(\n    (e: FormEvent<HTMLInputElement>) => {\n      const value = e.currentTarget.valueAsNumber;\n      return onChange({ ...options, value });\n    },\n    [options, onChange]\n  );\n\n  const opts = options ?? {};\n  const isBool = isBooleanReducer(opts.reducer);\n\n  return (\n    <Stack direction=\"column\" gap={1}>\n      <Stack direction=\"row\" gap={0.5}>\n        <Combobox<ReducerID>\n          id={id}\n          value={toComboboxOption<ReducerID>(reducer.current[0])}\n          options={reducer.options.map((o) => toComboboxOption<ReducerID>(o))}\n          onChange={onSetReducer}\n          placeholder={t('grafana-ui.field-value-matcher.select-field-placeholder', 'Select field reducer')}\n        />\n        {opts.reducer && !isBool && (\n          <>\n            <Combobox\n              value={comparisonOperationOptions.find((v) => v.value === opts.op)}\n              options={comparisonOperationOptions}\n              onChange={onChangeOp}\n              aria-label={t('grafana-ui.field-value-matcher.operator-label', 'Comparison operator')}\n              width={19}\n            />\n\n            <Input\n              type=\"number\"\n              value={opts.value}\n              onChange={onChangeValue}\n              aria-label={t('grafana-ui.field-value-matcher.reducer-value-label', 'Reducer value')}\n            />\n          </>\n        )}\n      </Stack>\n    </Stack>\n  );\n};\n\nexport const getFieldValueMatcherItem: () => FieldMatcherUIRegistryItem<FieldValueMatcherConfig> = () => ({\n  id: FieldMatcherID.byValue,\n  component: FieldValueMatcherEditor,\n  matcher: fieldMatchers.get(FieldMatcherID.byValue),\n  name: t('grafana-ui.matchers-ui.name-fields-with-value', 'Fields with values'),\n  description: t(\n    'grafana-ui.matchers-ui.description-fields-with-value',\n    'Set properties for fields with reducer condition'\n  ),\n  optionsToLabel: (options) => `${options?.reducer} ${options?.op} ${options?.value}`,\n});\n"],"names":["ComparisonOperation","ReducerID","useMemo","fieldReducers","useCallback","jsx","Stack","jsxs","Combobox","t","Fragment","Input","FieldMatcherID","fieldMatchers"],"mappings":"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"}