diff --git a/apps/spa/src/components/DynamicAnnouncementBar.tsx b/apps/spa/src/components/DynamicAnnouncementBar.tsx index 396f294..9b7158a 100644 --- a/apps/spa/src/components/DynamicAnnouncementBar.tsx +++ b/apps/spa/src/components/DynamicAnnouncementBar.tsx @@ -16,7 +16,7 @@ export default function DynamicAnnouncementBar({ payload }: DynamicAnnouncementB return (
{ - 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 }) // 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) {} } - return () => window.removeEventListener('scroll', onScroll) + return () => { + window.removeEventListener('scroll', onScroll) + clearTimeout(timer) + } }, []) // Close mobile menu on route change @@ -68,11 +83,17 @@ export default function Navbar({ categories = [], topOffsetClassName = 'top-0' } const navLinkClass = ({ isActive }: { isActive: boolean }) => 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 ( <> {/* ── NAVBAR BAR ── */}