import { redirect } from "next/navigation"; import { getServerSession } from "next-auth"; import { authOptions } from "@/lib/auth"; import { isAdminEmail, listAdminEmails } from "@/lib/admin"; import { payoutRepo } from "@/server/repositories/payout.repo"; import { AdminFilterBar } from "@/features/admin/components/admin-filter-bar"; import { ExportCsvLink } from "@/features/admin/components/export-csv-link"; import { PayoutReviewCard, type PayoutCardData, } from "@/features/payout/components/payout-review-card"; type Tab = "RELEASED" | "HELD" | "PAID" | "CANCELLED"; const TABS: { key: Tab; label: string }[] = [ { key: "RELEASED", label: "Siap transfer" }, { key: "HELD", label: "Ditahan (escrow)" }, { key: "PAID", label: "Selesai" }, { key: "CANCELLED", label: "Dibatalkan" }, ]; interface PageProps { searchParams: Promise<{ tab?: string; dateFrom?: string; dateTo?: string; reviewer?: string; }>; } function parseDate(value: string | undefined): Date | undefined { if (!value) return undefined; const d = new Date(value); return Number.isNaN(d.getTime()) ? undefined : d; } export default async function AdminPayoutsPage({ searchParams }: PageProps) { const session = await getServerSession(authOptions); if (!session?.user) redirect("/login?callbackUrl=/admin/payouts"); if (!isAdminEmail(session.user.email)) { return (
Halaman ini hanya untuk admin SeTrip.
Uang peserta ditahan (escrow) sampai trip selesai + 3 hari. Setelah status Siap transfer, admin transfer manual ke rekening organizer lalu tandai sudah dibayar.
Tidak ada payout yang cocok dengan filter ini.