Skip to content

Commit

Permalink
Explicitly specify additional ellipsis menu options
Browse files Browse the repository at this point in the history
  • Loading branch information
adamziel committed May 21, 2020
1 parent eecbc5a commit 586e3da
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import DescenderLines from './descender-lines';
import BlockNavigationBlockContents from './block-contents';
import BlockSettingsDropdown from '../block-settings-menu/block-settings-dropdown';
import { useBlockNavigationContext } from './context';
import EllipsisMenu from './ellipsis-menu';

export default function BlockNavigationBlock( {
block,
Expand Down Expand Up @@ -123,7 +124,9 @@ export default function BlockNavigationBlock( {
clientIds={ [ clientId ] }
icon={ moreVertical }
{ ...props }
/>
>
<EllipsisMenu.Slot bubblesVirtually />
</BlockSettingsDropdown>
) }
</TreeGridCell>
) }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/**
* External dependencies
*/
import { isEmpty } from 'lodash';

/**
* WordPress dependencies
*/
import { useContext } from '@wordpress/element';
import {
__experimentalToolbarContext as ToolbarContext,
createSlotFill,
ToolbarGroup,
} from '@wordpress/components';

/**
* Internal dependencies
*/
import { ifBlockEditSelected } from '../block-edit/context';

const { Fill, Slot } = createSlotFill( 'EllipsisMenu' );

function EllipsisMenuSlot( props ) {
const accessibleToolbarState = useContext( ToolbarContext );
return <Slot { ...props } fillProps={ accessibleToolbarState } />;
}

function EllipsisMenuFill( { controls, children } ) {
return (
<Fill>
{ ( fillProps ) => {
// Children passed to EllipsisMenuFill will not have access to any
// React Context whose Provider is part of the EllipsisMenuSlot tree.
// So we re-create the Provider in this subtree.
const value = ! isEmpty( fillProps ) ? fillProps : null;
return (
<ToolbarContext.Provider value={ value }>
<ToolbarGroup controls={ controls } />
{ children }
</ToolbarContext.Provider>
);
} }
</Fill>
);
}

const EllipsisMenu = ifBlockEditSelected( EllipsisMenuFill );

EllipsisMenu.Slot = EllipsisMenuSlot;

export default EllipsisMenu;
1 change: 1 addition & 0 deletions packages/block-editor/src/components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export { default as BlockFormatControls } from './block-format-controls';
export { default as BlockIcon } from './block-icon';
export { default as BlockNavigationDropdown } from './block-navigation/dropdown';
export { BlockNavigationBlockFill as __experimentalBlockNavigationBlockFill } from './block-navigation/block-contents';
export { default as __experimentalEllipsisMenu } from './block-navigation/ellipsis-menu';
export { default as __experimentalBlockNavigationEditor } from './block-navigation/editor';
export { default as __experimentalBlockNavigationTree } from './block-navigation/tree';
export { default as __experimentalBlockVariationPicker } from './block-variation-picker';
Expand Down
7 changes: 7 additions & 0 deletions packages/block-library/src/navigation-link/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { withDispatch, withSelect } from '@wordpress/data';
import {
ExternalLink,
KeyboardShortcuts,
MenuItem,
PanelBody,
Popover,
TextareaControl,
Expand All @@ -30,6 +31,7 @@ import {
__experimentalLinkControl as LinkControl,
__experimentalBlock as Block,
__experimentalBlockNavigationEditor as BlockNavigationEditor,
__experimentalEllipsisMenu as BlockNavigationEllipsisMenu,
} from '@wordpress/block-editor';
import { isURL, prependHTTP } from '@wordpress/url';
import { Fragment, useState, useEffect, useRef } from '@wordpress/element';
Expand Down Expand Up @@ -158,6 +160,11 @@ function NavigationLinkEdit( {
/>
</ToolbarGroup>
</BlockControls>
<BlockNavigationEllipsisMenu>
<MenuItem onClick={ () => {} }>
{ __( 'Add submenu' ) }
</MenuItem>
</BlockNavigationEllipsisMenu>
<InspectorControls>
<PanelBody title={ __( 'SEO settings' ) }>
<ToggleControl
Expand Down

0 comments on commit 586e3da

Please sign in to comment.