import React, { useState, useEffect } from "react"; import { userAPI } from "../services/api"; import { User } from "../types"; interface BanUserModalProps { show: boolean; onHide: () => void; user: User; onBanComplete: (updatedUser: User) => void; } const BanUserModal: React.FC = ({ show, onHide, user, onBanComplete, }) => { const [processing, setProcessing] = useState(false); const [error, setError] = useState(null); const [reason, setReason] = useState(""); const [success, setSuccess] = useState(false); const [updatedUser, setUpdatedUser] = useState(null); const handleBan = async () => { if (!reason.trim()) { setError("Please provide a reason for banning this user"); return; } try { setProcessing(true); setError(null); const response = await userAPI.adminBanUser(user.id, reason.trim()); // Store updated user data for later callback setUpdatedUser(response.data.user); // Show success confirmation setSuccess(true); } catch (error: any) { setError(error.response?.data?.error || "Failed to ban user"); } finally { setProcessing(false); } }; const handleClose = () => { // Call parent callback with updated user data if we have it if (updatedUser) { onBanComplete(updatedUser); } // Reset all states when closing setProcessing(false); setError(null); setReason(""); setSuccess(false); setUpdatedUser(null); onHide(); }; useEffect(() => { if (show) { document.body.style.overflow = "hidden"; } else { document.body.style.overflow = "unset"; } return () => { document.body.style.overflow = "unset"; }; }, [show]); if (!show) return null; return (
{success ? "User Banned" : `Ban User ${user.firstName} ${user.lastName}`}
{success ? (

User Banned

{user.firstName} {user.lastName} has been banned and logged out of all sessions. If they had listings, they are no longer available. They have been notified via email.

) : ( <> {error && (
{error}
)}
{ e.preventDefault(); handleBan(); }} >