import OLFormSelect from '@/features/ui/components/ol/ol-form-select' import { ChangeEventHandler, useCallback } from 'react' import Setting from './setting' import classNames from 'classnames' import { Spinner } from 'react-bootstrap-5' type PossibleValue = string | number | boolean export type Option = { value: T label: string ariaHidden?: 'true' | 'false' disabled?: boolean } export type Optgroup = { label: string options: Array> } type SettingsMenuSelectProps = { id: string label: string options: Array> onChange: (val: T) => void description?: string // TODO: We can remove optgroup when the spellcheck setting is // split into 2 and no longer uses it. optgroup?: Optgroup value?: T disabled?: boolean width?: 'default' | 'wide' loading?: boolean } export default function DropdownSetting({ id, label, options, onChange, value, optgroup, description = undefined, disabled = false, width = 'default', loading = false, }: SettingsMenuSelectProps) { const handleChange: ChangeEventHandler = useCallback( event => { const selectedValue = event.target.value let onChangeValue: PossibleValue = selectedValue if (typeof value === 'boolean') { onChangeValue = selectedValue === 'true' } else if (typeof value === 'number') { onChangeValue = parseInt(selectedValue, 10) } onChange(onChangeValue as T) }, [onChange, value] ) return ( {loading ? ( ) }