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 { TopBar } from "./SistemasMovil/TopBar";
|
||||||
import { GrupoDia, Table, TableInput } from "./SistemasMovil/Table";
|
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 { createSignal } from "solid-js";
|
||||||
import { generarMapaCeldas } from "./SistemasMovil/mapaCeldas";
|
import { generarMapaCeldas } from "./SistemasMovil/mapaCeldas";
|
||||||
import { Button } from "../components/Button";
|
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 = [
|
const horas = [
|
||||||
700,
|
700,
|
||||||
750,
|
750,
|
||||||
@ -147,4 +150,18 @@ function infoDiaAOffsets(horaInicio: string, horaFinal: string): [number, number
|
|||||||
return [idxInicio, nroHoras];
|
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 { ContenedorHorarios } from "./Sistemas/ContenedorHorarios";
|
||||||
import { Creditos } from "../../Creditos";
|
import { Creditos } from "../../Creditos";
|
||||||
import { Separador } from "../../Separador";
|
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() {
|
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 (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<BarraSuperior />
|
<BarraSuperior />
|
||||||
<Separador />
|
<Separador />
|
||||||
<Separador />
|
<Separador />
|
||||||
<ContenedorHorarios />
|
<ContenedorHorarios datos={data()} />
|
||||||
<Creditos />
|
<Creditos />
|
||||||
</div>
|
</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,
|
Anios,
|
||||||
Cursos,
|
Cursos,
|
||||||
DatosHorario,
|
DatosHorario,
|
||||||
DatosHorarioRaw,
|
|
||||||
DatosGrupo,
|
DatosGrupo,
|
||||||
} from "../../../types/DatosHorario";
|
} from "../../../types/DatosHorario";
|
||||||
import { estilosGlobales } from "../../../Estilos";
|
|
||||||
import { batch, createEffect, createMemo, createSignal, Show } from "solid-js";
|
import { batch, createEffect, createMemo, createSignal, Show } from "solid-js";
|
||||||
import { useListaCursos } from "./ContenedorHorarios/useListaCursos";
|
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";
|
export type EstadoLayout = "MaxPersonal" | "Normal" | "MaxHorarios";
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@ -69,21 +19,19 @@ const {
|
|||||||
agregarCursoALista: agregarCursoUsuario,
|
agregarCursoALista: agregarCursoUsuario,
|
||||||
} = useListaCursos();
|
} = useListaCursos();
|
||||||
|
|
||||||
export function ContenedorHorarios() {
|
export function ContenedorHorarios(props: {datos: Cursos}) {
|
||||||
const [datosCargados, setDatosCargados] = createSignal(false);
|
const [datos, setDatos] = createSignal<Cursos>({});
|
||||||
const [datos, setDatos] = createSignal<DatosHorario | null>(null);
|
|
||||||
|
|
||||||
createEffect(async() => {
|
createEffect(async() => {
|
||||||
const datos = await datosPromise;
|
const datos = props.datos;
|
||||||
batch(() => {
|
batch(() => {
|
||||||
setDatos(datos);
|
setDatos(datos);
|
||||||
setDatosCargados(true);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MiHorario
|
<MiHorario
|
||||||
cursosUsuario={cursosUsuario}
|
cursos={datos()}
|
||||||
fnAgregarCurso={agregarCursoUsuario}
|
fnAgregarCurso={agregarCursoUsuario}
|
||||||
setCursosUsuarios={setCursosUsuarios}
|
setCursosUsuarios={setCursosUsuarios}
|
||||||
/>
|
/>
|
||||||
|
Loading…
Reference in New Issue
Block a user