eeg_certs/frontend/src/OnlineClassroom/index.tsx

86 lines
3.1 KiB
TypeScript
Raw Normal View History

2023-10-03 22:55:58 +00:00
import { Show, createSignal } from "solid-js";
import { Search } from "../certs/Search";
import { Person } from "../types/Person";
2023-09-26 21:13:30 +00:00
import { FilledCard } from "../components/FilledCard";
import { ClassroomUserCreation } from "./ClassroomUserCreation";
2023-10-03 22:55:58 +00:00
import { ClassroomVinculation } from "./ClassroomVinculation";
import { ClassroomUserCourses } from "./ClassroomUserCourses";
2023-09-26 21:13:30 +00:00
type TabType = "Vinculate" | "Create";
export function OnlineClassroom() {
const [person, setPerson] = createSignal<Person | null>(null);
return (
<div class="grid grid-cols-[16rem_25rem_1fr]">
<Search setPerson={setPerson} />
2023-09-21 22:07:18 +00:00
<div>
2023-09-26 21:13:30 +00:00
2023-10-03 22:55:58 +00:00
<Show when={person() !== null && person()!.person_classroom_id === null}>
2023-10-03 16:43:30 +00:00
<ClassroomUser
person={person()!}
onLink={(classroom_id) => setPerson((p) => ({...p!, person_classroom_id: classroom_id}))}
/>
</Show>
2023-10-03 22:55:58 +00:00
<Show when={person() !== null && person()!.person_classroom_id !== null}>
<ClassroomUserCourses userid={person()!.person_classroom_id!} />
2023-09-30 16:16:20 +00:00
</Show>
2023-09-26 21:13:30 +00:00
2023-09-21 22:07:18 +00:00
</div>
</div>
);
}
2023-10-03 16:43:30 +00:00
function ClassroomUser(props: {person: Person, onLink: (classroom_id: number) => void,}) {
2023-09-26 21:13:30 +00:00
const [active, setActive] = createSignal<TabType>("Vinculate");
return (
<div>
<FilledCard class="border border-c-outline overflow-hidden">
<h2 class="p-3 font-bold text-xl">
Persona no vinculada:
</h2>
<ClassroomTabs active={active()} setActive={setActive} />
<div class="bg-c-surface">
<Show when={active() === "Vinculate"}>
2023-09-30 16:16:20 +00:00
<ClassroomVinculation
person_surname={`${props.person.person_paternal_surname} ${props.person.person_maternal_surname}`}
2023-10-03 16:43:30 +00:00
personId={props.person.person_id}
onLink={props.onLink}
2023-09-30 16:16:20 +00:00
/>
2023-09-26 21:13:30 +00:00
</Show>
<Show when={active() === "Create"}>
2023-10-03 22:55:58 +00:00
<ClassroomUserCreation person={props.person} />
2023-09-26 21:13:30 +00:00
</Show>
</div>
</FilledCard>
</div>
);
}
function ClassroomTabs(props: {active: TabType, setActive: (v: TabType) => void}) {
const presetsClasses = () => ((props.active === "Vinculate") ? "font-bold border-c-primary" : "border-c-transparent");
const manualClasses = () => ((props.active === "Create") ? "font-bold border-c-primary" : "border-c-transparent");
return (
<div class="grid grid-cols-2">
<button
class={`py-2 border-b-4 ${presetsClasses()}`}
onclick={() => props.setActive("Vinculate")}
>
Buscar
2023-09-26 21:13:30 +00:00
</button>
<button
class={`py-2 border-b-4 ${manualClasses()}`}
onclick={() => props.setActive("Create")}
>
Crear
</button>
</div>
);
}