import React, { useEffect, useState } from 'react'; import { fetchUsers, createUser, updateUser, deleteUser } from '../api/users.js'; import { useNotification } from '../context/NotificationContext'; const initialForm = { username: '', email: '', first_name: '', last_name: '', password: '', }; export default function Users() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [form, setForm] = useState(initialForm); const [editingId, setEditingId] = useState(null); const [showCreateModal, setShowCreateModal] = useState(false); const [showEditModal, setShowEditModal] = useState(false); const [showDeleteModal, setShowDeleteModal] = useState(false); const [userToDelete, setUserToDelete] = useState(null); const [submitting, setSubmitting] = useState(false); const [searchTerm, setSearchTerm] = useState(''); const { showMessage } = useNotification(); const loadUsers = () => { setLoading(true); fetchUsers() .then(data => { setUsers(data); setLoading(false); }) .catch(err => { console.error('Error loading users:', err); setError('Error al cargar usuarios'); setLoading(false); }); }; useEffect(() => { loadUsers(); // eslint-disable-next-line }, [showMessage]); const handleChange = e => { setForm({ ...form, [e.target.name]: e.target.value }); }; const handleSubmit = async e => { e.preventDefault(); setSubmitting(true); try { if (editingId) { await updateUser(editingId, form); showMessage('Usuario actualizado exitosamente', 'success'); setShowEditModal(false); } else { await createUser(form); showMessage('Usuario creado exitosamente', 'success'); setShowCreateModal(false); } setForm(initialForm); setEditingId(null); loadUsers(); } catch (err) { showMessage(err.message, 'error'); } finally { setSubmitting(false); } }; const handleEdit = user => { setForm({ username: user.username, email: user.email, first_name: user.first_name, last_name: user.last_name, password: '', }); setEditingId(user.id); setShowEditModal(true); }; const handleDeleteClick = (user) => { setUserToDelete(user); setShowDeleteModal(true); }; const handleDeleteConfirm = async () => { if (!userToDelete) return; setSubmitting(true); try { await deleteUser(userToDelete.id); showMessage('Usuario eliminado exitosamente', 'success'); setShowDeleteModal(false); setUserToDelete(null); loadUsers(); } catch (err) { showMessage(err.message, 'error'); } finally { setSubmitting(false); } }; const handleCancel = () => { setForm(initialForm); setEditingId(null); setShowCreateModal(false); setShowEditModal(false); setShowDeleteModal(false); setUserToDelete(null); }; // Función para filtrar usuarios const filteredUsers = users.filter(user => user.username.toLowerCase().includes(searchTerm.toLowerCase()) || user.email.toLowerCase().includes(searchTerm.toLowerCase()) || (user.first_name && user.first_name.toLowerCase().includes(searchTerm.toLowerCase())) || (user.last_name && user.last_name.toLowerCase().includes(searchTerm.toLowerCase())) ); // Función para obtener el badge de estado const getStatusBadge = () => { return 'bg-green-100 text-green-800'; }; if (loading) { return (
{error}
Gestiona y supervisa los usuarios registrados en el sistema.
| Usuario | Estado | Nombre Completo | ID | Acciones | |
|---|---|---|---|---|---|
|
{user.profile_picture ? (
{user.username}
ID: {user.id}
|
{user.email} | Activo | {user.first_name || user.last_name ? `${user.first_name} ${user.last_name}`.trim() : Sin nombre } | #{user.id} |
{searchTerm ? 'Intenta con otros términos de búsqueda.' : 'Comienza agregando un nuevo usuario.'}
{!searchTerm && (¿Estás seguro que deseas eliminar al usuario {userToDelete.username}?
{userToDelete.username}
{userToDelete.email}
{(userToDelete.first_name || userToDelete.last_name) && ({`${userToDelete.first_name} ${userToDelete.last_name}`.trim()}
)}Esta acción no se puede deshacer.