"use client"; import Link from 'next/link' import { useRouter, usePathname } from 'next/navigation' import { useState, useEffect } from 'react' import type { Category } from '@irelax/types' import { ShoppingBag, MapPin } from 'lucide-react' import { useCartStore } from '../store/cartStore' import { useTranslation } from 'react-i18next' interface NavbarProps { categories?: Category[] } export default function Navbar({ categories = [] }: NavbarProps) { const [searchOpen, setSearchOpen] = useState(false) const [mobileOpen, setMobileOpen] = useState(false) const [searchQuery, setSearchQuery] = useState('') const [scrolled, setScrolled] = useState(false) const [localOrdersCount, setLocalOrdersCount] = useState(0) const router = useRouter() const pathname = usePathname() const { toggleCart, getCartCount } = useCartStore() const cartCount = getCartCount() const { t, i18n } = useTranslation() const toggleLanguage = () => { const newLang = i18n.language.startsWith('en') ? 'th' : 'en' i18n.changeLanguage(newLang) localStorage.setItem('irelax_lang', newLang) } // Detect scroll for navbar bg change useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 20) window.addEventListener('scroll', onScroll, { passive: true }) // Check local orders periodically (or just on mount) const stored = localStorage.getItem('irelax_local_orders') if (stored) { try { setLocalOrdersCount(JSON.parse(stored).length) } catch (e) {} } return () => window.removeEventListener('scroll', onScroll) }, []) // Close mobile menu on route change useEffect(() => { setMobileOpen(false) }, [pathname]) // Prevent body scroll when overlays open useEffect(() => { document.body.style.overflow = (searchOpen || mobileOpen) ? 'hidden' : '' return () => { document.body.style.overflow = '' } }, [searchOpen, mobileOpen]) const handleSearch = (e: React.FormEvent) => { e.preventDefault() if (searchQuery.trim()) { router.push(`/search?q=${encodeURIComponent(searchQuery.trim())}`) setSearchOpen(false) setMobileOpen(false) setSearchQuery('') } } const navLinkClass = (path: string) => pathname === path ? 'text-cyan-glow' : 'text-slate-300 hover:text-white transition-colors' return ( <> {/* ── NAVBAR BAR ── */} {/* ── MOBILE DRAWER ── */}
{t('nav.collections')}
{categories.map(cat => ( setMobileOpen(false)} className="flex items-center justify-between px-4 py-2.5 rounded-xl text-sm text-slate-400 hover:text-white hover:bg-white/5 transition-all" > {cat.name} ))}{t('nav.search.title')}
Quick Links