import { useState } from 'react' import { Link } from 'react-router-dom' import { ChevronLeft, UserX, UserCheck } from 'lucide-react' import { api } from '../../api/client' import AccountPicker, { type PickedAccount } from './AccountPicker' export default function Suspension() { const [selected, setSelected] = useState(null) const [reason, setReason] = useState('') const [loading, setLoading] = useState(false) const [message, setMessage] = useState('') const [error, setError] = useState('') const handleSuspend = async () => { if (!selected) return setLoading(true); setMessage(''); setError('') try { await api.post(`/nixserver/accounts/${selected.id}/suspend`, { reason: reason || undefined }) setMessage(`Account "${selected.username}" has been suspended.`) setSelected(prev => prev ? { ...prev, status: 'suspended' } : null) } catch (e: unknown) { setError((e as { response?: { data?: { error?: string } } })?.response?.data?.error ?? 'Action failed') } finally { setLoading(false) } } const handleUnsuspend = async () => { if (!selected) return setLoading(true); setMessage(''); setError('') try { await api.post(`/nixserver/accounts/${selected.id}/unsuspend`) setMessage(`Account "${selected.username}" has been unsuspended.`) setSelected(prev => prev ? { ...prev, status: 'active' } : null) } catch (e: unknown) { setError((e as { response?: { data?: { error?: string } } })?.response?.data?.error ?? 'Action failed') } finally { setLoading(false) } } return (
Accounts / Manage Account Suspension

Manage Account Suspension

Search for an account to suspend or unsuspend it.

{selected && (
{selected.status === 'active' && (
setReason(e.target.value)} placeholder="e.g. TOS violation, non-payment..." className="w-full bg-[#0f1117] border border-[#2a2d3e] text-white text-sm rounded-lg px-3 py-2 focus:outline-none focus:border-indigo-500" />
)} {selected.status === 'suspended' && ( )} {selected.status !== 'active' && selected.status !== 'suspended' && (

This account has status {selected.status} and cannot be suspended/unsuspended.

)}
)} {message && (

{message}

)} {error && (

{error}

)}
) }