{verification.user.name}
{verification.user.email} ยท diajukan{" "} {formatDate(verification.createdAt)}
Diproses oleh {verification.reviewedBy.name} pada{" "} {formatDate(verification.reviewedAt)}
)} {verification.status === "REJECTED" && ("use client";
import { useState } from "react";
import { useRouter } from "next/navigation";
import {
reopenVerificationAction,
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 [showReopen, setShowReopen] = useState(false);
const [rejectionReason, setRejectionReason] = useState("");
const [reopenNote, setReopenNote] = 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();
}
async function reopen() {
setError("");
setLoading(true);
const result = await reopenVerificationAction(verification.id, reopenNote);
setLoading(false);
if ("error" in result && result.error) {
setError(result.error);
return;
}
setShowReopen(false);
setReopenNote("");
router.refresh();
}
return (
{verification.user.email} ยท diajukan{" "}
{formatDate(verification.createdAt)}
Diproses oleh {verification.reviewedBy.name} pada{" "}
{formatDate(verification.reviewedAt)}
{verification.user.name}
{label}
{value}