From 35e8b2eec3cb56d55c3984a22ed86401849976ea Mon Sep 17 00:00:00 2001 From: Jagraj Aulakh Date: Fri, 14 Apr 2023 16:06:47 -0400 Subject: [PATCH] #46 Manage assignments page shows table of assignments for a specific course. --- frontend/src/App.js | 12 ++ frontend/src/pages/ManageAssignmentsPage.jsx | 159 +++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 frontend/src/pages/ManageAssignmentsPage.jsx diff --git a/frontend/src/App.js b/frontend/src/App.js index 242083c..88dffa6 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -9,6 +9,7 @@ import AssignmentPage from "./pages/AssignmentPage"; import ManagePage from "./pages/ManagePage"; import ManageStudentsPage from "./pages/ManageStudentsPage"; import AuthenticatedRoute from "./components/AuthenticatedRoute"; +import ManageAssignmentsPage from "./pages/ManageAssignmentsPage"; const AuthRoute = ({ isAuthenticated = true, path, children }) => { return ( @@ -70,6 +71,17 @@ function App() { ); }} + + + {(params) => { + return ( + + + + ); + }} + + ); } diff --git a/frontend/src/pages/ManageAssignmentsPage.jsx b/frontend/src/pages/ManageAssignmentsPage.jsx new file mode 100644 index 0000000..08f5518 --- /dev/null +++ b/frontend/src/pages/ManageAssignmentsPage.jsx @@ -0,0 +1,159 @@ +import { useEffect, useState } from "react"; +import { Container, Table, Button, Form } from "react-bootstrap"; +import MyNavbar from "../components/MyNavbar"; +import { makeRequest } from "../utils.ts"; + +const ManageAssignmentsPage = ({ cid }) => { + const [courseData, setCourseData] = useState({}); + const [assignmentData, setAssignmentData] = useState([]); + const [showAddAssignmentForm, setShowAddAssignmentForm] = useState(false); + + const AddAssignmentForm = () => { + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + const [duedate, setDuedate] = useState(""); + + return ( +
+
{ + submitAssignmentForm(name, description, duedate); + }} + > + + Name + setName(e.target.value)} + /> + + + Description + setDescription(e.target.value)} + /> + + + Due Date + setDuedate(e.target.value)} + /> + + +
+
+ ); + }; + + const submitAssignmentForm = (name, description, duedate) => { + makeRequest({ + endpoint: "assignment", + method: "POST", + body: { + name, + description, + course_id: cid, + due_date: duedate, + }, + }); + }; + + const sendDeleteAssignmentRequest = (id) => { + makeRequest({ + endpoint: `assignment/${id}`, + method: "DELETE", + }).then((resp) => { + window.location.reload(); + }); + }; + + useEffect(() => { + makeRequest({ + endpoint: `course/${cid}/assignments`, + method: "GET", + }) + .then((req) => req.json()) + .then(async (data) => { + setAssignmentData(data.assignments); + }) + .catch((err) => { + console.error(err); + }); + + makeRequest({ + endpoint: `course/${cid}`, + method: "GET", + }) + .then((req) => req.json()) + .then(async (data) => { + setCourseData(data); + }) + .catch((err) => { + console.error(err); + }); + }, []); + + return ( +
+ + +

{courseData.name}

+

Manage Assignments

+ + {showAddAssignmentForm && } + + + + + + + + + + + {assignmentData.map((assignment, k) => { + return ( + + + + + + + ); + })} + +
#NameDue dateManage
{assignment.id}{assignment.name}{assignment.due_date} +
+ +
+
+
+
+ ); +}; + +export default ManageAssignmentsPage;