exams module
Semester, then exam event, then schedule cards (date, time, room, seat).
See Attendance Module, Grades Module, Subjects Module, Data Layer & API Integration.
Component architecture#
flowchart TD AA["AuthenticatedApp"] --> Ex["Exams.jsx"] Ex --> Select["ui/select semester + event"] Ex --> List["subjectinfo cards"]
w plus examSchedule, examSemesters, selectedExamSem, selectedExamEvent and setters. Local: examEvents, loading.
State management#
| Variable | Source |
|---|---|
examSchedule |
parent, keyed by event id |
examSemesters |
parent |
selectedExamSem |
parent |
selectedExamEvent |
parent |
examEvents |
local |
loading |
local |
Data flow and API integration#
flowchart TD Mount["mount"] --> Sem["w.get_semesters_for_exam_events"] Sem --> Change["handleSemesterChange"] Change --> Events["w.get_exam_events(semester)"] Events --> Event["handleEventChange"] Event --> Sched["w.get_exam_schedule(event)"]
get_exam_schedule returns { subjectinfo }. Cached under exameventid || exam_event_id.
Component lifecycle and event handlers#
flowchart TD
Mount --> FetchSem["fetch if examSemesters.length === 0"]
SemChange["semester change"] --> Clear["selectedExamEvent null examSchedule {}"]
EventChange["event change"] --> Cache{"examSchedule[id]?"}
Cache -->|no| API["get_exam_schedule"]User interface structure#
flowchart TD Sticky["sticky top-14"] --> SemSel["semester Select"] Sticky --> EvSel["event Select"] Body["scroll"] --> Card["subjectdesc code room-seat date time"]
formatDate turns DD/MM/YYYY into a long en-US date.
Event objects may use exameventid / exameventdesc or exam_event_id / exam_event_desc. Code reads both.
Empty states: Loading…, cards, “No exam schedule available”, or nothing if no event.
Mock: fakeData.exams.examSemesters, examEvents, examSchedule.