diff --git a/frontend/public/tab_logo.png b/frontend/public/tab_logo.png index 25f4045..26ac2ee 100644 Binary files a/frontend/public/tab_logo.png and b/frontend/public/tab_logo.png differ diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 1daea3e..1a7a728 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -3,7 +3,6 @@ import { LanguageProvider } from './context/LanguageContext'; import { AuthProvider, useAuth } from "./auth/AuthProvider"; import ScrollToTop from './components/ScrollToTop'; import Navbar from './components/Navbar'; -import ProfileNavbar from './components/ProfileNavbar'; import Footer from './components/Footer'; import Home from './pages/Home'; import GitHub from './pages/GitHub'; @@ -29,7 +28,7 @@ function AppContent() {
- {user ? : } + } /> diff --git a/frontend/src/components/Navbar.jsx b/frontend/src/components/Navbar.jsx index 1a9ea42..cfeaccc 100644 --- a/frontend/src/components/Navbar.jsx +++ b/frontend/src/components/Navbar.jsx @@ -1,26 +1,31 @@ -import { useState, useEffect } from "react"; +import { useState, useRef, useEffect } from "react"; import { Link, useLocation, useNavigate } from "react-router-dom"; - +import { useAuth } from "../auth/AuthProvider"; import { useLanguage } from "../context/LanguageContext"; +import { SvgProfile, SvgSettings, SvgProducts } from "../components/icons/svgs"; import "../styles/Navbar.css"; +import "../styles/ProfileNavbar.css"; export default function Navbar() { + const { user, clearAuth } = useAuth(); const { language, setLanguage, t } = useLanguage(); const location = useLocation(); const navigate = useNavigate(); - const isHomeRoute = location.pathname === "/" || location.pathname === "/home"; const [scrolled, setScrolled] = useState(false); const [menuOpen, setMenuOpen] = useState(false); + const [dropdownOpen, setDropdownOpen] = useState(false); + const [avatarError, setAvatarError] = useState(false); + const dropdownRef = useRef(null); useEffect(() => { const onScroll = () => { setScrolled(window.scrollY > 40); }; - window.addEventListener("scroll", onScroll); + window.addEventListener("scroll", onScroll, { passive: true }); return () => { window.removeEventListener("scroll", onScroll); @@ -29,8 +34,23 @@ export default function Navbar() { useEffect(() => { setMenuOpen(false); + setDropdownOpen(false); }, [location.pathname]); + useEffect(() => { + const handler = (e) => { + if (dropdownRef.current && !dropdownRef.current.contains(e.target)) { + setDropdownOpen(false); + } + }; + if (dropdownOpen) { + document.addEventListener("mousedown", handler); + } + return () => { + document.removeEventListener("mousedown", handler); + }; + }, [dropdownOpen]); + function isActive(path) { return location.pathname.startsWith(path); } @@ -39,29 +59,41 @@ export default function Navbar() { setMenuOpen((prev) => !prev); } - return ( -