// @flow import * as ICONS from 'constants/icons'; import * as SETTINGS from 'constants/settings'; import * as PAGES from 'constants/pages'; import React, { Fragment } from 'react'; import { withRouter } from 'react-router'; import classnames from 'classnames'; import Button from 'component/button'; import LbcSymbol from 'component/common/lbc-symbol'; import WunderBar from 'component/wunderbar'; import Icon from 'component/common/icon'; import { Menu, MenuList, MenuButton, MenuItem } from '@reach/menu-button'; import Tooltip from 'component/common/tooltip'; import NavigationButton from 'component/navigationButton'; // @if TARGET='app' import { remote } from 'electron'; import { IS_MAC } from 'component/app/view'; // @endif type Props = { balance: string, roundedBalance: number, history: { entities: {}[], goBack: () => void, goForward: () => void, index: number, length: number, location: { pathname: string }, push: string => void, }, currentTheme: string, automaticDarkModeEnabled: boolean, setClientSetting: (string, boolean | string) => void, hideBalance: boolean, email: ?string, authenticated: boolean, authHeader: boolean, syncError: ?string, emailToVerify?: string, signOut: () => void, openMobileNavigation: () => void, openChannelCreate: () => void, openSignOutModal: () => void, clearEmailEntry: () => void, clearPasswordEntry: () => void, }; const Header = (props: Props) => { const { roundedBalance, history, setClientSetting, currentTheme, automaticDarkModeEnabled, hideBalance, email, authenticated, authHeader, signOut, syncError, openMobileNavigation, openChannelCreate, openSignOutModal, clearEmailEntry, clearPasswordEntry, emailToVerify, } = props; // on the verify page don't let anyone escape other than by closing the tab to keep session data consistent const isVerifyPage = history.location.pathname.includes(PAGES.AUTH_VERIFY); const isSignUpPage = history.location.pathname.includes(PAGES.AUTH); const isSignInPage = history.location.pathname.includes(PAGES.AUTH_SIGNIN); // Sign out if they click the "x" when they are on the password prompt const authHeaderAction = syncError ? { onClick: signOut } : { navigate: '/' }; const homeButtonNavigationProps = isVerifyPage ? {} : authHeader ? authHeaderAction : { navigate: '/' }; const closeButtonNavigationProps = { onClick: () => { clearEmailEntry(); clearPasswordEntry(); if (isSignInPage && !emailToVerify) { history.goBack(); } if (isSignUpPage) { history.goBack(); } if (syncError) { signOut(); } }, }; function handleThemeToggle() { if (automaticDarkModeEnabled) { setClientSetting(SETTINGS.AUTOMATIC_DARK_MODE_ENABLED, false); } if (currentTheme === 'dark') { setClientSetting(SETTINGS.THEME, 'light'); } else { setClientSetting(SETTINGS.THEME, 'dark'); } } function getWalletTitle() { return hideBalance ? ( __('Wallet') ) : ( {roundedBalance} ); } return ( { remote.getCurrentWindow().maximize(); }} // @endif > { if (history.location.pathname === '/') window.location.reload(); }} // @if TARGET='app' onDoubleClick={e => { e.stopPropagation(); }} // @endif {...homeButtonNavigationProps} /> {/* @if TARGET='app' */} {!authHeader && ( )} {/* @endif */} {!authHeader && } {!authHeader ? ( {(!IS_WEB || authenticated) && ( { e.stopPropagation(); }} // @endif /> { e.stopPropagation(); }} // @endif > history.push(`/$/${PAGES.PUBLISH}`)}> {__('Publish')} {__('New Channel')} { e.stopPropagation(); }} // @endif > history.push(`/$/${PAGES.PUBLISHED}`)}> {__('Publishes')} history.push(`/$/${PAGES.CHANNELS}`)}> {__('Channels')} history.push(`/$/${PAGES.CREATOR_DASHBOARD}`)}> {__('Creator Analytics')} history.push(`/$/${PAGES.REWARDS}`)}> {__('Rewards')} history.push(`/$/${PAGES.INVITE}`)}> {__('Invites')} {authenticated ? ( {__('Sign Out')} {email} ) : ( history.push(`/$/${PAGES.AUTH}`)}> {__('Register')} history.push(`/$/${PAGES.AUTH_SIGNIN}`)}> {__('Sign In')} )} )} { e.stopPropagation(); }} // @endif > history.push(`/$/${PAGES.SETTINGS}`)}> {__('Settings')} history.push(`/$/${PAGES.HELP}`)}> {__('Help')} {currentTheme === 'light' ? __('Dark') : __('Light')} {IS_WEB && !authenticated && ( )} ) : ( !isVerifyPage && ( {/* Add an empty span here so we can use the same style as above */} {/* This pushes the close button to the right side */} { e.stopPropagation(); }} // @endif /> ) )} { e.stopPropagation(); }} // @endif /> ); }; export default withRouter(Header);