From b3083134e07c4be64b8ac80fcf8a5133120d111f Mon Sep 17 00:00:00 2001 From: Niklas <198754647+BlankAccountsUsername@users.noreply.github.com> Date: Sun, 29 Jun 2025 14:26:56 +0200 Subject: [PATCH] change about us to about, use useNavigate instead of component/to, intitialize List items as Objects --- code/frontend/src/App.tsx | 42 ++-- code/frontend/src/components/Header.tsx | 251 +++++++++++------------- code/frontend/src/components/header.css | 2 +- 3 files changed, 141 insertions(+), 154 deletions(-) diff --git a/code/frontend/src/App.tsx b/code/frontend/src/App.tsx index 3273e5e..8d01752 100644 --- a/code/frontend/src/App.tsx +++ b/code/frontend/src/App.tsx @@ -11,27 +11,27 @@ import { Auth } from "./api/Auth"; function App() { - return ( - - - - - - } - > - } - > - }> - - - - - - ); + return ( + + + + + + } + > + } + > + }> + + + + + + ); } export default App; diff --git a/code/frontend/src/components/Header.tsx b/code/frontend/src/components/Header.tsx index 1c47d0e..5ec5b38 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,139 +16,126 @@ 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"; // TODO: Dinge so umstrukturieren, dass der State für das offene menü in Header ist und das Menü auch in Header, sodass es mit width 100% die volle breite einnehmen kann 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; diff --git a/code/frontend/src/components/header.css b/code/frontend/src/components/header.css index a47ef44..9a4f26a 100644 --- a/code/frontend/src/components/header.css +++ b/code/frontend/src/components/header.css @@ -6,7 +6,7 @@ justify-content: space-between; align-items: center; flex-shrink: 0; - position: fixed; + position: sticky; top: 0; left: 0; border-radius: 0rem !important;
Feather Feed