"use client" import { Button, buttonVariants } from "@/components/ui/button" import { Dialog, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DialogPortal, DialogOverlay, DialogPrimitive } from "@/components/ui/dialog" import { LaIcon } from "@/components/custom/la-icon" import { MinimalTiptapEditor, MinimalTiptapEditorRef } from "@/components/minimal-tiptap" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form" import { useRef, useState } from "react" import { cn } from "@/lib/utils" import { sendFeedback } from "@/app/actions" import { useServerAction } from "zsa-react" import { z } from "zod" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { toast } from "sonner" import { Spinner } from "@/components/custom/spinner" const formSchema = z.object({ content: z.string().min(1, { message: "Feedback cannot be empty" }) }) export function Feedback() { const [open, setOpen] = useState(false) const editorRef = useRef(null) const { isPending, execute } = useServerAction(sendFeedback) const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { content: "" } }) async function onSubmit(values: z.infer) { const [, err] = await execute(values) if (err) { toast.error("Failed to send feedback") console.error(err) return } form.reset({ content: "" }) editorRef.current?.editor?.commands.clearContent() setOpen(false) toast.success("Feedback sent") } return (
Share feedback Your feedback helps us improve. Please share your thoughts, ideas, and suggestions ( Content )} /> Cancel
) }