From c79bff8dbb6eb0fcb999fed820fd3fcba23d1d59 Mon Sep 17 00:00:00 2001 From: Benjamin Cortes Date: Sat, 31 Aug 2024 15:35:00 -0700 Subject: [PATCH 1/6] add advise dialog form refactor --- .../advises/add-advise-dialog-form.tsx | 61 +++++++++++++++++++ src/components/advises/add-advise.tsx | 52 +--------------- 2 files changed, 63 insertions(+), 50 deletions(-) create mode 100644 src/components/advises/add-advise-dialog-form.tsx diff --git a/src/components/advises/add-advise-dialog-form.tsx b/src/components/advises/add-advise-dialog-form.tsx new file mode 100644 index 0000000..dfb3657 --- /dev/null +++ b/src/components/advises/add-advise-dialog-form.tsx @@ -0,0 +1,61 @@ +'use client'; + +import { createAdvise } from "@/actions/advises/create-advise"; +import { AdviseFormData, adviseSchema } from "@/schemas/advise-schema"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useForm } from "react-hook-form"; +import { toast } from "sonner"; +import { Form, FormControl, FormField, FormItem, FormMessage } from "../ui/form"; +import { Textarea } from "../ui/textarea"; +import { Button } from "../ui/button"; +import { Dispatch, SetStateAction } from "react"; + +interface DialogFormProps { + setDialogOpen(data: boolean): void; +} + +export const AddAdviseDialogForm = (props: DialogFormProps) => { + const form = useForm({ + resolver: zodResolver(adviseSchema), + defaultValues: { + content: '', + }, + }); + + function onSubmit({ content }: AdviseFormData) { + toast.promise(createAdvise(content), { + loading: 'Creando consejo...', + success: () => { + form.reset(); + return 'Tu consejo fue publicado exitosamente. Gracias por compartir!'; + }, + error: 'Ocurrió un error al publicar el consejo', + }); + + props.setDialogOpen(false); + } + + return ( +
+ + ( + + +