@@ -8,9 +8,11 @@ import { StudentCourse as StuCourse} from '@codewit/interfaces';
88import { ErrorPage } from "../components/error/Error" ;
99import Loading from "../components/loading/LoadingPage" ;
1010import { useAxiosFetch } from "../hooks/fetching" ;
11+ import { useAuth } from "../hooks/useAuth" ;
1112
1213import StudentView from "./course/StudentView" ;
1314import { CenterPrompt } from "../components/placeholders" ;
15+ import LoginRequiredPrompt from "../components/auth/LoginRequiredPrompt" ;
1416
1517interface StudentCourse extends StuCourse {
1618 type : "StudentView" ,
@@ -59,24 +61,32 @@ interface CourseView {
5961export default function CourseView ( { onCourseChange} : CourseView ) {
6062 const { course_id } = useParams ( ) ;
6163 const navigate = useNavigate ( ) ;
64+ const { user, loading : authLoading } = useAuth ( ) ;
6265
6366 if ( course_id == null ) {
6467 throw new Error ( "course_id not provided" ) ;
6568 }
6669
6770 const [ refresh , set_refresh ] = useState ( 0 ) ;
68- const { data : course , loading, error, setData } = useAxiosFetch < GetCourse | null > ( `/api/courses/${ course_id } ?student_view=1&r=${ refresh } ` , null ) ;
71+ const { data : course , loading, error, setData } = useAxiosFetch < GetCourse | null > (
72+ user ? `/api/courses/${ course_id } ?student_view=1&r=${ refresh } ` : null ,
73+ null ,
74+ ) ;
6975
7076 useEffect ( ( ) => {
7177 if ( course ?. type === "StudentView" ) {
7278 onCourseChange ( course . title ) ;
7379 }
7480 } , [ course , onCourseChange ] ) ;
7581
76- if ( loading ) {
82+ if ( authLoading || loading ) {
7783 return < Loading /> ;
7884 }
7985
86+ if ( ! user ) {
87+ return < LoginRequiredPrompt /> ;
88+ }
89+
8090 if ( error || course == null ) {
8191 return < ErrorPage message = "Failed to fetch courses. Please try again later." /> ;
8292 }
@@ -127,14 +137,7 @@ export default function CourseView({onCourseChange}: CourseView) {
127137 /> ;
128138 }
129139 default :
130- return < CenterPrompt header = { "Unknown Response" } >
131- < p className = "text-center text-white" >
132- The client does not know how to handle the response from the server. Sorry, try going back to the home page.
133- </ p >
134- < Link to = "/" className = "text-white bg-accent-500 rounded-md mt-4 p-2" >
135- Home page
136- </ Link >
137- </ CenterPrompt > ;
140+ return < ErrorPage message = "Failed to load course information. Please try again later." /> ;
138141 }
139142}
140143
@@ -151,9 +154,9 @@ interface RegError {
151154}
152155
153156function EnrollingView ( { course_id, course_title, auto_enroll, on_update} : EnrollingViewProps ) {
154- let [ sending , set_sending ] = useState ( false ) ;
155- let [ reg_state , set_reg_state ] = useState < RegistrationResult | null > ( null ) ;
156- let [ error , set_error ] = useState < RegError | null > ( null ) ;
157+ const [ sending , set_sending ] = useState ( false ) ;
158+ const [ reg_state , set_reg_state ] = useState < RegistrationResult | null > ( null ) ;
159+ const [ error , set_error ] = useState < RegError | null > ( null ) ;
157160
158161 async function request_enrollment ( ) {
159162 if ( sending ) {
@@ -163,7 +166,7 @@ function EnrollingView({course_id, course_title, auto_enroll, on_update}: Enroll
163166 set_sending ( true ) ;
164167
165168 try {
166- let result = await axios . post < RegistrationResult > ( `/api/courses/${ course_id } /register` ) ;
169+ const result = await axios . post < RegistrationResult > ( `/api/courses/${ course_id } /register` ) ;
167170
168171 set_reg_state ( result . data ) ;
169172 } catch ( err ) {
0 commit comments