/** * Admin All Invoices Page * View and manage all system invoices */ import { useState, useEffect } from 'react'; import { Search, Filter, Loader2, AlertCircle, Download } from 'lucide-react'; import { Card } from '../../components/ui/card'; import Badge from '../../components/ui/badge/Badge'; import { getInvoices, type Invoice } from '../../services/billing.api'; export default function AdminAllInvoicesPage() { const [invoices, setInvoices] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [searchTerm, setSearchTerm] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); useEffect(() => { loadInvoices(); }, []); const loadInvoices = async () => { try { setLoading(true); const data = await getInvoices({}); setInvoices(data.results || []); } catch (err: any) { setError(err.message || 'Failed to load invoices'); } finally { setLoading(false); } }; const filteredInvoices = invoices.filter((invoice) => { const matchesSearch = invoice.invoice_number.toLowerCase().includes(searchTerm.toLowerCase()); const matchesStatus = statusFilter === 'all' || invoice.status === statusFilter; return matchesSearch && matchesStatus; }); if (loading) { return (
); } return (

All Invoices

View and manage all system invoices

{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" />
{/* Invoices Table */}
{filteredInvoices.length === 0 ? ( ) : ( filteredInvoices.map((invoice) => ( )) )}
Invoice # Date Amount Status Actions
No invoices found
{invoice.invoice_number} {new Date(invoice.created_at).toLocaleDateString()} ${invoice.total_amount} {invoice.status}
); }