import { useState, useEffect } from 'react' import { Link } from 'react-router-dom' import { ChevronLeft, ArrowUpDown } from 'lucide-react' import { api } from '../../api/client' import AccountPicker, { type PickedAccount } from './AccountPicker' interface Package { id: number name: string diskMb: number bandwidthMb: number } export default function Upgrade() { const [selected, setSelected] = useState(null) const [packageId, setPackageId] = useState('') const [packages, setPackages] = useState([]) const [loading, setLoading] = useState(false) const [message, setMessage] = useState('') const [error, setError] = useState('') useEffect(() => { api.get('/nixserver/packages').then(r => setPackages(r.data.data?.items ?? r.data.data ?? [])).catch(() => {}) }, []) const handleSelect = (acc: PickedAccount) => { setSelected(acc) setPackageId('') setMessage('') setError('') } const handleSubmit = async () => { if (!selected || !packageId) return setLoading(true); setMessage(''); setError('') try { await api.put(`/nixserver/accounts/${selected.id}`, { packageId: parseInt(packageId, 10) }) const pkg = packages.find(p => p.id === parseInt(packageId, 10)) setMessage(`Package for "${selected.username}" changed to "${pkg?.name ?? packageId}".`) if (pkg) setSelected(prev => prev ? { ...prev, package: { name: pkg.name } } : null) } catch (e: unknown) { setError((e as { response?: { data?: { error?: string } } })?.response?.data?.error ?? 'Action failed') } finally { setLoading(false) } } return (
Accounts / Upgrade / Downgrade an Account

Upgrade / Downgrade an Account

Change the hosting package assigned to an account.

{selected && (

Current Package

{selected.package?.name ?? 'No package assigned'}

)} {message && (

{message}

)} {error && (

{error}

)}
) }