"use client"; import { discardInboxItemAction } from "@/app/(dashboard)/caixa-de-entrada/actions"; import { ConfirmActionDialog } from "@/components/confirm-action-dialog"; import { EmptyState } from "@/components/empty-state"; import { Card } from "@/components/ui/card"; import { RiInboxLine } from "@remixicon/react"; import { useCallback, useMemo, useState } from "react"; import { toast } from "sonner"; import { InboxCard } from "./inbox-card"; import { InboxDetailsDialog } from "./inbox-details-dialog"; import { ProcessDialog } from "./process-dialog"; import type { InboxItem, SelectOption } from "./types"; interface InboxPageProps { items: InboxItem[]; categorias: SelectOption[]; contas: SelectOption[]; cartoes: SelectOption[]; } export function InboxPage({ items, categorias, contas, cartoes, }: InboxPageProps) { const [processOpen, setProcessOpen] = useState(false); const [itemToProcess, setItemToProcess] = useState(null); const [detailsOpen, setDetailsOpen] = useState(false); const [itemDetails, setItemDetails] = useState(null); const [discardOpen, setDiscardOpen] = useState(false); const [itemToDiscard, setItemToDiscard] = useState(null); const sortedItems = useMemo( () => [...items].sort( (a, b) => new Date(b.notificationTimestamp).getTime() - new Date(a.notificationTimestamp).getTime() ), [items] ); const handleProcessOpenChange = useCallback((open: boolean) => { setProcessOpen(open); if (!open) { setItemToProcess(null); } }, []); const handleDetailsOpenChange = useCallback((open: boolean) => { setDetailsOpen(open); if (!open) { setItemDetails(null); } }, []); const handleDiscardOpenChange = useCallback((open: boolean) => { setDiscardOpen(open); if (!open) { setItemToDiscard(null); } }, []); const handleProcessRequest = useCallback((item: InboxItem) => { setItemToProcess(item); setProcessOpen(true); }, []); const handleDetailsRequest = useCallback((item: InboxItem) => { setItemDetails(item); setDetailsOpen(true); }, []); const handleDiscardRequest = useCallback((item: InboxItem) => { setItemToDiscard(item); setDiscardOpen(true); }, []); const handleDiscardConfirm = useCallback(async () => { if (!itemToDiscard) return; const result = await discardInboxItemAction({ inboxItemId: itemToDiscard.id, }); if (result.success) { toast.success(result.message); return; } toast.error(result.error); throw new Error(result.error); }, [itemToDiscard]); return ( <>

Caixa de Entrada

{items.length === 0 ? "Nenhuma notificação pendente" : `${items.length} notificação${items.length > 1 ? "ões" : ""} pendente${items.length > 1 ? "s" : ""}`}

{sortedItems.length === 0 ? ( } title="Caixa de entrada vazia" description="As notificações capturadas pelo app OpenSheets Companion aparecerão aqui para você processar." /> ) : (
{sortedItems.map((item) => ( ))}
)}
); }