Ver matricula realizada
This commit is contained in:
parent
1ffcfa608d
commit
314a57d01a
@ -74,6 +74,10 @@ type GetHorariosFn = (_: InputData) => Promise<ListaCursosCompleto>
|
|||||||
|
|
||||||
export const getHorarios: GetHorariosFn = async(data) => {
|
export const getHorarios: GetHorariosFn = async(data) => {
|
||||||
const response = await fetch(`${SERVER_PATH}/horarios`, {
|
const response = await fetch(`${SERVER_PATH}/horarios`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
});
|
});
|
||||||
return await response.json();
|
return await response.json();
|
||||||
|
36
src/API/VerMatricula.ts
Normal file
36
src/API/VerMatricula.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import {SERVER_PATH} from "../Store";
|
||||||
|
|
||||||
|
type Input = {
|
||||||
|
matriculas: Array<number>
|
||||||
|
}
|
||||||
|
export type InfoMatricula = {
|
||||||
|
nombre_curso: string,
|
||||||
|
grupo: string,
|
||||||
|
docente: string,
|
||||||
|
}
|
||||||
|
type VerMatriculaFn = (_: Input) => Promise<Array<InfoMatricula>>;
|
||||||
|
|
||||||
|
export const getMatricula: VerMatriculaFn = async(input) => {
|
||||||
|
const response = await fetch(`${SERVER_PATH}/recuperacion`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(input),
|
||||||
|
});
|
||||||
|
return await response.json();
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getMatriculaMock: VerMatriculaFn = async(_) => [
|
||||||
|
{
|
||||||
|
nombre_curso: "Plataformas Emergentes",
|
||||||
|
grupo: "LA",
|
||||||
|
docente: "Diego Iquira",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nombre_curso: "Gestión de Proyectos de Software",
|
||||||
|
grupo: "LB",
|
||||||
|
docente: "Luis Rocha",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
@ -6,6 +6,7 @@ import { Switch, Match, Show } from "solid-js";
|
|||||||
import { Wallpaper } from "./Wallpaper";
|
import { Wallpaper } from "./Wallpaper";
|
||||||
import { SistemasMovil } from "./Views/SistemasMovil";
|
import { SistemasMovil } from "./Views/SistemasMovil";
|
||||||
import { SeleccionCursos } from "./Views/SeleccionCursos";
|
import { SeleccionCursos } from "./Views/SeleccionCursos";
|
||||||
|
import { VerMatricula } from "./Views/VerMatricula";
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const route = useRouter();
|
const route = useRouter();
|
||||||
@ -29,6 +30,9 @@ function App() {
|
|||||||
<Match when={route() === "/sistemas-movil/"}>
|
<Match when={route() === "/sistemas-movil/"}>
|
||||||
<SistemasMovil />
|
<SistemasMovil />
|
||||||
</Match>
|
</Match>
|
||||||
|
<Match when={route() === "/ver-matricula/"}>
|
||||||
|
<VerMatricula />
|
||||||
|
</Match>
|
||||||
<Match when={route() === "/sistemas/"}>
|
<Match when={route() === "/sistemas/"}>
|
||||||
<Main />
|
<Main />
|
||||||
</Match>
|
</Match>
|
||||||
|
@ -161,6 +161,7 @@ const procesarAnio = (data: Cursos, anio: string, version: number, setCursosUsua
|
|||||||
"cursos",
|
"cursos",
|
||||||
Number(indiceCurso),
|
Number(indiceCurso),
|
||||||
"Laboratorio",
|
"Laboratorio",
|
||||||
|
/// @ts-ignore
|
||||||
produce<{ [p: string]: DatosGrupo }>((x) => {
|
produce<{ [p: string]: DatosGrupo }>((x) => {
|
||||||
const grupoActualSeleccionado = x[grupoStr].seleccionado;
|
const grupoActualSeleccionado = x[grupoStr].seleccionado;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css, StyleSheet } from "aphrodite/no-important";
|
import { css, StyleSheet } from "aphrodite/no-important";
|
||||||
import { createSignal } from "solid-js";
|
import { batch, createSignal } from "solid-js";
|
||||||
import { SERVER_PATH } from "../Store";
|
import { SERVER_PATH, setGruposSeleccionados } from "../Store";
|
||||||
|
|
||||||
const e = StyleSheet.create({
|
const e = StyleSheet.create({
|
||||||
contenedorGlobal: {
|
contenedorGlobal: {
|
||||||
@ -91,7 +91,11 @@ export function MobileIndex() {
|
|||||||
} else if (response.matriculas.length === 0) {
|
} else if (response.matriculas.length === 0) {
|
||||||
window.location.href = "#/seleccion-cursos/";
|
window.location.href = "#/seleccion-cursos/";
|
||||||
} else if (response.matriculas.length > 0) {
|
} else if (response.matriculas.length > 0) {
|
||||||
alert("TODO");
|
batch(() => {
|
||||||
|
for (const id_lab of response.matriculas) {
|
||||||
|
setGruposSeleccionados(id_lab, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@ import { GrupoDia, Table, TableInput } from "./SistemasMovil/Table";
|
|||||||
import { getHorariosMock, ListaCursosCompleto } from "../API/CargaHorarios";
|
import { getHorariosMock, 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 { gruposSeleccionados, SERVER_PATH } from "../Store";
|
||||||
|
|
||||||
export function SistemasMovil() {
|
export function SistemasMovil() {
|
||||||
const [rawData, setRawData] = createSignal<ListaCursosCompleto>([]);
|
const [rawData, setRawData] = createSignal<ListaCursosCompleto>([]);
|
||||||
@ -16,10 +18,36 @@ export function SistemasMovil() {
|
|||||||
setRawData(data);
|
setRawData(data);
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
const matricular = async() => {
|
||||||
|
const laboratoriosAMatricular = Object.entries(gruposSeleccionados)
|
||||||
|
.filter((x) => x[1] === true)
|
||||||
|
.map((x) => x[0]);
|
||||||
|
|
||||||
|
const response = await fetch(`${SERVER_PATH}/matricula`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
correo_usuario: localStorage.getItem("correo"),
|
||||||
|
horarios: laboratoriosAMatricular,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
if (response.ok) {
|
||||||
|
window.location.href = "#/ver-matricula/";
|
||||||
|
} else {
|
||||||
|
alert("No se pudo procesar la matricula");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<TopBar tituloBarra="Mi Horario" />
|
<TopBar tituloBarra="Mi Horario" />
|
||||||
<Table datos={transformar(rawData())} />
|
<Table datos={transformar(rawData())} />
|
||||||
|
<hr />
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<Button texto={"Matricular"} onClick={matricular} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
34
src/Views/VerMatricula.tsx
Normal file
34
src/Views/VerMatricula.tsx
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import { TopBar } from "./SistemasMovil/TopBar";
|
||||||
|
import { Card } from "../components/Card";
|
||||||
|
import { createSignal, For } from "solid-js";
|
||||||
|
import { getMatriculaMock, InfoMatricula } from "../API/VerMatricula";
|
||||||
|
import { gruposSeleccionados } from "../Store";
|
||||||
|
|
||||||
|
export function VerMatricula() {
|
||||||
|
const [infoMatriculas, setInfoMatriculas] = createSignal<Array<InfoMatricula>>([]);
|
||||||
|
|
||||||
|
(async() => {
|
||||||
|
const laboratorios = Object.entries(gruposSeleccionados)
|
||||||
|
.filter((x) => x[1] === true)
|
||||||
|
.map((x) => parseInt(x[0], 10));
|
||||||
|
setInfoMatriculas(await getMatriculaMock({matriculas: laboratorios}));
|
||||||
|
})();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<TopBar tituloBarra={"Ver Matricula"} />
|
||||||
|
<Card>
|
||||||
|
<h2>Tu matrícula</h2>
|
||||||
|
<For each={infoMatriculas()}>
|
||||||
|
{(matricula) => (
|
||||||
|
<div>
|
||||||
|
<h3>{matricula.nombre_curso}</h3>
|
||||||
|
<p>Grupo: {matricula.grupo}</p>
|
||||||
|
<p>Docente: {matricula.docente}</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</For>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
import { StyleSheet, css } from "aphrodite/no-important";
|
import { StyleSheet, css } from "aphrodite/no-important";
|
||||||
|
|
||||||
export function Button(props: {texto: string}) {
|
export function Button(props: {texto: string, onClick?: () => void}) {
|
||||||
const s = StyleSheet.create({
|
const s = StyleSheet.create({
|
||||||
boton: {
|
boton: {
|
||||||
backgroundColor: "var(--color-primario)",
|
backgroundColor: "var(--color-primario)",
|
||||||
@ -13,7 +13,7 @@ export function Button(props: {texto: string}) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
<button type="submit" className={css(s.boton)}>
|
<button type="submit" className={css(s.boton)} onClick={() => props.onClick?.()}>
|
||||||
{props.texto}
|
{props.texto}
|
||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user