import React, { useEffect, useState } from 'react' import AsyncSelect from 'react-select/async' import { FormStoreType, FormFields } from '../../../store' import { observer } from 'mobx-react' import { ActionMeta, MultiValue } from 'react-select' export interface SelectOption { label: string value: string } interface MultiSelectProps { name: keyof T loadOptions: (inputValue: string) => Promise formStore: FormStoreType } const CustomMultiSelect = observer( ({ name, loadOptions, formStore }: MultiSelectProps) => { const [selectedOptions, setSelectedOptions] = useState([]) useEffect(() => { const loadInitialOptions = async () => { const currentValues = formStore.fields[name] as string[] if (currentValues && currentValues.length > 0) { const options = await loadOptions('') const selected = options.filter((option) => currentValues.includes(option.value), ) setSelectedOptions(selected) } } loadInitialOptions() }, [formStore.fields, name, loadOptions]) const handleChange = ( newValue: MultiValue, actionMeta: ActionMeta, ) => { const updatedOptions = newValue ? [...newValue] : [] const values = updatedOptions.map((option) => option.value) setSelectedOptions(updatedOptions) formStore.setField(name, values as unknown as T[keyof T]) } return (
{formStore.errors[name] && ( {formStore.errors[name]} )}
) }, ) export default CustomMultiSelect