Convertir esquema de back a esquema de front/pc
This commit is contained in:
parent
c7c705460a
commit
5c2ae95031
@ -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<Horario>): Array<string> {
|
||||
const horasFin: Array<string> = [];
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -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<Cursos>({});
|
||||
|
||||
// Obtener cursos seleccionados del servidor
|
||||
(async() => {
|
||||
const cursos: Array<string> = JSON.parse(localStorage.getItem("cursos-seleccionados") ?? "[]");
|
||||
const data = await getHorariosMock({
|
||||
cursos: cursos.map((x) => parseInt(x, 10)),
|
||||
});
|
||||
setData(listaCursosADatos(data));
|
||||
})();
|
||||
|
||||
return (
|
||||
<div>
|
||||
<BarraSuperior />
|
||||
<Separador />
|
||||
<Separador />
|
||||
<ContenedorHorarios />
|
||||
<ContenedorHorarios datos={data()} />
|
||||
<Creditos />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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 = () => (
|
||||
<div className={css(estilosGlobales.contenedor, estilosGlobales.inlineBlock)}>
|
||||
Recuperando horarios...
|
||||
</div>
|
||||
);
|
||||
|
||||
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<DatosHorario | null>(null);
|
||||
export function ContenedorHorarios(props: {datos: Cursos}) {
|
||||
const [datos, setDatos] = createSignal<Cursos>({});
|
||||
|
||||
createEffect(async() => {
|
||||
const datos = await datosPromise;
|
||||
const datos = props.datos;
|
||||
batch(() => {
|
||||
setDatos(datos);
|
||||
setDatosCargados(true);
|
||||
});
|
||||
});
|
||||
|
||||
return (
|
||||
<MiHorario
|
||||
cursosUsuario={cursosUsuario}
|
||||
cursos={datos()}
|
||||
fnAgregarCurso={agregarCursoUsuario}
|
||||
setCursosUsuarios={setCursosUsuarios}
|
||||
/>
|
||||
|
Loading…
Reference in New Issue
Block a user