'use client'; import { useQuery } from '@tanstack/react-query'; import { api } from '@/lib/api'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; import { Users, Wifi, DollarSign, AlertTriangle } from 'lucide-react'; interface DashboardSummary { totalClients: number; activeSubscribers: number; todayCollections: number; overdueInvoices: number; } const kpiCards = [ { key: 'totalClients' as const, label: 'Total Clients', icon: Users, color: '#0891B2', format: (v: number) => v.toLocaleString(), }, { key: 'activeSubscribers' as const, label: 'Active Subscribers', icon: Wifi, color: '#059669', format: (v: number) => v.toLocaleString(), }, { key: 'todayCollections' as const, label: "Today's Collections", icon: DollarSign, color: '#7C3AED', format: (v: number) => '₱' + v.toLocaleString('en-PH', { minimumFractionDigits: 2 }), }, { key: 'overdueInvoices' as const, label: 'Overdue Invoices', icon: AlertTriangle, color: '#DC2626', format: (v: number) => v.toLocaleString(), }, ]; export default function DashboardPage() { const { data, isLoading, error } = useQuery({ queryKey: ['dashboard', 'summary'], queryFn: async () => { const res = await api.get('/api/v1/dashboard/summary'); return res.data; }, }); return (

Dashboard

Overview of your ISP operations

{error && (
Failed to load dashboard data. The API endpoint may not be available yet.
)}
{kpiCards.map((card) => { const Icon = card.icon; return ( {card.label}
{isLoading ? ( ) : (

{data ? card.format(data[card.key]) : '—'}

)}
); })}
); }