import { Box, HStack, SpanBox } from '../elements/LayoutPrimitives' import { OmnivoreNameLogo } from './../elements/images/OmnivoreNameLogo' import { DropdownMenu, HeaderDropdownAction } from './../patterns/DropdownMenu' import { updateTheme } from '../../lib/themeUpdater' import { AvatarDropdown } from './../elements/AvatarDropdown' import { ThemeId } from './../tokens/stitches.config' import { useState } from 'react' import { useRouter } from 'next/router' import { UserBasicData } from '../../lib/networking/queries/useGetViewerQuery' type HeaderProps = { user?: UserBasicData userInitials: string hideHeader?: boolean profileImageURL?: string isTransparent: boolean toolbarControl?: JSX.Element alwaysDisplayToolbar?: boolean setShowLogoutConfirmation: (showShareModal: boolean) => void setShowKeyboardCommandsModal: (showShareModal: boolean) => void } export function PrimaryHeader(props: HeaderProps): JSX.Element { const router = useRouter() const [isScrolled, setIsScrolled] = useState(false) function headerDropdownActionHandler(action: HeaderDropdownAction): void { switch (action) { case 'apply-darker-theme': updateTheme(ThemeId.Darker) break case 'apply-dark-theme': updateTheme(ThemeId.Dark) break case 'apply-lighter-theme': updateTheme(ThemeId.Lighter) break case 'apply-light-theme': updateTheme(ThemeId.Light) break case 'increaseFontSize': document.dispatchEvent(new Event('increaseFontSize')) break case 'decreaseFontSize': document.dispatchEvent(new Event('decreaseFontSize')) break case 'navigate-to-install': router.push('/settings/installation') break case 'navigate-to-emails': router.push('/settings/emails') break case 'navigate-to-labels': router.push('/settings/labels') break case 'navigate-to-profile': if (props.user) { router.push(`/${props.user.profile.username}`) } break case 'navigate-to-subscriptions': router.push('/settings/subscriptions') break case 'navigate-to-api': router.push('/settings/api') break case 'navigate-to-integrations': router.push('/settings/integrations') break case 'logout': props.setShowLogoutConfirmation(true) break default: break } } return ( <> ) } // Separating out component so we can extract to design system type NavHeaderProps = { username?: string userInitials: string actionHandler: (action: HeaderDropdownAction) => void profileImageURL?: string isDisplayingShadow?: boolean isVisible?: boolean isTransparent: boolean toolbarControl?: JSX.Element alwaysDisplayToolbar?: boolean } function NavHeader(props: NavHeaderProps): JSX.Element { return ( ) } function FloatingNavHeader(props: NavHeaderProps): JSX.Element { return ( <> {props.username && ( } actionHandler={props.actionHandler} /> )} ) }