import * as React from 'react'; import FormHelperText from '@mui/material/FormHelperText'; import { Controller, useFormContext } from 'react-hook-form'; import Autocomplete, { AutocompleteProps } from '@mui/material/Autocomplete'; import type { IFieldDropdownOption } from '@automatisch/types'; interface ControlledAutocompleteProps extends AutocompleteProps { shouldUnregister?: boolean; name: string; required?: boolean; description?: string; } const getOption = (options: readonly IFieldDropdownOption[], value: string) => options.find(option => option.value === value) || null; function ControlledAutocomplete(props: ControlledAutocompleteProps): React.ReactElement { const { control } = useFormContext(); const { required = false, name, defaultValue, shouldUnregister, onBlur, onChange, description, options = [], ...autocompleteProps } = props; return ( (
{/* encapsulated with an element such as div to vertical spacing delegated from parent */} { const typedSelectedOption = selectedOption as IFieldDropdownOption; if (typedSelectedOption !== null && Object.prototype.hasOwnProperty.call(typedSelectedOption, 'value')) { controllerOnChange(typedSelectedOption.value); } else { controllerOnChange(typedSelectedOption); } onChange?.(event, selectedOption, reason, details); }} onBlur={(...args) => { controllerOnBlur(); onBlur?.(...args); }} ref={ref} /> {fieldState.isTouched ? fieldState.error?.message || description : description}
)} /> ); } export default ControlledAutocomplete;