Cambiar estado del boton al agregar curso a mi horario
This commit is contained in:
parent
2b6b6c4134
commit
0ab324d650
@ -4,6 +4,7 @@ import { Wallpaper } from "./Wallpaper";
|
|||||||
import { Show, createSignal } from "solid-js";
|
import { Show, createSignal } from "solid-js";
|
||||||
import { css } from "aphrodite";
|
import { css } from "aphrodite";
|
||||||
import { estilosGlobales } from "./Estilos";
|
import { estilosGlobales } from "./Estilos";
|
||||||
|
import { Creditos } from "./Creditos";
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
/// @ts-ignore
|
/// @ts-ignore
|
||||||
@ -34,6 +35,7 @@ function App() {
|
|||||||
</Show>
|
</Show>
|
||||||
<div style={{width: "100%", height: "0.5rem"}}/>
|
<div style={{width: "100%", height: "0.5rem"}}/>
|
||||||
<ContenedorHorarios/>
|
<ContenedorHorarios/>
|
||||||
|
<Creditos/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,6 @@ const [cursosUsuario, setCursosUsuarios] = createState<ListaCursosUsuario>({
|
|||||||
cursos: []
|
cursos: []
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const agregarCursoUsuario = (curso: Curso) => {
|
const agregarCursoUsuario = (curso: Curso) => {
|
||||||
if (cursosUsuario.cursos.find(x => x.nombre === curso.nombre)) {
|
if (cursosUsuario.cursos.find(x => x.nombre === curso.nombre)) {
|
||||||
return;
|
return;
|
||||||
@ -100,7 +98,9 @@ export function ContenedorHorarios() {
|
|||||||
<Horarios data={datos()!!}
|
<Horarios data={datos()!!}
|
||||||
estadoLayout={estadoLayout()}
|
estadoLayout={estadoLayout()}
|
||||||
setEstadoLayout={setEstadoLayout}
|
setEstadoLayout={setEstadoLayout}
|
||||||
fnAgregarCurso={agregarCursoUsuario}/>
|
fnAgregarCurso={agregarCursoUsuario}
|
||||||
|
listaCursosUsuario={cursosUsuario}
|
||||||
|
/>
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
</div>;
|
</div>;
|
||||||
|
@ -1,28 +1,69 @@
|
|||||||
import { AnioData, Curso } from "../types/DatosHorario";
|
import { AnioData, Curso, ListaCursosUsuario } from "../types/DatosHorario";
|
||||||
import { 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: {
|
contenedorCurso: {
|
||||||
display: "inline-block",
|
display: "inline-block"
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export function Cursos(props: { dataAnio: AnioData, fnAgregarCurso: (c: Curso) => void }) {
|
interface Props {
|
||||||
return <>
|
dataAnio: AnioData,
|
||||||
<For each={Object.entries(props.dataAnio)}>
|
fnAgregarCurso: (c: Curso) => void,
|
||||||
{([_, datosCurso]) => {
|
listaCursosUsuario: ListaCursosUsuario
|
||||||
return <span title={"Agregar " + datosCurso.abreviado + " a mi horario"} className={css(
|
}
|
||||||
|
|
||||||
|
export function Cursos(props: Props) {
|
||||||
|
|
||||||
|
const claseCursoNoAgregado = css(
|
||||||
e.contenedorCurso,
|
e.contenedorCurso,
|
||||||
estilosGlobales.contenedor,
|
estilosGlobales.contenedor,
|
||||||
estilosGlobales.contenedorCursor,
|
estilosGlobales.contenedorCursor,
|
||||||
estilosGlobales.contenedorCursorSoft
|
estilosGlobales.contenedorCursorSoft
|
||||||
)}
|
);
|
||||||
|
|
||||||
|
const claseCursoAgregado = css(
|
||||||
|
e.contenedorCurso,
|
||||||
|
estilosGlobales.contenedor,
|
||||||
|
estilosGlobales.contenedorCursor,
|
||||||
|
estilosGlobales.contenedorCursorSoft,
|
||||||
|
estilosGlobales.contenedorCursorActivo,
|
||||||
|
);
|
||||||
|
|
||||||
|
return <>
|
||||||
|
<For each={Object.entries(props.dataAnio)}>
|
||||||
|
{([_, datosCurso]) => {
|
||||||
|
|
||||||
|
const cursoAgregadoMemo = createMemo(
|
||||||
|
() => props.listaCursosUsuario.cursos.find(x => x.nombre === datosCurso.nombre) !== undefined,
|
||||||
|
undefined,
|
||||||
|
(x, y) => x === y
|
||||||
|
);
|
||||||
|
|
||||||
|
const tituloMemo = createMemo(() => cursoAgregadoMemo()
|
||||||
|
? `Remover ${datosCurso.abreviado} de mi horario`
|
||||||
|
: `Agregar ${datosCurso.abreviado} a mi horario`
|
||||||
|
);
|
||||||
|
|
||||||
|
const claseMemo = createMemo(() =>
|
||||||
|
cursoAgregadoMemo()
|
||||||
|
? claseCursoAgregado
|
||||||
|
: claseCursoNoAgregado
|
||||||
|
);
|
||||||
|
|
||||||
|
const iconoMemo = createMemo(() =>
|
||||||
|
cursoAgregadoMemo()
|
||||||
|
? "ph-minus"
|
||||||
|
: "ph-plus"
|
||||||
|
);
|
||||||
|
|
||||||
|
return <span title={tituloMemo()}
|
||||||
|
className={claseMemo()}
|
||||||
onClick={() => props.fnAgregarCurso(datosCurso)}
|
onClick={() => props.fnAgregarCurso(datosCurso)}
|
||||||
>
|
>
|
||||||
<i className="ph-plus"/>
|
<i className={iconoMemo()}/>
|
||||||
{datosCurso.abreviado} - {datosCurso.nombre}
|
{datosCurso.abreviado} - {datosCurso.nombre}
|
||||||
</span>
|
</span>
|
||||||
}}
|
}}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Curso, DatosHorario } from "../types/DatosHorario";
|
import { Curso, DatosHorario, ListaCursosUsuario } from "../types/DatosHorario";
|
||||||
import { For, createSignal, createMemo} from "solid-js";
|
import { For, createSignal, createMemo} from "solid-js";
|
||||||
import { css } from "aphrodite";
|
import { css } from "aphrodite";
|
||||||
import { estilosGlobales } from "../Estilos";
|
import { estilosGlobales } from "../Estilos";
|
||||||
@ -12,7 +12,8 @@ interface HorariosProps {
|
|||||||
data: DatosHorario,
|
data: DatosHorario,
|
||||||
estadoLayout: EstadoLayout,
|
estadoLayout: EstadoLayout,
|
||||||
setEstadoLayout: (v: EstadoLayout) => EstadoLayout,
|
setEstadoLayout: (v: EstadoLayout) => EstadoLayout,
|
||||||
fnAgregarCurso: (c: Curso) => void
|
fnAgregarCurso: (c: Curso) => void,
|
||||||
|
listaCursosUsuario: ListaCursosUsuario
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Horarios(props: HorariosProps) {
|
export function Horarios(props: HorariosProps) {
|
||||||
@ -70,7 +71,11 @@ export function Horarios(props: HorariosProps) {
|
|||||||
<Tabla data={dataTabla()} version={props.data.version} anio={anioActual()}/>
|
<Tabla data={dataTabla()} version={props.data.version} anio={anioActual()}/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Cursos dataAnio={dataTabla()} fnAgregarCurso={props.fnAgregarCurso}/>
|
<Cursos
|
||||||
|
dataAnio={dataTabla()}
|
||||||
|
fnAgregarCurso={props.fnAgregarCurso}
|
||||||
|
listaCursosUsuario={props.listaCursosUsuario}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Match>
|
</Match>
|
||||||
<Match when={props.estadoLayout === "MaxPersonal"}>
|
<Match when={props.estadoLayout === "MaxPersonal"}>
|
||||||
|
@ -58,6 +58,10 @@ export function MiHorario(props: MiHorarioProps) {
|
|||||||
const fnMinimizar = () => props.setEstadoLayout("Normal");
|
const fnMinimizar = () => props.setEstadoLayout("Normal");
|
||||||
const estadoActualLayout = () => props.estadoLayout;
|
const estadoActualLayout = () => props.estadoLayout;
|
||||||
|
|
||||||
|
/* TODO: En barra superior colocar todos los horarios. En barra inferior el horario
|
||||||
|
actual.
|
||||||
|
Al hacer click en un horario de la barra superior, llevarlo al inicio de la lista.
|
||||||
|
*/
|
||||||
return <div>
|
return <div>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Match when={props.estadoLayout === "Normal" || props.estadoLayout === "MaxPersonal"}>
|
<Match when={props.estadoLayout === "Normal" || props.estadoLayout === "MaxPersonal"}>
|
||||||
@ -69,12 +73,6 @@ export function MiHorario(props: MiHorarioProps) {
|
|||||||
)}>
|
)}>
|
||||||
Mi horario
|
Mi horario
|
||||||
</div>
|
</div>
|
||||||
<div className={css(
|
|
||||||
estilosGlobales.inlineBlock,
|
|
||||||
estilosGlobales.contenedor
|
|
||||||
)}>
|
|
||||||
Opcion 2
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
15
src/Creditos.tsx
Normal file
15
src/Creditos.tsx
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { StyleSheet, css } from "aphrodite";
|
||||||
|
|
||||||
|
const e = StyleSheet.create({
|
||||||
|
creditos: {
|
||||||
|
textAlign: "center",
|
||||||
|
paddingTop: "7.5rem",
|
||||||
|
paddingBottom: "1rem"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export function Creditos() {
|
||||||
|
return <div className={css(e.creditos)}>
|
||||||
|
Desarrollado por Fernando Araoz con TypeScript, JSX y Solid.js.
|
||||||
|
</div>
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user