Skip to content

Commit c424d3a

Browse files
committed
Merge branch 'kl/scrum-62-timetable-compare' of https://github.com/UTSC-CSCC01-Software-Engineering-I/term-group-project-c01w25-project-course-matrix into kl/scrum-62-timetable-compare
2 parents a1dd4a0 + 79f5589 commit c424d3a

File tree

2 files changed

+95
-64
lines changed

2 files changed

+95
-64
lines changed

course-matrix/frontend/src/pages/Compare/CompareTimetables.tsx

Lines changed: 92 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { useGetTimetableQuery, useGetTimetablesQuery } from "@/api/timetableApiSlice";
1+
import {
2+
useGetTimetableQuery,
3+
useGetTimetablesQuery,
4+
} from "@/api/timetableApiSlice";
25
import { Button } from "@/components/ui/button";
36
import { Timetable, TimetableEvents } from "@/utils/type-utils";
47
import { useEffect, useState } from "react";
@@ -11,13 +14,25 @@ import { useForm } from "react-hook-form";
1114
import { z } from "zod";
1215
import { CompareFormSchema } from "../Home/TimetableCompareButton";
1316
import { format } from "path";
14-
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
15-
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
17+
import {
18+
Form,
19+
FormControl,
20+
FormField,
21+
FormItem,
22+
FormLabel,
23+
FormMessage,
24+
} from "@/components/ui/form";
25+
import {
26+
Select,
27+
SelectContent,
28+
SelectItem,
29+
SelectTrigger,
30+
SelectValue,
31+
} from "@/components/ui/select";
1632
import { SemesterIcon } from "@/components/semester-icon";
1733
import { GitCompareArrows } from "lucide-react";
1834

1935
export const CompareTimetables = () => {
20-
2136
const [timetable1, setTimetable1] = useState<Timetable>();
2237
const [timetable2, setTimetable2] = useState<Timetable>();
2338
const [offeringIds1, setOfferingIds1] = useState<number[]>();
@@ -31,55 +46,55 @@ export const CompareTimetables = () => {
3146
timetable2: queryParams.has("id2") ? parseInt(queryParams.get("id2") ?? "0") : undefined
3247
}
3348
});
34-
49+
3550
const onSubmit = (values: z.infer<typeof CompareFormSchema>) => {
3651
console.log("Compare Form submitted:", values);
3752
const timetableId1 = compareForm.getValues("timetable1");
3853
const timetableId2 = compareForm.getValues("timetable2");
39-
setTimetable1(timetables.find(t => t.id === timetableId1))
40-
refetchEvents1()
41-
setTimetable2(timetables.find(t => t.id === timetableId2))
42-
refetchEvents2()
54+
setTimetable1(timetables.find((t) => t.id === timetableId1));
55+
refetchEvents1();
56+
setTimetable2(timetables.find((t) => t.id === timetableId2));
57+
refetchEvents2();
4358
};
4459

