'use client'; import { useState } from 'react'; import { DashboardShell } from '@/components/layouts/dashboard-shell'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { useUsuarios, useInviteUsuario, useUpdateUsuario, useDeleteUsuario } from '@/lib/hooks/use-usuarios'; import { useAuthStore } from '@/stores/auth-store'; import { Users, UserPlus, Trash2, Shield, Eye, Calculator } from 'lucide-react'; import { cn } from '@/lib/utils'; const roleLabels = { admin: { label: 'Administrador', icon: Shield, color: 'text-primary' }, contador: { label: 'Contador', icon: Calculator, color: 'text-success' }, visor: { label: 'Visor', icon: Eye, color: 'text-muted-foreground' }, }; export default function UsuariosPage() { const { user: currentUser } = useAuthStore(); const { data: usuarios, isLoading } = useUsuarios(); const inviteUsuario = useInviteUsuario(); const updateUsuario = useUpdateUsuario(); const deleteUsuario = useDeleteUsuario(); const [showInvite, setShowInvite] = useState(false); const [inviteForm, setInviteForm] = useState({ email: '', nombre: '', role: 'visor' as const }); const handleInvite = async (e: React.FormEvent) => { e.preventDefault(); try { await inviteUsuario.mutateAsync(inviteForm); setShowInvite(false); setInviteForm({ email: '', nombre: '', role: 'visor' }); } catch (error: any) { alert(error.response?.data?.message || 'Error al invitar usuario'); } }; const handleToggleActive = (id: string, active: boolean) => { updateUsuario.mutate({ id, data: { active: !active } }); }; const handleDelete = (id: string) => { if (confirm('¿Eliminar este usuario?')) { deleteUsuario.mutate(id); } }; const isAdmin = currentUser?.role === 'admin'; return (
{/* Header */}
{usuarios?.length || 0} usuarios
{isAdmin && ( )}
{/* Invite Form */} {showInvite && ( Invitar Nuevo Usuario
setInviteForm({ ...inviteForm, email: e.target.value })} required />
setInviteForm({ ...inviteForm, nombre: e.target.value })} required />
)} {/* Users List */} {isLoading ? (
Cargando...
) : (
{usuarios?.map(usuario => { const roleInfo = roleLabels[usuario.role]; const RoleIcon = roleInfo.icon; const isCurrentUser = usuario.id === currentUser?.id; return (
{usuario.nombre.charAt(0).toUpperCase()}
{usuario.nombre} {isCurrentUser && ( )} {!usuario.active && ( Inactivo )}
{usuario.email}
{roleInfo.label}
{isAdmin && !isCurrentUser && (
)}
); })}
)}
); }