"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { reviewVerificationAction } from "@/features/organizer/actions"; type Verification = { id: string; fullName: string; /** NIK plaintext, sudah di-decrypt di server sebelum sampai ke komponen ini. */ nik: string; birthDate: Date; address: string; bankName: string; bankAccountNumber: string; bankAccountName: string; status: "PENDING" | "APPROVED" | "REJECTED"; rejectionReason: string | null; reviewedAt: Date | null; createdAt: Date; user: { id: string; name: string; email: string }; reviewedBy: { id: string; name: string; email: string } | null; }; function formatDate(d: Date): string { return new Date(d).toLocaleString("id-ID", { day: "2-digit", month: "short", year: "numeric", }); } export function ReviewCard({ verification }: { verification: Verification }) { const router = useRouter(); const [showReject, setShowReject] = useState(false); const [rejectionReason, setRejectionReason] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); async function decide(decision: "APPROVED" | "REJECTED") { setError(""); setLoading(true); const fd = new FormData(); fd.set("verificationId", verification.id); fd.set("decision", decision); if (decision === "REJECTED") fd.set("rejectionReason", rejectionReason); const result = await reviewVerificationAction(fd); setLoading(false); if (result.error) { setError(result.error); return; } setShowReject(false); setRejectionReason(""); router.refresh(); } return (

{verification.user.name}

{verification.user.email} · diajukan{" "} {formatDate(verification.createdAt)}

{verification.status === "REJECTED" && verification.rejectionReason && (
Alasan ditolak:{" "} {verification.rejectionReason}
)} {verification.reviewedBy && verification.reviewedAt && (

Diproses oleh {verification.reviewedBy.name} pada{" "} {formatDate(verification.reviewedAt)}

)} {verification.status === "PENDING" && (
{error && (
{error}
)} {!showReject ? (
) : (