@grafana/ui
Version:
Grafana Components Library
1 lines • 6.25 kB
Source Map (JSON)
{"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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"}