Skip to content

Commit 207b1dd

Browse files
committed
Merge branch 'ax/scrum-122-create-timetable-integration' of https://github.com/UTSC-CSCC01-Software-Engineering-I/term-group-project-c01w25-project-course-matrix into ax/scrum-122-create-timetable-integration
2 parents ad8ce2b + 12fc435 commit 207b1dd

File tree

5 files changed

+78
-58
lines changed

5 files changed

+78
-58
lines changed

course-matrix/backend/src/controllers/eventsController.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,8 @@ export default {
495495

496496
if (courseEventData.calendar_id !== timetableData.id) {
497497
return res.status(400).json({
498-
error: "Restriction id does not belong to the provided calendar id",
498+
error:
499+
"Restriction id does not belong to the provided calendar id",
499500
});
500501
}
501502
}
@@ -716,7 +717,6 @@ export default {
716717
if (courseEventError)
717718
return res.status(400).json({ error: courseEventError.message });
718719

719-
720720
if (!offering_id) {
721721
if (!courseEventData || courseEventData.length === 0) {
722722
return res
@@ -726,7 +726,8 @@ export default {
726726

727727
if (courseEventData.calendar_id !== timetableData.id) {
728728
return res.status(400).json({
729-
error: "Restriction id does not belong to the provided calendar id",
729+
error:
730+
"Restriction id does not belong to the provided calendar id",
730731
});
731732
}
732733
}

course-matrix/backend/src/controllers/offeringsController.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,7 @@ export default {
105105

106106
// If course code or semester is not provided, return all offerings
107107
if (!course_code || !semester) {
108-
offeringsQuery = supabase
109-
.schema("course")
110-
.from("offerings")
111-
.select();
108+
offeringsQuery = supabase.schema("course").from("offerings").select();
112109

113110
const { data: offeringsData, error: offeringsError } =
114111
await offeringsQuery;

course-matrix/frontend/src/pages/TimetableBuilder/Calendar.tsx

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ import { useCreateRestrictionMutation } from "@/api/restrictionsApiSlice";
3030
import { z } from "zod";
3131
import { useEffect, useState } from "react";
3232
import { useGetNumberOfCourseSectionsQuery } from "@/api/coursesApiSlice";
33-
import { useCreateEventMutation, useGetEventsQuery, useUpdateEventMutation, useDeleteEventMutation } from "@/api/eventsApiSlice";
33+
import {
34+
useCreateEventMutation,
35+
useGetEventsQuery,
36+
useUpdateEventMutation,
37+
useDeleteEventMutation,
38+
} from "@/api/eventsApiSlice";
3439
import { useGetOfferingEventsQuery } from "@/api/offeringsApiSlice";
3540
import { useNavigate, useSearchParams } from "react-router-dom";
3641
import { Event, Timetable, TimetableEvents } from "@/utils/type-utils";
@@ -127,15 +132,17 @@ function Calendar({
127132
},
128133
});
129134

130-
const { data: oldTimetableEvents } = useGetEventsQuery(editingTimetableId, { skip: !isEditingTimetable }) as {
131-
data: TimetableEvents;
135+
const { data: oldTimetableEvents } = useGetEventsQuery(editingTimetableId, {
136+
skip: !isEditingTimetable,
137+
}) as {
138+
data: TimetableEvents;
132139
};
133140
const oldOfferingIds = [
134-
...new Set(
135-
oldTimetableEvents?.courseEvents.map((event) => event.offering_id)
136-
),
141+
...new Set(
142+
oldTimetableEvents?.courseEvents.map((event) => event.offering_id),
143+
),
137144
].sort((a, b) => a - b);
138-
145+
139146
const semester = form.watch("semester") ?? "";
140147
const [timetableTitle, setTimetableTitle] = useState("");
141148

@@ -150,7 +157,7 @@ function Calendar({
150157

151158
const allOfferingSectionsHaveBeenSelected =
152159
newOfferingIds.length === totalNumberOfSections;
153-
160+
154161
useEffect(() => {
155162
if (!isEditingTimetable) {
156163
return;
@@ -198,7 +205,8 @@ function Calendar({
198205
disabled: restriction.disabled,
199206
num_days: restriction.numDays,
200207
};
201-
const { error: restrictionError } = await createRestriction(restrictionObject);
208+
const { error: restrictionError } =
209+
await createRestriction(restrictionObject);
202210
if (restrictionError) {
203211
console.error(restrictionError);
204212
}

course-matrix/frontend/src/pages/TimetableBuilder/TimetableBuilder.tsx

Lines changed: 55 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,17 @@ const TimetableBuilder = () => {
154154
data: Offering[];
155155
};
156156
const offerings = offeringData || [];
157-
const offeringIdToCourseIdMap = offerings.reduce((acc, offering) => {
158-
acc[offering.id] = offering.course_id;
159-
return acc;
160-
}, {} as Record<number, number>);
157+
const offeringIdToCourseIdMap = offerings.reduce(
158+
(acc, offering) => {
159+
acc[offering.id] = offering.course_id;
160+
return acc;
161+
},
162+
{} as Record<number, number>,
163+
);
161164

162-
const { data: timetableEventsData } = useGetEventsQuery(timetableId, { skip: !isEditingTimetable }) as {
165+
const { data: timetableEventsData } = useGetEventsQuery(timetableId, {
166+
skip: !isEditingTimetable,
167+
}) as {
163168
data: TimetableEvents;
164169
};
165170
const userEvents = timetableEventsData?.userEvents || [];
@@ -171,7 +176,9 @@ const TimetableBuilder = () => {
171176
const [loadedOfferingIds, setLoadedOfferingIds] = useState(false);
172177
const [loadedRestrictions, setLoadedRestrictions] = useState(false);
173178

174-
const { data: restrictionsData } = useGetRestrictionsQuery(timetableId, { skip: !isEditingTimetable }) as {
179+
const { data: restrictionsData } = useGetRestrictionsQuery(timetableId, {
180+
skip: !isEditingTimetable,
181+
}) as {
175182
data: Restriction[];
176183
};
177184

@@ -385,47 +392,54 @@ const TimetableBuilder = () => {
385392
</div>
386393
</div>
387394
<div className="flex gap-2 flex-col">
388-
{!isEditingTimetable || (isEditingTimetable && loadedCourses && loadedOfferingIds) ? (
389-
selectedCourses.map((course, index) => {
390-
return (
391-
<div key={index}>
392-
<div className="flex p-2 justify-between bg-green-100/50 text-xs rounded-md w-[80%]">
393-
<p>
394-
<strong>{course.code}:</strong> {course.name}
395-
</p>
396-
<div className="flex gap-4">
397-
<X
398-
size={16}
399-
className="hover:text-red-500 cursor-pointer"
400-
onClick={() => {
401-
handleRemoveCourse(course);
402-
const newOfferingsIds = form
403-
.getValues("offeringIds")
404-
.filter(
405-
(offeringId: number) =>
406-
offeringIdToCourseIdMap[offeringId] !==
407-
course.id,
395+
{!isEditingTimetable ||
396+
(isEditingTimetable &&
397+
loadedCourses &&
398+
loadedOfferingIds) ? (
399+
selectedCourses.map((course, index) => {
400+
return (
401+
<div key={index}>
402+
<div className="flex p-2 justify-between bg-green-100/50 text-xs rounded-md w-[80%]">
403+
<p>
404+
<strong>{course.code}:</strong> {course.name}
405+
</p>
406+
<div className="flex gap-4">
407+
<X
408+
size={16}
409+
className="hover:text-red-500 cursor-pointer"
410+
onClick={() => {
411+
handleRemoveCourse(course);
412+
const newOfferingsIds = form
413+
.getValues("offeringIds")
414+
.filter(
415+
(offeringId: number) =>
416+
offeringIdToCourseIdMap[
417+
offeringId
418+
] !== course.id,
419+
);
420+
form.setValue(
421+
"offeringIds",
422+
newOfferingsIds,
408423
);
409-
form.setValue("offeringIds", newOfferingsIds);
410-
}}
411-
/>
424+
}}
425+
/>
426+
</div>
412427
</div>
428+
{isChoosingSectionsManually && (
429+
<OfferingInfo
430+
course={course}
431+
semester={selectedSemester}
432+
form={form}
433+
/>
434+
)}
413435
</div>
414-
{isChoosingSectionsManually && (
415-
<OfferingInfo
416-
course={course}
417-
semester={selectedSemester}
418-
form={form}
419-
/>
420-
)}
421-
</div>
422-
);
423-
})) : (
436+
);
437+
})
438+
) : (
424439
<p className="text-sm text-muted-foreground">
425440
Loading courses...
426441
</p>
427-
)
428-
}
442+
)}
429443
</div>
430444
</div>
431445

course-matrix/frontend/src/utils/type-utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export type Offering = {
3030
instructor: string;
3131
notes: string;
3232
code: string;
33-
}
33+
};
3434

3535
export type TimetableEvents = {
3636
courseEvents: Event[];

0 commit comments

Comments
 (0)