import { useEffect, useState } from 'react' import { Link } from 'react-router-dom' import { ChevronLeft, RefreshCw, UserCheck } from 'lucide-react' import { api } from '../../api/client' interface BandwidthAccount { id: number username: string domain: string status: string bandwidthUsedMb: number suspendReason: string | null package?: { name: string; bandwidthMb: number } } export default function UnsuspendBandwidth() { const [items, setItems] = useState([]) const [loading, setLoading] = useState(false) const [unsuspending, setUnsuspending] = useState>(new Set()) const [bulkLoading, setBulkLoading] = useState(false) const [message, setMessage] = useState('') const fetchData = async () => { setLoading(true) try { const r = await api.get('/nixserver/accounts/bandwidth') const all: BandwidthAccount[] = r.data.data setItems(all.filter(a => a.status === 'suspended' && a.suspendReason?.toLowerCase().includes('bandwidth') )) } finally { setLoading(false) } } useEffect(() => { fetchData() }, []) const handleUnsuspend = async (id: number, username: string) => { setUnsuspending(prev => new Set(prev).add(id)) try { await api.post(`/nixserver/accounts/${id}/unsuspend`) setItems(prev => prev.filter(a => a.id !== id)) } catch (e: unknown) { alert((e as { response?: { data?: { error?: string } } })?.response?.data?.error ?? 'Failed') } finally { setUnsuspending(prev => { const s = new Set(prev); s.delete(id); return s }) void username } } const handleUnsuspendAll = async () => { if (!confirm(`Unsuspend all ${items.length} bandwidth-exceeded accounts?`)) return setBulkLoading(true) try { const r = await api.post('/nixserver/accounts/unsuspend-bandwidth-exceeded') const results = r.data.data as { username: string; success: boolean }[] const count = results.filter(x => x.success).length setMessage(`Successfully unsuspended ${count} account${count !== 1 ? 's' : ''}.`) await fetchData() } catch (e: unknown) { alert((e as { response?: { data?: { error?: string } } })?.response?.data?.error ?? 'Bulk unsuspend failed') } finally { setBulkLoading(false) } } return (
Accounts / Unsuspend Bandwidth Exceeders

Unsuspend Bandwidth Exceeders

{items.length} account{items.length !== 1 ? 's' : ''} suspended for bandwidth overage

{message && (

{message}

)}
{['Username', 'Domain', 'Bandwidth Used', 'Limit', 'Suspend Reason', ''].map(h => ( ))} {loading && ( )} {!loading && items.map(acc => ( ))} {!loading && items.length === 0 && ( )}
{h}
Loading...
{acc.username} {acc.domain} {acc.bandwidthUsedMb.toLocaleString()} MB {acc.package?.bandwidthMb ? `${acc.package.bandwidthMb.toLocaleString()} MB` : '—'} {acc.suspendReason ?? '—'}
No bandwidth-exceeded suspended accounts
) }