"use client"; import { Badge } from "@/components/ui/badge"; import { buttonVariants } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Empty, EmptyDescription, EmptyMedia, EmptyTitle, } from "@/components/ui/empty"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import type { DashboardNotification } from "@/lib/dashboard/notifications"; import { cn } from "@/lib/utils/ui"; import { RiAlertFill, RiCheckboxCircleFill, RiNotification3Fill, RiTimeLine, } from "@remixicon/react"; import { useState } from "react"; type NotificationBellProps = { notifications: DashboardNotification[]; totalCount: number; }; function formatDate(dateString: string): string { // Parse manual para evitar problemas de timezone // Formato esperado: "YYYY-MM-DD" const [year, month, day] = dateString.split("-").map(Number); // Criar data em UTC usando os valores diretos const date = new Date(Date.UTC(year, month - 1, day)); return date.toLocaleDateString("pt-BR", { day: "2-digit", month: "short", timeZone: "UTC", // Força uso de UTC para evitar conversão de timezone }); } function formatCurrency(amount: number): string { return new Intl.NumberFormat("pt-BR", { style: "currency", currency: "BRL", }).format(amount); } export function NotificationBell({ notifications, totalCount, }: NotificationBellProps) { const [open, setOpen] = useState(false); const displayCount = totalCount > 99 ? "99+" : totalCount.toString(); const hasNotifications = totalCount > 0; return ( Pagamentos para os próximos 5 dias. Notificações | Próximos 5 dias. {hasNotifications && ( {totalCount} {totalCount === 1 ? "item" : "itens"} )} {notifications.length === 0 ? (
Nenhuma notificação Você está em dia com seus pagamentos!
) : (
{notifications.map((notification) => (
{notification.status === "overdue" ? ( ) : ( )}
{notification.name} {notification.type === "invoice" ? "Cartão" : "Boleto"}
{notification.status === "overdue" ? "Venceu em " : "Vence em "} {formatDate(notification.dueDate)} {notification.showAmount && notification.amount > 0 && ( {formatCurrency(notification.amount)} )}
{notification.status === "overdue" ? "Atrasado" : "Em breve"}
))}
)}
); }