import React, { useEffect, useRef, useState } from "react"; import { Heading, HStack, Box, IconButton, Menu, MenuButton, } from "@chakra-ui/react"; import { Icon } from "@iconify/react"; import DesktopNav from "./DesktopNav"; import MobileNav from "./MobileNav"; const Header = (): JSX.Element => { const appName = "LCM Potty Chart"; const appVersion = "v0.0.3.0-pre-alpha"; // Add transparency while not at the top of the page. const [transparentNavbar, setTransparentNavbar] = useState(false); const lastScroll = useRef(0); const handleScroll = (): void => { // Sticky Nav if (window.scrollY >= 20) { setTransparentNavbar(true); } else { setTransparentNavbar(false); } // Scroll Position. const currentScroll = window.scrollY || window.pageYOffset || document.body.scrollTop; // Update Scroll Position Reference lastScroll.current = currentScroll <= 0 ? 0 : currentScroll; // setScroll(lastScroll.current = currentScroll <= 0 ? 0 : currentScroll) }; useEffect(() => { if (!window) { console.log("waiting for mount"); } else if (window) { window.addEventListener("scroll", handleScroll); } return () => window.removeEventListener("scroll", handleScroll); }, []); // Mobile Menu Icon && Open/Close const [open, setOpen] = useState(false); const [hover, setHover] = useState(false); const menuIcon = (): JSX.Element => { const iconType = { default: , hover: , open: , }; if (open) { return iconType.open; } else if (hover) { return iconType.hover; } else { return iconType.default; } }; return ( {/* Logo | Site Name */} {appName} {appVersion} {/* Desktop Nav Items and Mobile Menu Button */} {appName} {appVersion} setOpen(!open)} onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)} d={{ base: "inline-flex", lg: "none" }} variant="mobileNav" bg={transparentNavbar ? "transparent" : "rgba(255, 255, 255, .15)"} type="button" border={transparentNavbar ? "1px solid #0068ff" : "none"} id="mobile-menu-button" /> ); }; export default Header;