/* global React */ // Usuarios (HU.4.1) — Gestión de cuentas y roles // Vista de gestión de usuarios únicamente (Instituciones tiene su propio módulo). const { useState: useStateUs, useMemo: useMemoUs } = React; function UsuariosScreen({ roleId, user, onOpenNuevo }) { const I = window.Icons; const usuarios = window.USUARIOS; const [filterRol, setFilterRol] = useStateUs('todos'); const [q, setQ] = useStateUs(''); const counts = useMemoUs(() => { const c = { todos: usuarios.length, superadmin: 0, admin: 0, institucion: 0, cancilleria: 0, lector: 0, pendientes: 0, desactivados: 0 }; usuarios.forEach(u => { c[u.rol] = (c[u.rol] || 0) + 1; if (u.estado === 'pendiente') c.pendientes++; if (u.estado === 'desactivado') c.desactivados++; }); return c; }, [usuarios]); const filtered = usuarios.filter(u => { if (filterRol !== 'todos' && u.rol !== filterRol) return false; if (q && !`${u.nombre} ${u.email} ${u.institucion}`.toLowerCase().includes(q.toLowerCase())) return false; return true; }); return (
{user.org}

Usuarios

Administra cuentas de acceso y asignación de roles. Cada acción queda registrada en el log de auditoría y los usuarios desactivados conservan su historial.

{/* KPIs */}
{counts.todos}
Usuarios totales
{counts.todos - counts.desactivados} activos
{counts.superadmin + counts.admin}
CGR (super/admin)
{counts.superadmin} súper · {counts.admin} admin
{counts.institucion}
Instituciones reportantes
Distribuidos en 47 instituciones
{counts.pendientes}
Acceso pendiente
Aún no han ingresado
setQ(e.target.value)} />
{[ { v: 'todos', l: `Todos · ${counts.todos}` }, { v: 'superadmin', l: `Súper Admin · ${counts.superadmin}` }, { v: 'admin', l: `Admin · ${counts.admin}` }, { v: 'institucion', l: `Institución · ${counts.institucion}` }, { v: 'cancilleria', l: `Cancillería · ${counts.cancilleria}` }, { v: 'lector', l: `Lector Interno · ${counts.lector}` }, ].map(it => ( ))}
{filtered.map(u => ( ))}
Usuario Correo Rol Institución Último acceso Estado
{u.initials}
{u.nombre}
{u.email} {u.institucion} {u.ultimo} {u.estado === 'activo' ? 'Activo' : u.estado === 'pendiente' ? 'Pendiente' : 'Desactivado'}
{filtered.length} de {usuarios.length} usuarios
); } function RolePillTag({ rol, label }) { const cls = rol === 'superadmin' ? 'role-super' : rol === 'admin' ? 'role-admin' : rol === 'institucion'? 'role-inst' : rol === 'cancilleria'? 'role-canc' : rol === 'lector' ? 'role-lect' : 'role-default'; return {label}; } Object.assign(window, { UsuariosScreen });