Skip to content

Commit

Permalink
ability to edit member role
Browse files Browse the repository at this point in the history
  • Loading branch information
acatarinaoaraujo committed Nov 8, 2023
1 parent 21b6f70 commit 5c18283
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 7 deletions.
1 change: 0 additions & 1 deletion my-app/src/components/manage-org/modals/AddMemberModal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ const AddMemberModal = ({ id, orgs }) => {
}
}, [status]);

console.log(orgs);

async function registerUser(user) {
try {
Expand Down
2 changes: 0 additions & 2 deletions my-app/src/components/my-organization/DeleteMembersModal.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ const DeleteMembersModal = ({ id, member }) => {
console.log(err);
}
}
console.log(member);
console.log(member._id);

function onSubmit(event) {
event.preventDefault();
Expand Down
91 changes: 87 additions & 4 deletions my-app/src/components/my-organization/OrgMemberTable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<div className="overflow-x-auto bg-white">
Expand All @@ -16,7 +59,7 @@ const OrgMemberTable = ({ members }) => {
<th>Last Name</th>
<td>Email</td>
<td>Role</td>
{session?.user.role != "org_member" && <td></td>}
{session?.user.role !== "org_member" && <td></td>}
</tr>
</thead>
<tbody>
Expand All @@ -34,10 +77,50 @@ const OrgMemberTable = ({ members }) => {
<th>{member.lastName}</th>
<td>{member.email}</td>
<td>
<span className="inline-block pr-1">{member.role}</span>
<PencilIcon className="w-4 h-4 text-blue-600 inline-block" />
{editingRole.index === index ? (
<div className="flex-col items-center">
<input
type="text"
className="text-gray-500 bg-white border-2 border-gray-200 rounded-md p-1 w-28 focus:outline-none focus:border-blue"
value={editingRole.role}
onChange={(e) =>
setEditingRole({
index: editingRole.index,
role: e.target.value,
})
}
/>

<div className="flex-row mt-1">
<button
onClick={() => saveRole(member._id, editingRole.role)}
className="bg-blue-600 text-white hover:bg-blue-500 px-2 py-0.3 rounded"
>
Save
</button>

<button
onClick={cancelEdit}
className="bg-red-600 text-white hover:bg-red-500 px-2 py-0.3 rounded ml-2"
>
Cancel
</button>
</div>
</div>
) : (
// Render role as text with PencilIcon when not editing
<div className="relative">
{member.role}
{editingRole.index !== index && (
<PencilIcon
className="w-4 h-4 text-blue-600 absolute top-0 right-0 cursor-pointer"
onClick={() => toggleEditing(index, member.role)}
/>
)}
</div>
)}
</td>
{session?.user.role != "org_member" && (
{session?.user.role !== "org_member" && (
<td>
<button
onClick={() =>
Expand Down

0 comments on commit 5c18283

Please sign in to comment.