From ae302f8fd9c0c45b8a2c45f91dc4571085c793fd Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Wed, 20 Dec 2023 09:47:09 -0800 Subject: [PATCH] create user menu with sign out button --- frontend/src/components/UserMenu/index.tsx | 60 ++++++++++++++++++++++ frontend/src/layout/AppLayout.tsx | 7 +-- 2 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 frontend/src/components/UserMenu/index.tsx diff --git a/frontend/src/components/UserMenu/index.tsx b/frontend/src/components/UserMenu/index.tsx new file mode 100644 index 0000000..a42a01e --- /dev/null +++ b/frontend/src/components/UserMenu/index.tsx @@ -0,0 +1,60 @@ +import { useState, useRef, useEffect } from 'react'; +import useUser from '../../hooks/useUser'; +import paths from '../../utils/paths'; +import { STORE_TOKEN, STORE_USER } from '../../utils/constants'; + +export default function UserMenu() { + const { user } = useUser(); + const [showMenu, setShowMenu] = useState(false); + const menuRef = useRef(null); + const buttonRef = useRef(); + const handleClose = (event: any) => { + if ( + menuRef.current && + !menuRef.current.contains(event.target) && + !buttonRef.current.contains(event.target) + ) { + setShowMenu(false); + } + }; + + useEffect(() => { + if (showMenu) { + document.addEventListener('mousedown', handleClose); + } + return () => document.removeEventListener('mousedown', handleClose); + }, [showMenu]); + + return ( +
+ + {showMenu && ( +
+
+ +
+
+ )} +
+ ); +} diff --git a/frontend/src/layout/AppLayout.tsx b/frontend/src/layout/AppLayout.tsx index 986198a..294de1f 100644 --- a/frontend/src/layout/AppLayout.tsx +++ b/frontend/src/layout/AppLayout.tsx @@ -3,6 +3,7 @@ import Header from '../components/Header'; import Sidebar from '../components/Sidebar'; import Notifications from '../components/Notifications'; import useUser from '../hooks/useUser'; +import UserMenu from '../components/UserMenu'; interface DefaultLayoutProps { headerEntity: any; @@ -64,11 +65,7 @@ const AppLayout = ({
- - {/* CONVERT TO A COMPONENT AND ADD LOGOUT */} -
- {user?.email?.slice(0, 2).toUpperCase()} -
+