#31 Added course page that querys backend for a specific course id
This commit was merged in pull request #40.
This commit is contained in:
@@ -4,6 +4,7 @@ import HomePage from "./pages/HomePage";
|
|||||||
import LoginPage from "./pages/LoginPage";
|
import LoginPage from "./pages/LoginPage";
|
||||||
import LogoutPage from "./pages/LogoutPage";
|
import LogoutPage from "./pages/LogoutPage";
|
||||||
import RegisterPage from "./pages/RegisterPage";
|
import RegisterPage from "./pages/RegisterPage";
|
||||||
|
import CoursePage from "./pages/CoursePage";
|
||||||
import AuthenticatedRoute from "./components/AuthenticatedRoute";
|
import AuthenticatedRoute from "./components/AuthenticatedRoute";
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
@@ -20,15 +21,25 @@ function App() {
|
|||||||
</AuthenticatedRoute>
|
</AuthenticatedRoute>
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/register">
|
<Route path="/register">
|
||||||
<AuthenticatedRoute isAuthenticated={false}>
|
<AuthenticatedRoute>
|
||||||
<RegisterPage />
|
<RegisterPage />
|
||||||
</AuthenticatedRoute>
|
</AuthenticatedRoute>
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/">
|
||||||
<AuthenticatedRoute isAuthenticated={true}>
|
<AuthenticatedRoute>
|
||||||
<HomePage />
|
<HomePage />
|
||||||
</AuthenticatedRoute>
|
</AuthenticatedRoute>
|
||||||
</Route>
|
</Route>
|
||||||
|
|
||||||
|
<Route path="/course/:id">
|
||||||
|
{(params) => {
|
||||||
|
return (
|
||||||
|
<AuthenticatedRoute>
|
||||||
|
<CoursePage id={params.id} />
|
||||||
|
</AuthenticatedRoute>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
</Route>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { useContext, useEffect } from "react";
|
|||||||
import { useLocation } from "wouter";
|
import { useLocation } from "wouter";
|
||||||
import UserContext from "../contexts/UserContext";
|
import UserContext from "../contexts/UserContext";
|
||||||
|
|
||||||
const AuthenticatedRoute = ({ children, isAuthenticated }) => {
|
const AuthenticatedRoute = ({ children, isAuthenticated=true }) => {
|
||||||
const { currentUser } = useContext(UserContext);
|
const { currentUser } = useContext(UserContext);
|
||||||
const [location, setLocation] = useLocation();
|
const [location, setLocation] = useLocation();
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ const CoursesWidget = ({ className = "" }) => {
|
|||||||
const { currentUser } = useContext(UserContext);
|
const { currentUser } = useContext(UserContext);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (!currentUser.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
makeRequest({ url: `http://localhost:5000/user/${currentUser.id}/courses` })
|
makeRequest({ url: `http://localhost:5000/user/${currentUser.id}/courses` })
|
||||||
.then((resp) => resp.json())
|
.then((resp) => resp.json())
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
@@ -28,7 +31,9 @@ const CoursesWidget = ({ className = "" }) => {
|
|||||||
className="col col-lg-2"
|
className="col col-lg-2"
|
||||||
>
|
>
|
||||||
<Card role="button" className="m-2" style={{ width: "300px" }}>
|
<Card role="button" className="m-2" style={{ width: "300px" }}>
|
||||||
<h2 className="text-center py-5 border">{course.course_code}</h2>
|
<h2 className="text-center py-5 border">
|
||||||
|
{course.course_code}
|
||||||
|
</h2>
|
||||||
<Card.Body>
|
<Card.Body>
|
||||||
<Card.Title>{course.name}</Card.Title>
|
<Card.Title>{course.name}</Card.Title>
|
||||||
<Card.Text>{course.instructor}</Card.Text>
|
<Card.Text>{course.instructor}</Card.Text>
|
||||||
|
|||||||
30
frontend/src/pages/CoursePage.jsx
Normal file
30
frontend/src/pages/CoursePage.jsx
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import { Container } from "react-bootstrap";
|
||||||
|
import MyNavbar from "../components/MyNavbar";
|
||||||
|
import { makeRequest } from "../utils.ts";
|
||||||
|
|
||||||
|
const CoursePage = ({ id }) => {
|
||||||
|
const [courseData, setCourseData] = useState({});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
makeRequest({ url: `http://localhost:5000/course/${id}` })
|
||||||
|
.then((resp) => resp.json())
|
||||||
|
.then((data) => {
|
||||||
|
setCourseData(data);
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<MyNavbar />
|
||||||
|
<Container className="p-5 border">
|
||||||
|
<h1>{courseData.name}</h1>
|
||||||
|
<h4 className="mb-4">{courseData.instructor}</h4>
|
||||||
|
<hr />
|
||||||
|
<h4>Assignments</h4>
|
||||||
|
</Container>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default CoursePage;
|
||||||
Reference in New Issue
Block a user