"use client"; import { deleteNoteAction } from "@/app/(dashboard)/anotacoes/actions"; import { ConfirmActionDialog } from "@/components/confirm-action-dialog"; import { EmptyState } from "@/components/empty-state"; import { Button } from "@/components/ui/button"; import { RiAddCircleLine, RiFileListLine } from "@remixicon/react"; import { useCallback, useMemo, useState } from "react"; import { toast } from "sonner"; import { Card } from "../ui/card"; import { NoteCard } from "./note-card"; import { NoteDetailsDialog } from "./note-details-dialog"; import { NoteDialog } from "./note-dialog"; import type { Note } from "./types"; interface NotesPageProps { notes: Note[]; } export function NotesPage({ notes }: NotesPageProps) { const [createOpen, setCreateOpen] = useState(false); const [editOpen, setEditOpen] = useState(false); const [noteToEdit, setNoteToEdit] = useState(null); const [detailsOpen, setDetailsOpen] = useState(false); const [noteDetails, setNoteDetails] = useState(null); const [removeOpen, setRemoveOpen] = useState(false); const [noteToRemove, setNoteToRemove] = useState(null); const sortedNotes = useMemo( () => [...notes].sort( (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime() ), [notes] ); const handleCreateOpenChange = useCallback((open: boolean) => { setCreateOpen(open); }, []); const handleEditOpenChange = useCallback((open: boolean) => { setEditOpen(open); if (!open) { setNoteToEdit(null); } }, []); const handleDetailsOpenChange = useCallback((open: boolean) => { setDetailsOpen(open); if (!open) { setNoteDetails(null); } }, []); const handleRemoveOpenChange = useCallback((open: boolean) => { setRemoveOpen(open); if (!open) { setNoteToRemove(null); } }, []); const handleEditRequest = useCallback((note: Note) => { setNoteToEdit(note); setEditOpen(true); }, []); const handleDetailsRequest = useCallback((note: Note) => { setNoteDetails(note); setDetailsOpen(true); }, []); const handleRemoveRequest = useCallback((note: Note) => { setNoteToRemove(note); setRemoveOpen(true); }, []); const handleRemoveConfirm = useCallback(async () => { if (!noteToRemove) { return; } const result = await deleteNoteAction({ id: noteToRemove.id }); if (result.success) { toast.success(result.message); return; } toast.error(result.error); throw new Error(result.error); }, [noteToRemove]); const removeTitle = noteToRemove ? noteToRemove.title.trim().length ? `Remover anotação "${noteToRemove.title}"?` : "Remover anotação?" : "Remover anotação?"; return ( <>
Nova anotação } />
{sortedNotes.length === 0 ? ( } title="Nenhuma anotação registrada" description="Crie anotações personalizadas para acompanhar lembretes, decisões ou observações financeiras importantes." /> ) : (
{sortedNotes.map((note) => ( ))}
)}
); }