import { useTheme } from 'next-themes' import Link from 'next/link' import { useRouter } from 'next/router' import React, { useState } from 'react' import { useWindowSize } from 'react-use' import { useIsLoggedIn, useIsUserLoading } from 'common' import { Button, buttonVariants, cn } from 'ui' import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, } from 'ui/src/components/shadcn/ui/navigation-menu' import ScrollProgress from '~/components/ScrollProgress' import { getMenu } from '~/data/nav' import GitHubButton from './GitHubButton' import HamburgerButton from './HamburgerMenu' import MenuItem from './MenuItem' import MobileMenu from './MobileMenu' import RightClickBrandLogo from './RightClickBrandLogo' interface Props { hideNavbar: boolean } const Nav = (props: Props) => { const { resolvedTheme } = useTheme() const router = useRouter() const { width } = useWindowSize() const [open, setOpen] = useState(false) const isLoggedIn = useIsLoggedIn() const isUserLoading = useIsUserLoading() const menu = getMenu() const isHomePage = router.pathname === '/' const isLaunchWeekPage = router.pathname.includes('/launch-week') const isLaunchWeekXPage = router.pathname === '/launch-week/x' const isGAWeekSection = router.pathname.startsWith('/ga-week') const hasStickySubnav = isLaunchWeekXPage || isGAWeekSection || isLaunchWeekPage const showLaunchWeekNavMode = (isLaunchWeekPage || isGAWeekSection) && !open React.useEffect(() => { if (open) { // Prevent scrolling on mount document.body.style.overflow = 'hidden' } else { document.body.style.overflow = 'auto' } }, [open]) // Close mobile menu when desktop React.useEffect(() => { if (width >= 1024) setOpen(false) }, [width]) if (props.hideNavbar) { return null } const showDarkLogo = isLaunchWeekPage || resolvedTheme?.includes('dark')! || isHomePage return ( <> {/* Uncomment to show announcement banner */}
) } export default Nav