"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 (
)
}
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 (
)
}