'use client'; import { useState } from 'react'; import { Users, UserPlus, RefreshCw, Shield, CheckCircle, Clock } from 'lucide-react'; import { useUsers } from '@/hooks/use-users'; import { useToast } from '@/hooks/use-toast'; import type { User as UserType } from '@/types/user'; // Componentes modulares import { UsersGrid } from './UsersGrid'; import { UserDetailModal } from './UserDetailModal'; export function UsersPage() { const { users, loading, updateUserRole, refreshUsers } = useUsers(); const { toast } = useToast(); const [searchTerm, setSearchTerm] = useState(''); const [selectedUser, setSelectedUser] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); const [isRefreshing, setIsRefreshing] = useState(false); // Filtrar usuarios const filteredUsers = users.filter(user => user.name?.toLowerCase().includes(searchTerm.toLowerCase()) || user.email?.toLowerCase().includes(searchTerm.toLowerCase()) ); // Estadísticas const stats = { total: users.length, admins: users.filter(u => u.role === 'ADMIN').length, verified: users.filter(u => u.emailVerified).length, newThisMonth: users.filter(u => { if (!u.createdAt) return false; const userDate = new Date(u.createdAt); const now = new Date(); return userDate.getMonth() === now.getMonth() && userDate.getFullYear() === now.getFullYear(); }).length }; // Determinar el primer usuario (el más antiguo) const firstUser = users.length > 0 ? users.reduce((oldest, current) => new Date(oldest.createdAt) < new Date(current.createdAt) ? oldest : current ) : null; // Handlers const handleViewDetails = (user: UserType) => { setSelectedUser(user); setIsModalOpen(true); }; const handleCloseModal = () => { setIsModalOpen(false); setSelectedUser(null); }; const handleRefresh = async () => { setIsRefreshing(true); await refreshUsers(); setTimeout(() => setIsRefreshing(false), 1000); }; const handleUpdateRole = async (userId: string, role: 'ADMIN' | 'USER') => { try { await updateUserRole(userId, role); await refreshUsers(); toast({ title: "Éxito", description: "Rol actualizado correctamente" }); } catch (error) { toast({ title: "Error", description: "No se pudo actualizar el rol", variant: "destructive" }); } }; const handleDeleteUser = async (userId: string) => { toast({ title: "Función no disponible", description: "La eliminación de usuarios estará disponible próximamente", variant: "destructive" }); }; const handleToggleBan = async (userId: string, shouldBan: boolean) => { toast({ title: "Función no disponible", description: "El baneo de usuarios estará disponible próximamente", variant: "destructive" }); }; // Loading state if (loading) { return (

Cargando usuarios...

); } return (
{/* Clean editorial background */}
{/* Editorial header */}

Gestión de usuarios

Administra usuarios, roles y permisos del sistema

{/* Editorial Stats cards */}
{stats.total}
Total usuarios
{stats.admins}
Administradores
{stats.verified}
Verificados
{stats.newThisMonth}
Nuevos este mes
{/* Users grid */}
{/* User Detail Modal */}
); }