/** * External dependencies */ import { __, sprintf } from '@wordpress/i18n'; import { useEffect, useLayoutEffect, useRef } from '@wordpress/element'; import { Tooltip } from '@wordpress/components'; import classnames from 'classnames'; import { decodeEntities } from '@wordpress/html-entities'; import { useUserPreferences } from '@woocommerce/data'; import { getSetting } from '@woocommerce/wc-admin-settings'; import { Text } from '@woocommerce/experimental'; import { Icon, chevronLeft } from '@wordpress/icons'; import { getHistory, updateQueryString } from '@woocommerce/navigation'; import { ENTER, SPACE } from '@wordpress/keycodes'; import { recordEvent } from '@woocommerce/tracks'; /** * Internal dependencies */ import './style.scss'; import ActivityPanel from './activity-panel'; import { MobileAppBanner } from '../mobile-banner'; import useIsScrolled from '../hooks/useIsScrolled'; import Navigation from '../navigation'; const renderTaskListBackButton = () => { const currentUrl = new URL( window.location.href ); const task = currentUrl.searchParams.get( 'task' ); if ( task ) { const homeText = __( 'WooCommerce Home', 'woocommerce-admin' ); const navigateHome = () => { recordEvent( 'topbar_back_button', { page_name: getPageTitle( window.title ), } ); updateQueryString( {}, getHistory().location.pathname, {} ); }; // if it's a task list page, render a back button to the homescreen return (
{ if ( keyCode === ENTER || keyCode === SPACE ) { navigateHome(); } } } >
); } return null; }; const getPageTitle = ( defaultTitle ) => { const currentUrl = new URL( window.location.href ); const task = currentUrl.searchParams.get( 'task' ); // If it's the task list then render a title based on which task the user is on. return ( { payments: __( 'Set up payments', 'woocommerce-admin' ), tax: __( 'Add tax rates', 'woocommerce-admin' ), appearance: __( 'Personalize your store', 'woocommerce-admin' ), marketing: __( 'Set up marketing tools', 'woocommerce-admin' ), products: __( 'Add products', 'woocommerce-admin' ), shipping: __( 'Set up shipping costs', 'woocommerce-admin' ), }[ task ] || defaultTitle ); }; export const Header = ( { sections, isEmbedded = false, query } ) => { const headerElement = useRef( null ); const siteTitle = getSetting( 'siteTitle', '' ); const pageTitle = sections.slice( -1 )[ 0 ]; const isScrolled = useIsScrolled(); const { updateUserPreferences, ...userData } = useUserPreferences(); const isModalDismissed = userData.android_app_banner_dismissed === 'yes'; let debounceTimer = null; const className = classnames( 'woocommerce-layout__header', { 'is-scrolled': isScrolled, } ); useLayoutEffect( () => { updateBodyMargin(); window.addEventListener( 'resize', updateBodyMargin ); return () => { window.removeEventListener( 'resize', updateBodyMargin ); const wpBody = document.querySelector( '#wpbody' ); if ( ! wpBody ) { return; } wpBody.style.marginTop = null; }; }, [ isModalDismissed ] ); const updateBodyMargin = () => { clearTimeout( debounceTimer ); debounceTimer = setTimeout( function () { const wpBody = document.querySelector( '#wpbody' ); if ( ! wpBody || ! headerElement.current ) { return; } wpBody.style.marginTop = `${ headerElement.current.offsetHeight }px`; }, 200 ); }; useEffect( () => { if ( ! isEmbedded ) { const documentTitle = sections .map( ( section ) => { return Array.isArray( section ) ? section[ 1 ] : section; } ) .reverse() .join( ' ‹ ' ); const decodedTitle = decodeEntities( sprintf( /* translators: 1: document title. 2: page title */ __( '%1$s ‹ %2$s — WooCommerce', 'woocommerce-admin' ), documentTitle, siteTitle ) ); if ( document.title !== decodedTitle ) { document.title = decodedTitle; } } }, [ isEmbedded, sections, siteTitle ] ); const dismissHandler = () => { updateUserPreferences( { android_app_banner_dismissed: 'yes', } ); }; const backButton = renderTaskListBackButton(); const backButtonClass = backButton ? 'with-back-button' : ''; return (
{ ! isModalDismissed && ( ) }
{ window.wcAdminFeatures.navigation && } { renderTaskListBackButton() } { getPageTitle( decodeEntities( pageTitle ) ) } { window.wcAdminFeatures[ 'activity-panels' ] && ( ) }
); };