{"version":3,"file":"StatsPicker.mjs","sources":["../../../../src/components/StatsPicker/StatsPicker.tsx"],"sourcesContent":["import { difference } from 'lodash';\nimport { memo, useEffect } from 'react';\n\nimport { fieldReducers, type FieldReducerInfo } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { Combobox, type ComboboxProps } from '../Combobox/Combobox';\nimport { MultiCombobox, type MultiComboboxProps } from '../Combobox/MultiCombobox';\nimport { type ComboboxOption } from '../Combobox/types';\nimport { selectableValueToComboboxOption } from '../Combobox/utils';\n\nimport { pickComboboxLayout } from './pickComboboxLayout';\n\n/** Props managed by StatsPicker — forwarded combobox props must not replace these. */\ntype ComboboxManagedProps = 'value' | 'options' | 'onChange' | 'isClearable' | 'width' | 'minWidth' | 'maxWidth';\n\n/** Forwarded props (managed keys + layout are applied after the spread). */\ntype MultiSpread = Omit<MultiComboboxProps<string>, ComboboxManagedProps>;\ntype SingleSpread = Omit<ComboboxProps<string>, ComboboxManagedProps>;\n\ninterface BaseProps {\n  stats: string[];\n  onChange: (stats: string[]) => void;\n  defaultStat?: string;\n  width?: number | 'auto';\n  minWidth?: number;\n  maxWidth?: number;\n  filterOptions?: (ext: FieldReducerInfo) => boolean;\n}\n\ntype MultiProps = MultiSpread & { allowMultiple: true };\ntype SingleProps = SingleSpread & { allowMultiple?: false };\n\nexport type StatsPickerProps = BaseProps & (MultiProps | SingleProps);\n\nexport const StatsPicker = memo<StatsPickerProps>(\n  ({\n    placeholder = t('grafana-ui.stats-picker.placeholder', 'Choose'),\n    onChange,\n    stats,\n    allowMultiple = false,\n    defaultStat,\n    width,\n    minWidth,\n    maxWidth,\n    filterOptions,\n    ...rest\n  }) => {\n    const layout = pickComboboxLayout(width, minWidth, maxWidth);\n\n    useEffect(() => {\n      const current = fieldReducers.list(stats);\n      if (current.length !== stats.length) {\n        const found = current.map((v) => v.id);\n        const notFound = difference(stats, found);\n        console.warn('Unknown stats', notFound, stats);\n        onChange(current.map((stat) => stat.id));\n      }\n\n      // Make sure there is only one\n      if (!allowMultiple && stats.length > 1) {\n        console.warn('Removing extra stat', stats);\n        onChange([stats[0]]);\n      }\n\n      // Set the reducer from callback\n      if (defaultStat && stats.length < 1) {\n        onChange([defaultStat]);\n      }\n    }, [stats, allowMultiple, defaultStat, onChange]);\n\n    const select = fieldReducers.selectOptions(stats, filterOptions);\n    const options = select.options.map((v) => selectableValueToComboboxOption(v)).filter((v) => !!v);\n    const value = select.current.map((v) => selectableValueToComboboxOption(v)).filter((v) => !!v);\n\n    if (allowMultiple) {\n      return (\n        <MultiCombobox\n          {...rest}\n          {...layout}\n          value={value}\n          options={options}\n          placeholder={placeholder}\n          isClearable={!defaultStat}\n          onChange={(items: Array<ComboboxOption<string>>) => onChange(items.map((v) => v.value))}\n        />\n      );\n    }\n\n    const commonOptions = {\n      ...rest,\n      ...layout,\n      value: value[0],\n      options,\n      placeholder,\n    };\n\n    return defaultStat ? (\n      <Combobox\n        {...commonOptions}\n        isClearable={false}\n        onChange={(item: ComboboxOption | null) => onChange(item && item.value ? [item.value] : [])}\n      />\n    ) : (\n      <Combobox\n        {...commonOptions}\n        isClearable={true}\n        onChange={(item: ComboboxOption | null) => onChange(item && item.value ? [item.value] : [])}\n      />\n    );\n  }\n);\n\nStatsPicker.displayName = 'StatsPicker';\n"],"names":[],"mappings":"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"}