import "./header.css"; import React, { useState } from "react"; import { List, ListItem, ListItemButton, ListItemIcon, ListItemText, SwipeableDrawer, } from "@mui/material"; import Box from "@mui/material/Box"; import AddAPhotoIcon from "@mui/icons-material/AddAPhoto"; import DynamicFeedIcon from "@mui/icons-material/DynamicFeed"; import PersonIcon from "@mui/icons-material/Person"; 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 { useNavigate } from "react-router-dom"; import { useAuth } from "../api/Auth"; function Header() { 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("/"), onlyShowWhen: "always", }, { text: "Create Post", icon: AddAPhotoIcon, onClick: () => navigate("/createpost"), onlyShowWhen: "loggedIn", }, { text: "Profile", icon: PersonIcon, onClick: () => navigate(`/profile/${user?.username}`), onlyShowWhen: "loggedIn", }, { text: "About", icon: InfoIcon, onClick: () => navigate("/about"), onlyShowWhen: "always", }, { text: "Log Out", icon: LogoutIcon, onClick: logout, onlyShowWhen: "loggedIn", }, { text: "Log In", icon: ExitToAppIcon, onClick: () => navigate("/login"), onlyShowWhen: "loggedOut", }, { text: "Sign Up", icon: FollowTheSignsIcon, onClick: () => navigate("/register"), onlyShowWhen: "loggedOut", }, ]; 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 navigate("/")} />

navigate("/")}> Feather Feed

menu
setIsOpen(false)} onOpen={() => setIsOpen(true)} > {DrawerList} ); } export default Header;