UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 7.4 kB
{ "version": 3, "sources": ["../../../src/navigation/edit/leaf-more-menu.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport {\n\taddSubmenu,\n\tchevronUp,\n\tchevronDown,\n\tmoreVertical,\n} from '@wordpress/icons';\nimport { DropdownMenu, MenuItem, MenuGroup } from '@wordpress/components';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { BlockTitle, store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { DEFAULT_BLOCK } from '../constants';\n\nconst POPOVER_PROPS = {\n\tclassName: 'block-editor-block-settings-menu__popover',\n\tplacement: 'bottom-start',\n};\n\nconst BLOCKS_THAT_CAN_BE_CONVERTED_TO_SUBMENU = [\n\t'core/navigation-link',\n\t'core/navigation-submenu',\n];\n\nfunction AddSubmenuItem( {\n\tblock,\n\tonClose,\n\texpandedState,\n\texpand,\n\tsetInsertedBlock,\n} ) {\n\tconst { insertBlock, replaceBlock, replaceInnerBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst clientId = block.clientId;\n\tconst isDisabled = ! BLOCKS_THAT_CAN_BE_CONVERTED_TO_SUBMENU.includes(\n\t\tblock.name\n\t);\n\treturn (\n\t\t<MenuItem\n\t\t\ticon={ addSubmenu }\n\t\t\tdisabled={ isDisabled }\n\t\t\tonClick={ () => {\n\t\t\t\tconst updateSelectionOnInsert = false;\n\t\t\t\tconst newLink = createBlock(\n\t\t\t\t\tDEFAULT_BLOCK.name,\n\t\t\t\t\tDEFAULT_BLOCK.attributes\n\t\t\t\t);\n\n\t\t\t\tif ( block.name === 'core/navigation-submenu' ) {\n\t\t\t\t\tinsertBlock(\n\t\t\t\t\t\tnewLink,\n\t\t\t\t\t\tblock.innerBlocks.length,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tupdateSelectionOnInsert\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// Convert to a submenu if the block currently isn't one.\n\t\t\t\t\tconst newSubmenu = createBlock(\n\t\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\t\tblock.attributes,\n\t\t\t\t\t\tblock.innerBlocks\n\t\t\t\t\t);\n\n\t\t\t\t\t// The following must happen as two independent actions.\n\t\t\t\t\t// Why? Because the offcanvas editor relies on the getLastInsertedBlocksClientIds\n\t\t\t\t\t// selector to determine which block is \"active\". As the UX needs the newLink to be\n\t\t\t\t\t// the \"active\" block it must be the last block to be inserted.\n\t\t\t\t\t// Therefore the Submenu is first created and **then** the newLink is inserted\n\t\t\t\t\t// thus ensuring it is the last inserted block.\n\t\t\t\t\treplaceBlock( clientId, newSubmenu );\n\n\t\t\t\t\treplaceInnerBlocks(\n\t\t\t\t\t\tnewSubmenu.clientId,\n\t\t\t\t\t\t[ newLink ],\n\t\t\t\t\t\tupdateSelectionOnInsert\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// This call sets the local List View state for the \"last inserted block\".\n\t\t\t\t// This is required for the Nav Block to determine whether or not to display\n\t\t\t\t// the Link UI for this new block.\n\t\t\t\tsetInsertedBlock( newLink );\n\n\t\t\t\tif ( ! expandedState[ block.clientId ] ) {\n\t\t\t\t\texpand( block.clientId );\n\t\t\t\t}\n\t\t\t\tonClose();\n\t\t\t} }\n\t\t>\n\t\t\t{ __( 'Add submenu link' ) }\n\t\t</MenuItem>\n\t);\n}\n\nexport default function LeafMoreMenu( props ) {\n\tconst { block } = props;\n\tconst { clientId } = block;\n\n\tconst { moveBlocksDown, moveBlocksUp, removeBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\n\tconst removeLabel = sprintf(\n\t\t/* translators: %s: block name */\n\t\t__( 'Remove %s' ),\n\t\tBlockTitle( { clientId, maximumLength: 25 } )\n\t);\n\n\tconst rootClientId = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId } = select( blockEditorStore );\n\n\t\t\treturn getBlockRootClientId( clientId );\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn (\n\t\t<DropdownMenu\n\t\t\ticon={ moreVertical }\n\t\t\tlabel={ __( 'Options' ) }\n\t\t\tclassName=\"block-editor-block-settings-menu\"\n\t\t\tpopoverProps={ POPOVER_PROPS }\n\t\t\tnoIcons\n\t\t\t{ ...props }\n\t\t>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\ticon={ chevronUp }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tmoveBlocksUp( [ clientId ], rootClientId );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Move up' ) }\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\ticon={ chevronDown }\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tmoveBlocksDown( [ clientId ], rootClientId );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Move down' ) }\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t<AddSubmenuItem\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\t\t\texpandedState={ props.expandedState }\n\t\t\t\t\t\t\texpand={ props.expand }\n\t\t\t\t\t\t\tsetInsertedBlock={ props.setInsertedBlock }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tremoveBlocks( [ clientId ], false );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ removeLabel }\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t</MenuGroup>\n\t\t\t\t</>\n\t\t\t) }\n\t\t</DropdownMenu>\n\t);\n}\n"], "mappings": "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", "names": [] }