"use client"; import { RiCalendarCheckLine, RiLoader4Line } from "@remixicon/react"; import { useQueryClient } from "@tanstack/react-query"; import { useEffect } from "react"; import { toast } from "sonner"; import { cancelInstallmentAnticipationAction } from "@/features/transactions/actions/anticipation"; import { installmentAnticipationsQueryKey, useInstallmentAnticipations, } from "@/features/transactions/hooks/use-installment-anticipations"; import { ConfirmActionDialog } from "@/shared/components/confirm-action-dialog"; import { Button } from "@/shared/components/ui/button"; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/shared/components/ui/dialog"; import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, } from "@/shared/components/ui/empty"; import { useControlledState } from "@/shared/hooks/use-controlled-state"; import { AnticipationCard } from "../../shared/anticipation-card"; interface AnticipationHistoryDialogProps { trigger?: React.ReactNode; seriesId: string; lancamentoName: string; open?: boolean; onOpenChange?: (open: boolean) => void; } export function AnticipationHistoryDialog({ trigger, seriesId, lancamentoName, open, onOpenChange, }: AnticipationHistoryDialogProps) { const queryClient = useQueryClient(); const [dialogOpen, setDialogOpen] = useControlledState( open, false, onOpenChange, ); const { data: anticipations = [], isLoading, isFetching, isError, refetch, } = useInstallmentAnticipations(seriesId, dialogOpen); useEffect(() => { if (dialogOpen) { void refetch(); } }, [dialogOpen, refetch]); const cancelableAnticipation = anticipations.find( (anticipation) => anticipation.transaction?.isSettled !== true, ); const anticipationCountLabel = anticipations.length === 1 ? "1 registro de antecipação encontrada" : `${anticipations.length} registros de antecipações encontradas`; const refreshHistory = () => { void queryClient.invalidateQueries({ queryKey: installmentAnticipationsQueryKey(seriesId), }); }; const handleCancelAnticipation = async () => { if (!cancelableAnticipation) return; const result = await cancelInstallmentAnticipationAction({ anticipationId: cancelableAnticipation.id, }); if (result.success) { toast.success(result.message); refreshHistory(); return; } toast.error(result.error || "Erro ao cancelar antecipação"); }; return ( ); } function LoadingState() { return (