import { Page, ButtonGroup, Button, useBodyScroll, useMediaQuery, useTheme, Tabs, Loading, Spacer } from "@geist-ui/core"; import { Github as GitHubIcon, UserPlus as SignUpIcon, User as SignInIcon, Home as HomeIcon, Menu as MenuIcon, Tool as SettingsIcon, UserX as SignoutIcon, PlusCircle as NewIcon, List as YourIcon, Moon, Sun } from "@geist-ui/icons"; import { DriftProps } from "../../pages/_app"; import { useEffect, useMemo, useState } from "react"; import styles from './header.module.css'; import { useRouter } from "next/router"; import useSignedIn from "../../lib/hooks/use-signed-in"; const Header = ({ changeTheme, theme }: DriftProps) => { const router = useRouter(); const [selectedTab, setSelectedTab] = useState(); const [expanded, setExpanded] = useState(false) const [, setBodyHidden] = useBodyScroll(null, { scrollLayer: true }) const isMobile = useMediaQuery('xs', { match: 'down' }) const { isLoading, isSignedIn } = useSignedIn({ redirectIfNotAuthed: false }) useEffect(() => { setBodyHidden(expanded) }, [expanded, setBodyHidden]) useEffect(() => { if (!isMobile) { setExpanded(false) } }, [isMobile]) const pages = useMemo(() => [ { name: "Home", href: "/", icon: , condition: true, value: "home" }, { name: "New", href: "/new", icon: , condition: isSignedIn, value: "new" }, { name: "Yours", href: "/mine", icon: , condition: isSignedIn, value: "mine" }, // { // name: "Settings", // href: "/settings", // icon: , // condition: isSignedIn // }, { name: "Sign out", action: () => { if (typeof window !== 'undefined') { localStorage.clear(); router.push("/signin"); } }, href: "#signout", icon: , condition: isSignedIn, value: "signout" }, { name: "Sign in", href: "/signin", icon: , condition: !isSignedIn, value: "signin" }, { name: "Sign up", href: "/signup", icon: , condition: !isSignedIn, value: "signup" }, { name: isMobile ? "GitHub" : "", href: "https://github.com/maxleiter/drift", icon: , condition: true, value: "github" }, { name: isMobile ? "Change theme" : "", action: function () { if (typeof window !== 'undefined') { changeTheme(); setSelectedTab(undefined); } }, icon: theme === 'light' ? : , condition: true, value: "theme", } ], [changeTheme, isMobile, isSignedIn, router, theme]) useEffect(() => { setSelectedTab(pages.find((page) => { if (page.href && page.href === router.asPath) { return true } })?.href) }, [pages, router, router.pathname]) return (
{ const match = pages.find(page => page.value === tab) if (match?.action) { match.action() } else if (match?.href) { router.push(`${match.href}`) } }}> {!isLoading && pages.map((tab) => { if (tab.condition) return {tab.icon} {tab.name}} value={tab.value} key={`${tab.value}`} /> else return null })}
{isMobile && expanded && (
{pages.map((tab, index) => { if (tab.condition) return })}
)}
) } export default Header // {/* {/* // // // // // * /}