164 lines
5.8 KiB
JavaScript
164 lines
5.8 KiB
JavaScript
import React, { useEffect, useState } from "react";
|
|
import Layout from "@/components/layout/Layout";
|
|
import { supabaseClient } from "@/utils/supabase";
|
|
import { Button } from "@/components/ui/button";
|
|
import VistaPreviaDiplomaDialog from "@/components/dialogs/vistaPreviaDiplomaDialog";
|
|
|
|
export default function DiplomasVista() {
|
|
const [alumnos, setAlumnos] = useState([]);
|
|
const [alumnoSeleccionado, setAlumnoSeleccionado] = useState(null);
|
|
const [mostrarDialog, setMostrarDialog] = useState(false);
|
|
|
|
// Estado compartido para los datos del diploma
|
|
const [competencias, setCompetencias] = useState([]);
|
|
const [competenciasAcreditadas, setCompetenciasAcreditadas] = useState([]);
|
|
const [fecha, setFecha] = useState("");
|
|
|
|
useEffect(() => {
|
|
const cargarAlumnos = async () => {
|
|
const { data, error } = await supabaseClient
|
|
.from("alumno")
|
|
.select(
|
|
`
|
|
id,
|
|
nombre,
|
|
correo,
|
|
telefono,
|
|
tipo_formacion,
|
|
curso_id,
|
|
curso(id, nombre),
|
|
inyeccion_id,
|
|
inyeccion(id, nombre),
|
|
pildoras_id,
|
|
pildoras(id, nombre)
|
|
`
|
|
)
|
|
.order("id", { ascending: true });
|
|
setAlumnos(data || []);
|
|
};
|
|
cargarAlumnos();
|
|
}, []);
|
|
|
|
// Limpiar datos al cerrar dialog
|
|
const handleCloseDialog = (open) => {
|
|
setMostrarDialog(open);
|
|
if (!open) {
|
|
setAlumnoSeleccionado(null);
|
|
setCompetencias([]);
|
|
setCompetenciasAcreditadas([]);
|
|
setFecha("");
|
|
}
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (alumnoSeleccionado) {
|
|
if (
|
|
alumnoSeleccionado.tipo_formacion === "curso" &&
|
|
alumnoSeleccionado.curso?.id
|
|
) {
|
|
supabaseClient
|
|
.from("curso_competencia")
|
|
.select("competencia(id, descripcion)")
|
|
.eq("curso_id", alumnoSeleccionado.curso.id)
|
|
.then(({ data }) => {
|
|
const comps = data?.map((c) => c.competencia).filter(Boolean) || [];
|
|
setCompetencias(comps);
|
|
setCompetenciasAcreditadas(comps.map((c) => c.id));
|
|
});
|
|
} else if (
|
|
alumnoSeleccionado.tipo_formacion === "inyeccion" &&
|
|
alumnoSeleccionado.inyeccion?.id
|
|
) {
|
|
supabaseClient
|
|
.from("inyeccion_competencia_inyeccion")
|
|
.select("competencia_inyeccion(id, descripcion)")
|
|
.eq("inyeccion_id", alumnoSeleccionado.inyeccion.id)
|
|
.then(({ data }) => {
|
|
const comps =
|
|
data?.map((c) => c.competencia_inyeccion).filter(Boolean) || [];
|
|
setCompetencias(comps);
|
|
setCompetenciasAcreditadas(comps.map((c) => c.id));
|
|
});
|
|
} else {
|
|
setCompetencias([]);
|
|
setCompetenciasAcreditadas([]);
|
|
}
|
|
}
|
|
}, [alumnoSeleccionado]);
|
|
|
|
return (
|
|
<Layout>
|
|
<div className="w-full pt-10 flex flex-col items-center text-black">
|
|
<h1 className="text-2xl font-semibold mb-6">Vista de Diplomas</h1>
|
|
<div className="overflow-x-auto w-full">
|
|
<table className="w-full bg-white border">
|
|
<thead>
|
|
<tr className="bg-gray-100">
|
|
<th className="py-2 border-b">ID</th>
|
|
<th className="py-2 border-b">Nombre</th>
|
|
<th className="py-2 border-b">Correo</th>
|
|
<th className="py-2 border-b">Teléfono</th>
|
|
<th className="py-2 border-b">Tipo</th>
|
|
<th className="py-2 border-b">Formación</th>
|
|
<th className="py-2 border-b">Acciones</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{alumnos.map((alumno) => (
|
|
<tr key={alumno.id}>
|
|
<td className="py-2 px-4 border-b">{alumno.id}</td>
|
|
<td className="py-2 px-4 border-b">{alumno.nombre}</td>
|
|
<td className="py-2 px-4 border-b">{alumno.correo}</td>
|
|
<td className="py-2 px-4 border-b">{alumno.telefono}</td>
|
|
<td className="py-2 px-4 border-b">
|
|
{alumno.tipo_formacion === "curso"
|
|
? "Curso"
|
|
: alumno.tipo_formacion === "inyeccion"
|
|
? "Inyección"
|
|
: alumno.tipo_formacion === "pildora"
|
|
? "Píldora"
|
|
: ""}
|
|
</td>
|
|
<td className="py-2 px-4 border-b">
|
|
{alumno.tipo_formacion === "curso" && alumno.curso?.nombre}
|
|
{alumno.tipo_formacion === "inyeccion" &&
|
|
alumno.inyeccion?.nombre}
|
|
{alumno.tipo_formacion === "pildora" &&
|
|
alumno.pildoras?.nombre}
|
|
</td>
|
|
<td className="py-2 px-4 border-b">
|
|
<Button
|
|
className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-3 rounded"
|
|
onClick={() => {
|
|
setAlumnoSeleccionado(alumno);
|
|
setMostrarDialog(true);
|
|
}}
|
|
>
|
|
Crear Diploma
|
|
</Button>
|
|
</td>
|
|
</tr>
|
|
))}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
{/* Dialog para crear diploma y vista previa juntos */}
|
|
{mostrarDialog && (
|
|
<div className="fixed inset-0 z-50 flex items-center justify-center w-screen">
|
|
<div className="flex bg-black bg-opacity-30 p-8 rounded">
|
|
<VistaPreviaDiplomaDialog
|
|
open={mostrarDialog}
|
|
onOpenChange={handleCloseDialog}
|
|
alumno={alumnoSeleccionado}
|
|
competencias={competencias}
|
|
fecha={fecha}
|
|
competenciasAcreditadas={competenciasAcreditadas}
|
|
/>
|
|
</div>
|
|
</div>
|
|
)}
|
|
</Layout>
|
|
);
|
|
}
|