import type { SubmitErrorHandler, SubmitHandler } from "react-hook-form"; import { ActionButton } from "@/components/ui/action-button"; import { Form, FormControl, FormField, FormItem } from "@/components/ui/form"; import { Textarea } from "@/components/ui/textarea"; import { toast } from "@/components/ui/use-toast"; import { api } from "@/lib/trpc"; import { cn } from "@/lib/utils"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; export default function EditorCard({ className }: { className?: string }) { const formSchema = z.object({ text: z.string(), }); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { text: "", }, }); const invalidateBookmarksCache = api.useUtils().bookmarks.invalidate; const { mutate, isPending } = api.bookmarks.createBookmark.useMutation({ onSuccess: () => { invalidateBookmarksCache(); form.reset(); }, onError: () => { toast({ description: "Something went wrong", variant: "destructive" }); }, }); const onSubmit: SubmitHandler> = (data) => { const text = data.text.trim(); try { new URL(text); mutate({ type: "link", url: text }); } catch (e) { // Not a URL mutate({ type: "text", text }); } }; const onError: SubmitErrorHandler> = (errors) => { toast({ description: Object.values(errors) .map((v) => v.message) .join("\n"), variant: "destructive", }); }; return (
{ return (