"use client"; import { useActionState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { Check, Loader2, X } from "lucide-react"; import { toast } from "sonner"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { confirmPaymentAction, rejectPaymentAction, } from "@/lib/appwrite/payment-actions"; import { PAYMENT_METHOD_LABELS, initialPaymentActionState, } from "@/lib/appwrite/payment-types"; import type { Payment } from "@/lib/appwrite/schema"; const dateFormatter = new Intl.DateTimeFormat("tr-TR", { day: "2-digit", month: "2-digit", year: "numeric", }); function formatMoney(amount: number, currency: string): string { try { return new Intl.NumberFormat("tr-TR", { style: "currency", currency }).format(amount); } catch { return `${amount.toFixed(2)} ${currency}`; } } export function PendingPaymentsCard({ rows, counterpartNames, }: { rows: Payment[]; counterpartNames: Record; }) { if (rows.length === 0) return null; return ( Onay Bekleyen Ödemeler Klinikler aşağıdaki ödemeleri yaptıklarını bildirdi. Onayladığınızda açık bakiyeden düşülür.
    {rows.map((p) => ( ))}
); } function PendingRow({ payment, counterpartName, }: { payment: Payment; counterpartName: string; }) { const router = useRouter(); const [confirmState, confirmAction, confirmPending] = useActionState( confirmPaymentAction, initialPaymentActionState, ); const [rejectState, rejectAction, rejectPending] = useActionState( rejectPaymentAction, initialPaymentActionState, ); useEffect(() => { if (confirmState.ok) { toast.success("Ödeme onaylandı."); router.refresh(); } else if (confirmState.error) { toast.error(confirmState.error); } }, [confirmState, router]); useEffect(() => { if (rejectState.ok) { toast.success("Ödeme reddedildi."); router.refresh(); } else if (rejectState.error) { toast.error(rejectState.error); } }, [rejectState, router]); const busy = confirmPending || rejectPending; return (
  • {counterpartName}

    {dateFormatter.format(new Date(payment.paymentDate))} {payment.method && ( <> · {PAYMENT_METHOD_LABELS[payment.method] ?? payment.method} )} {payment.notes && <> · {payment.notes}}

    {formatMoney(payment.amount, payment.currency)}

    Onay bekliyor
  • ); }