import React, { useState, useEffect } from 'react' import { observer } from 'mobx-react' import { FormStoreType, FormFields } from '../../../store' export interface ArrayObjectField { name: string type: 'text' | 'number' | 'select' options?: string[] // For select type defaultValue?: any } interface MultiItemProps { name: keyof T formStore: FormStoreType fields: ArrayObjectField[] } const MultiItem = observer( ({ name, formStore, fields }: MultiItemProps) => { const [items, setItems] = useState((formStore.fields[name] as any[]) || []) useEffect(() => { setItems((formStore.fields[name] as any[]) || []) }, [formStore.fields, name]) const handleAddItem = () => { const newItem = fields.reduce( (acc, field) => ({ ...acc, [field.name]: field.defaultValue || (field.type === 'number' ? 0 : ''), }), {}, ) const updatedItems = [...items, newItem] setItems(updatedItems) formStore.setField(name, updatedItems as unknown as T[keyof T]) } const handleItemChange = (index: number, fieldName: string, value: any) => { const updatedItems = items.map((item, i) => i === index ? { ...item, [fieldName]: value } : item, ) setItems(updatedItems) formStore.setField(name, updatedItems as unknown as T[keyof T]) } const handleRemoveItem = (index: number) => { const updatedItems = items.filter((_, i) => i !== index) setItems(updatedItems) formStore.setField(name, updatedItems as unknown as T[keyof T]) } return (
{items.map((item, index) => (
{fields.map((field) => (
{field.type === 'select' ? ( ) : ( handleItemChange( index, field.name, field.type === 'number' ? Number(e.target.value) : e.target.value, ) } /> )}
))}
))} {formStore.errors[name] && ( {formStore.errors[name]} )}
) }, ) export default MultiItem