From 8dfd7d70553d50b3806378e8d5fa0b0d8d93d58c Mon Sep 17 00:00:00 2001 From: Markus Thielker Date: Sun, 10 Mar 2024 17:50:46 +0100 Subject: [PATCH] N-FIN-6: add category form --- src/components/form/categoryForm.tsx | 103 +++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/components/form/categoryForm.tsx diff --git a/src/components/form/categoryForm.tsx b/src/components/form/categoryForm.tsx new file mode 100644 index 0000000..89c4bd2 --- /dev/null +++ b/src/components/form/categoryForm.tsx @@ -0,0 +1,103 @@ +'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 + + + + + + )} + /> +
+ + + + ); +}