diff --git a/code/frontend/src/components/Header.tsx b/code/frontend/src/components/Header.tsx index 78f7736..4b2b282 100644 --- a/code/frontend/src/components/Header.tsx +++ b/code/frontend/src/components/Header.tsx @@ -1,12 +1,12 @@ import "./header.css"; import React, { useState } from "react"; import { - List, - ListItem, - ListItemButton, - ListItemIcon, - ListItemText, - SwipeableDrawer, + List, + ListItem, + ListItemButton, + ListItemIcon, + ListItemText, + SwipeableDrawer, } from "@mui/material"; import Box from "@mui/material/Box"; import AddAPhotoIcon from "@mui/icons-material/AddAPhoto"; @@ -16,137 +16,124 @@ import InfoIcon from "@mui/icons-material/Info"; import LogoutIcon from "@mui/icons-material/Logout"; import ExitToAppIcon from "@mui/icons-material/ExitToApp"; import FollowTheSignsIcon from "@mui/icons-material/FollowTheSigns"; -import { Link } from "react-router-dom"; +import { useNavigate, replace } from "react-router-dom"; import { useAuth } from "../api/Auth"; function Header() { - const [isOpen, setIsOpen] = useState(false); - const toggleMenu = () => { - setIsOpen(!isOpen); - }; - const { logout, user } = useAuth(); - const iconList = [ - DynamicFeedIcon, - AddAPhotoIcon, - PersonIcon, - InfoIcon, - LogoutIcon, - ExitToAppIcon, - FollowTheSignsIcon, - ]; - const routerLinksList = [ - "/feed", - "/createpost", - "/profile", - "/about", - "/login", - "/register", - ]; + interface ListItemAttributes { + text: string; + icon: React.ElementType; + onClick: () => void; + onlyShowWhen: "loggedIn" | "loggedOut" | "always"; + } + const navigate = useNavigate(); + const [isOpen, setIsOpen] = useState(false); + const toggleMenu = () => { + setIsOpen(!isOpen); + }; + const { logout, user } = useAuth(); + const ListItems: ListItemAttributes[] = [ + { + text: "Feed", + icon: DynamicFeedIcon, + onClick: () => navigate("/feed", { replace: true }), + onlyShowWhen: "always", + }, + { + text: "Create Post", + icon: AddAPhotoIcon, + onClick: () => navigate("/createpost", { replace: true }), + onlyShowWhen: "loggedIn", + }, + { + text: "Profile", + icon: PersonIcon, + onClick: () => navigate("/profile", { replace: true }), + onlyShowWhen: "loggedIn", + }, + { + text: "About", + icon: InfoIcon, + onClick: () => navigate("/about", { replace: true }), + onlyShowWhen: "always", + }, + { + text: "Log Out", + icon: LogoutIcon, + onClick: logout, + onlyShowWhen: "loggedIn", + }, + { + text: "Log In", + icon: ExitToAppIcon, + onClick: () => navigate("/login", { replace: true }), + onlyShowWhen: "loggedOut", + }, + { + text: "Sign Up", + icon: FollowTheSignsIcon, + onClick: () => navigate("/register", { replace: true }), + onlyShowWhen: "loggedOut", + }, + ]; - const DrawerList = ( - setIsOpen(false)}> - - {["Feed", "Create Post", "Profile", "About Us"].map((text, index) => ( - - - - {React.createElement(iconList[index])} - - - - - ))} - {user && ( - - - - {React.createElement(iconList[4])} - - - - - )} - {!user && ( - <> - - - - {React.createElement(iconList[5])} - - - - - - - - {React.createElement(iconList[6])} - - - - {" "} - - )} - - - ); + const DrawerList = ( + setIsOpen(false)}> + + {ListItems.map((ListItemObject, index) => + ListItemObject.onlyShowWhen == "always" || + (ListItemObject.onlyShowWhen == "loggedIn" && user) || + (ListItemObject.onlyShowWhen == "loggedOut" && !user) ? ( + + + + {React.createElement(ListItemObject.icon)} + + + + + ) : null + )} + + + ); - return ( - <> -
- featherIcon -

Feather Feed

- menu -
- setIsOpen(false)} - onOpen={() => setIsOpen(true)} - > - {DrawerList} - - - ); + return ( + <> +
+ featherIcon +

Feather Feed

+ menu +
+ setIsOpen(false)} + onOpen={() => setIsOpen(true)} + > + {DrawerList} + + + ); } -// EXPORT VARIABLES export default Header;