dishplanner/frontend/app/components/layout/NavBar.tsx

80 lines
3.3 KiB
TypeScript
Raw Normal View History

2025-10-13 14:57:11 +02:00
import React, { useState } from "react";
2025-11-09 13:09:22 +01:00
import { Link, useNavigate } from "react-router";
import useRoutes from "~/hooks/useRoutes";
import MobileDropdownMenu from "~/components/features/navbar/MobileDropdownMenu";
import { useAuth } from "~/context/AuthContext";
2025-10-13 14:57:11 +02:00
const NavBar = () => {
const [isOpen, setIsOpen] = useState(false);
const routes = useRoutes();
2025-11-09 13:09:22 +01:00
const navigate = useNavigate();
2025-10-13 14:57:11 +02:00
const {isAuthenticated, logout} = useAuth();
const handleLogout = (e: React.MouseEvent) => {
e.preventDefault();
logout();
2025-11-09 13:09:22 +01:00
navigate('/login', { replace: true });
2025-10-13 14:57:11 +02:00
};
return (
<nav className="border-b-2 border-secondary shadow-sm z-50 mb-8">
<div className="relative flex justify-between items-center px-4 lg:px-8 py-2 lg:container lg:mx-auto">
{/* Logo */}
2025-11-09 13:09:22 +01:00
<Link to={routes.home()} className="pt-2 text-2xl font-syncopate text-primary">
2025-10-13 14:57:11 +02:00
DISH PLANNER
</Link>
{/* Hamburger Menu - For Mobile View */}
{ isAuthenticated && (
<>
<button
className="text-primary w-8 h-8 md:hidden flex items-center justify-center"
onClick={() => setIsOpen(!isOpen)} // Toggle menu visibility
aria-label="Toggle menu"
>
<svg
xmlns="http://www.w3.org/2000/svg"
className="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d={isOpen ? "M6 18L18 6M6 6l12 12" : "M4 6h16M4 12h16M4 18h16"}
/>
</svg>
</button>
{/* Desktop Menu */}
<div className="hidden md:flex space-x-6">
2025-11-09 13:09:22 +01:00
<Link to={routes.home()} className="text-accent-blue hover:background-secondary">
2025-10-13 14:57:11 +02:00
Home
</Link>
2025-11-09 13:09:22 +01:00
<Link to={routes.dish.index()} className="text-accent-blue hover:background-secondary">
2025-10-13 14:57:11 +02:00
Dishes
</Link>
2025-11-09 13:09:22 +01:00
<Link to={routes.user.index()} className="text-accent-blue hover:background-secondary">
2025-10-13 14:57:11 +02:00
Users
</Link>
2025-11-09 13:09:22 +01:00
<Link to={routes.schedule.history()} className="text-accent-blue hover:background-secondary">
2025-10-13 14:57:11 +02:00
History
</Link>
2025-11-09 13:09:22 +01:00
<Link to={routes.auth.login()}
2025-10-13 14:57:11 +02:00
onClick={handleLogout}
className="text-primary text-right hover:background-secondary">
2025-10-13 14:57:11 +02:00
Logout
</Link>
</div>
<MobileDropdownMenu isOpen={isOpen} setIsOpen={setIsOpen} handleLogout={handleLogout} />
</>
)}
</div>
</nav>
);
};
export default NavBar;