/** * External dependencies */ import { __ } from '@wordpress/i18n'; import { useEffect, useMemo, useState } from '@wordpress/element'; import { compose } from '@wordpress/compose'; import { __experimentalNavigation as Navigation, __experimentalNavigationBackButton as NavigationBackButton, __experimentalNavigationMenu as NavigationMenu, __experimentalNavigationGroup as NavigationGroup, } from '@wordpress/components'; import { getAdminLink } from '@woocommerce/wc-admin-settings'; import { NAVIGATION_STORE_NAME } from '@woocommerce/data'; import { withSelect } from '@wordpress/data'; /** * Internal dependencies */ import { addHistoryListener, getMatchingItem } from '../../utils'; import Header from '../header'; import Item from '../../components/Item'; const Container = ( { menuItems } ) => { useEffect( () => { // Collapse the original WP Menu. const adminMenu = document.getElementById( 'adminmenumain' ); adminMenu.classList.add( 'folded' ); }, [] ); const dashboardUrl = getAdminLink( '' ); const categories = menuItems.filter( ( item ) => item.isCategory ); categories.push( { capability: 'manage_woocommerce', id: 'woocommerce', isCategory: true, menuId: 'primary', migrate: true, order: 10, parent: '', title: 'WooCommerce', } ); const [ activeItem, setActiveItem ] = useState( 'woocommerce-home' ); const [ activeLevel, setActiveLevel ] = useState( 'woocommerce' ); useEffect( () => { const initialMatchedItem = getMatchingItem( menuItems ); if ( initialMatchedItem ) { setActiveItem( initialMatchedItem ); setActiveLevel( initialMatchedItem.parent ); } const removeListener = addHistoryListener( () => { setTimeout( () => { const matchedItem = getMatchingItem( menuItems ); if ( matchedItem ) { setActiveItem( matchedItem ); } }, 0 ); } ); return removeListener; }, [ menuItems ] ); const getMenuItemsByCategory = ( items ) => { return items.reduce( ( acc, item ) => { if ( ! acc[ item.parent ] ) { acc[ item.parent ] = [ [], [], [] ]; } let index = 0; if ( item.menuId === 'secondary' ) { index = 1; } else if ( item.menuId === 'plugins' ) { index = 2; } acc[ item.parent ][ index ].push( item ); return acc; }, {} ); }; const categorizedItems = useMemo( () => getMenuItemsByCategory( menuItems ), [ menuItems ] ); return (
{ const navDomRef = document.querySelector( '.components-navigation' ); if ( navDomRef ) { navDomRef.scrollTop = 0; } setActiveLevel( ...args ); } } > { activeLevel === 'woocommerce' && dashboardUrl && ( ) } { categories.map( ( category ) => { const [ primaryItems, secondaryItems, pluginItems, ] = categorizedItems[ category.id ] || [ [], [], [] ]; return ( { !! primaryItems.length && ( { primaryItems.map( ( item ) => ( ) ) } ) } { !! pluginItems.length && ( { pluginItems.map( ( item ) => ( ) ) } ) } { !! secondaryItems.length && ( { secondaryItems.map( ( item ) => ( ) ) } ) } ); } ) }
); }; export default compose( withSelect( ( select ) => { const { getActiveItem, getMenuItems } = select( NAVIGATION_STORE_NAME ); return { activeItem: getActiveItem(), menuItems: getMenuItems(), }; } ) )( Container );