import React, { useRef, useState } from "react"; import { ChevronUp, ChevronDown, Menu as MenuIcon, X as XIcon, ExternalLink } from 'lucide-react'; import { Link } from "@inertiajs/react"; export default function Nav() { const [open, setOpen] = useState(null); const [mobileOpen, setMobileOpen] = useState(false); const [menu, setMenu] = React.useState([]); const navRef = useRef(null); React.useEffect(() => { fetch('/api/navigation-items') .then(res => res.json()) .then(data => setMenu(data)); const handler = (e: KeyboardEvent) => { if (e.key === "Escape") setOpen(null); }; window.addEventListener("keydown", handler); return () => window.removeEventListener("keydown", handler); }, []); const handleKeyDown = (idx: number, hasDropdown: boolean) => ( e: React.KeyboardEvent ) => { if (!hasDropdown) return; if (e.key === "Enter" || e.key === " ") { e.preventDefault(); setOpen(open === idx ? null : idx); setTimeout(() => { const dropdown = navRef.current?.querySelectorAll( `[data-dropdown="${idx}"] a` ); dropdown?.[0]?.focus(); }, 0); } if (e.key === "ArrowDown") { e.preventDefault(); if (open !== idx) { setOpen(idx); setTimeout(() => { const dropdown = navRef.current?.querySelectorAll( `[data-dropdown="${idx}"] a` ); dropdown?.[0]?.focus(); }, 0); } else { const dropdown = navRef.current?.querySelectorAll( `[data-dropdown="${idx}"] a` ); dropdown?.[0]?.focus(); } } if (e.key === "ArrowUp") { e.preventDefault(); if (open !== idx) { setOpen(idx); setTimeout(() => { const dropdown = navRef.current?.querySelectorAll( `[data-dropdown="${idx}"] a` ); dropdown?.[dropdown.length - 1]?.focus(); }, 0); } else { const dropdown = navRef.current?.querySelectorAll( `[data-dropdown="${idx}"] a` ); dropdown?.[dropdown.length - 1]?.focus(); } } if (e.key === "Tab") setOpen(null); }; const handleDropdownKeyDown = (idx: number, i: number, arrLen: number) => ( e: React.KeyboardEvent ) => { if (e.key === "ArrowDown") { e.preventDefault(); const dropdown = navRef.current?.querySelectorAll( `[data-dropdown="${idx}"] a` ); const nextIdx = (i + 1) % (dropdown?.length || 1); dropdown?.[nextIdx]?.focus(); } if (e.key === "ArrowUp") { e.preventDefault(); const dropdown = navRef.current?.querySelectorAll( `[data-dropdown="${idx}"] a` ); const prevIdx = (i - 1 + (dropdown?.length || 1)) % (dropdown?.length || 1); dropdown?.[prevIdx]?.focus(); } if (e.key === "Tab") setOpen(null); if (e.key === "Escape") setOpen(null); }; return ( ); }