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 [ ] > ( ) ;
@@ -27,55 +42,55 @@ export const CompareTimetables = () => {
2742 const compareForm = useForm < z . infer < typeof CompareFormSchema > > ( {
2843 resolver : zodResolver ( CompareFormSchema ) ,
2944 } ) ;
30-
45+
3146 const onSubmit = ( values : z . infer < typeof CompareFormSchema > ) => {
3247 console . log ( "Compare Form submitted:" , values ) ;
3348 const timetableId1 = compareForm . getValues ( "timetable1" ) ;
3449 const timetableId2 = compareForm . getValues ( "timetable2" ) ;
35- setTimetable1 ( timetables . find ( t => t . id === timetableId1 ) )
36- refetchEvents1 ( )
37- setTimetable2 ( timetables . find ( t => t . id === timetableId2 ) )
38- refetchEvents2 ( )
50+ setTimetable1 ( timetables . find ( ( t ) => t . id === timetableId1 ) ) ;
51+ refetchEvents1 ( ) ;
52+ setTimetable2 ( timetables . find ( ( t ) => t . id === timetableId2 ) ) ;
53+ refetchEvents2 ( ) ;
3954 } ;
4055
41- const { data : timetables , isLoading, refetch } = useGetTimetablesQuery ( ) as {
42- data : Timetable [ ] ;
43- isLoading : boolean ;
44- refetch : ( ) => void ;
45- } ;
46-
47- const { data : timetableEventsData1 , refetch : refetchEvents1 } = useGetEventsQuery (
48- compareForm . getValues ( "timetable1" ) ?? undefined ,
49- {
50- skip : compareForm . getValues ( "timetable1" ) === undefined
51- }
52- ) as {
53- data : TimetableEvents ;
54- refetch : ( ) => void ;
55- } ;
56- const { data : timetableEventsData2 , refetch : refetchEvents2 } = useGetEventsQuery (
57- compareForm . getValues ( "timetable2" ) ,
58- {
59- skip : compareForm . getValues ( "timetable2" ) === undefined
60- }
61- ) as {
62- data : TimetableEvents ;
56+ const {
57+ data : timetables ,
58+ isLoading,
59+ refetch,
60+ } = useGetTimetablesQuery ( ) as {
61+ data : Timetable [ ] ;
62+ isLoading : boolean ;
6363 refetch : ( ) => void ;
6464 } ;
6565
66+ const { data : timetableEventsData1 , refetch : refetchEvents1 } =
67+ useGetEventsQuery ( compareForm . getValues ( "timetable1" ) ?? undefined , {
68+ skip : compareForm . getValues ( "timetable1" ) === undefined ,
69+ } ) as {
70+ data : TimetableEvents ;
71+ refetch : ( ) => void ;
72+ } ;
73+ const { data : timetableEventsData2 , refetch : refetchEvents2 } =
74+ useGetEventsQuery ( compareForm . getValues ( "timetable2" ) , {
75+ skip : compareForm . getValues ( "timetable2" ) === undefined ,
76+ } ) as {
77+ data : TimetableEvents ;
78+ refetch : ( ) => void ;
79+ } ;
80+
6681 useEffect ( ( ) => {
6782 if ( queryParams . has ( "id1" ) && timetables ) {
6883 const id = parseInt ( queryParams . get ( "id1" ) || "0" ) ;
6984 compareForm . setValue ( "timetable1" , id ) ;
70- setTimetable1 ( timetables . find ( t => t . id === id ) ) ;
85+ setTimetable1 ( timetables . find ( ( t ) => t . id === id ) ) ;
7186 }
7287 } , [ timetables ] ) ;
7388
7489 useEffect ( ( ) => {
7590 if ( queryParams . has ( "id2" ) && timetables ) {
7691 const id = parseInt ( queryParams . get ( "id2" ) || "0" ) ;
7792 compareForm . setValue ( "timetable2" , id ) ;
78- setTimetable2 ( timetables . find ( t => t . id === id ) ) ;
93+ setTimetable2 ( timetables . find ( ( t ) => t . id === id ) ) ;
7994 }
8095 } , [ timetables ] ) ;
8196
@@ -131,20 +146,21 @@ export const CompareTimetables = () => {
131146 </ SelectTrigger >
132147 </ FormControl >
133148 < SelectContent >
134- { timetables && timetables . map ( ( timetable ) => (
135- < SelectItem
136- key = { timetable . id }
137- value = { timetable . id . toString ( ) }
138- >
139- < div className = "flex items-center gap-2" >
140- < SemesterIcon
141- semester = { timetable . semester }
142- size = { 18 }
143- />
144- < span > { timetable . timetable_title } </ span >
145- </ div >
146- </ SelectItem >
147- ) ) }
149+ { timetables &&
150+ timetables . map ( ( timetable ) => (
151+ < SelectItem
152+ key = { timetable . id }
153+ value = { timetable . id . toString ( ) }
154+ >
155+ < div className = "flex items-center gap-2" >
156+ < SemesterIcon
157+ semester = { timetable . semester }
158+ size = { 18 }
159+ />
160+ < span > { timetable . timetable_title } </ span >
161+ </ div >
162+ </ SelectItem >
163+ ) ) }
148164 </ SelectContent >
149165 </ Select >
150166 < FormMessage />
@@ -169,20 +185,21 @@ export const CompareTimetables = () => {
169185 </ SelectTrigger >
170186 </ FormControl >
171187 < SelectContent >
172- { timetables && timetables . map ( ( timetable ) => (
173- < SelectItem
174- key = { timetable . id }
175- value = { timetable . id . toString ( ) }
176- >
177- < div className = "flex items-center gap-2" >
178- < SemesterIcon
179- semester = { timetable . semester }
180- size = { 18 }
181- />
182- < span > { timetable . timetable_title } </ span >
183- </ div >
184- </ SelectItem >
185- ) ) }
188+ { timetables &&
189+ timetables . map ( ( timetable ) => (
190+ < SelectItem
191+ key = { timetable . id }
192+ value = { timetable . id . toString ( ) }
193+ >
194+ < div className = "flex items-center gap-2" >
195+ < SemesterIcon
196+ semester = { timetable . semester }
197+ size = { 18 }
198+ />
199+ < span > { timetable . timetable_title } </ span >
200+ </ div >
201+ </ SelectItem >
202+ ) ) }
186203 </ SelectContent >
187204 </ Select >
188205 < FormMessage />
@@ -204,7 +221,13 @@ export const CompareTimetables = () => {
204221 < div className = "w-1/2" >
205222 { ! offeringIds1 ? (
206223 < >
207- { 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 > }
224+ { queryParams . has ( "id1" ) ? (
225+ < Spinner />
226+ ) : (
227+ < div className = "w-full text-center py-[8rem] text-sm bg-gray-100/50 rounded" >
228+ Select a timetable to compare
229+ </ div >
230+ ) }
208231 </ >
209232 ) : (
210233 < Calendar
@@ -221,7 +244,13 @@ export const CompareTimetables = () => {
221244 < div className = "w-1/2" >
222245 { ! offeringIds2 ? (
223246 < >
224- { 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 > }
247+ { queryParams . has ( "id2" ) ? (
248+ < Spinner />
249+ ) : (
250+ < div className = "w-full text-center py-[8rem] text-sm bg-gray-100/50 rounded" >
251+ Select a timetable to compare
252+ </ div >
253+ ) }
225254 </ >
226255 ) : (
227256 < Calendar
0 commit comments