Agregar indicador de la hora al resaltar un curso

master
Araozu 2021-03-04 09:33:11 -05:00
parent 611787fbbf
commit fa55f56338
2 changed files with 49 additions and 10 deletions

View File

@ -1,6 +1,6 @@
import { StyleSheet, css } from "aphrodite";
import { estilosGlobales } from "../../Estilos";
import { For } from "solid-js";
import { For, createSignal } from "solid-js";
const e = StyleSheet.create({
celdaComun: {
@ -31,7 +31,9 @@ const e = StyleSheet.create({
interface Props {
datos: { id: string, txt: string, esLab: boolean }[],
idHover: () => string,
setIdHover: (v: string) => string
setIdHover: (v: string) => string,
fnResaltarFila: () => void,
fnDesresaltarFila: () => void
}
export function CeldaFila(props: Props) {
@ -40,19 +42,30 @@ export function CeldaFila(props: Props) {
const idHover = props.idHover;
const setIdHover = props.setIdHover;
const fnOnMouseEnter = (id: string) => setIdHover(id);
const fnOnMouseLeave = () => setIdHover("");
return <div className={css(e.celdaComun, estilosGlobales.inlineBlock)}>
<For each={datos}>
{({id, txt, esLab}) => {
const [estabaResaltado, setEstabaResaltado] = createSignal(false);
const clases = () => {
const clases = [e.celdaCurso, esLab ? e.celdaCursoLab : e.celdaCursoTeoria];
if (id === idHover()) clases.push(e.celdaCursoActiva);
if (id === idHover()) {
props.fnResaltarFila();
clases.push(e.celdaCursoActiva);
setEstabaResaltado(true);
} else if (estabaResaltado()) {
props.fnDesresaltarFila();
setEstabaResaltado(false);
}
return css(...clases);
};
return <span className={clases()}
onMouseEnter={() => setIdHover(id)}
onMouseLeave={() => setIdHover("")}
onMouseEnter={() => fnOnMouseEnter(id)}
onMouseLeave={fnOnMouseLeave}
>
{txt}
</span>;

View File

@ -1,6 +1,6 @@
import { StyleSheet, css } from "aphrodite";
import { estilosGlobales } from "../../Estilos";
import { For } from "solid-js";
import { For, createSignal } from "solid-js";
import { dias } from "../../Store";
import { CeldaFila } from "./CeldaFila";
import { DataProcesada } from "../../types/DatosHorario";
@ -16,11 +16,12 @@ const e = StyleSheet.create({
fila: {
position: "relative",
zIndex: 2,
transition: "background-color 250ms",
transition: "background-color 250ms, border 100ms",
marginLeft: "4rem",
display: "flex",
alignItems: "center",
minHeight: "1.5rem",
borderLeft: "solid transparent",
":hover": {
// backgroundColor: "rgba(200, 200, 200, 0.25)"
}
@ -33,6 +34,9 @@ const e = StyleSheet.create({
backgroundColor: "rgba(200, 200, 200, 0.25)",
zIndex: 1
},
filaResaltada: {
borderLeft: "solid"
}
});
interface Props {
@ -43,15 +47,31 @@ interface Props {
}
export function FilaTabla(props: Props) {
const [filaResaltada, setFilaResaltada] = createSignal(false);
const hora = props.hora;
const data = props.data;
const claseFilaComun = css(e.fila);
const claseFilaResaltada = css(e.fila, e.filaResaltada);
const resaltarFila = () => {
if (!filaResaltada()) {
setFilaResaltada(true);
}
};
const desresaltarFila = () => {
if (filaResaltada()) {
setFilaResaltada(false);
}
}
return <div style={{position: "relative"}}>
<div className={css(e.celdaHora, estilosGlobales.inlineBlock)}>
{hora.substring(0, 5)}
</div>
<div className={css(e.fila)}>
<div className={filaResaltada() ? claseFilaResaltada : claseFilaComun}>
<For each={dias}>
{dia => {
const diaStr = dia.substring(0, 2);
@ -59,7 +79,13 @@ export function FilaTabla(props: Props) {
const datos = data()?.[horaStr]?.[diaStr] ?? [];
return <CeldaFila datos={datos} idHover={props.idHover} setIdHover={props.setIdHover}/>
return <CeldaFila
datos={datos}
idHover={props.idHover}
setIdHover={props.setIdHover}
fnResaltarFila={resaltarFila}
fnDesresaltarFila={desresaltarFila}
/>
}}
</For>
<div className={css(e.filaBorde)}/>