Agregar info de los profesores de los grupos
This commit is contained in:
parent
0c44a0c565
commit
24af18473f
@ -1,11 +1,23 @@
|
|||||||
import { AnioData, Curso, ListaCursosUsuario } from "../types/DatosHorario";
|
import { AnioData, Curso, DatosVariante, ListaCursosUsuario } from "../types/DatosHorario";
|
||||||
import { createEffect, createMemo, For } from "solid-js";
|
import { createEffect, createMemo, For } from "solid-js";
|
||||||
import { StyleSheet, css } from "aphrodite";
|
import { StyleSheet, css } from "aphrodite";
|
||||||
import { estilosGlobales } from "../Estilos";
|
import { estilosGlobales } from "../Estilos";
|
||||||
|
|
||||||
const e = StyleSheet.create({
|
const e = StyleSheet.create({
|
||||||
contenedorCurso: {
|
inline: {
|
||||||
display: "inline-block"
|
display: "inline-block"
|
||||||
|
},
|
||||||
|
lineaTexto: {
|
||||||
|
marginBottom: "0.5rem"
|
||||||
|
},
|
||||||
|
tablaGrupos: {
|
||||||
|
whiteSpace: "pre",
|
||||||
|
borderCollapse: "collapse",
|
||||||
|
borderSpacing: 0
|
||||||
|
},
|
||||||
|
contenedorCurso: {
|
||||||
|
display: "inline-block",
|
||||||
|
verticalAlign: "top"
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -15,20 +27,32 @@ interface Props {
|
|||||||
listaCursosUsuario: ListaCursosUsuario
|
listaCursosUsuario: ListaCursosUsuario
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const agruparProfesores = (datos: { [k: string]: DatosVariante }) => {
|
||||||
|
const profesores: { [k: string]: string[] } = {};
|
||||||
|
for (const [grupo, datosGrupo] of Object.entries(datos)) {
|
||||||
|
const nombreProfesor = datosGrupo.Docente;
|
||||||
|
if (!profesores[nombreProfesor]) {
|
||||||
|
profesores[nombreProfesor] = [];
|
||||||
|
}
|
||||||
|
profesores[nombreProfesor].push(grupo);
|
||||||
|
}
|
||||||
|
return profesores;
|
||||||
|
};
|
||||||
|
|
||||||
export function Cursos(props: Props) {
|
export function Cursos(props: Props) {
|
||||||
|
|
||||||
const claseCursoNoAgregado = css(
|
const claseCursoNoAgregado = css(
|
||||||
e.contenedorCurso,
|
e.contenedorCurso,
|
||||||
estilosGlobales.contenedor,
|
estilosGlobales.contenedor,
|
||||||
estilosGlobales.contenedorCursor,
|
// estilosGlobales.contenedorCursor,
|
||||||
estilosGlobales.contenedorCursorSoft
|
// estilosGlobales.contenedorCursorSoft
|
||||||
);
|
);
|
||||||
|
|
||||||
const claseCursoAgregado = css(
|
const claseCursoAgregado = css(
|
||||||
e.contenedorCurso,
|
e.contenedorCurso,
|
||||||
estilosGlobales.contenedor,
|
estilosGlobales.contenedor,
|
||||||
estilosGlobales.contenedorCursor,
|
// estilosGlobales.contenedorCursor,
|
||||||
estilosGlobales.contenedorCursorSoft,
|
// estilosGlobales.contenedorCursorSoft,
|
||||||
estilosGlobales.contenedorCursorActivo,
|
estilosGlobales.contenedorCursorActivo,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -45,8 +69,8 @@ export function Cursos(props: Props) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const tituloMemo = createMemo(() => cursoAgregadoMemo()
|
const tituloMemo = createMemo(() => cursoAgregadoMemo()
|
||||||
? `Remover ${datosCurso.abreviado} de mi horario`
|
? `Remover de mi horario`
|
||||||
: `Agregar ${datosCurso.abreviado} a mi horario`
|
: `Agregar a mi horario`
|
||||||
);
|
);
|
||||||
|
|
||||||
const claseMemo = createMemo(() =>
|
const claseMemo = createMemo(() =>
|
||||||
@ -55,19 +79,51 @@ export function Cursos(props: Props) {
|
|||||||
: claseCursoNoAgregado
|
: claseCursoNoAgregado
|
||||||
);
|
);
|
||||||
|
|
||||||
const iconoMemo = createMemo(() =>
|
const profesoresTeoria = createMemo(() => agruparProfesores(datosCurso.Teoria));
|
||||||
cursoAgregadoMemo()
|
const profesoresLab = createMemo(() => agruparProfesores(datosCurso.Laboratorio ?? {}));
|
||||||
? "ph-minus"
|
|
||||||
: "ph-plus"
|
|
||||||
);
|
|
||||||
|
|
||||||
return <span title={tituloMemo()}
|
return <div className={claseMemo()}>
|
||||||
className={claseMemo()}
|
<div className={css(e.inline, e.lineaTexto)}>
|
||||||
|
{datosCurso.abreviado} - {datosCurso.nombre}
|
||||||
|
</div>
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<For each={Object.entries(profesoresTeoria())}>
|
||||||
|
{([profesor, grupos]) => {
|
||||||
|
return <td style={{"padding-bottom": "0.5rem", "padding-right": "0.75rem"}}>
|
||||||
|
<span>
|
||||||
|
{profesor}
|
||||||
|
</span>
|
||||||
|
<span style={{"font-weight": "bold"}}>
|
||||||
|
{grupos.reduce((x, y) => x + " " + y)}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
}}
|
||||||
|
</For>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<For each={Object.entries(profesoresLab())}>
|
||||||
|
{([profesor, grupos]) => {
|
||||||
|
return <td style={{"padding-bottom": "0.5rem", "padding-right": "0.75rem"}}>
|
||||||
|
<span>
|
||||||
|
{profesor}
|
||||||
|
</span>
|
||||||
|
<span style={{"font-style": "italic"}}>
|
||||||
|
{grupos.map(x => `L${x}`).reduce((x, y) => x + " " + y)}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
}}
|
||||||
|
</For>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<span className={css(estilosGlobales.contenedorCursor, estilosGlobales.contenedorCursorSoft)}
|
||||||
onClick={() => props.fnAgregarCurso(datosCurso)}
|
onClick={() => props.fnAgregarCurso(datosCurso)}
|
||||||
>
|
>
|
||||||
<i className={iconoMemo()}/>
|
{tituloMemo}
|
||||||
{datosCurso.abreviado} - {datosCurso.nombre}
|
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
}}
|
}}
|
||||||
</For>
|
</For>
|
||||||
</>;
|
</>;
|
||||||
|
Loading…
Reference in New Issue
Block a user