import { useEffect, useRef, useState } from "react"; import { Link } from "react-router-dom"; import { toast } from "react-toastify"; import axiosInstance, { baseURL } from "../api/axiosInstance"; import Logo from "../assets/logo-finkwave.png"; import { useAuth } from "../context/authContext"; interface NavProps { isSidebarOpen?: boolean; onToggleSidebar?: () => void; } const Nav = ({ isSidebarOpen = false, onToggleSidebar }: NavProps) => { const { user, setUser, isAuthLoading } = useAuth(); const [isDropdownOpen, setIsDropdownOpen] = useState(false); const dropdownRef = useRef(null); const handleLogout = async (e: React.MouseEvent) => { e.preventDefault(); try { await axiosInstance.post("/auth/logout"); setUser(undefined); setIsDropdownOpen(false); toast.success("Logout successful!"); } catch (error) { console.error("Logout failed:", error); toast.error("Logout failed!"); } }; useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if ( dropdownRef.current && !dropdownRef.current.contains(event.target as Node) ) { setIsDropdownOpen(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, []); return (
{onToggleSidebar && ( )} Finkwave Logo
{!isAuthLoading && (
{user ? (
{isDropdownOpen && (
setIsDropdownOpen(false)} > Account
)}
) : (
Login Register
)}
)}
); }; export default Nav;