"use client"; import { useEffect, useState } from "react"; import { NotebookPen, Pencil, Sparkles } from "lucide-react"; import { Button } from "@/components/ui/button"; import { colorModeFromTheme } from "@/components/theme/use-dark-theme"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { MDEditor, MarkdownPreview } from "@/components/markdown/markdown-widgets"; import { useBoard } from "@/components/board/board-context"; import { GroupAiDialog } from "@/components/board/group-ai-dialog"; import type { GroupDTO } from "@/types/board"; export function NotesDialog({ group }: { group: GroupDTO }) { const { saveNote } = useBoard(); const colorMode = colorModeFromTheme(); const [open, setOpen] = useState(false); const [editing, setEditing] = useState(false); const [draft, setDraft] = useState(group.noteContent); const [pending, setPending] = useState(false); const [aiOpen, setAiOpen] = useState(false); function handleOpenChange(next: boolean) { setOpen(next); if (next) { setDraft(group.noteContent); setEditing(false); } } // The "Ask AI" dialog can update this group's notes (via saveNote) while // this dialog stays open behind it. Pick up that change so the accepted // AI notes show up here immediately instead of the stale pre-AI draft. useEffect(() => { if (open && !editing) { setDraft(group.noteContent); } }, [group.noteContent, open, editing]); async function handleSave() { setPending(true); const ok = await saveNote(group.id, group.categoryId, draft); setPending(false); if (ok) setEditing(false); } return ( <> handleOpenChange(true)} > {group.title} — Notes {editing ? ( setDraft(v ?? "")} height={360} /> ) : draft ? ( ) : ( No notes yet. Click Edit to add some. )} {editing ? ( <> setEditing(false)} disabled={pending}> Cancel {pending ? "Saving…" : "Save"} > ) : ( <> setAiOpen(true)} className="gap-2"> Ask AI setEditing(true)} className="gap-2"> Edit > )} > ); }
No notes yet. Click Edit to add some.