"use client" import type { DrupalMenuItem } from "next-drupal" import { Home, FolderOpen, ChevronDown } from "lucide-react" import { useState, useRef, useEffect } from "react" const drupalBaseUrl = process.env.NEXT_PUBLIC_DRUPAL_BASE_URL ?? "" function getHref(url: string): string { if (drupalBaseUrl && url.startsWith(drupalBaseUrl)) { return url.slice(drupalBaseUrl.length) || "/" } return url } function NavLink({ item, isDropdown = false, onNavigate, }: { item: DrupalMenuItem isDropdown?: boolean onNavigate?: () => void }) { const children = item.items?.filter((child) => child.enabled !== false) ?? [] const hasChildren = children.length > 0 const linkClass = isDropdown ? "block rounded-sm px-4 py-2 text-emerald-500 outline-none transition-colors duration-200 ease-out hover:underline focus-visible:ring-2 focus-visible:ring-emerald-400 focus-visible:ring-inset" : "flex items-center gap-1.5 rounded-sm text-emerald-500 outline-none transition-colors duration-200 ease-out hover:text-emerald-400 hover:underline focus-visible:ring-2 focus-visible:ring-emerald-400 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-800" if (hasChildren) { return (
{item.title}
{children.map((child) => ( {child.title} ))}
) } const href = getHref(item.url) const isHome = href === "/" return ( {isHome && } {item.title} ) } interface MainNavClientProps { menuItems: DrupalMenuItem[] } export function MainNavClient({ menuItems }: MainNavClientProps) { const [isOpen, setIsOpen] = useState(false) const menuRef = useRef(null) const enabledItems = menuItems.filter((item) => item.enabled !== false) useEffect(() => { function handleClickOutside(event: MouseEvent) { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setIsOpen(false) } } if (isOpen) { document.addEventListener("click", handleClickOutside) } return () => document.removeEventListener("click", handleClickOutside) }, [isOpen]) const closeMenu = () => setIsOpen(false) return ( ) }