import { IEquatable, IOption } from '@websolutespa/bom-core'; import { FormControl, useControl, valueToString } from '@websolutespa/bom-mixer-forms'; import { useLabel } from '@websolutespa/bom-mixer-hooks'; import { IconChevronDown } from '@websolutespa/bom-mixer-icons'; import { FocusEvent, ReactElement, useId } from 'react'; import { Combobox, Field, filterOptions } from '../forms'; import { FieldError } from './field-error'; type FieldComboboxProps = { control: FormControl; icon?: ReactElement; }; export function FieldCombobox({ control, icon }: FieldComboboxProps) { const uid = useId(); const label = useLabel(); const uniqueName = `${control.name}-${uid}`; const [state, setValue, setTouched] = useControl(control); // const [focus, setFocus] = useState(false); const onBlur = (event: FocusEvent) => { setTouched(); // setFocus(false); }; const onFocus = (event: FocusEvent) => { // setFocus(true); }; const onChange = (option: string | IOption | string[] | IOption[] | null) => { setValue(option); }; // console.log('FieldCombobox', control.value); const controlLabel = control.label && label(control.label); return ( state.flags.hidden ? ( ) : ( {controlLabel && ( {controlLabel} )} } autoSelect placeholder={control.placeholder && label(control.placeholder)} aria-invalid={state.flags.invalid} aria-describedby={`${uniqueName}-error`} > { if (!control.options) { return; } const filteredOptions = filterOptions(control.options, value); return filteredOptions.length ? ( filteredOptions.map((option) => ( )) ) : ( {label('noResults')} ); }} /> {control.customData?.after && ( control.customData.after )} ) ); }