"use client"; import { NotebookPen, Plus } from "lucide-react"; import { useEffect, useState } from "react"; import { NoteDetailSheet } from "@/components/notes/note-detail-sheet"; import { Button } from "@/components/ui/button"; import { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, } from "@/components/ui/empty"; import { createNote, deleteNote, listNotes, type Note, updateNote, } from "@/lib/notes"; import { notify } from "@/lib/toast"; const newDraft = (): Note => ({ id: "", title: "", content: "", createdAt: "", updatedAt: "", }); export function NotesView() { const [notes, setNotes] = useState([]); // The note shown in the editor Sheet; null when the Sheet is closed. const [selected, setSelected] = useState(null); const [sheetOpen, setSheetOpen] = useState(false); const [draftKey, setDraftKey] = useState(0); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); useEffect(() => { let active = true; listNotes() .then((data) => { if (active) setNotes(data); }) .catch((err) => { if (active) { notify.error( "Couldn't load notes", err instanceof Error ? err.message : "Please try again.", ); } }) .finally(() => { if (active) setLoading(false); }); return () => { active = false; }; }, []); const startNew = () => { setSelected(newDraft()); setDraftKey((k) => k + 1); setSheetOpen(true); }; const openNote = (note: Note) => { setSelected(note); setSheetOpen(true); }; const save = async (data: { title: string; content: string }) => { setSaving(true); try { const saved = selected?.id ? await updateNote(selected.id, data) : await createNote(data); const list = await listNotes(); setNotes(list); setSelected(list.find((n) => n.id === saved.id) ?? saved); notify.success("Note saved"); } catch (err) { notify.error( "Couldn't save note", err instanceof Error ? err.message : "Please try again.", ); } finally { setSaving(false); } }; const remove = async (id: string) => { try { await deleteNote(id); const list = await listNotes(); setNotes(list); setSelected(null); setSheetOpen(false); notify.success("Note deleted"); } catch (err) { notify.error( "Couldn't delete note", err instanceof Error ? err.message : "Please try again.", ); } }; return (

Notes

Clinical notes. Click a note to open it.

{loading ? (
Loading…
) : notes.length === 0 ? (
No notes yet Create a note to start writing.
) : (
{notes.map((n) => ( ))}
)} remove(selected.id) : undefined} onOpenChange={(o) => { setSheetOpen(o); if (!o) setSelected(null); }} onSave={save} open={sheetOpen} saving={saving} />
); }