import React, { ReactNode } from 'react'; import Select from 'react-select'; import { Controller, Path } from 'react-hook-form'; import { FieldValues } from 'react-hook-form/dist/types/fields'; import { FieldPath } from 'react-hook-form/dist/types/path'; import { FieldPathValue, UnpackNestedValue } from 'react-hook-form/dist/types'; import { FormControlledComponent } from '../../models/form-component'; interface FormSelectProps extends FormControlledComponent { id: string, label?: string, tooltip?: ReactNode, options: Array>, valueDefault?: TOptionValue, onChange?: (value: TOptionValue) => void, className?: string, placeholder?: string, disabled?: boolean, readOnly?: boolean, clearable?: boolean, } /** * Option format, expected by react-select * @see https://github.com/JedWatson/react-select */ type selectOption = { value: TOptionValue, label: string }; /** * This component is a wrapper for react-select to use with react-hook-form */ export const FormSelect = ({ id, label, tooltip, className, control, placeholder, options, valueDefault, error, rules, disabled, onChange, readOnly, clearable }: FormSelectProps) => { const classNames = [ 'form-select form-item', `${className || ''}`, `${error ? 'is-incorrect' : ''}`, `${rules && rules.required ? 'is-required' : ''}`, `${disabled ? 'is-disabled' : ''}` ].join(' '); /** * The following callback will trigger the onChange callback, if it was passed to this component, * when the selected option changes. */ const onChangeCb = (newValue: TOptionValue): void => { if (typeof onChange === 'function') { onChange(newValue); } }; return (