From 81ee35aa78872f4d24e14388cb08b8ff5e5d816e Mon Sep 17 00:00:00 2001 From: edwin6666 Date: Thu, 18 Jan 2024 00:52:43 -0400 Subject: [PATCH] Feat: implementation of user options -the user can see which email is in session -has special options -option dropdown --- src/components/Navbar/Dropdown.jsx | 143 +++++++++++++++++++++++++++++ src/components/Navbar/Navbar.jsx | 54 +---------- 2 files changed, 148 insertions(+), 49 deletions(-) create mode 100644 src/components/Navbar/Dropdown.jsx diff --git a/src/components/Navbar/Dropdown.jsx b/src/components/Navbar/Dropdown.jsx new file mode 100644 index 0000000..ca9bd27 --- /dev/null +++ b/src/components/Navbar/Dropdown.jsx @@ -0,0 +1,143 @@ +import React, { useState, useRef, useEffect } from "react"; +import { Link } from "react-router-dom"; +import { useRouteVariables } from "./Location"; +import useAuth from "../../hooks/useAuth"; +import Cookies from "js-cookie"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faSignOutAlt,faUser } from "@fortawesome/free-solid-svg-icons"; + +const Dropdown = () => { + const [isMenuOpen, setIsMenuOpen] = useState(false); + const dropdownRef = useRef(null); + const { + isHomePage, + isAdminPage, + hideHomeLink, + isFormPage, + userListPage, + isSubscribePage, + isDetailPage, + isLoginPage, + } = useRouteVariables(); + const { setAuth } = useAuth(); + + const handleLogout = () => { + setAuth({ roles: null, token: null }); + Cookies.remove("token"); + Cookies.remove("roles"); + window.location = "/login"; + }; + + const toggleMenu = () => { + setIsMenuOpen((prevIsMenuOpen) => !prevIsMenuOpen); + }; + + const closeMenu = () => { + setIsMenuOpen(false); + }; + + const handleClickOutside = (event) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target)) { + closeMenu(); + } + }; + + const handleMenuItemClick = () => { + closeMenu(); + }; + + useEffect(() => { + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( +
+ + +
+ +
+

+ {Cookies.get("username")} +

+

+ {Cookies.get("email")} +

+
+ + +
+ + {!hideHomeLink && + !isAdminPage && + !isFormPage && + !userListPage && + !isSubscribePage && + !isDetailPage && ( + + Subscribe + + )} + + {isHomePage && ( + + Support + + )} + +
+ {!isLoginPage && ( +
setIsMenuOpen(false)}> + +
+ )} +
+
+ ); +}; + +export default Dropdown; diff --git a/src/components/Navbar/Navbar.jsx b/src/components/Navbar/Navbar.jsx index 699bf96..96d7994 100644 --- a/src/components/Navbar/Navbar.jsx +++ b/src/components/Navbar/Navbar.jsx @@ -1,11 +1,8 @@ import React, { useState } from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faSignOutAlt } from "@fortawesome/free-solid-svg-icons"; import { Link } from "react-router-dom"; -import useAuth from "../../hooks/useAuth"; -import Cookies from "js-cookie"; import { useLocation } from "react-router-dom"; import { useRouteVariables } from "./Location"; +import Dropdown from "./Dropdown"; const Navbar = () => { const location = useLocation(); const { @@ -20,16 +17,7 @@ const Navbar = () => { isHomePage, isContactPage, isEmailPage, - isConfirmPage, } = useRouteVariables(); - const { setAuth } = useAuth(); - - const handleLogout = () => { - setAuth({ roles: null, token: null }); - Cookies.remove("token"); - Cookies.remove("roles"); - window.location = "/login"; - }; const [open, setOpen] = useState(false); @@ -42,7 +30,7 @@ const Navbar = () => { return (
-