'use client' //https://codesandbox.io/p/sandbox/react-hook-form-zod-with-array-of-objects-field-array-usefieldarray-8xh3ry?file=%2Fsrc%2FApp.tsx%3A11%2C53 // https://stackoverflow.com/questions/78004655/how-to-dynamically-add-array-of-objects-to-react-hook-form import {zodResolver} from '@hookform/resolvers/zod' import {useState} from 'react' import {useFieldArray, useForm} from 'react-hook-form' import {z} from 'zod' import {onCategoryCreateAction} from '@/actions/admin/category' import FormError from '@/components/auth/form-error' import {FormSuccess} from '@/components/auth/form-success' import {createCategoryFormSchema as validationSchema} from '@/lib/schemas/admin/category' import {dump} from '@/lib/utils' import {ResourceMessages} from '@/types' import {Button} from '@/ui/button' import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/ui/form' import {Input} from '@/ui/input' import {Tabs, TabsContent, TabsList, TabsTrigger} from '@/ui/tabs' export const CreateForm = () => { const [loading, setLoading] = useState(false) const [error, setError] = useState('') const [success, setSuccess] = useState('') const localesValues = { title: '', short_title: '', description: '' } const form = useForm>({ resolver: zodResolver(validationSchema), mode: 'onBlur', defaultValues: { locales: [ {lang: 'uk', ...localesValues}, {lang: 'ru', ...localesValues} ] } }) const {fields, append} = useFieldArray({ name: 'locales', control: form.control }) const onSubmit = async (data: z.infer) => { setLoading(true) onCategoryCreateAction(data).then((res: ResourceMessages) => { if (res?.error) { setError(res?.error) setSuccess('') setLoading(false) } else { setSuccess(res?.success as string) setError('') setLoading(false) } }) } return (
Українська російська {fields.map((_, index) => ( ( {/*Мова*/} )} /> ( Назва категорії {/* Select a language between uk or ru */} )} /> ( Скорочена назва категорії )} /> ( Опис категорії )} /> ))}
) }