"use client"; import { useState, useEffect } from "react"; import { usePathname, useRouter } from "next/navigation"; import Link from "next/link"; import styles from "./header.module.scss"; import { Logo, LogoIcon } from "@/components/general/Logo"; import { Icon } from "../general/Icon"; import { useInView } from "react-intersection-observer"; import { getSearchPath } from "@/lib/common"; export const Header = () => { /* This component depends on the following CSS rule in base.css to prevent scrolling the body while the menu is open: html:has(header[data-show=true]) { overflow: hidden; } */ const { ref: observer, inView: isInView } = useInView({ triggerOnce: false, initialInView: true, }); const { replace } = useRouter(); const pathname = usePathname(); const [showMenu, setShowMenu] = useState(false); function toggleMenu() { setShowMenu(!showMenu); } // hide menu on path change useEffect(() => { setShowMenu(false); }, [pathname]); const handleSearch = (e: React.KeyboardEvent) => { if (e.key != "Enter") { return; } const query = e.currentTarget.value; if (query) { setShowMenu(false); replace(getSearchPath(query)); } }; return ( <>
{!isInView ? : }
); }; export const MenuIcon = ({ showMenu }: { showMenu: boolean }) => { return (
{showMenu ? ( ) : ( )}
); };