"use client"; import React, { useState } from "react"; import { // TransferAlt, Check, X, // Error as ErrorIcon, // ErrorCircle, CheckCircle, } from "@boxicons/react"; // Interfaz para los datos del reemplazo interface ReemplazoItem { idCursoAbierto: string; Curso: string; FechaAsistencia: string; HoraInicio: string; HoraSalida: string; rutProfesor: string; Profesor: string; Estado: string; idAsistenciaProfesor: string; Email?: string; } // Interfaz para la configuración de la confirmación interface ModalConfirmacionState { show: boolean; accion: "autorizar" | "rechazar" | null; item: ReemplazoItem | null; } export default function ReemplazosPendientesPage() { // Estado con datos de ejemplo const [reemplazos, setReemplazos] = useState([ { idCursoAbierto: "CUR-101", Curso: "Inglés Básico A1", FechaAsistencia: "15-02-2026", HoraInicio: "09:00", HoraSalida: "10:30", rutProfesor: "12.345.678-9", Profesor: "Juan Pérez", Estado: "Pendiente", idAsistenciaProfesor: "SES-001", Email: "jperez@correo.cl", }, { idCursoAbierto: "CUR-102", Curso: "Inglés Intermedio B2", FechaAsistencia: "16-02-2026", HoraInicio: "11:00", HoraSalida: "12:30", rutProfesor: "15.987.654-3", Profesor: "María González", Estado: "Pendiente", idAsistenciaProfesor: "SES-002", Email: "mgonzalez@correo.cl", }, ]); // Estados para diálogos y procesamientos const [modalConfirm, setModalConfirm] = useState({ show: false, accion: null, item: null, }); const [isLoading, setIsLoading] = useState(false); const [modalRespuesta, setModalRespuesta] = useState<{ show: boolean; errorMsg: string; okMsg: string; }>({ show: false, errorMsg: "", okMsg: "" }); // Abrir modal customizado de confirmación const abrirConfirmacion = (item: ReemplazoItem, accion: "autorizar" | "rechazar") => { setModalConfirm({ show: true, accion, item, }); }; // Procesar la autorización / rechazo const handleConfirmar = () => { if (!modalConfirm.item || !modalConfirm.accion) return; const { idAsistenciaProfesor } = modalConfirm.item; const accion = modalConfirm.accion; // Cerrar modal de confirmación y mostrar loader setModalConfirm({ show: false, accion: null, item: null }); setIsLoading(true); setTimeout(() => { setIsLoading(false); // Eliminar el ítem procesado de la lista setReemplazos((prev) => prev.filter((r) => r.idAsistenciaProfesor !== idAsistenciaProfesor)); setModalRespuesta({ show: true, errorMsg: "", okMsg: `El reemplazo se ha ${ accion === "autorizar" ? "autorizado" : "rechazado" } correctamente.`, }); }, 1000); }; return ( <>
{/* ENCABEZADO */}
{/* */}
Autorización
Reemplazos Pendientes
{/* TABLA O ALERTA */} {reemplazos.length > 0 ? (
{reemplazos.map((item) => ( ))}
Curso Sesión Inicio Salida Run Reemplazante Estado Sesion Acción
{item.Curso} {item.idCursoAbierto} {item.FechaAsistencia} {item.HoraInicio} {item.HoraSalida} {item.rutProfesor} {item.Profesor} {item.Estado}
) : (
{/* */}

No hay reemplazos pendientes de autorización

Si cree que esto es un error, contáctenos.{" "} Generar Ticket
)}
{/* MODAL PERSONALIZADO DE CONFIRMACIÓN (REEMPLAZO DE SWEETALERT2) */} {modalConfirm.show && modalConfirm.item && (
{modalConfirm.accion === "autorizar" ? ( ) : ( )}

{modalConfirm.accion === "autorizar" ? "Autorizar Reemplazo" : "Rechazar Reemplazo"}

{modalConfirm.accion === "autorizar" ? "Se asignará al profesor reemplazante" : "Se rechazará al profesor reemplazante"}

Curso {modalConfirm.item.Curso}{" "} {modalConfirm.item.idCursoAbierto}
Sesión {modalConfirm.item.FechaAsistencia} | {modalConfirm.item.HoraInicio} - {modalConfirm.item.HoraSalida}
Profesor {modalConfirm.item.rutProfesor}
Reemplazante {modalConfirm.item.Profesor}
)} {/* MODAL RESPUESTA */} {modalRespuesta.show && (
Reemplazos
{modalRespuesta.errorMsg && (
{/* */} {modalRespuesta.errorMsg}
)} {modalRespuesta.okMsg && (
{modalRespuesta.okMsg}
)}
)} {/* MODAL CARGANDO */} {isLoading && (
Procesando...

Procesando la información...

)} ); }