'use client'; import { motion, AnimatePresence } from "framer-motion"; import { Button } from "@/components/ui/button"; import { Heart, Menu, X, LogOut } from "lucide-react"; import { ThemeToggle } from "@/components/ThemeToggle"; import { useEffect, useState } from "react"; import { LoginDialog } from "@/components/LoginDialog"; import { SignupDialog } from "@/components/SignupDialog"; import { useRouter, usePathname } from "next/navigation"; import Link from "next/link"; import { useAppTheme } from "@/components/ThemeProvider"; import { useAuth } from "@/hooks/useAuth"; import { toast } from "sonner"; export function Navbar() { const { theme } = useAppTheme(); const isDark = theme === "dark"; const [loginDialogOpen, setLoginDialogOpen] = useState(false); const [signupDialogOpen, setSignupDialogOpen] = useState(false); const [prefillEmail, setPrefillEmail] = useState(undefined); const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const router = useRouter(); const pathname = usePathname(); const isUserDashboard = pathname?.startsWith("/user/dashboard"); const isUserSettings = pathname?.startsWith("/user/settings"); const isUserRoute = pathname?.startsWith("/user/"); const { isAuthenticated, logout, user, isAdmin } = useAuth(); const scrollToSection = (id: string) => { const element = document.getElementById(id); if (element) { element.scrollIntoView({ behavior: "smooth" }); setMobileMenuOpen(false); // Close mobile menu after navigation } }; const handleLoginSuccess = () => { // Check if user is admin/staff/superuser and redirect accordingly // Note: user might not be immediately available, so we check isAdmin from hook // which is computed from the user data const redirectPath = isAdmin ? "/admin/dashboard" : "/user/dashboard"; router.push(redirectPath); setMobileMenuOpen(false); }; const handleLogout = () => { logout(); toast.success("Logged out successfully"); setMobileMenuOpen(false); router.push("/"); }; // Close mobile menu when clicking outside useEffect(() => { if (mobileMenuOpen) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = 'unset'; } return () => { document.body.style.overflow = 'unset'; }; }, [mobileMenuOpen]); return (
Attune Heart Therapy
{/* Desktop Navigation */} {!isUserRoute && (
)} {/* Desktop Actions */}
{!isAuthenticated && !isUserDashboard && ( )} {!isAdmin && ( Book-Now )} {isAuthenticated && ( )}
{/* Mobile Actions */}
{/* Mobile Menu */} {mobileMenuOpen && ( <> {/* Backdrop */} setMobileMenuOpen(false)} /> {/* Mobile Menu Panel */}
{/* Mobile Navigation Links */} {!isUserRoute && ( <> )}
{!isAuthenticated && !isUserDashboard && ( )} {!isAdmin && ( setMobileMenuOpen(false)} className={`text-left text-sm sm:text-base font-medium py-2.5 sm:py-3 px-3 sm:px-4 rounded-lg transition-colors ${isDark ? 'text-gray-300 hover:bg-gray-800' : 'text-gray-700 hover:bg-gray-100'}`} > Book-Now )} {isAuthenticated && ( )}
)}
{/* Login Dialog */} { setLoginDialogOpen(false); // Small delay to ensure dialog closes before opening signup setTimeout(() => { setSignupDialogOpen(true); }, 100); }} /> {/* Signup Dialog */} { setSignupDialogOpen(false); setPrefillEmail(email); // Small delay to ensure dialog closes before opening login setTimeout(() => { setLoginDialogOpen(true); }, 100); }} />
); }