import React from 'react' import { ZodSchema } from 'zod' import { TextInput } from '../TextInput' import { NumberInput } from '../NumberInput' import { TextArea } from '../TextArea' import { MultiSelect } from '../MultiSelect' import { MultiItem } from '../MultiItem' import { ImageUpload } from '../ImageUpload' import { FormFields } from '../../../store' import { SelectOption } from '../MultiSelect/MultiSelect' import { ArrayObjectField } from '../MultiItem/MultiItem' import clsx from 'clsx' import { useFormStore } from '../../../hooks' import { FormFieldType } from '../../types' import Select from '../Select/Select' export interface FieldConfig { name: string type: FormFieldType placeholder?: string loadOptions?: (inputValue: string) => Promise options?: string[] defaultValue?: any fields?: ArrayObjectField[] // For nested fields like in MultiItem className?: string disabled?: boolean } interface FormProps { fieldsConfig: FieldConfig[] initialFields: T validationSchema: ZodSchema onSubmit: (fields: T) => Promise className?: string } const Form = ({ fieldsConfig, initialFields, validationSchema, onSubmit, className, }: FormProps) => { const { formStore, handleSubmit } = useFormStore({ initialFields, validationSchema, onSubmit, }) const renderField = (fieldConfig: FieldConfig) => { switch (fieldConfig.type) { case FormFieldType.Text: return ( ) case FormFieldType.Number: return ( ) case FormFieldType.TextArea: return (