From 14aab045f9624c468de90f2f0b6fdcc27c36853b Mon Sep 17 00:00:00 2001 From: Kristopher Santos Date: Fri, 28 Mar 2025 22:36:59 +0800 Subject: [PATCH] FIX: FE Role Validation - Disabled tool bar for Viewer - Disabled version control for Viewer - Display save button on role change --- src/components/modals/ShareModal.tsx | 37 +++++++++++++++++++++++++++- src/layouts/BottomMiddleBar.tsx | 6 ++--- src/layouts/TopRightBar.tsx | 3 ++- src/pages/editor/index.tsx | 1 - 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/components/modals/ShareModal.tsx b/src/components/modals/ShareModal.tsx index 4b90670..dca300b 100644 --- a/src/components/modals/ShareModal.tsx +++ b/src/components/modals/ShareModal.tsx @@ -60,6 +60,7 @@ function ShareModal({ context, id }: ContextModalProps) { // useState to keep track project members locally. const [localMembers, setLocalMembers] = useState([]); const [localRemovedMembers, setLocalRemovedMembers] = useState([]); + const [localUpdatedMembers, setLocalUpdatedMembers] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const currentUserRole = useMemo(() => { @@ -157,6 +158,35 @@ function ShareModal({ context, id }: ContextModalProps) { }; const handleUpdateRole = (memberId: string, newRole: string) => { + const updateMember = localMembers.find(member => member.id === memberId) + if (!updateMember) return + + if (localUpdatedMembers.some(member => member.id === memberId)) { + if(selectedProject && selectedProject.id && + newRole === projectMembers[selectedProject.id].find(origMem => origMem.id === memberId)?.role + ) { + setLocalUpdatedMembers( + localUpdatedMembers.filter((member) => + member.id !== memberId + ) + ) + } else { + setLocalUpdatedMembers( + localUpdatedMembers.map((member) => + member.id === memberId ? { ...member, role: newRole } : member + ) + ) + } + } else { + setLocalUpdatedMembers([ + ...localUpdatedMembers, + { + ...updateMember, + role: newRole + } + ]) + } + setLocalMembers((prev) => prev.map((member) => member.id === memberId ? { ...member, role: newRole } : member @@ -207,6 +237,7 @@ function ShareModal({ context, id }: ContextModalProps) { await fetchProjectMembers(selectedProject.id); setLocalRemovedMembers([]) + setLocalUpdatedMembers([]) showNotification({ color: "green", @@ -383,7 +414,11 @@ function ShareModal({ context, id }: ContextModalProps) { {(currentUserRole === "Owner" || currentUserRole === "Admin") - && (members.some((member) => member.id.startsWith("temp-")) || localRemovedMembers.length > 0) && ( + && ( + members.some((member) => member.id.startsWith("temp-")) || + localRemovedMembers.length > 0 || + localUpdatedMembers.length > 0 + ) && (