45-
const { data: timetables, isLoading, refetch } = useGetTimetablesQuery() as {
46-
data: Timetable[];
47-
isLoading: boolean;
48-
refetch: () => void;
49-
};
50-
51-
const { data: timetableEventsData1, refetch: refetchEvents1 } = useGetEventsQuery(
52-
compareForm.getValues("timetable1") ?? undefined,
53-
{
54-
skip: compareForm.getValues("timetable1") === undefined
55-
}
56-
) as {
57-
data: TimetableEvents;
58-
refetch: () => void;
59-
};
60-
const { data: timetableEventsData2, refetch: refetchEvents2 } = useGetEventsQuery(
61-
compareForm.getValues("timetable2"),
62-
{
63-
skip: compareForm.getValues("timetable2") === undefined
64-
}
65-
) as {
66-
data: TimetableEvents;
60+
const {
61+
data: timetables,
62+
isLoading,
63+
refetch,
64+
} = useGetTimetablesQuery() as {
65+
data: Timetable[];
66+
isLoading: boolean;
6767
refetch: () => void;
6868
};
6969

70+
const { data: timetableEventsData1, refetch: refetchEvents1 } =
71+
useGetEventsQuery(compareForm.getValues("timetable1") ?? undefined, {
72+
skip: compareForm.getValues("timetable1") === undefined,
73+
}) as {
74+
data: TimetableEvents;
75+
refetch: () => void;
76+
};
77+
const { data: timetableEventsData2, refetch: refetchEvents2 } =
78+
useGetEventsQuery(compareForm.getValues("timetable2"), {
79+
skip: compareForm.getValues("timetable2") === undefined,
80+
}) as {
81+
data: TimetableEvents;
82+
refetch: () => void;
83+
};
84+
7085
useEffect(() => {
7186
if (queryParams.has("id1") && timetables) {
7287
const id = parseInt(queryParams.get("id1") || "0");
7388
compareForm.setValue("timetable1", id);
74-
setTimetable1(timetables.find(t => t.id === id));
89+
setTimetable1(timetables.find((t) => t.id === id));
7590
}
7691
}, [timetables]);
7792

7893
useEffect(() => {
7994
if (queryParams.has("id2") && timetables) {
8095
const id = parseInt(queryParams.get("id2") || "0");
8196
compareForm.setValue("timetable2", id);
82-
setTimetable2(timetables.find(t => t.id === id));
97+
setTimetable2(timetables.find((t) => t.id === id));
8398
}
8499
}, [timetables]);
85100

@@ -136,20 +151,21 @@ export const CompareTimetables = () => {
136151
</SelectTrigger>
137152
</FormControl>
138153
<SelectContent>
139-
{timetables && timetables.map((timetable) => (
140-
<SelectItem
141-
key={timetable.id}
142-
value={timetable.id.toString()}
143-
>
144-
<div className="flex items-center gap-2">
145-
<SemesterIcon
146-
semester={timetable.semester}
147-
size={18}
148-
/>
149-
<span>{timetable.timetable_title}</span>
150-
</div>
151-
</SelectItem>
152-
))}
154+
{timetables &&
155+
timetables.map((timetable) => (
156+
<SelectItem
157+
key={timetable.id}
158+
value={timetable.id.toString()}
159+
>
160+
<div className="flex items-center gap-2">
161+
<SemesterIcon
162+
semester={timetable.semester}
163+
size={18}
164+
/>
165+
<span>{timetable.timetable_title}</span>
166+
</div>
167+
</SelectItem>
168+
))}
153169
</SelectContent>
154170
</Select>
155171
<FormMessage />
@@ -175,20 +191,21 @@ export const CompareTimetables = () => {
175191
</SelectTrigger>
176192
</FormControl>
177193
<SelectContent>
178-
{timetables && timetables.map((timetable) => (
179-
<SelectItem
180-
key={timetable.id}
181-
value={timetable.id.toString()}
182-
>
183-
<div className="flex items-center gap-2">
184-
<SemesterIcon
185-
semester={timetable.semester}
186-
size={18}
187-
/>
188-
<span>{timetable.timetable_title}</span>
189-
</div>
190-
</SelectItem>
191-
))}
194+
{timetables &&
195+
timetables.map((timetable) => (
196+
<SelectItem
197+
key={timetable.id}
198+
value={timetable.id.toString()}
199+
>
200+
<div className="flex items-center gap-2">
201+
<SemesterIcon
202+
semester={timetable.semester}
203+
size={18}
204+
/>
205+
<span>{timetable.timetable_title}</span>
206+
</div>
207+
</SelectItem>
208+
))}
192209
</SelectContent>
193210
</Select>
194211
<FormMessage />
@@ -210,7 +227,13 @@ export const CompareTimetables = () => {
210227
<div className="w-1/2">
211228
{!offeringIds1 ? (
212229
<>
213-
{queryParams.has("id1") ? <Spinner /> : <div className="w-full text-center py-[8rem] text-sm bg-gray-100/50 rounded">Select a timetable to compare</div>}
230+
{queryParams.has("id1") ? (
231+
<Spinner />
232+
) : (
233+
<div className="w-full text-center py-[8rem] text-sm bg-gray-100/50 rounded">
234+
Select a timetable to compare
235+
</div>
236+
)}
214237
</>
215238
) : (
216239
<Calendar
@@ -227,7 +250,13 @@ export const CompareTimetables = () => {
227250
<div className="w-1/2">
228251
{!offeringIds2 ? (
229252
<>
230-
{queryParams.has("id2") ? <Spinner /> : <div className="w-full text-center py-[8rem] text-sm bg-gray-100/50 rounded">Select a timetable to compare</div>}
253+
{queryParams.has("id2") ? (
254+
<Spinner />
255+
) : (
256+
<div className="w-full text-center py-[8rem] text-sm bg-gray-100/50 rounded">
257+
Select a timetable to compare
258+
</div>
259+
)}
231260
</>
232261
) : (
233262
<Calendar

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ const Dashboard = () => {
6565
) : location.pathname.startsWith(
6666
"/dashboard/compare",
6767
) ? (
68-
<Link to="/dashboard/compare">Timetable Compare</Link>
68+
<Link to="/dashboard/compare">
69+
Timetable Compare
70+
</Link>
6971
) : (
7072
<></>
7173
)}

0 commit comments

Comments
 (0)