import { useState } from 'react' import { Link } from 'react-router-dom' import { ChevronLeft, HardDrive } from 'lucide-react' import { api } from '../../api/client' import AccountPicker, { type PickedAccount } from './AccountPicker' export default function QuotaMod() { const [selected, setSelected] = useState(null) const [fullAccount, setFullAccount] = useState<{ diskUsedMb: number; package?: { diskMb: number; bandwidthMb: number } } | null>(null) const [diskMb, setDiskMb] = useState('') const [bandwidthMb, setBandwidthMb] = useState('') const [loading, setLoading] = useState(false) const [message, setMessage] = useState('') const [error, setError] = useState('') const handleSelect = async (acc: PickedAccount) => { setSelected(acc) setMessage(''); setError('') try { const r = await api.get(`/nixserver/accounts/${acc.id}`) const data = r.data.data setFullAccount(data) setDiskMb(String(data.package?.diskMb ?? '')) setBandwidthMb(String(data.package?.bandwidthMb ?? '')) } catch { setFullAccount(null) setDiskMb('') setBandwidthMb('') } } const handleSubmit = async () => { if (!selected) return const d = parseInt(diskMb, 10) const b = parseInt(bandwidthMb, 10) if (!d || !b || d <= 0 || b <= 0) { setError('Enter valid positive values for both fields'); return } setLoading(true); setMessage(''); setError('') try { await api.put(`/nixserver/accounts/${selected.id}/quota`, { diskMb: d, bandwidthMb: b }) setMessage(`Quota updated for "${selected.username}".`) } catch (e: unknown) { setError((e as { response?: { data?: { error?: string } } })?.response?.data?.error ?? 'Action failed') } finally { setLoading(false) } } return (
Accounts / Quota Modification

Quota Modification

Adjust disk and bandwidth quotas for a hosting account.

{selected && (
{fullAccount && (

Disk Used

{fullAccount.diskUsedMb?.toLocaleString() ?? 0} MB

Current Package

{selected.package?.name ?? 'None'}

)}
setDiskMb(e.target.value)} min="1" placeholder="e.g. 10240" 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" />
setBandwidthMb(e.target.value)} min="1" placeholder="e.g. 102400" 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" />

Note: This will update the quota on the account's associated package.

)} {message && (

{message}

)} {error && (

{error}

)}
) }