1- import { useGetTimetableQuery , useGetTimetablesQuery } from "@/api/timetableApiSlice" ;
1+ import {
2+ useGetTimetableQuery ,
3+ useGetTimetablesQuery ,
4+ } from "@/api/timetableApiSlice" ;
25import { Button } from "@/components/ui/button" ;
36import { Timetable , TimetableEvents } from "@/utils/type-utils" ;
47import { useEffect , useState } from "react" ;
@@ -11,13 +14,25 @@ import { useForm } from "react-hook-form";
1114import { z } from "zod" ;
1215import { CompareFormSchema } from "../Home/TimetableCompareButton" ;
1316import { 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" ;
1632import { SemesterIcon } from "@/components/semester-icon" ;
1733import { GitCompareArrows } from "lucide-react" ;
1834
1935export 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
0 commit comments