'use client'; import { useEffect, useState, useCallback } from 'react'; import { api } from '@/lib/api'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Users, Briefcase, ClipboardList, Star } from 'lucide-react'; interface Stats { users: number; professionals: number; services: number; avgRating: number; } export default function DashboardPage() { const [stats, setStats] = useState({ users: 0, professionals: 0, services: 0, avgRating: 0 }); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const load = useCallback(() => { setLoading(true); setError(null); Promise.all([ api.get<{ data: any[]; meta: any }>('/users').then((r) => r.data).catch(() => [] as any[]), api.get<{ data: any[]; meta: any }>('/professionals').then((r) => r.data).catch(() => [] as any[]), api.get<{ data: any[]; meta: any }>('/services').then((r) => r.data).catch(() => [] as any[]), ]) .then(([users, professionals, services]) => { setStats({ users: users.length, professionals: professionals.length, services: services.length, avgRating: 0, }); }) .catch(() => setError('Error al cargar las estadísticas')) .finally(() => setLoading(false)); }, []); useEffect(() => { load(); }, [load]); const cards = [ { label: 'Usuarios', value: stats.users, icon: Users }, { label: 'Profesionales', value: stats.professionals, icon: Briefcase }, { label: 'Servicios', value: stats.services, icon: ClipboardList }, { label: 'Calificación', value: stats.avgRating.toFixed(1), icon: Star }, ]; return (

Dashboard

{loading ? (

Cargando estadísticas...

) : error ? (

{error}

) : (
{cards.map((c) => ( {c.label}

{c.value}

))}
)}
); }