diff --git a/app/(private)/AgregarTiempo/page.tsx b/app/(private)/AgregarTiempo/page.tsx index e5d16b0..2eef6c1 100644 --- a/app/(private)/AgregarTiempo/page.tsx +++ b/app/(private)/AgregarTiempo/page.tsx @@ -24,7 +24,7 @@ export default async function Page(props: { errorMessage = `${result.error}`; return; } else { - student = result; + student = result[0]?.alumno; } } diff --git a/app/(private)/AsignacionEquipo/PlaticaGate.tsx b/app/(private)/AsignacionEquipo/PlaticaGate.tsx new file mode 100644 index 0000000..59197dc --- /dev/null +++ b/app/(private)/AsignacionEquipo/PlaticaGate.tsx @@ -0,0 +1,114 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { toast } from "react-toastify"; +import { envConfig } from "@/app/lib/config"; + +type Props = { + inscripcion: any[]; + idCuenta: number; +}; + +export default function PlaticaGate({ inscripcion, idCuenta }: Props) { + const [puedeContinuar, setPuedeContinuar] = useState(false); + const [equipos, setEquipos] = useState([]); + const [loadingEquipos, setLoadingEquipos] = useState(false); + + useEffect(() => { + if (!Array.isArray(inscripcion) || inscripcion.length === 0) return; + + const todasAsistieron = inscripcion.every( + (ins) => ins.platica?.data?.[0] === 1 + ); + + if (!todasAsistieron) { + toast.error("El alumno no asistió a todas las pláticas", { + position: "top-right", + autoClose: 4000, + }); + setPuedeContinuar(false); + return; + } + + setPuedeContinuar(true); + }, [inscripcion]); + + useEffect(() => { + if (!puedeContinuar || !idCuenta) return; + + const fetchEquipos = async () => { + try { + setLoadingEquipos(true); + + const res = await fetch( + `${envConfig.apiUrl}/equipo/student/${idCuenta}`, + { + cache: "no-store", + } + ); + + if (!res.ok) { + throw new Error("No se pudieron cargar los equipos"); + } + + const data = await res.json(); + setEquipos(data); + } catch (error) { + toast.error("Error al cargar equipos disponibles"); + } finally { + setLoadingEquipos(false); + } + }; + + fetchEquipos(); + }, [puedeContinuar, idCuenta]); + + if (!puedeContinuar) return null; + + return ( +
+ + + + + + +
+ + + +
+
+ ); +} diff --git a/app/(private)/AsignacionEquipo/page.tsx b/app/(private)/AsignacionEquipo/page.tsx index 17b4e86..870998c 100644 --- a/app/(private)/AsignacionEquipo/page.tsx +++ b/app/(private)/AsignacionEquipo/page.tsx @@ -1,14 +1,15 @@ import SearchUser from "@/app/Components/Global/SearchUser/searchUser"; import Toggle from "@/app/Components/Global/Toggle/Toggle"; -import { GetStudent } from "@/app/lib/getStudent"; import CheckBoxEquipo from "@/app/Components/CheckBoxEquipo"; import Information from "@/app/Components/Global/Information/information"; import ShowError from "@/app/Components/Global/ShowError"; - -import "@/app/globals.css"; import Table from "@/app/Components/Global/table"; + import { envConfig } from "@/app/lib/config"; +import { GetRegisterStudent } from "@/app/lib/getRegisterStudent"; +import "@/app/globals.css"; +import PlaticaGate from "./PlaticaGate"; async function getInscripcion(idCuenta: number) { try { @@ -45,17 +46,24 @@ export default async function Page(props: { const machine = params?.machine ? params.machine : null; let student: any = null; + let platica: any = null; let inscripcion: any = null; let errorMessage = ""; if (numAcount) { const idCuenta = parseInt(numAcount); - const result = await GetStudent(idCuenta); + const result = await GetRegisterStudent(idCuenta); if (result.error) { errorMessage = `${result.error}`; } else { - student = result as Student; + student = result[0]?.alumno as Student; + const rawPlatica = result[0]?.platica; + platica = + rawPlatica?.type === "Buffer" + ? Boolean(rawPlatica.data[0]) + : Boolean(rawPlatica); + console.log(result); } const inscResult = await getInscripcion(idCuenta); @@ -72,7 +80,7 @@ export default async function Page(props: { Tiempo: ins.tiempo_disponible ? `${ins.tiempo_disponible} minutos` : "—", - Confirmó: ins.platica.data === 1 ? "sí" : "no", + Confirmó: ins.platica.data?.[0] === 1 ? "sí" : "no", })) : []; @@ -99,21 +107,8 @@ export default async function Page(props: { nombre={student.nombre} /> -
- - - -
- - -
-
+ + )} diff --git a/app/(private)/InformacionEquipo/InformacionEquipo.tsx b/app/(private)/InformacionEquipo/InformacionEquipo.tsx index 1e6882d..47496b2 100644 --- a/app/(private)/InformacionEquipo/InformacionEquipo.tsx +++ b/app/(private)/InformacionEquipo/InformacionEquipo.tsx @@ -1,4 +1,4 @@ -'use client' +"use client"; import Toggle from "@/app/Components/Global/Toggle/Toggle"; import Equipos from "@/app/Components/Equipos/equipos"; @@ -7,6 +7,7 @@ import SelectorSala from "@/app/Components/InformacionEquipos/SelectorSala"; import { useState } from "react"; import "./informacionequipo.css"; +import SelectorEquipo from "@/app/Components/InformacionEquipos/SelectorEquipo"; export default function InformacionEquipo({ defaultKey, @@ -30,7 +31,16 @@ export default function InformacionEquipo({ { key: "Equipo", label: "Programa por equipo", - content: , + content: ( + <> + { + setId(sala); + }} + /> + , + + ), }, { key: "Sala", diff --git a/app/(private)/Inscripcion/page.tsx b/app/(private)/Inscripcion/page.tsx index d6ebb3d..da76be5 100644 --- a/app/(private)/Inscripcion/page.tsx +++ b/app/(private)/Inscripcion/page.tsx @@ -73,7 +73,7 @@ export default async function Page(props: { Tiempo: ins.tiempo_disponible ? `${ins.tiempo_disponible} minutos` : "—", - Confirmó: ins.platica.data === 1 ? "sí" : "no", + Confirmó: ins.platica.data?.[0] === 1 ? "sí" : "no", })) : []; diff --git a/app/Components/CheckBoxEquipo.tsx b/app/Components/CheckBoxEquipo.tsx index 012b22c..af522e2 100644 --- a/app/Components/CheckBoxEquipo.tsx +++ b/app/Components/CheckBoxEquipo.tsx @@ -5,29 +5,36 @@ import SearchUser from "./Global/SearchUser/searchUser"; import SearchBoxEquipo from "./SearchEquipo"; export default function CheckBoxEquipo() { - const [Checkbox, setChecbox] = useState(null); + const [modo, setModo] = useState<"Equipo" | "Cuenta" | null>(null); + return ( <> -
-