From 00442be4b564f0a4526f8a1e41ffcbf03ac91b9a Mon Sep 17 00:00:00 2001 From: julius Date: Tue, 11 Mar 2025 11:14:07 +0100 Subject: [PATCH] fix: context menu and dialog didn't play nice --- src/Avatar.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Avatar.tsx b/src/Avatar.tsx index 5be5a4f..0936106 100644 --- a/src/Avatar.tsx +++ b/src/Avatar.tsx @@ -10,9 +10,10 @@ export default function Avatar() { const { user, onLogout } = useSession(); const [contextMenu, setContextMenu] = useState<{ open: boolean; + allowOpen: boolean; mouseX: number; mouseY: number; - }>({ open: false, mouseX: 0, mouseY: 0 }); + }>({ open: false, allowOpen: true, mouseX: 0, mouseY: 0 }); const contextMenuRef = createRef(); const avatarRef = createRef(); @@ -22,13 +23,16 @@ export default function Avatar() { ]; const handleMenuClick: MouseEventHandler = (event) => { + if (!contextMenu.allowOpen) return; event.preventDefault(); setContextMenu({ open: !contextMenu.open, + allowOpen: false, mouseX: event.clientX + 4, mouseY: event.clientY + 2, }); }; + useEffect(() => { if (contextMenu.open) { document.addEventListener("click", handleCloseContextMenuOutside); @@ -41,6 +45,7 @@ export default function Avatar() { const handleMenuClose = () => { setContextMenu({ ...contextMenu, open: false }); }; + const handleCloseContextMenuOutside: (event: MouseEvent) => void = (ev) => { if ( !( @@ -57,9 +62,10 @@ export default function Avatar() { function handleViewProfile() { handleMenuClose(); + setContextMenu({ ...contextMenu, allowOpen: false }); dialogRef.current?.showModal(); setDialog( -
    +
    • username: {user?.username}
    ); @@ -113,6 +119,7 @@ export default function Avatar() { ref={dialogRef} onClick={(event) => { event.currentTarget.close(); + setContextMenu({ ...contextMenu, allowOpen: true }); }} > {dialog}