"use client"; import { useState } from "react"; import { Button } from "ui/button"; import MentionInput from "../mention-input"; import { TipTapMentionJsonContent } from "app-types/util"; import { LoaderIcon, SendIcon } from "lucide-react"; import { useSWRConfig } from "swr"; export default function CommentForm({ exportId, parentId, onSubmit, }: { exportId: string; parentId?: string; onSubmit?: () => void; }) { const [content, setContent] = useState< TipTapMentionJsonContent | undefined | string >(); const [isSubmitting, setIsSubmitting] = useState(false); const { mutate } = useSWRConfig(); const handleSubmit = async () => { if (!content) return; try { setIsSubmitting(true); const trimContent = (content as TipTapMentionJsonContent).content?.filter( (item) => { if (item.type == "paragraph" && !item.content) return false; return true; }, ); if ((content as TipTapMentionJsonContent).content) { (content as TipTapMentionJsonContent).content = trimContent; } const response = await fetch(`/api/export/${exportId}/comments`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ content, parentId, }), }); if (!response.ok) { throw new Error("Failed to create comment"); } // Reset form setContent(""); // Refresh comments mutate(`/api/export/${exportId}/comments`); onSubmit?.(); } catch (error) { console.error("Failed to create comment:", error); } finally { setIsSubmitting(false); } }; const handleContentChange = ({ json, }: { json: TipTapMentionJsonContent; mentions: { label: string; id: string }[]; }) => { setContent(json); }; return (
); }