"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { Check } from "lucide-react"; import { adminReconcileMidtransAction } from "@/features/booking/actions"; interface AdminReconcileButtonProps { orderId: string; disabled?: boolean; } export function AdminReconcileButton({ orderId, disabled, }: AdminReconcileButtonProps) { const router = useRouter(); const [loading, setLoading] = useState(false); const [status, setStatus] = useState(null); const [error, setError] = useState(""); async function handleClick() { setLoading(true); setError(""); setStatus(null); const res = await adminReconcileMidtransAction(orderId); setLoading(false); if ("error" in res && res.error) { setError(res.error); return; } if ("status" in res && res.status) { setStatus(res.status); } router.refresh(); } return (
{status && ( {reconcileOutcomeLabel(status)} )} {error && ( {error} )}
); } function reconcileOutcomeLabel(status: string): string { switch (status) { case "updated": return "Status di-update"; case "skipped": return "Sudah final (tidak ada perubahan)"; case "ignored": return "Tidak dikenali (mungkin sudah dihapus)"; case "booking_conflict": return "Gateway PAID tapi booking di state konflik — perlu review manual"; case "not_found": return "Order tidak ditemukan di Midtrans"; default: return status; } }