import { redirect } from "next/navigation"; import { getServerSession } from "next-auth"; import { authOptions } from "@/lib/auth"; import { isAdminEmail, listAdminEmails } from "@/lib/admin"; import { organizerRepo } from "@/server/repositories/organizer.repo"; import { organizerService } from "@/server/services/organizer.service"; import { AdminFilterBar } from "@/features/admin/components/admin-filter-bar"; import { ReviewCard } from "@/features/organizer/components/review-card"; type Tab = "PENDING" | "APPROVED" | "REJECTED"; 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 AdminVerificationsPage({ searchParams }: PageProps) { const session = await getServerSession(authOptions); if (!session?.user) redirect("/login?callbackUrl=/admin/verifications"); if (!isAdminEmail(session.user.email)) { return (

Halaman ini hanya untuk admin SeTrip.

); } const params = await searchParams; const tab: Tab = params.tab === "APPROVED" || params.tab === "REJECTED" ? params.tab : "PENDING"; const rows = await organizerRepo.listByStatus(tab, { dateFrom: parseDate(params.dateFrom), dateTo: parseDate(params.dateTo), reviewerEmail: params.reviewer || undefined, }); const items = rows.map((v) => ({ id: v.id, fullName: v.fullName, nik: organizerService.decryptNik(v.nikEncrypted), birthDate: v.birthDate, address: v.address, bankName: v.bankName, bankAccountNumber: v.bankAccountNumber, bankAccountName: v.bankAccountName, status: v.status, rejectionReason: v.rejectionReason, reviewedAt: v.reviewedAt, createdAt: v.createdAt, user: v.user, reviewedBy: v.reviewedBy, })); const tabs: { key: Tab; label: string }[] = [ { key: "PENDING", label: "Pending" }, { key: "APPROVED", label: "Disetujui" }, { key: "REJECTED", label: "Ditolak" }, ]; return (

Review Verifikasi Organizer

Periksa data KTP, foto liveness (memegang kertas SETRIP), dan rekening sebelum menyetujui.

{tabs.map((t) => ( {t.label} ))}
{items.length === 0 ? (

Tidak ada data yang cocok dengan filter ini.

) : (
{items.map((v) => ( ))}
)}
); }