@@ -35,7 +35,7 @@ import {
3535 useDeleteRestrictionMutation ,
3636} from "@/api/restrictionsApiSlice" ;
3737import { z } from "zod" ;
38- import React , { useEffect , useRef } from "react" ;
38+ import React , { useEffect , useRef , useState } from "react" ;
3939import { useGetNumberOfCourseSectionsQuery } from "@/api/coursesApiSlice" ;
4040import {
4141 useCreateEventMutation ,
@@ -58,6 +58,7 @@ import {
5858 getSemesterStartAndEndDatesPlusOneWeek ,
5959} from "@/utils/semester-utils" ;
6060import { courseEventStyles } from "@/constants/calendarConstants" ;
61+ import TimetableErrorDialog from "./TimetableErrorDialog" ;
6162
6263interface CalendarProps {
6364 setShowLoadingPage : React . Dispatch < React . SetStateAction < boolean > > ;
@@ -110,6 +111,8 @@ const Calendar = React.memo<CalendarProps>(
110111 const [ createRestriction ] = useCreateRestrictionMutation ( ) ;
111112 const [ deleteRestriction ] = useDeleteRestrictionMutation ( ) ;
112113
114+ const [ errorMessage , setErrorMessage ] = useState < string | null > ( null ) ;
115+
113116 const semesterStartDate = getSemesterStartAndEndDates ( semester ) . start ;
114117 const { start : semesterStartDatePlusOneWeek , end : semesterEndDate } =
115118 getSemesterStartAndEndDatesPlusOneWeek ( semester ) ;
@@ -224,17 +227,18 @@ const Calendar = React.memo<CalendarProps>(
224227 } , [ timetablesData , editingTimetableId , isEditingTimetable ] ) ;
225228
226229 const handleCreate = async ( ) => {
227- setShowLoadingPage ( true ) ;
228230 const timetableTitle = timetableTitleRef . current ?. value ?? "" ;
229231 // Create timetable
230232 const { data, error } = await createTimetable ( {
231233 timetable_title : timetableTitle ,
232234 semester : semester ,
233235 } ) ;
234236 if ( error ) {
235- console . error ( error ) ;
237+ const errorData = ( error as { data ?: { error ?: string } } ) . data ;
238+ setErrorMessage ( errorData ?. error ?? "Unknown error occurred" ) ;
236239 return ;
237240 }
241+ setShowLoadingPage ( true ) ;
238242 // Create course events for the newly created timetable
239243 const newTimetableId = data [ 0 ] . id ;
240244 for ( const offeringId of newOfferingIds ) {
@@ -336,6 +340,10 @@ const Calendar = React.memo<CalendarProps>(
336340 < div >
337341 < h1 className = "text-2xl flex flex-row justify-between font-medium tracking-tight mb-8" >
338342 < div > Your Timetable </ div >
343+ < TimetableErrorDialog
344+ errorMessage = { errorMessage }
345+ setErrorMessage = { setErrorMessage }
346+ />
339347 { ! isEditingTimetable ? (
340348 < Dialog >
341349 { isChoosingSectionsManually &&
0 commit comments