'use client'; import { useTranslations } from 'next-intl'; import React from 'react'; import { PageLink } from '#web-runtime/components/links'; import type { LanguageAlternative, NavigationLink, SiteMenu } from '#web-runtime/types'; import { Button } from '#shared/ui/Button'; import LanguageAlternatives from './LanguageAlternatives'; function Chevron({ open }: { open: boolean }) { return ( ); } function MenuLink({ link, className }: { link: NavigationLink; className: string }) { return ; } export default function HeaderNav({ menus, ctaItems, languageAlternatives }: { menus: SiteMenu[]; ctaItems: NavigationLink[]; languageAlternatives: LanguageAlternative[]; }) { const t = useTranslations('Components.Navigation'); const [openMenu, setOpenMenu] = React.useState(null); const [mobileOpen, setMobileOpen] = React.useState(false); const rootRef = React.useRef(null); const visibleMenus = menus.filter((menu) => menu.items.length > 0); const hasMenuContent = visibleMenus.length > 0 || ctaItems.length > 0; const anythingOpen = openMenu !== null || mobileOpen; const closeAll = React.useCallback(() => { setOpenMenu(null); setMobileOpen(false); }, []); React.useEffect(() => { if (!anythingOpen) { return; } const handlePointerDown = (event: PointerEvent) => { if (rootRef.current && !rootRef.current.contains(event.target as Node)) { closeAll(); } }; const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') { closeAll(); } }; document.addEventListener('pointerdown', handlePointerDown); document.addEventListener('keydown', handleKeyDown); return () => { document.removeEventListener('pointerdown', handlePointerDown); document.removeEventListener('keydown', handleKeyDown); }; }, [anythingOpen, closeAll]); return (
{visibleMenus.length > 0 ? ( ) : null}
{ctaItems.map((item, index) => ( ))} {hasMenuContent ? ( ) : null}
{mobileOpen ? ( ) : null}
); }