UNPKG

@wordpress/block-library

Version:
97 lines (84 loc) 2.58 kB
/** * WordPress dependencies */ import { Placeholder, Button, Spinner } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { navigation, Icon } from '@wordpress/icons'; import { speak } from '@wordpress/a11y'; import { useEffect } from '@wordpress/element'; /** * Internal dependencies */ import useNavigationEntities from '../../use-navigation-entities'; import PlaceholderPreview from './placeholder-preview'; import NavigationMenuSelector from '../navigation-menu-selector'; export default function NavigationPlaceholder( { isSelected, currentMenuId, clientId, canUserCreateNavigationMenu = false, isResolvingCanUserCreateNavigationMenu, onSelectNavigationMenu, onSelectClassicMenu, onCreateEmpty, } ) { const { isResolvingMenus, hasResolvedMenus } = useNavigationEntities(); useEffect( () => { if ( ! isSelected ) { return; } if ( isResolvingMenus ) { speak( __( 'Loading Navigation block setup options.' ) ); } if ( hasResolvedMenus ) { speak( __( 'Navigation block setup options ready.' ) ); } }, [ isResolvingMenus, isSelected ] ); const isResolvingActions = isResolvingMenus && isResolvingCanUserCreateNavigationMenu; return ( <> <Placeholder className="wp-block-navigation-placeholder"> { // The <PlaceholderPreview> component is displayed conditionally via CSS depending on // whether the block is selected or not. This is achieved via CSS to avoid // component re-renders } <PlaceholderPreview isVisible={ ! isSelected } /> <div aria-hidden={ ! isSelected ? true : undefined } className="wp-block-navigation-placeholder__controls" > <div className="wp-block-navigation-placeholder__actions"> <div className="wp-block-navigation-placeholder__actions__indicator"> <Icon icon={ navigation } /> { __( 'Navigation' ) } </div> <hr /> { isResolvingActions && <Spinner /> } <NavigationMenuSelector currentMenuId={ currentMenuId } clientId={ clientId } onSelectNavigationMenu={ onSelectNavigationMenu } onSelectClassicMenu={ onSelectClassicMenu } toggleProps={ { variant: 'tertiary', iconPosition: 'right', className: 'wp-block-navigation-placeholder__actions__dropdown', } } /> <hr /> { canUserCreateNavigationMenu && ( <Button variant="tertiary" onClick={ onCreateEmpty } > { __( 'Start empty' ) } </Button> ) } </div> </div> </Placeholder> </> ); }