From 5c18283bf53fb08f4f747350388aa3f15a1deb1c Mon Sep 17 00:00:00 2001 From: acatarinaoaraujo Date: Wed, 8 Nov 2023 02:14:06 -1000 Subject: [PATCH] ability to edit member role --- .../manage-org/modals/AddMemberModal.jsx | 1 - .../my-organization/DeleteMembersModal.jsx | 2 - .../my-organization/OrgMemberTable.jsx | 91 ++++++++++++++++++- 3 files changed, 87 insertions(+), 7 deletions(-) diff --git a/my-app/src/components/manage-org/modals/AddMemberModal.jsx b/my-app/src/components/manage-org/modals/AddMemberModal.jsx index e21dbbe..169d3a6 100644 --- a/my-app/src/components/manage-org/modals/AddMemberModal.jsx +++ b/my-app/src/components/manage-org/modals/AddMemberModal.jsx @@ -18,7 +18,6 @@ const AddMemberModal = ({ id, orgs }) => { } }, [status]); - console.log(orgs); async function registerUser(user) { try { diff --git a/my-app/src/components/my-organization/DeleteMembersModal.jsx b/my-app/src/components/my-organization/DeleteMembersModal.jsx index ecb8913..84852a6 100644 --- a/my-app/src/components/my-organization/DeleteMembersModal.jsx +++ b/my-app/src/components/my-organization/DeleteMembersModal.jsx @@ -16,8 +16,6 @@ const DeleteMembersModal = ({ id, member }) => { console.log(err); } } - console.log(member); - console.log(member._id); function onSubmit(event) { event.preventDefault(); diff --git a/my-app/src/components/my-organization/OrgMemberTable.jsx b/my-app/src/components/my-organization/OrgMemberTable.jsx index d69fb71..9c7b0f8 100644 --- a/my-app/src/components/my-organization/OrgMemberTable.jsx +++ b/my-app/src/components/my-organization/OrgMemberTable.jsx @@ -2,9 +2,52 @@ import PropTypes from "prop-types"; import { TrashIcon, PencilIcon } from "@heroicons/react/24/solid"; import DeleteMembersModal from "./DeleteMembersModal"; import { useSession } from "next-auth/react"; +import { useState } from "react"; const OrgMemberTable = ({ members }) => { const { data: session, status } = useSession(); + const [editingRole, setEditingRole] = useState({ index: -1, role: "" }); + + const toggleEditing = (index, role) => { + setEditingRole({ index, role }); + }; + + // Update role using API function + const updateRole = async (userId, newRole) => { + try { + const res = await fetch(`/api/mongo/user/id/${userId}`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ role: newRole }), + }); + + if (res.status === 200) { + console.log("Role updated successfully"); + return true; + } else { + console.error("Failed to update role"); + return false; + } + } catch (error) { + console.error("Failed to update role:", error); + return false; + } + }; + + // Update role when Save is clicked + const saveRole = async (userId, newRole) => { + if (await updateRole(userId, newRole)) { + console.log("Role updated successfully: " + newRole); + } + setEditingRole({ index: -1, role: "" }); + }; + + // Function to cancel the role edit + const cancelEdit = () => { + setEditingRole({ index: -1, role: "" }); + }; return (
@@ -16,7 +59,7 @@ const OrgMemberTable = ({ members }) => { Last Name Email Role - {session?.user.role != "org_member" && } + {session?.user.role !== "org_member" && } @@ -34,10 +77,50 @@ const OrgMemberTable = ({ members }) => { {member.lastName} {member.email} - {member.role} - + {editingRole.index === index ? ( +
+ + setEditingRole({ + index: editingRole.index, + role: e.target.value, + }) + } + /> + +
+ + + +
+
+ ) : ( + // Render role as text with PencilIcon when not editing +
+ {member.role} + {editingRole.index !== index && ( + toggleEditing(index, member.role)} + /> + )} +
+ )} - {session?.user.role != "org_member" && ( + {session?.user.role !== "org_member" && (