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 (
- <>
-
-
- Feather Feed
-
-
- setIsOpen(false)}
- onOpen={() => setIsOpen(true)}
- >
- {DrawerList}
-
- >
- );
+ return (
+ <>
+
+
+ Feather Feed
+
+
+ setIsOpen(false)}
+ onOpen={() => setIsOpen(true)}
+ >
+ {DrawerList}
+
+ >
+ );
}
-// EXPORT VARIABLES
export default Header;