import { FieldPath, FieldValues, useController, UseControllerProps } from 'react-hook-form'; import { isBoolean, isString } from 'lodash'; import { useDefaultProps } from '../../hooks'; import { useLocalization } from '../../localization'; import { Select } from '../select'; import { SelectOption, SelectProps } from '../select/Select'; export type RHFSelectProps< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, TOptions extends readonly SelectOption[] = [], TEmptyOption extends boolean = false, TEmptyValue = null > = Omit, 'value' | 'name' | 'disabled' | 'error'> & UseControllerProps; function RHFSelect< TFieldValues extends FieldValues, TName extends FieldPath, TOptions extends readonly SelectOption[] = [], TEmptyOption extends boolean = false, TEmptyValue = null >(inProps: RHFSelectProps) { const { translate } = useLocalization(); const { /** React Hook Form */ name, rules, control, disabled, defaultValue, shouldUnregister, /** React Hook Form */ required, helperText, label, onChange, onBlur, ...other } = useDefaultProps({ name: 'ReevolveRHFSelect', props: inProps }); const { field, fieldState: { error } } = useController({ name, defaultValue, disabled, shouldUnregister, control, rules: rules && { ...rules, required: rules?.required === true ? translate('validation.required', { label }) : rules?.required } }); const isFieldRequired = isBoolean(rules?.required) ? rules.required : isString(rules?.required) || rules?.required?.value || required; const onChangeHandler: SelectProps['onChange'] = (value, event, child) => { field.onChange(value); onChange?.(value, event, child); }; const onBlurHandler = (e: React.FocusEvent) => { field.onBlur(); onBlur?.(e); }; return (