import { useCallback, useMemo, useState } from "react"; import { ProseMirrorEditor } from "@/components/richtext/ProseMirrorEditor"; import { schema } from "@/components/richtext/schema"; import type { Document } from "@/lib/lexicons/types/com/deckbelcher/richtext"; import { lexiconToTree, treeToLexicon } from "@/lib/richtext-convert"; import { useProseMirror } from "@/lib/useProseMirror"; interface CommentFormProps { initialContent?: Document; onSubmit: (content: Document) => void; onCancel?: () => void; isPending?: boolean; placeholder?: string; submitLabel?: string; availableTags?: string[]; } export function CommentForm({ initialContent, onSubmit, onCancel, isPending, placeholder = "Write a comment...", submitLabel, availableTags, }: CommentFormProps) { const isEditMode = !!initialContent; const [key, setKey] = useState(0); const initialPMDoc = useMemo(() => { if (!initialContent) return undefined; return lexiconToTree(initialContent).toJSON(); }, [initialContent]); const { doc, onChange, isDirty } = useProseMirror({ initialDoc: initialPMDoc, }); const hasContent = doc.textContent.trim().length > 0; const handleSubmit = useCallback(() => { if (!hasContent || isPending) return; if (isEditMode && !isDirty) { onSubmit(initialContent); return; } const content = treeToLexicon(doc); onSubmit(content); if (!isEditMode) { setKey((k) => k + 1); } }, [ doc, hasContent, isDirty, initialContent, isEditMode, isPending, onSubmit, ]); const label = submitLabel ?? (isEditMode ? "Done" : "Post"); return (