diff --git a/src/app/(admins)/user/usuarios/page.tsx b/src/app/(admins)/user/usuarios/page.tsx index 540c060..a4b791d 100644 --- a/src/app/(admins)/user/usuarios/page.tsx +++ b/src/app/(admins)/user/usuarios/page.tsx @@ -1,12 +1,158 @@ 'use client'; import Button from '@/components/button'; import Table, { Header } from '@/components/table'; +const Modal = dynamic(() => import('@/components/modal'), { ssr: false }); import { useGetApi } from '@/hooks/use-get-api'; import { Administrador } from '@/types/administradores'; -import React from 'react'; +import React, { useState } from 'react'; +import axiosInstance from '@/utils/api-config'; +import dynamic from 'next/dynamic'; export default function Page() { - const { data } = useGetApi('/administrador'); + const { data, setData } = useGetApi('/administrador'); + + // Estado del modal + const [isModalVisible, setIsModalVisible] = useState(false); + const [modalMode, setModalMode] = useState<'add' | 'edit'>('add'); + const [selectedUser, setSelectedUser] = useState(null); + + // Estado del modal de eliminación + const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); + const [userToDelete, setUserToDelete] = useState(null); + + // Estado del formulario + const [formData, setFormData] = useState({ + nombre_usuario: '', + correo: '', + password: '', + id_tipo_user: '', + }); + + // Handlers del modal + const handleOpenAddModal = () => { + setModalMode('add'); + setSelectedUser(null); + setFormData({ + nombre_usuario: '', + correo: '', + password: '', + id_tipo_user: '', + }); + setIsModalVisible(true); + }; + + const handleOpenEditModal = (user: Administrador) => { + setModalMode('edit'); + setSelectedUser(user); + setFormData({ + nombre_usuario: user.nombre_usuario, + correo: user.correo, + password: '', + id_tipo_user: user.tipoUser.id.toString(), + }); + setIsModalVisible(true); + }; + + const handleCloseModal = () => { + setIsModalVisible(false); + setSelectedUser(null); + }; + + // Handlers del modal de eliminación + const handleOpenDeleteModal = (user: Administrador) => { + setUserToDelete(user); + setIsDeleteModalVisible(true); + }; + + const handleCloseDeleteModal = () => { + setIsDeleteModalVisible(false); + setUserToDelete(null); + }; + + const handleConfirmDelete = async () => { + // Aquí iría la lógica para eliminar el usuario + try { + if (userToDelete) { + // Lógica para eliminar el usuario + const response = await axiosInstance.delete( + `/administrador/${userToDelete.id_administrador}` + ); + + console.log('Usuario eliminado:', response.data); + // Actualizar la lista de usuarios en el estado + if (data) { + const updatedData = data.filter( + (user) => user.id_administrador !== userToDelete.id_administrador + ); + setData(updatedData); + } + } + } catch (error) { + console.error('Error al eliminar el usuario:', error); + } + handleCloseDeleteModal(); + }; + + // Handler para envío del formulario + const handleSubmitForm = async () => { + try { + if (modalMode === 'add') { + // Crear nuevo usuario + const payload = { + nombre_usuario: formData.nombre_usuario, + correo: formData.correo, + password: formData.password, + id_tipo_user: parseInt(formData.id_tipo_user), + }; + + const response = await axiosInstance.post('/administrador', payload); + console.log('Usuario creado:', response.data); + + // Actualizar la lista de usuarios + if (data) { + setData([ + ...data, + { + correo: formData.correo, + id_administrador: response.data.id_administrador, + nombre_usuario: formData.nombre_usuario, + tipoUser: { + id: parseInt(formData.id_tipo_user), + tipo: formData.id_tipo_user === '1' ? 'Administrador' : 'Staff', + }, + }, + ]); + } + } else if (modalMode === 'edit' && selectedUser) { + // Editar usuario existente + const payload = { + nombre_usuario: formData.nombre_usuario, + correo: formData.correo, + id_tipo_user: parseInt(formData.id_tipo_user), + }; + + const response = await axiosInstance.put( + `/administrador/${selectedUser.id_administrador}`, + payload + ); + console.log('Usuario actualizado:', response.data); + + // Actualizar la lista de usuarios + if (data) { + const updatedData = data.map((user) => + user.id_administrador === selectedUser.id_administrador + ? { ...user, ...response.data } + : user + ); + setData(updatedData); + } + } + + handleCloseModal(); + } catch (error) { + console.error('Error al guardar el usuario:', error); + } + }; const headers: Header[] = [ { key: 'id_administrador', label: 'ID' }, @@ -19,12 +165,16 @@ export default function Page() { }, { key: 'tipoUser', - render: () => ( + render: (_, row) => (
- -
@@ -37,9 +187,166 @@ export default function Page() {

Administradores

- +
{data && } + + +
+

+ {modalMode === 'add' + ? 'Agregar Nuevo Administrador' + : 'Editar Administrador'} +

+ + {modalMode === 'edit' && selectedUser && ( +
+

+ ID: {selectedUser.id_administrador} +

+

+ Usuario actual: {selectedUser.nombre_usuario} +

+

+ Correo actual: {selectedUser.correo} +

+

+ Tipo: {selectedUser.tipoUser.tipo} +

+
+ )} + +
+ + + setFormData((prev) => ({ + ...prev, + nombre_usuario: e.target.value, + })) + } + placeholder="Ingrese el nombre de usuario" + /> +
+ +
+ + + setFormData((prev) => ({ + ...prev, + correo: e.target.value, + })) + } + placeholder="Ingrese el correo electrónico" + /> +
+ + {modalMode === 'add' && ( +
+ + + setFormData((prev) => ({ + ...prev, + password: e.target.value, + })) + } + placeholder="Ingrese la contraseña" + /> +
+ )} + +
+ + +
+ +
+ + +
+
+
+ + {/* Modal de confirmación de eliminación */} + +
+
+ +
+ +

¿Está seguro de eliminar al usuario?

+ + {userToDelete && ( +
+

+ {userToDelete.nombre_usuario} +

+

Esta acción no se puede deshacer

+
+ )} + +
+ + +
+
+
); }