diff --git a/public/horarios/2021_2_fps_ingenieriadesistemas.yaml b/public/horarios/2021_2_fps_ingenieriadesistemas.yaml index e50b962..14e02e8 100755 --- a/public/horarios/2021_2_fps_ingenieriadesistemas.yaml +++ b/public/horarios/2021_2_fps_ingenieriadesistemas.yaml @@ -124,7 +124,7 @@ años: - Vi1630 - Vi1920 - Vi2010 - + Auditoria: nombre: Auditoría de Sistemas abreviado: AS @@ -133,7 +133,7 @@ años: Docente: Edward Zarate Horas: - Ju0940 - - Ju1030 + - Ju1040 - Ju1130 - Vi0850 - Vi0940 @@ -235,4 +235,3 @@ años: - Mi1920 - Mi2010 5to año: {} - \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 97e3651..130b466 100755 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,10 +1,27 @@ -import {Main} from "./Views/Main" -import {Index} from "./Views/Index" +import { Main } from "./Views/Main" +import { Index } from "./Views/Index" +import { Editor } from "./Views/Editor" +import { useRouter } from "./Router" +import { Switch, Match } from "solid-js" +import { Wallpaper } from "./Wallpaper" function App() { + const route = useRouter() + return (
-
+ + 404!

}> + + + + + + + +
+ +
) } diff --git a/src/BarraSuperior.tsx b/src/BarraSuperior.tsx index 12784a6..5b7c071 100755 --- a/src/BarraSuperior.tsx +++ b/src/BarraSuperior.tsx @@ -2,6 +2,7 @@ import { estilosGlobales } from "./Estilos" import { StyleSheet, css } from "aphrodite" import { numWallpaper, setNumWallpaper } from "./Store" import { TamanoLetra } from "./BarraSuperior/TamanoLetra" +import { RouterLink } from "./Router" const ultimoIndiceWallpaper = 2 @@ -82,15 +83,16 @@ const estilos = StyleSheet.create({ export function BarraSuperior() { return (
- Horarios Unsa - - + Ingeniería de Sistemas - 2021-A + 2021-B
) } diff --git a/src/ContenedorHorarios/CursosElem.tsx b/src/ContenedorHorarios/CursosElem.tsx index ca4ff20..d52fb4d 100755 --- a/src/ContenedorHorarios/CursosElem.tsx +++ b/src/ContenedorHorarios/CursosElem.tsx @@ -110,10 +110,10 @@ const agruparProfesores = ( function CursoE( indiceCurso: string, - datosCurso: Curso, - anio: () => string, - claseCursoAgregado: string, - props: Props + datosCurso: Curso, + anio: () => string, + claseCursoAgregado: string, + props: Props, ) { const idCurso = `${props.version}_${anio()}_${datosCurso.abreviado}` diff --git a/src/ContenedorHorarios/MiHorario.tsx b/src/ContenedorHorarios/MiHorario.tsx index 0c4d6df..9e97163 100755 --- a/src/ContenedorHorarios/MiHorario.tsx +++ b/src/ContenedorHorarios/MiHorario.tsx @@ -137,7 +137,7 @@ export function MiHorario(props: MiHorarioProps) { estadoLayoutMax={"MaxPersonal"} /> */} -
+
diff --git a/src/ContenedorHorarios/TablaObserver.ts b/src/ContenedorHorarios/TablaObserver.ts index 32bb175..d12a576 100644 --- a/src/ContenedorHorarios/TablaObserver.ts +++ b/src/ContenedorHorarios/TablaObserver.ts @@ -154,6 +154,7 @@ export class TablaObserver { } default: { let _: never + // eslint-disable-next-line prefer-const _ = seleccionado return _ } diff --git a/src/Estilos.ts b/src/Estilos.ts index a26e709..1cd622a 100755 --- a/src/Estilos.ts +++ b/src/Estilos.ts @@ -42,6 +42,20 @@ export const estilosGlobales = StyleSheet.create({ }, }, linkGenerico: { - color: "var(--color-texto)" + color: "var(--color-texto)", + }, + entradaTexto: { + display: "inline-block", + background: "none", + color: "var(--color-texto)", + margin: "0.25rem 0", + borderRadius: "0.25rem", + border: "dashed 1px rgba(255, 255, 255, 0.4)", + padding: "0.35rem", + fontSize: "1rem", + }, + botonTexto: { + padding: "0.25rem 0.35rem", + borderRadius: "5px", }, }) diff --git a/src/Router.tsx b/src/Router.tsx new file mode 100644 index 0000000..7e23553 --- /dev/null +++ b/src/Router.tsx @@ -0,0 +1,31 @@ +import { createSignal, JSX } from "solid-js" + +export const useRouter = (): () => string => { + let rutaPrevia = window.location.hash + + if (rutaPrevia === "") { + window.history.pushState({}, "Horarios UNSA", "#/") + rutaPrevia = "/" + } else { + rutaPrevia = rutaPrevia.substr(1) + } + + const [rutaActual, setRutaActual] = createSignal(rutaPrevia) + + const fnEffect = () => { + const nuevaRuta = window.location.hash.substr(1) + setRutaActual(nuevaRuta) + } + + window.addEventListener("hashchange", fnEffect) + + return rutaActual +} + +export function RouterLink(props: { to: string, className?: string, children: JSX.Element }) { + return ( +
+ {props.children} + + ) +} diff --git a/src/Separador.tsx b/src/Separador.tsx new file mode 100644 index 0000000..27231a5 --- /dev/null +++ b/src/Separador.tsx @@ -0,0 +1,6 @@ + +export function Separador() { + return ( +
+ ) +} diff --git a/src/Views/Editor.tsx b/src/Views/Editor.tsx new file mode 100644 index 0000000..61a593b --- /dev/null +++ b/src/Views/Editor.tsx @@ -0,0 +1,130 @@ +import { BarraSuperior } from "../BarraSuperior" +import { estilosGlobales } from "../Estilos" +import { StyleSheet, css } from "aphrodite" +import { Separador } from "../Separador" +import { Tabla } from "../ContenedorHorarios/Tabla" +import YAML from "yaml" +import { TablaObserver } from "../ContenedorHorarios/TablaObserver" +import { Curso, Cursos } from "../types/DatosHorario" +import { CursosElem } from "../ContenedorHorarios/CursosElem" +import { For, createMemo, createState } from "solid-js" +import { CursoEditor } from "./Editor/CursoEditor" + +const e = StyleSheet.create({ + contenedorGlobal: { + width: "100vw", + height: "100vh", + display: "flex", + alignItems: "center", + justifyContent: "center", + }, +}) + +interface Data { + indice: number, + cursos: Curso[], +} + +const [nuevaData, setNuevaData] = createState({ + indice: 1, + cursos: [{ + nombre: "Curso de Ejemplo", + abreviado: "CE", + oculto: false, + Teoria: { + A: { + Docente: "Juan Perez", + seleccionado: false, + Horas: ["Mi0700", "Mi0750", "Ju1400", "Ju1450"], + }, + }, + }], +}) + +type FormEvent = Event & { submitter: HTMLElement; } & { currentTarget: HTMLFormElement; target: HTMLFormElement; } +export function Editor() { + const tablaObserver = new TablaObserver() + const dataWrapper = createMemo(() => nuevaData) + + const agregarCurso = (ev: FormEvent) => { + ev.preventDefault() + + /// @ts-ignore + const nombreCurso: string = ev.target.elements.nombre_curso.value + /// @ts-ignore + const nombreAbreviado: string = ev.target.elements.nombre_abreviado.value + + const curso: Curso = { + nombre: nombreCurso, + abreviado: nombreAbreviado, + oculto: false, + Teoria: {}, + } + + setNuevaData("cursos", nuevaData.indice, curso) + setNuevaData("indice", (i) => i + 1) + } + + const data = createMemo(() => { + const o: Cursos = {} + nuevaData.cursos.forEach((c) => { + o[c.nombre] = c + }) + return o + }) + + return ( +
+ + +
+
+ Editor de horarios +
+
+ Ingeniería de Sistemas +
+
+ 2021-B +
+
+
+ +
+ + +
+ + {(c) => } + +
+ +
+ + Agregar curso nuevo: + +
+ + +
+ + +
+ +
+
+ +
+ ) +} diff --git a/src/Views/Editor/CursoEditor.tsx b/src/Views/Editor/CursoEditor.tsx new file mode 100644 index 0000000..1c635b1 --- /dev/null +++ b/src/Views/Editor/CursoEditor.tsx @@ -0,0 +1,105 @@ +import { Curso, DatosGrupo } from "../../types/DatosHorario" +import { estilosGlobales } from "../../Estilos" +import { StyleSheet, css } from "aphrodite" +import { For } from "solid-js" + +const e = StyleSheet.create({ + entrada: { + margin: "0.5rem 0", + color: "inherit", + }, + contenedorVariante: { + // padding: "0.5rem 0.75rem 0.5rem 1rem", + paddingLeft: "1rem", + borderLeft: "solid 1px rgba(200, 200, 200, 0.5)", + margin: "0.25rem", + }, +}) + +function EditorGrupo(props: { grupo: string, datosGrupo: DatosGrupo }) { + return ( +
+ Grupo  + +
+ Docente:  + +
+ Horas: +
+ + {(h) => {h}, } + +
+
+ ) +} + +export function CursoEditor(props: { curso: Curso }) { + return ( +
+ +  -  + +
+ Teoria: +
+ + {([grupo, datosGrupo]) => } + +
+ +
+ Laboratorio: +
+ +
+
+ ) +} diff --git a/src/Views/Index.tsx b/src/Views/Index.tsx index 290322a..f1d55ae 100644 --- a/src/Views/Index.tsx +++ b/src/Views/Index.tsx @@ -1,7 +1,6 @@ -import { BarraSuperior } from "../BarraSuperior" -import { Wallpaper } from "../Wallpaper" import { estilosGlobales } from "../Estilos" import { StyleSheet, css } from "aphrodite" +import { RouterLink } from "../Router" const e = StyleSheet.create({ contenedorGlobal: { @@ -33,29 +32,46 @@ const e = StyleSheet.create({ export function Index() { return (
-
-

Horarios UNSA

+

+ Horarios UNSA +

Esta página te permite crear tu horario fácilmente, sin importar de que año son los cursos.

- Ingeniería de Sistemas cuenta con horarios de teoria y laboratorio automáticos, - el resto de carreras solo cuenta con teoria y necesitan que el alumno inicie - sesión. + Por ahora solo está disponible para ing. de sistemas. Proximamente se habilitarán + otras carreras.

- Se recomienda usar un computador/laptop y un navegador actualizado (Firefox, Chrome, Qutebrowser). + Se recomienda usar un computador/laptop y un navegador actualizado (Firefox, Chrome, + Qutebrowser).

- - + */} + + + Editor + - */} -
+