import {useState} from 'react'; import {Card, CardContent} from '@/components/ui/card'; import {Button} from '@/components/ui/button'; import {useAppSelector, type Client} from '@/store'; import AddClientDialog from '@/components/dialogs/AddClientDialog'; import EditClientDialog from '@/components/dialogs/EditClientDialog'; import {formatCurrency} from '@/lib/formatters'; export default function ClientsPage() { const [dialogOpen, setDialogOpen] = useState(false); const [editDialogOpen, setEditDialogOpen] = useState(false); const [selectedClient, setSelectedClient] = useState(null); const {clients, invoices} = useAppSelector(state => state.invoices); const getClientStats = (clientId: string) => { const clientInvoices = invoices.filter(i => i.clientId === clientId); const totalBilled = clientInvoices.reduce((sum, i) => sum + i.total, 0); const outstanding = clientInvoices.filter(i => i.status === 'sent' || i.status === 'overdue').reduce((sum, i) => sum + i.total, 0); return {totalBilled, outstanding, count: clientInvoices.length}; }; const totalBilled = clients.reduce((sum, c) => sum + getClientStats(c.id).totalBilled, 0); const totalOutstanding = clients.reduce((sum, c) => sum + getClientStats(c.id).outstanding, 0); const handleEditClient = (client: Client) => { setSelectedClient(client); setEditDialogOpen(true); }; return (
{/* Header + Summary inline */}

Clients

Total Clients {clients.length}
Total Billed {formatCurrency(totalBilled)}
Outstanding {formatCurrency(totalOutstanding)}
{/* Clients Grid */}
{clients.map(client => { const stats = getClientStats(client.id); return ( handleEditClient(client)} >

{client.name}

{client.company || client.email}

{stats.outstanding > 0 && ( {formatCurrency(stats.outstanding)} due )}

Billed

{formatCurrency(stats.totalBilled)}

Invoices

{stats.count}

); })} {/* Add client card */} setDialogOpen(true)}> + Add Client
); }