import type { SubmitErrorHandler } from "react-hook-form"; import { useState } from "react"; import { ActionButton } from "@/components/ui/action-button"; import { Button } from "@/components/ui/button"; import { Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { toast } from "@/components/ui/use-toast"; import { api } from "@/lib/trpc"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; export function AddLinkButton({ children }: { children: React.ReactNode }) { const [isOpen, setOpen] = useState(false); const formSchema = z.object({ url: z.string().url({ message: "The link must be a valid URL" }), }); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { url: "", }, }); const invalidateBookmarksCache = api.useUtils().bookmarks.invalidate; const createBookmarkMutator = api.bookmarks.createBookmark.useMutation({ onSuccess: () => { invalidateBookmarksCache(); form.reset(); setOpen(false); }, onError: () => { toast({ description: "Something went wrong", variant: "destructive" }); }, }); const onError: SubmitErrorHandler> = (errors) => { toast({ description: Object.values(errors) .map((v) => v.message) .join("\n"), variant: "destructive", }); }; return ( {children}
Add Link createBookmarkMutator.mutate({ url: value.url, type: "link" }), onError, )} > { return ( ); }} /> Add
); }