"use client" import { useState } from "react" import { mockUsers, mockDepartments } from "@/lib/mock-data" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Badge } from "@/components/ui/badge" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog" import { Label } from "@/components/ui/label" import { Switch } from "@/components/ui/switch" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { Search, Plus, MoreVertical, Mail, Phone, Shield, User, Users, Building2, Edit, Trash2, Key, CheckCircle2, XCircle, UserPlus, Settings } from "lucide-react" import { cn } from "@/lib/utils" import type { User, UserRole } from "@/lib/types" const roleLabels: Record = { admin_sistema: "Administrador", director_rrhh: "Director RR.HH.", rrhh_regional: "RR.HH. Regional", rrhh_local: "RR.HH. Local", reclutador: "Reclutador", administracion: "Administración", country_lead: "Country Lead", solicitante: "Solicitante" } const roleColors: Record = { admin_sistema: "bg-purple-500 text-white", director_rrhh: "bg-primary text-primary-foreground", rrhh_regional: "bg-blue-500 text-white", rrhh_local: "bg-blue-400 text-white", reclutador: "bg-accent text-accent-foreground", administracion: "bg-secondary text-secondary-foreground", country_lead: "bg-orange-500 text-white", solicitante: "bg-muted text-muted-foreground" } export function UsersManagementPage() { const [users, setUsers] = useState(mockUsers) const [searchQuery, setSearchQuery] = useState("") const [filterRole, setFilterRole] = useState("all") const [filterDepartment, setFilterDepartment] = useState("all") const [filterStatus, setFilterStatus] = useState("all") const [isNewUserOpen, setIsNewUserOpen] = useState(false) const [selectedUser, setSelectedUser] = useState(null) const [isEditOpen, setIsEditOpen] = useState(false) const filteredUsers = users.filter(user => { const matchesSearch = user.name.toLowerCase().includes(searchQuery.toLowerCase()) || user.email.toLowerCase().includes(searchQuery.toLowerCase()) const matchesRole = filterRole === "all" || user.role === filterRole const matchesDepartment = filterDepartment === "all" || user.departmentId === filterDepartment const matchesStatus = filterStatus === "all" || (filterStatus === "active" && user.active) || (filterStatus === "inactive" && !user.active) return matchesSearch && matchesRole && matchesDepartment && matchesStatus }) const userStats = { total: users.length, active: users.filter(u => u.active).length, inactive: users.filter(u => !u.active).length, byRole: Object.keys(roleLabels).reduce((acc, role) => { acc[role] = users.filter(u => u.role === role).length return acc }, {} as Record) } const handleToggleStatus = (userId: string) => { u.id === userId ? { ...u, active: !u.active } : u } const openEditDialog = (user: User) => { setSelectedUser(user) setIsEditOpen(true) } return (
{/* Header */}

Gestion de Usuarios

Administra los usuarios del sistema y sus permisos

Crear Nuevo Usuario Ingresa la informacion del nuevo usuario

El usuario recibira un email para configurar su contrasena

{/* Stats */}
{userStats.total}
Total Usuarios
{userStats.active}
Activos
{userStats.inactive}
Inactivos
{userStats.byRole["admin_sistema"] || 0}
Administradores
{/* Filters */}
setSearchQuery(e.target.value)} />
{/* Users Table */}
{filteredUsers.map(user => { const dept = mockDepartments.find(d => d.id === user.departmentId) return ( ) })}
Usuario Rol Departamento Estado Ultimo Acceso Acciones
{user.name.split(" ").map(n => n[0]).join("")}
{user.name}
{user.email}
{roleLabels[user.role]} {dept?.name || "-"}
{user.active ? "Activo" : "Inactivo"}
{user.lastLogin ? new Date(user.lastLogin).toLocaleDateString("es-MX") : "Nunca"} openEditDialog(user)}> Editar Restablecer Contrasena Gestionar Permisos handleToggleStatus(user.id)}> {user.active ? ( <> Desactivar ) : ( <> Activar )} Eliminar
{/* Edit User Dialog */} {selectedUser && ( <> Editar Usuario Modifica la informacion del usuario
{selectedUser.name.split(" ").map(n => n[0]).join("")}

Los usuarios inactivos no pueden acceder al sistema

)}
) }