From 5c2ae95031866c43050cd961c8da453001c314b3 Mon Sep 17 00:00:00 2001 From: Araozu Date: Fri, 14 Oct 2022 18:27:46 -0500 Subject: [PATCH] Convertir esquema de back a esquema de front/pc --- src/Views/SistemasMovil.tsx | 19 ++++++- src/Views/pc/Sistemas.tsx | 43 +++++++++++++- src/Views/pc/Sistemas/ContenedorHorarios.tsx | 60 ++------------------ 3 files changed, 64 insertions(+), 58 deletions(-) diff --git a/src/Views/SistemasMovil.tsx b/src/Views/SistemasMovil.tsx index db1192b..28fad90 100644 --- a/src/Views/SistemasMovil.tsx +++ b/src/Views/SistemasMovil.tsx @@ -1,6 +1,6 @@ import { TopBar } from "./SistemasMovil/TopBar"; import { GrupoDia, Table, TableInput } from "./SistemasMovil/Table"; -import { getHorariosMock, ListaCursosCompleto } from "../API/CargaHorarios"; +import { getHorariosMock, Horario, ListaCursosCompleto } from "../API/CargaHorarios"; import { createSignal } from "solid-js"; import { generarMapaCeldas } from "./SistemasMovil/mapaCeldas"; import { Button } from "../components/Button"; @@ -104,6 +104,9 @@ function transformar(input: ListaCursosCompleto): TableInput { }; } +const horasStr = ["0700","0750","0850","0940","1040","1130","1220","1310","1400", + "1450","1550","1640","1740","1830","1920","2010","2100","2150"]; + const horas = [ 700, 750, @@ -147,4 +150,18 @@ function infoDiaAOffsets(horaInicio: string, horaFinal: string): [number, number return [idxInicio, nroHoras]; } +// inicio: 1740 fin 2010 -> 1740,1830,1920 +export function infoDiaAListaHoras(horas: Array): Array { + const horasFin: Array = []; + for (const grupoHoras of horas) { + const [idx, cantidad] = infoDiaAOffsets(grupoHoras.hora_inicio, grupoHoras.hora_fin); + const strDia = grupoHoras.dia.substring(0, 2); + + for (let i = 0; i < cantidad; i += 1) { + horasFin.push(`${strDia}${horasStr[idx + i]}`); + } + } + + return horasFin; +} diff --git a/src/Views/pc/Sistemas.tsx b/src/Views/pc/Sistemas.tsx index 5afca79..0aaa6d8 100644 --- a/src/Views/pc/Sistemas.tsx +++ b/src/Views/pc/Sistemas.tsx @@ -2,15 +2,56 @@ import { BarraSuperior } from "../../BarraSuperior"; import { ContenedorHorarios } from "./Sistemas/ContenedorHorarios"; import { Creditos } from "../../Creditos"; import { Separador } from "../../Separador"; +import { createSignal } from "solid-js"; +import { getHorariosMock, ListaCursosCompleto } from "../../API/CargaHorarios"; +import { Cursos, DatosGrupo } from "../../types/DatosHorario"; +import { infoDiaAListaHoras } from "../SistemasMovil"; export function Sistemas() { + const [data, setData] = createSignal({}); + + // Obtener cursos seleccionados del servidor + (async() => { + const cursos: Array = JSON.parse(localStorage.getItem("cursos-seleccionados") ?? "[]"); + const data = await getHorariosMock({ + cursos: cursos.map((x) => parseInt(x, 10)), + }); + setData(listaCursosADatos(data)); + })(); + return (
- +
); } + +function listaCursosADatos(cursosEntrada: ListaCursosCompleto): Cursos { + const result: Cursos = {}; + + for (const curso of cursosEntrada) { + const gruposLab: {[grupo: string]: DatosGrupo} = {}; + for (const lab of curso.laboratorios) { + gruposLab[lab.grupo] = { + Docente: lab.docente, + Horas: infoDiaAListaHoras(lab.horario), + seleccionado: false, + }; + } + + result[curso.nombre_curso] = { + nombre: curso.nombre_curso, + abreviado: curso.abreviado, + oculto: false, + Teoria: {}, + Laboratorio: gruposLab, + }; + } + + return result; +} + diff --git a/src/Views/pc/Sistemas/ContenedorHorarios.tsx b/src/Views/pc/Sistemas/ContenedorHorarios.tsx index e771154..e6ac248 100755 --- a/src/Views/pc/Sistemas/ContenedorHorarios.tsx +++ b/src/Views/pc/Sistemas/ContenedorHorarios.tsx @@ -6,61 +6,11 @@ import { Anios, Cursos, DatosHorario, - DatosHorarioRaw, DatosGrupo, } from "../../../types/DatosHorario"; -import { estilosGlobales } from "../../../Estilos"; import { batch, createEffect, createMemo, createSignal, Show } from "solid-js"; import { useListaCursos } from "./ContenedorHorarios/useListaCursos"; -const datosPromise = (async() => { - const file = await fetch("/horarios/2022_2_fps_ingenieriadesistemas.yaml"); - const text = await file.text(); - const datosRaw = YAML.parse(text) as DatosHorarioRaw; - console.log(datosRaw); - - // Agregar los campos faltantes a DatosHorarioRaw para que sea DatosHorario - const datos: DatosHorario = { - ...datosRaw, - años: {}, - }; - - const anios: Anios = {}; - for (const [nombreAnio, anio] of Object.entries(datosRaw.años)) { - const anioData: Cursos = {}; - for (const [nombreCurso, curso] of Object.entries(anio)) { - - const gruposTeoria: { [k: string]: DatosGrupo } = {}; - for (const [key, data] of Object.entries(curso.Teoria)) { - gruposTeoria[key] = Object.assign({seleccionado: false}, data); - } - - const gruposLab: { [k: string]: DatosGrupo } = {}; - for (const [key, data] of Object.entries(curso.Laboratorio ?? {})) { - gruposLab[key] = Object.assign({seleccionado: false}, data); - } - - anioData[nombreCurso] = { - ...curso, - oculto: false, - Teoria: gruposTeoria, - Laboratorio: gruposLab, - }; - } - - anios[nombreAnio] = anioData; - } - - datos.años = anios; - return datos; -})(); - -const ElemCargando = () => ( -
- Recuperando horarios... -
-); - export type EstadoLayout = "MaxPersonal" | "Normal" | "MaxHorarios"; const { @@ -69,21 +19,19 @@ const { agregarCursoALista: agregarCursoUsuario, } = useListaCursos(); -export function ContenedorHorarios() { - const [datosCargados, setDatosCargados] = createSignal(false); - const [datos, setDatos] = createSignal(null); +export function ContenedorHorarios(props: {datos: Cursos}) { + const [datos, setDatos] = createSignal({}); createEffect(async() => { - const datos = await datosPromise; + const datos = props.datos; batch(() => { setDatos(datos); - setDatosCargados(true); }); }); return (