'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import React from 'react'; import { Button } from '@/components/ui/button'; import { ActionResponse } from '@/lib/types/actionResponse'; import { useRouter } from 'next/navigation'; import { toast } from 'sonner'; import { sonnerContent } from '@/components/ui/sonner'; import { Category } from '@prisma/client'; import { categoryFormSchema } from '@/lib/form-schemas/categoryFormSchema'; export default function CategoryForm({value, onSubmit, className}: { value: Category | undefined, onSubmit: (data: z.infer) => Promise className?: string }) { const router = useRouter(); const colorInput = React.createRef(); const form = useForm>({ resolver: zodResolver(categoryFormSchema), defaultValues: { id: value?.id ?? undefined, name: value?.name ?? '', color: value?.color ?? '#' + Math.floor(Math.random() * 16777215).toString(16), }, }); const handleSubmit = async (data: z.infer) => { const response = await onSubmit(data); toast(sonnerContent(response)); if (response.redirect) { router.push(response.redirect); } }; return (
( )} />
( Color
colorInput.current?.click()} className="rounded-md aspect-square w-10 cursor-pointer border border-black items-bottom" style={{backgroundColor: field.value}}>
)} /> ( Name )} />
); }