"use client"; import { ActionButton } from "@/components/ui/action-button"; import { Button } from "@/components/ui/button"; import { Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { toast } from "@/components/ui/use-toast"; import { api } from "@/lib/trpc"; import data from "@emoji-mart/data"; import Picker from "@emoji-mart/react"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { create } from "zustand"; export const useNewListModal = create<{ open: boolean; setOpen: (v: boolean) => void; }>((set) => ({ open: false, setOpen: (open: boolean) => set(() => ({ open })), })); export default function NewListModal() { const { open, setOpen } = useNewListModal(); const formSchema = z.object({ name: z.string(), icon: z.string(), }); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: "", icon: "🚀", }, }); const listsInvalidationFunction = api.useUtils().lists.list.invalidate; const { mutate: createList, isPending } = api.lists.create.useMutation({ onSuccess: () => { toast({ description: "List has been created!", }); listsInvalidationFunction(); setOpen(false); form.reset(); }, onError: (e) => { if (e.data?.code == "BAD_REQUEST") { if (e.data.zodError) { toast({ variant: "destructive", description: Object.values(e.data.zodError.fieldErrors) .flat() .join("\n"), }); } else { toast({ variant: "destructive", description: e.message, }); } } else { toast({ variant: "destructive", title: "Something went wrong", }); } }, }); return ( { form.reset(); setOpen(s); }} >
{ createList(value); })} > New List
{ return ( {field.value} field.onChange(e.native) } /> ); }} /> { return ( ); }} />
Create
); }