From 99bfb46b8b692691ca822ca8ce79e2a1a1e0feb4 Mon Sep 17 00:00:00 2001 From: miguel Date: Tue, 19 Aug 2025 10:26:02 -0600 Subject: [PATCH] feat: add admin management page and types - Implemented the admin management page with a table displaying admin details. - Created the Administrador type definition for better type safety. - Added SubmitResponse type for handling submission responses. - Included placeholder components for form card previews. --- public/banner-guapa.webp | Bin 0 -> 64488 bytes .../[id_evento]/formularios/crear/page.tsx | 7 + src/app/(admins)/user/usuarios/page.tsx | 45 +++ src/app/(auth)/login/page.tsx | 84 ++--- src/components/evento/evento-card-admin.tsx | 2 +- .../formulario-card-create-preview.tsx | 0 .../formulario-card-preview-unified.tsx | 0 .../formulario/formulario-card-user.tsx | 108 +++--- src/components/navbar.tsx | 1 + src/components/select.tsx | 7 +- src/containers/create-evento.tsx | 23 +- src/containers/create-formulario.tsx | 37 ++- .../formulario/formulario-registro.tsx | 25 +- src/containers/pages/formulario-page.tsx | 310 +++++++++++++----- src/types/administradores.d.ts | 9 + src/types/create-formulario.d.ts | 41 +-- src/types/evento.d.ts | 9 + src/types/submit.d.ts | 7 + src/utils/api-config.ts | 42 +++ src/utils/date-utils.ts | 60 ++++ 20 files changed, 610 insertions(+), 207 deletions(-) create mode 100644 public/banner-guapa.webp create mode 100644 src/app/(admins)/user/usuarios/page.tsx create mode 100644 src/components/formulario/formulario-card-create-preview.tsx create mode 100644 src/components/formulario/formulario-card-preview-unified.tsx create mode 100644 src/types/administradores.d.ts create mode 100644 src/types/submit.d.ts diff --git a/public/banner-guapa.webp b/public/banner-guapa.webp new file mode 100644 index 0000000000000000000000000000000000000000..14055f1a952a1eb5148bc6e9399066a952ceba85 GIT binary patch literal 64488 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 + const { data: tipo_eventos } = useGetApi(`/tipo-evento`); const handleSeleccionarPlantilla = (plantillaId: string) => { const seleccionada = plantillasDisponibles.find( @@ -223,6 +226,10 @@ export default function Page() { formulario: datosFormulario, onChange: (nuevo) => setDatosFormulario({ ...nuevo }), evento: evento ? evento : undefined, + tipo_eventos: tipo_eventos?.map((tipo) => ({ + value: tipo.id_tipo_evento, + label: tipo.tipo_evento, + })), }); return formularioEditor.informacionBasica(); })()} diff --git a/src/app/(admins)/user/usuarios/page.tsx b/src/app/(admins)/user/usuarios/page.tsx new file mode 100644 index 0000000..540c060 --- /dev/null +++ b/src/app/(admins)/user/usuarios/page.tsx @@ -0,0 +1,45 @@ +'use client'; +import Button from '@/components/button'; +import Table, { Header } from '@/components/table'; +import { useGetApi } from '@/hooks/use-get-api'; +import { Administrador } from '@/types/administradores'; +import React from 'react'; + +export default function Page() { + const { data } = useGetApi('/administrador'); + + const headers: Header[] = [ + { key: 'id_administrador', label: 'ID' }, + { key: 'nombre_usuario', label: 'Nombre de Usuario' }, + { key: 'correo', label: 'Correo' }, + { + key: 'tipoUser', + render: (_, row) => row.tipoUser.tipo, + label: 'Tipo de Usuario', + }, + { + key: 'tipoUser', + render: () => ( +
+ + +
+ ), + label: 'Acciones', + }, + ]; + + return ( +
+
+

Administradores

+ +
+ {data && } + + ); +} diff --git a/src/app/(auth)/login/page.tsx b/src/app/(auth)/login/page.tsx index cba6ccc..aa355b9 100644 --- a/src/app/(auth)/login/page.tsx +++ b/src/app/(auth)/login/page.tsx @@ -3,28 +3,13 @@ import SimpleInput from '@/components/input'; import PasswordInput from '@/components/password'; import React from 'react'; import { useRouter } from 'next/navigation'; +import axiosInstance from '@/utils/api-config'; export default function LoginForm() { const router = useRouter(); - // Fake user data - const fakeUsers = [ - { - username: 'user-admin', - password: '@dm1nP@ss', - role: 'administrator', - redirectPath: '/user/eventos', - }, - { - username: 'staff1', - password: 'st@ffP@ss', - role: 'staff', - redirectPath: '/user/eventos', - }, - ]; - const [loginData, setLoginData] = React.useState({ - username: '', + nombre_usuario: '', password: '', }); @@ -38,36 +23,53 @@ export default function LoginForm() { if (error) setError(''); }; - const handleSubmit = (e: React.FormEvent) => { + const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsLoading(true); setError(''); - // Simulate API call delay - setTimeout(() => { - const user = fakeUsers.find( - (u) => - u.username === loginData.username && u.password === loginData.password - ); + try { + const response = await axiosInstance.post('/administrador/login', { + nombre_usuario: loginData.nombre_usuario, + password: loginData.password, + }); - if (user) { - // Store user data in localStorage (in a real app, you'd use proper session management) - localStorage.setItem( - 'user', - JSON.stringify({ - username: user.username, - role: user.role, - }) - ); + // Guardar el token en sessionStorage + if (response.data.token) { + sessionStorage.setItem('token', response.data.token); - // Redirect to appropriate dashboard - router.push(user.redirectPath); + // Opcional: guardar información adicional del usuario si viene en la respuesta + if (response.data.user) { + sessionStorage.setItem('user', JSON.stringify(response.data.user)); + } + + // Redireccionar al dashboard + router.push('/user/eventos'); } else { - setError('Usuario o contraseña incorrectos'); + setError('No se recibió token de autenticación'); } + } catch (error: unknown) { + console.error('Error en login:', error); + // Type guard para axios error + if (error && typeof error === 'object' && 'response' in error) { + const axiosError = error as { + response?: { status?: number; data?: { message?: string } }; + }; + + if (axiosError.response?.status === 401) { + setError('Credenciales incorrectas'); + } else if (axiosError.response?.data?.message) { + setError(axiosError.response.data.message); + } else { + setError('Error al iniciar sesión. Inténtalo de nuevo.'); + } + } else { + setError('Error al iniciar sesión. Inténtalo de nuevo.'); + } + } finally { setIsLoading(false); - }, 1000); + } }; return ( @@ -88,7 +90,7 @@ export default function LoginForm() { Sistema de Eventos

- Ingresa tu nombre de usuario y tu contraseña para acceder + Ingresa tu correo electrónico y tu contraseña para acceder a tu cuenta.

@@ -101,9 +103,9 @@ export default function LoginForm() { diff --git a/src/components/evento/evento-card-admin.tsx b/src/components/evento/evento-card-admin.tsx index 2367ff3..a6587a2 100644 --- a/src/components/evento/evento-card-admin.tsx +++ b/src/components/evento/evento-card-admin.tsx @@ -105,7 +105,7 @@ export default function EventoCardAdmin({ Formularios disponibles:
- {evento.cuestionarios.map((cuestionario) => ( + {evento.cuestionarios.slice(0, 3).map((cuestionario) => (
diff --git a/src/components/formulario/formulario-card-create-preview.tsx b/src/components/formulario/formulario-card-create-preview.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/components/formulario/formulario-card-preview-unified.tsx b/src/components/formulario/formulario-card-preview-unified.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/components/formulario/formulario-card-user.tsx b/src/components/formulario/formulario-card-user.tsx index b9c8008..c3fd5ab 100644 --- a/src/components/formulario/formulario-card-user.tsx +++ b/src/components/formulario/formulario-card-user.tsx @@ -5,6 +5,7 @@ import Link from 'next/link'; import React, { useState } from 'react'; import MarkdownRenderer from '../markdown-render'; import { toParam } from '@/utils/slugify'; +import { formatearFechaCard, formatearHorario } from '@/utils/date-utils'; import Button from '../button'; export default function FormularioCardUser({ @@ -22,6 +23,22 @@ export default function FormularioCardUser({ const sinCupos = formulario.cupo_maximo !== null && formulario.cupos_disponibles <= 0; + // Verificar si el evento es el mismo día + const fechaInicio = new Date(formulario.fecha_inicio); + const fechaFin = new Date(formulario.fecha_fin); + const esElMismoDia = fechaInicio.toDateString() === fechaFin.toDateString(); + + // Obtener información de fecha formateada usando las utilidades + const { mesTexto, diaTexto } = formatearFechaCard( + formulario.fecha_inicio, + formulario.fecha_fin + ); + + // Obtener horario formateado si es el mismo día + const horarioFormateado = esElMismoDia + ? formatearHorario(formulario.fecha_inicio, formulario.fecha_fin) + : null; + const descripcionRecortada = descripcion.length > limite && !verMas ? `${descripcion.slice(0, limite)}...` @@ -78,7 +95,7 @@ export default function FormularioCardUser({ {/* Badge de cupos en la esquina superior derecha */}
- {formulario.tipoCuestionario.tipo_cuestionario} + {formulario.tipoCuestionario.tipo_cuestionario}{' '}
@@ -87,34 +104,24 @@ export default function FormularioCardUser({ {/* Fecha del evento */}
-
- {new Date(formulario.fecha_inicio) - .toLocaleDateString('es-ES', { month: 'short' }) - .toUpperCase()} -
+
{mesTexto}
- {(() => { - const fechaInicio = new Date(formulario.fecha_inicio); - const fechaFin = new Date(formulario.fecha_fin); - const diaInicio = fechaInicio.getDate(); - const diaFin = fechaFin.getDate(); - const esElMismoDia = - fechaInicio.toDateString() === fechaFin.toDateString(); - - return esElMismoDia ? diaInicio : `${diaInicio} - ${diaFin}`; - })()} + {diaTexto}
- - {evento.nombre_evento} - + {evento.nombre_evento}
{formulario.nombre_form}
+ {formulario.tipoEvento && ( +
+ {formulario.tipoEvento.tipo_evento} +
+ )}
@@ -133,27 +140,50 @@ export default function FormularioCardUser({
{/* Información de cupos y estadísticas */} -
-
-
- -
- Cupos - - {formulario.cupo_maximo !== null - ? `${formulario.cupos_usados} / ${formulario.cupo_maximo}` - : 'Sin límite'} - - {sinCupos && ( -
- - Cupos agotados +
+ {/* Columna de horario - solo visible si es el mismo día */} + {esElMismoDia && ( +
+
+
+ +
+ Horario + + {horarioFormateado} +
- )} +
+
+
+ )} + {/* Columna de cupos - siempre visible */} +
+
+
+ +
+ Cupos + + {formulario.cupo_maximo !== null + ? `${formulario.cupos_usados} / ${formulario.cupo_maximo}` + : 'Sin límite'} + + {sinCupos && ( +
+ + Cupos agotados +
+ )} +
diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx index b62154a..09577cb 100644 --- a/src/components/navbar.tsx +++ b/src/components/navbar.tsx @@ -11,6 +11,7 @@ const Navbar: React.FC = () => { { href: '/user/eventos', label: 'Eventos' }, { href: '/user/qr', label: 'Lector de QRs' }, { href: '/user/eventos/crear', label: 'Crear Evento' }, + { href: '/user/usuarios', label: 'Usuarios' }, { href: '/signout', label: 'Cerrar sesión' }, ]; diff --git a/src/components/select.tsx b/src/components/select.tsx index 364d43c..b8a2666 100644 --- a/src/components/select.tsx +++ b/src/components/select.tsx @@ -1,6 +1,6 @@ import React, { useId } from 'react'; -interface Option { +export interface Option { value: string | number; label: string; } @@ -74,7 +74,10 @@ const Select: React.FC = ({ return (
-
); diff --git a/src/containers/formulario/formulario-registro.tsx b/src/containers/formulario/formulario-registro.tsx index 992b3ac..d8b9e70 100644 --- a/src/containers/formulario/formulario-registro.tsx +++ b/src/containers/formulario/formulario-registro.tsx @@ -9,6 +9,7 @@ import Button from '@/components/button'; import toast from 'react-hot-toast'; import { useRouter } from 'next/navigation'; import { getAxiosError } from '@/utils/errors-utils'; +import { SubmitResponse } from '@/types/submit'; export type UsuarioDataResponse = { cuenta: string | null; @@ -35,8 +36,13 @@ type RespuestaFormulario = Record; // id_pregunta: resp export default function FormularioRegistro({ id_cuestionario, + handleSubmitFormulario, }: { + evento: string; + cuestionario: string; + id_evento: number; id_cuestionario: number; + handleSubmitFormulario: (data: SubmitResponse) => void; }) { // ------------------------ // Estados @@ -77,7 +83,8 @@ export default function FormularioRegistro({ // Efecto: buscar información de cuenta // ------------------------ useEffect(() => { - const cuenta = respuestas[preguntaCuenta?.id_pregunta ?? '']; + const cuentaId = preguntaCuenta?.id_pregunta ?? ''; + const cuenta = respuestas[cuentaId]; const esCuentaAlumno = preguntaCuenta?.validacion === 'cuenta_alumno'; const esCuentaTrabajador = @@ -130,7 +137,7 @@ export default function FormularioRegistro({ } else { setCuentaInfo(null); } - }, [respuestas[preguntaCuenta?.id_pregunta ?? '']]); + }, [respuestas, preguntaCuenta?.id_pregunta, preguntaCuenta?.validacion]); // ------------------------ // Efecto: precargar respuestas si hay cuentaInfo @@ -212,7 +219,6 @@ export default function FormularioRegistro({ }; const handleOnSubmit = async () => { - console.log('Enviando respuestas:', respuestas); setIsSending(true); if (!data?.cuestionario.id_cuestionario) { alert('No se ha cargado correctamente el formulario'); @@ -273,7 +279,7 @@ export default function FormularioRegistro({ }; try { - const res = await axiosInstance.post( + const res = await axiosInstance.post( '/cuestionario-respondido/submit', payload ); @@ -282,7 +288,7 @@ export default function FormularioRegistro({ - {res.data.message} + Respuestas Enviadas Con Éxito ) : ( <> @@ -308,13 +314,13 @@ export default function FormularioRegistro({ }, } ); + + handleSubmitFormulario(res.data); } catch (error) { console.log(getAxiosError(error)); toast.error('Hubo un error al enviar el formulario', { duration: 5000, }); - } finally { - // Redirigir al usuario después de enviar el formulario router.push('/'); } }; @@ -367,7 +373,6 @@ export default function FormularioRegistro({ />
)} - {isComunidad && confirmativeOption.some((opt) => isComunidad.label?.toLowerCase().includes(opt.toLowerCase()) @@ -404,7 +409,6 @@ export default function FormularioRegistro({ />
)} - {mostrarFormularioRestante && data?.cuestionario.secciones.map((seccion, i) => (
@@ -535,7 +539,6 @@ export default function FormularioRegistro({ })}
))} -