"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { cancelTripAction } from "@/features/trip/actions"; interface CancelTripButtonProps { tripId: string; /** Jumlah peserta dengan booking PAID — preview impact. */ paidParticipantCount: number; } export function CancelTripButton({ tripId, paidParticipantCount, }: CancelTripButtonProps) { const router = useRouter(); const [open, setOpen] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [confirmText, setConfirmText] = useState(""); const [result, setResult] = useState< | { refundCount: number; cancelledCount: number; skippedCount: number } | null >(null); async function handleConfirm() { setLoading(true); setError(""); const res = await cancelTripAction(tripId); setLoading(false); if ("error" in res) { setError(res.error ?? "Terjadi kesalahan"); return; } setResult({ refundCount: res.refundCount, cancelledCount: res.cancelledCount, skippedCount: res.skippedCount, }); router.refresh(); } if (result) { return (
Trip dibatalkan.
Yakin batalkan trip ini?
Aksi ini tidak bisa di-undo. Trip akan ditandai CLOSED dan semua peserta dibatalkan. {paidParticipantCount > 0 && ( <> {" "}Sistem akan otomatis membuat{" "} {paidParticipantCount} refund {" "} full amount untuk peserta yang sudah membayar — admin SeTrip akan memproses transfer. > )}