"use client"; import { useState } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { CheckCircle2, XCircle, Loader2 } from "lucide-react"; interface PendingContract { id: string; roomName: string; date: string; activities: string[]; } interface ContractCompletionModalProps { contracts: PendingContract[]; userId: string; onDone: () => void; } export default function ContractCompletionModal({ contracts, userId, onDone, }: ContractCompletionModalProps) { const [current, setCurrent] = useState(0); const [loading, setLoading] = useState(false); if (contracts.length === 0) return null; const contract = contracts[current]; const handleAction = async (action: "complete" | "expire") => { if (loading) return; setLoading(true); try { await fetch("/api/blindbox/plan", { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ planId: contract.id, userId, action }), }); } catch (e) { console.error("ContractCompletionModal: submit failed:", e); } setLoading(false); if (current < contracts.length - 1) { setCurrent((c) => c + 1); } else { onDone(); } }; const summary = contract.activities.length <= 3 ? contract.activities.join(" → ") : contract.activities.slice(0, 3).join(" → ") + "…"; return (

✦ 契约到期 ✦

{contract.roomName}

{contract.date} · {summary}

这份契约已到期,你完成了吗?

{contracts.length > 1 && (

{current + 1} / {contracts.length}

)}
); } export type { PendingContract };