import { useState, useEffect } from "react"; import { Plus, Trash2, Pencil, RefreshCcw } from "lucide-react"; import MaterialTable from "@material-table/core"; import { Role } from "./RolesPage"; // Importa los tipos de roles interface User { id: string; name: string; email: string; roleId: string; roleName: string; status: "ACTIVE" | "INACTIVE"; createdAt: string; } export default function UsersPage() { const initialRoles: Role[] = [ { id: "1", name: "SUPER_ADMIN", description: "Full access", status: "ACTIVE", createdAt: "2025-12-17" }, { id: "2", name: "USER", description: "Regular user", status: "ACTIVE", createdAt: "2025-12-16" }, ]; const initialUsers: User[] = [ { id: "1", name: "Admin GRH", email: "grh@domain.com", roleId: "1", roleName: "SUPER_ADMIN", status: "ACTIVE", createdAt: "2025-12-17" }, { id: "2", name: "User CESPT", email: "cespt@domain.com", roleId: "2", roleName: "USER", status: "ACTIVE", createdAt: "2025-12-16" }, ]; const [users, setUsers] = useState(initialUsers); const [activeUser, setActiveUser] = useState(null); const [search, setSearch] = useState(""); const [showModal, setShowModal] = useState(false); const [editingId, setEditingId] = useState(null); const [roles, setRoles] = useState(initialRoles); const emptyUser: Omit = { name: "", email: "", roleId: "", status: "ACTIVE", createdAt: new Date().toISOString().slice(0,10) }; const [form, setForm] = useState>(emptyUser); const handleSave = () => { const roleName = roles.find(r => r.id === form.roleId)?.name || ""; if (editingId) { setUsers(prev => prev.map(u => u.id === editingId ? { id: editingId, roleName, ...form } : u)); } else { const newId = Date.now().toString(); setUsers(prev => [...prev, { id: newId, roleName, ...form }]); } setShowModal(false); setEditingId(null); setForm(emptyUser); }; const handleDelete = () => { if (!activeUser) return; setUsers(prev => prev.filter(u => u.id !== activeUser.id)); setActiveUser(null); }; const filtered = users.filter(u => u.name.toLowerCase().includes(search.toLowerCase()) || u.email.toLowerCase().includes(search.toLowerCase())); return (
{/* LEFT INFO SIDEBAR */}

Project Information

Usuarios disponibles y sus roles.

{/* MAIN */}
{/* HEADER */}

User Management

Usuarios registrados

{/* SEARCH */} setSearch(e.target.value)} /> {/* TABLE */} {rowData.status} }, { title: "Created", field: "createdAt", type: "date" } ]} data={filtered} onRowClick={(_, rowData) => setActiveUser(rowData as User)} options={{ actionsColumnIndex: -1, search: false, paging: true, sorting: true, rowStyle: rowData => ({ backgroundColor: activeUser?.id === (rowData as User).id ? "#EEF2FF" : "#FFFFFF" }) }} />
{/* MODAL */} {showModal && (

{editingId ? "Edit User" : "Add User"}

setForm({...form, name: e.target.value})} /> setForm({...form, email: e.target.value})} /> setForm({...form, createdAt: e.target.value})} />
)}
); }