/** * Admin All Accounts Page * List and manage all accounts in the system */ import { useState, useEffect } from 'react'; import { Search, Filter, Loader2, AlertCircle } from 'lucide-react'; import { Card } from '../../components/ui/card'; import Badge from '../../components/ui/badge/Badge'; import { fetchAPI } from '../../services/api'; interface Account { id: number; name: string; slug: string; owner_email: string; status: string; credit_balance: number; plan_name: string; created_at: string; } export default function AdminAllAccountsPage() { const [accounts, setAccounts] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [searchTerm, setSearchTerm] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); useEffect(() => { loadAccounts(); }, []); const loadAccounts = async () => { try { setLoading(true); // Developer/admin accounts are exposed via auth accounts endpoint const data = await fetchAPI('/v1/auth/accounts/'); setAccounts(data.results || []); } catch (err: any) { setError(err.message || 'Failed to load accounts'); console.error('Accounts load error:', err); } finally { setLoading(false); } }; const filteredAccounts = accounts.filter((account) => { const matchesSearch = account.name.toLowerCase().includes(searchTerm.toLowerCase()) || account.owner_email.toLowerCase().includes(searchTerm.toLowerCase()); const matchesStatus = statusFilter === 'all' || account.status === statusFilter; return matchesSearch && matchesStatus; }); if (loading) { return (
); } return (

All Accounts

Manage all accounts in the system

{error && (

{error}

)} {/* Filters */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800" />
{/* Accounts Table */}
{filteredAccounts.length === 0 ? ( ) : ( filteredAccounts.map((account) => ( )) )}
Account Owner Plan Credits Status Created Actions
No accounts found
{account.name}
{account.slug}
{account.owner_email} {account.plan_name || 'Free'} {account.credit_balance?.toLocaleString() || 0} {account.status} {new Date(account.created_at).toLocaleDateString()}
{/* Summary Stats */}
Total Accounts
{accounts.length}
Active
{accounts.filter(a => a.status === 'active').length}
Trial
{accounts.filter(a => a.status === 'trial').length}
Suspended
{accounts.filter(a => a.status === 'suspended').length}
); }