import { createSignal, createEffect, onMount, onCleanup, type Component, } from "solid-js"; import { LoadingSpinner, MenuToX, XToMenu } from "@icons"; import { Tree } from "./Tree"; import type { NavProps } from "../types"; const NavComponent: Component = props => { const [open, setOpen] = createSignal(false); const { tree, mobile, routes } = props; let navRef: HTMLDivElement; if (!tree) { return ; } function toggle(e: MouseEvent) { e.preventDefault(); setOpen(!open()); } if (!mobile) { return ( ); } const handleClickOutside = (event: MouseEvent) => { const isLink = "href" in (event.target || {}); if ( isLink || (document.body.contains(event.target as Node) && !navRef.contains(event.target as Node)) ) { setOpen(false); } }; onMount(() => { onCleanup(() => { window.removeEventListener("click", handleClickOutside); }); }); createEffect(() => { if (open()) { window.addEventListener("click", handleClickOutside); document.body.style.overflow = "hidden"; document.body.classList.add("dim-content-nav"); } else { window.removeEventListener("click", handleClickOutside); document.body.style.overflow = "auto"; document.body.classList.remove("dim-content-nav"); } }); return ( ); }; export default NavComponent;