This commit is contained in:
Your Name committed 2026-06-12 20:17:48 -04:00
1 parent 3ddffff46c
commit decc6282a6
2 files changed
+26 -5

No files matched your search

@@ -16,7 +16,7 @@ export default function DynamicAnnouncementBar({ payload }: DynamicAnnouncementB
return ( return (
<div <div
className="w-full py-2.5 px-4 text-center text-[10px] sm:text-xs tracking-[0.2em] font-semibold uppercase relative z-30 overflow-hidden" className="announcement-bar w-full py-2.5 px-4 text-center text-[10px] sm:text-xs tracking-[0.2em] font-semibold uppercase relative z-30 overflow-hidden"
style={{ backgroundColor, color: textColor }} style={{ backgroundColor, color: textColor }}
> >
<Swiper <Swiper
+25 -4
View File
@@ -19,6 +19,7 @@ export default function Navbar({ categories = [], topOffsetClassName = 'top-0' }
const [searchQuery, setSearchQuery] = useState('') const [searchQuery, setSearchQuery] = useState('')
const [scrolled, setScrolled] = useState(false) const [scrolled, setScrolled] = useState(false)
const [localOrdersCount, setLocalOrdersCount] = useState(0) const [localOrdersCount, setLocalOrdersCount] = useState(0)
const [hasAnnouncement, setHasAnnouncement] = useState(false)
const navigate = useNavigate() const navigate = useNavigate()
const { toggleCart, getCartCount } = useCartStore() const { toggleCart, getCartCount } = useCartStore()
@@ -33,9 +34,20 @@ export default function Navbar({ categories = [], topOffsetClassName = 'top-0' }
localStorage.setItem('homaroma_lang', newLang) localStorage.setItem('homaroma_lang', newLang)
} }
// Detect scroll for navbar bg change // Detect scroll and announcement bar presence
useEffect(() => { useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 20) const checkAnnouncement = () => {
const el = document.querySelector('.announcement-bar')
setHasAnnouncement(!!el)
}
checkAnnouncement()
const timer = setTimeout(checkAnnouncement, 300)
const onScroll = () => {
setScrolled(window.scrollY > 20)
checkAnnouncement()
}
window.addEventListener('scroll', onScroll, { passive: true }) window.addEventListener('scroll', onScroll, { passive: true })
// Check local orders periodically (or just on mount) // Check local orders periodically (or just on mount)
@@ -44,7 +56,10 @@ export default function Navbar({ categories = [], topOffsetClassName = 'top-0' }
try { setLocalOrdersCount(JSON.parse(stored).length) } catch (e) {} try { setLocalOrdersCount(JSON.parse(stored).length) } catch (e) {}
} }
return () => window.removeEventListener('scroll', onScroll) return () => {
window.removeEventListener('scroll', onScroll)
clearTimeout(timer)
}
}, []) }, [])
// Close mobile menu on route change // Close mobile menu on route change
@@ -68,11 +83,17 @@ export default function Navbar({ categories = [], topOffsetClassName = 'top-0' }
const navLinkClass = ({ isActive }: { isActive: boolean }) => const navLinkClass = ({ isActive }: { isActive: boolean }) =>
isActive ? 'text-spa-forest font-semibold' : 'text-spa-stone hover:text-spa-forest transition-colors' isActive ? 'text-spa-forest font-semibold' : 'text-spa-stone hover:text-spa-forest transition-colors'
const computedOffset = topOffsetClassName !== 'top-0'
? topOffsetClassName
: (hasAnnouncement ? 'top-[32px] md:top-[40px]' : 'top-0')
const finalTopClassName = scrolled ? 'top-0' : computedOffset
return ( return (
<> <>
{/* ── NAVBAR BAR ── */} {/* ── NAVBAR BAR ── */}
<nav <nav
className={`fixed ${topOffsetClassName} w-full z-50 transition-all duration-300 px-4 md:px-6 py-3.5 md:py-4 flex justify-between items-center bg-white/80 backdrop-blur-xl border-b border-black/5 ${ className={`fixed ${finalTopClassName} w-full z-50 transition-all duration-300 px-4 md:px-6 py-3.5 md:py-4 flex justify-between items-center bg-white/80 backdrop-blur-xl border-b border-black/5 ${
scrolled ? 'shadow-lg shadow-black/5' : 'shadow-none' scrolled ? 'shadow-lg shadow-black/5' : 'shadow-none'
}`} }`}
> >