Implementar seleccionar grupos en la lista de horarios
This commit is contained in:
parent
d79f44575d
commit
e2503967cf
@ -1,5 +1,5 @@
|
|||||||
import { Cursos, CursoRaw, DatosGrupo, ListaCursosUsuario, Curso } from "../types/DatosHorario";
|
import { Cursos, CursoRaw, DatosGrupo, ListaCursosUsuario, Curso } from "../types/DatosHorario";
|
||||||
import { createEffect, createMemo, For } from "solid-js";
|
import { createEffect, createMemo, For, SetStateFunction } from "solid-js";
|
||||||
import { StyleSheet, css } from "aphrodite";
|
import { StyleSheet, css } from "aphrodite";
|
||||||
import { estilosGlobales } from "../Estilos";
|
import { estilosGlobales } from "../Estilos";
|
||||||
|
|
||||||
@ -35,28 +35,53 @@ interface Props {
|
|||||||
listaCursosUsuario: ListaCursosUsuario,
|
listaCursosUsuario: ListaCursosUsuario,
|
||||||
idHover: () => string,
|
idHover: () => string,
|
||||||
setIdHover: (v: string) => string,
|
setIdHover: (v: string) => string,
|
||||||
esCursoMiHorario: boolean
|
esCursoMiHorario: boolean,
|
||||||
|
setCursosUsuarios: SetStateFunction<ListaCursosUsuario>
|
||||||
}
|
}
|
||||||
|
|
||||||
function IndicadorGrupo(props: { nombre: string, esLab: boolean, idParcial: string, setIdHover: (v: string) => string }) {
|
type FnSetCursosUsuarios = SetStateFunction<ListaCursosUsuario>;
|
||||||
|
|
||||||
|
interface PropsIndicadorGrupo {
|
||||||
|
nombre: string,
|
||||||
|
esLab: boolean,
|
||||||
|
idParcial: string,
|
||||||
|
setIdHover: (v: string) => string,
|
||||||
|
onClick: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
function IndicadorGrupo(props: PropsIndicadorGrupo) {
|
||||||
const id = `${props.idParcial}_${props.esLab ? 'L' : 'T'}_${props.nombre}`;
|
const id = `${props.idParcial}_${props.esLab ? 'L' : 'T'}_${props.nombre}`;
|
||||||
return <span className={css(e.botonTexto, estilosGlobales.contenedorCursor, estilosGlobales.contenedorCursorSoft)}
|
return <span className={css(e.botonTexto, estilosGlobales.contenedorCursor, estilosGlobales.contenedorCursorSoft)}
|
||||||
style={props.esLab ? {"font-style": "italic"} : {"font-weight": "bold"}}
|
style={props.esLab ? {"font-style": "italic"} : {"font-weight": "bold"}}
|
||||||
onMouseEnter={() => props.setIdHover(id)}
|
onMouseEnter={() => props.setIdHover(id)}
|
||||||
onMouseLeave={() => props.setIdHover("")}
|
onMouseLeave={() => props.setIdHover("")}
|
||||||
|
onClick={props.onClick}
|
||||||
>
|
>
|
||||||
{props.esLab ? "L" : ""}{props.nombre}
|
{props.esLab ? "L" : ""}{props.nombre}
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
|
|
||||||
const agruparProfesores = (datos: { [k: string]: DatosGrupo }) => {
|
const agruparProfesores = (datos: { [k: string]: DatosGrupo }, indiceCurso: number, esLab: boolean, setCursosUsuarios: FnSetCursosUsuarios) => {
|
||||||
const profesores: { [k: string]: string[] } = {};
|
const profesores: { [k: string]: [string, () => void][] } = {};
|
||||||
for (const [grupo, datosGrupo] of Object.entries(datos)) {
|
for (const [grupo, datosGrupo] of Object.entries(datos)) {
|
||||||
const nombreProfesor = datosGrupo.Docente;
|
const nombreProfesor = datosGrupo.Docente;
|
||||||
if (!profesores[nombreProfesor]) {
|
if (!profesores[nombreProfesor]) {
|
||||||
profesores[nombreProfesor] = [];
|
profesores[nombreProfesor] = [];
|
||||||
}
|
}
|
||||||
profesores[nombreProfesor].push(grupo);
|
profesores[nombreProfesor].push([
|
||||||
|
grupo,
|
||||||
|
() => {
|
||||||
|
setCursosUsuarios(
|
||||||
|
"cursos",
|
||||||
|
indiceCurso,
|
||||||
|
esLab ? "Laboratorio" : "Teoria",
|
||||||
|
/// @ts-ignore
|
||||||
|
grupo,
|
||||||
|
"seleccionado",
|
||||||
|
x => !x
|
||||||
|
);
|
||||||
|
}
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
return profesores;
|
return profesores;
|
||||||
};
|
};
|
||||||
@ -79,7 +104,7 @@ export function CursosElem(props: Props) {
|
|||||||
|
|
||||||
return <>
|
return <>
|
||||||
<For each={Object.entries(props.dataAnio)}>
|
<For each={Object.entries(props.dataAnio)}>
|
||||||
{([_, datosCurso]) => {
|
{([indiceCurso, datosCurso]) => {
|
||||||
|
|
||||||
const idCurso = `${anio()}_${datosCurso.abreviado}`;
|
const idCurso = `${anio()}_${datosCurso.abreviado}`;
|
||||||
|
|
||||||
@ -105,8 +130,18 @@ export function CursosElem(props: Props) {
|
|||||||
: claseCursoNoAgregado
|
: claseCursoNoAgregado
|
||||||
});
|
});
|
||||||
|
|
||||||
const profesoresTeoria = createMemo(() => agruparProfesores(datosCurso.Teoria));
|
const profesoresTeoria = createMemo(() => agruparProfesores(
|
||||||
const profesoresLab = createMemo(() => agruparProfesores(datosCurso.Laboratorio ?? {}));
|
datosCurso.Teoria,
|
||||||
|
parseInt(indiceCurso),
|
||||||
|
false,
|
||||||
|
props.setCursosUsuarios
|
||||||
|
));
|
||||||
|
const profesoresLab = createMemo(() => agruparProfesores(
|
||||||
|
datosCurso.Laboratorio ?? {},
|
||||||
|
parseInt(indiceCurso),
|
||||||
|
true,
|
||||||
|
props.setCursosUsuarios
|
||||||
|
));
|
||||||
|
|
||||||
return <div className={claseMemo()}>
|
return <div className={claseMemo()}>
|
||||||
<div
|
<div
|
||||||
@ -126,11 +161,12 @@ export function CursosElem(props: Props) {
|
|||||||
{profesor}
|
{profesor}
|
||||||
</span>
|
</span>
|
||||||
<For each={grupos}>
|
<For each={grupos}>
|
||||||
{x =>
|
{([x, fnOnClick]) =>
|
||||||
<IndicadorGrupo nombre={x}
|
<IndicadorGrupo nombre={x}
|
||||||
esLab={false}
|
esLab={false}
|
||||||
idParcial={idCurso}
|
idParcial={idCurso}
|
||||||
setIdHover={props.setIdHover}
|
setIdHover={props.setIdHover}
|
||||||
|
onClick={fnOnClick}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
</For>
|
</For>
|
||||||
@ -146,11 +182,12 @@ export function CursosElem(props: Props) {
|
|||||||
{profesor}
|
{profesor}
|
||||||
</span>
|
</span>
|
||||||
<For each={grupos}>
|
<For each={grupos}>
|
||||||
{x =>
|
{([x, fnOnClick]) =>
|
||||||
<IndicadorGrupo nombre={x}
|
<IndicadorGrupo nombre={x}
|
||||||
esLab={true}
|
esLab={true}
|
||||||
idParcial={idCurso}
|
idParcial={idCurso}
|
||||||
setIdHover={props.setIdHover}
|
setIdHover={props.setIdHover}
|
||||||
|
onClick={fnOnClick}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
</For>
|
</For>
|
||||||
|
@ -108,6 +108,7 @@ export function Horarios(props: HorariosProps) {
|
|||||||
idHover={idHover}
|
idHover={idHover}
|
||||||
setIdHover={setIdHover}
|
setIdHover={setIdHover}
|
||||||
esCursoMiHorario={false}
|
esCursoMiHorario={false}
|
||||||
|
setCursosUsuarios={setListaCursos}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Match>
|
</Match>
|
||||||
|
@ -119,6 +119,7 @@ export function MiHorario(props: MiHorarioProps) {
|
|||||||
idHover={idHover}
|
idHover={idHover}
|
||||||
setIdHover={setIdHover}
|
setIdHover={setIdHover}
|
||||||
esCursoMiHorario={true}
|
esCursoMiHorario={true}
|
||||||
|
setCursosUsuarios={props.setCursosUsuarios}
|
||||||
/>
|
/>
|
||||||
</Match>
|
</Match>
|
||||||
<Match when={props.estadoLayout === "MaxHorarios"}>
|
<Match when={props.estadoLayout === "MaxHorarios"}>
|
||||||
|
Loading…
Reference in New Issue
Block a user