import { Burger, Container, Group, Header as MantineHeader, Paper, Space, Text, Transition, } from "@mantine/core"; import { useBooleanToggle } from "@mantine/hooks"; import { NextLink } from "@mantine/next"; import Image from "next/image"; import React, { useContext, useEffect, useState } from "react"; import headerStyle from "../../styles/header.style"; import { IsSignedInContext } from "../../utils/auth.util"; import { useConfig } from "../../utils/config.util"; import ActionAvatar from "./ActionAvatar"; type Link = { link?: string; label: string; action?: () => Promise; }; const Header = () => { const [opened, toggleOpened] = useBooleanToggle(false); const [active, setActive] = useState(); const isSignedIn = useContext(IsSignedInContext); const config = useConfig(); const { classes, cx } = headerStyle(); const authenticatedLinks: Link[] = [ { link: "/upload", label: "Upload", }, ]; const unauthenticatedLinks: Link[] | undefined = [ { link: "/auth/signIn", label: "Sign in", }, ]; if (!config.DISABLE_HOME_PAGE) unauthenticatedLinks.unshift({ link: "/", label: "Home", }); if (!config.DISABLE_REGISTRATION) unauthenticatedLinks.push({ link: "/auth/signUp", label: "Sign up", }); const links = isSignedIn ? authenticatedLinks : unauthenticatedLinks; const items = links.map((link) => { if (link) { // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { if (window.location.pathname == link.link) { setActive(link.link); } }); return ( {link.label} ); } }); return ( Pinvgin Share Logo Pingvin Share {items} {isSignedIn && } toggleOpened()} className={classes.burger} size="sm" /> {(styles) => ( {items} )} ); }; export default Header;