setPage("")}
@@ -188,12 +214,21 @@ export default function TeacherDashboard({user}: Props) {
Planned Assignments ({assignments.filter(futureFilter).length})
-
+
setIsCreatingAssignment(true)}
+ className="w-[250px] h-[200px] flex flex-col gap-2 items-center justify-center bg-white hover:bg-mti-purple-ultralight text-mti-purple-light hover:text-mti-purple-dark border border-mti-gray-platinum hover:drop-shadow p-4 cursor-pointer rounded-xl transition ease-in-out duration-300">
New Assignment
{assignments.filter(futureFilter).map((a) => (
-
setSelectedAssignment(a)} key={a.id} />
+ {
+ setSelectedAssignment(a);
+ setIsCreatingAssignment(true);
+ }}
+ key={a.id}
+ />
))}
@@ -299,7 +334,7 @@ export default function TeacherDashboard({user}: Props) {
selectedUser.type === "corporate" || selectedUser.type === "teacher" ? () => setPage("students") : undefined
}
onViewTeachers={selectedUser.type === "corporate" ? () => setPage("teachers") : undefined}
- {...selectedUser}
+ user={selectedUser}
/>
)}
diff --git a/src/pages/(admin)/Lists/UserList.tsx b/src/pages/(admin)/Lists/UserList.tsx
index 66dc614b..57b271db 100644
--- a/src/pages/(admin)/Lists/UserList.tsx
+++ b/src/pages/(admin)/Lists/UserList.tsx
@@ -443,7 +443,7 @@ export default function UserList({user, filter}: {user: User; filter?: (user: Us
setSelectedUser(undefined);
if (shouldReload) reload();
}}
- {...selectedUser}
+ user={selectedUser}
/>
)}
diff --git a/src/pages/api/assignments/[id].tsx b/src/pages/api/assignments/[id].tsx
new file mode 100644
index 00000000..50236691
--- /dev/null
+++ b/src/pages/api/assignments/[id].tsx
@@ -0,0 +1,48 @@
+// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
+import type {NextApiRequest, NextApiResponse} from "next";
+import {app} from "@/firebase";
+import {getFirestore, collection, getDocs, query, where, setDoc, doc, getDoc, deleteDoc} from "firebase/firestore";
+import {withIronSessionApiRoute} from "iron-session/next";
+import {sessionOptions} from "@/lib/session";
+import {uuidv4} from "@firebase/util";
+
+const db = getFirestore(app);
+
+export default withIronSessionApiRoute(handler, sessionOptions);
+
+async function handler(req: NextApiRequest, res: NextApiResponse) {
+ if (!req.session.user) {
+ res.status(401).json({ok: false});
+ return;
+ }
+
+ if (req.method === "GET") return GET(req, res);
+ if (req.method === "PATCH") return PATCH(req, res);
+ if (req.method === "DELETE") return DELETE(req, res);
+
+ res.status(404).json({ok: false});
+}
+
+async function GET(req: NextApiRequest, res: NextApiResponse) {
+ const {id} = req.query;
+
+ const snapshot = await getDoc(doc(db, "assignments", id as string));
+
+ res.status(200).json({...snapshot.data(), id: snapshot.id});
+}
+
+async function DELETE(req: NextApiRequest, res: NextApiResponse) {
+ const {id} = req.query;
+
+ await deleteDoc(doc(db, "assignments", id as string));
+
+ res.status(200).json({ok: true});
+}
+
+async function PATCH(req: NextApiRequest, res: NextApiResponse) {
+ const {id} = req.query;
+
+ await setDoc(doc(db, "assignments", id as string), {assigner: req.session.user?.id, ...req.body}, {merge: true});
+
+ res.status(200).json({ok: true});
+}
diff --git a/src/pages/api/assignments/index.ts b/src/pages/api/assignments/index.ts
index a9b69710..eb59649e 100644
--- a/src/pages/api/assignments/index.ts
+++ b/src/pages/api/assignments/index.ts
@@ -23,11 +23,6 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
}
async function GET(req: NextApiRequest, res: NextApiResponse) {
- if (req.session.user!.type !== "teacher") {
- res.status(403).json({ok: false});
- return;
- }
-
const q = query(collection(db, "assignments"));
const snapshot = await getDocs(q);