import { FC, ReactNode, useEffect, useState } from 'react'; import { Box, Container, IconButton } from '@mui/material'; import { HeaderHeight } from './types'; import { HeaderSearchIcon } from './HeaderSearchIcon'; import { HeaderIdentity } from './HeaderIdentity'; import { HeaderSearch } from './HeaderSearch'; import { ThemeSwitch } from '../ThemeSwitch'; import { BrjLogo } from '../BrjLogo'; import { Card } from '../Card'; import { SearchConfiguration } from '../../core/search/types'; import { Color } from '../../palette'; import { Theme } from '../../core/theme/types'; import { useRouter } from 'next/router'; import Link from 'next/link'; import MenuIcon from '@mui/icons-material/Menu'; import CloseIcon from '@mui/icons-material/Close'; import Collapse from '@mui/material/Collapse'; type HeaderProps = { children?: ReactNode | ReactNode[]; appName?: string; orientation?: 'left' | 'right'; search?: SearchConfiguration; enableLogin?: boolean; }; export const Header: FC = ({ children, appName, orientation, search, enableLogin }) => { const { asPath, events } = useRouter(); const [isSearchOpen, setSearchOpen] = useState(false); const [isMenuOpen, setMenuOpen] = useState(false); const closeHamburger = () => setMenuOpen(false); const isSearchActive = Boolean(search && search?.serpUrl === asPath.replace(/^\/?(.+?)\?(.*)$/, '$1')); useEffect(() => { events.on('routeChangeStart', closeHamburger); return () => events.off('routeChangeStart', closeHamburger); }, [events]); useEffect(() => { if (!isSearchActive) return; setSearchOpen(true); }, [isSearchActive]); useEffect(() => { if (asPath === '/') setSearchOpen(false); }, [asPath]); return ( {appName && ( {appName} )} {search && isSearchOpen ? ( setSearchOpen(false)} /> ) : ( <> {children} {search && ( setSearchOpen(true)} /> )} {enableLogin && ( )} setMenuOpen(!isMenuOpen)} > )} setMenuOpen(false)}> {Object.entries(Array.isArray(children) ? children : [children]).map(([key, item]) => ( {item} ))} ); };