"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { markPayoutPaidAction } from "@/features/payout/actions"; import { formatRupiah } from "@/lib/utils"; type PayoutStatus = "HELD" | "RELEASED" | "PAID" | "CANCELLED"; export type PayoutCardData = { id: string; amount: number; currency: string; status: PayoutStatus; heldUntil: Date; releasedAt: Date | null; paidAt: Date | null; cancelledAt: Date | null; bankName: string | null; bankAccountNumber: string | null; bankAccountName: string | null; adminNote: string | null; createdAt: Date; trip: { id: string; title: string; date: Date; endDate: Date | null; status: string }; organizer: { id: string; name: string; email: string }; booking: { id: string; amount: number; status: string; user: { id: string; name: string; email: string }; }; processedBy: { id: string; name: string; email: string } | null; }; function formatDate(d: Date | null | string): string { if (!d) return "—"; return new Date(d).toLocaleString("id-ID", { day: "2-digit", month: "short", year: "numeric", hour: "2-digit", minute: "2-digit", }); } function formatDay(d: Date | null | string): string { if (!d) return "—"; return new Date(d).toLocaleDateString("id-ID", { day: "2-digit", month: "short", year: "numeric", }); } export function PayoutReviewCard({ payout }: { payout: PayoutCardData }) { const router = useRouter(); const [open, setOpen] = useState(false); const [note, setNote] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); async function submit() { setError(""); setLoading(true); const fd = new FormData(); fd.set("payoutId", payout.id); fd.set("adminNote", note); const result = await markPayoutPaidAction(fd); setLoading(false); if (result.error) { setError(result.error); return; } setOpen(false); setNote(""); router.refresh(); } const bankAvailable = payout.bankName && payout.bankAccountNumber && payout.bankAccountName; return (

{payout.trip.title}

Booking {payout.booking.user.name} · trip{" "} {formatDay(payout.trip.date)} {" · "} {payout.id.slice(0, 8)}…

{payout.releasedAt && ( )} {payout.paidAt && ( )} {payout.cancelledAt && ( )}

Rekening tujuan transfer

{bankAvailable ? (

{payout.bankName}

{payout.bankAccountNumber}

a/n {payout.bankAccountName}

) : (

⚠️ Organizer belum menyelesaikan verifikasi (KYC) — tidak ada rekening snapshot. Hubungi organizer untuk konfirmasi rekening sebelum transfer.

)}
{payout.adminNote && (

Catatan admin

{payout.adminNote}

)} {payout.processedBy && (

Diproses oleh {payout.processedBy.name} {payout.paidAt && ` · transfer ${formatDate(payout.paidAt)}`}

)} {payout.status === "RELEASED" && (
{error && (
{error}
)} {open ? (

Tandai Sudah Transfer