"use client"; import { RiEyeLine, RiPencilLine, RiTodoLine } from "@remixicon/react"; import { useCallback, useMemo, useState } from "react"; import { NoteDetailsDialog } from "@/components/anotacoes/note-details-dialog"; import { NoteDialog } from "@/components/anotacoes/note-dialog"; import type { Note } from "@/components/anotacoes/types"; import { Button } from "@/components/ui/button"; import { CardContent } from "@/components/ui/card"; import type { DashboardNote } from "@/lib/dashboard/notes"; import { Badge } from "../ui/badge"; import { WidgetEmptyState } from "../widget-empty-state"; type NotesWidgetProps = { notes: DashboardNote[]; }; const DATE_FORMATTER = new Intl.DateTimeFormat("pt-BR", { day: "2-digit", month: "short", year: "numeric", timeZone: "UTC", }); const buildDisplayTitle = (value: string) => { const trimmed = value.trim(); return trimmed.length ? trimmed : "Anotação sem título"; }; const mapDashboardNoteToNote = (note: DashboardNote): Note => ({ id: note.id, title: note.title, description: note.description, type: note.type, tasks: note.tasks, arquivada: note.arquivada, createdAt: note.createdAt, }); const getTasksSummary = (note: DashboardNote) => { if (note.type !== "tarefa") { return "Nota"; } const tasks = note.tasks ?? []; const completed = tasks.filter((task) => task.completed).length; return `${completed}/${tasks.length} concluídas`; }; export function NotesWidget({ notes }: NotesWidgetProps) { const [noteToEdit, setNoteToEdit] = useState(null); const [isEditOpen, setIsEditOpen] = useState(false); const [noteDetails, setNoteDetails] = useState(null); const [isDetailsOpen, setIsDetailsOpen] = useState(false); const mappedNotes = useMemo(() => notes.map(mapDashboardNoteToNote), [notes]); const handleOpenEdit = useCallback((note: Note) => { setNoteToEdit(note); setIsEditOpen(true); }, []); const handleOpenDetails = useCallback((note: Note) => { setNoteDetails(note); setIsDetailsOpen(true); }, []); const handleEditOpenChange = useCallback((open: boolean) => { setIsEditOpen(open); if (!open) { setNoteToEdit(null); } }, []); const handleDetailsOpenChange = useCallback((open: boolean) => { setIsDetailsOpen(open); if (!open) { setNoteDetails(null); } }, []); return ( <> {mappedNotes.length === 0 ? ( } title="Nenhuma anotação ativa" description="Crie anotações para acompanhar lembretes e tarefas financeiras." /> ) : (
    {mappedNotes.map((note) => (
  • {buildDisplayTitle(note.title)}

    {getTasksSummary(note)}

    {DATE_FORMATTER.format(new Date(note.createdAt))}

  • ))}
)}
); }