@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
8 lines (7 loc) • 6.55 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/block-visibility/index.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as preferencesStore } from '@wordpress/preferences';\nimport { hasBlockSupport, store as blocksStore } from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\nimport { Button } from '@wordpress/components';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst { BlockManager } = unlock( blockEditorPrivateApis );\nconst EMPTY_ARRAY = [];\n\nexport default function BlockVisibility() {\n\tconst { showBlockTypes, hideBlockTypes } = unlock(\n\t\tuseDispatch( editorStore )\n\t);\n\n\tconst {\n\t\tblockTypes,\n\t\tallowedBlockTypes: _allowedBlockTypes,\n\t\thiddenBlockTypes: _hiddenBlockTypes,\n\t} = useSelect( ( select ) => {\n\t\treturn {\n\t\t\tblockTypes: select( blocksStore ).getBlockTypes(),\n\t\t\tallowedBlockTypes:\n\t\t\t\tselect( editorStore ).getEditorSettings().allowedBlockTypes,\n\t\t\thiddenBlockTypes:\n\t\t\t\tselect( preferencesStore ).get( 'core', 'hiddenBlockTypes' ) ??\n\t\t\t\tEMPTY_ARRAY,\n\t\t};\n\t}, [] );\n\n\tconst allowedBlockTypes = useMemo( () => {\n\t\tif ( _allowedBlockTypes === true ) {\n\t\t\treturn blockTypes;\n\t\t}\n\t\treturn blockTypes.filter( ( { name } ) => {\n\t\t\treturn _allowedBlockTypes?.includes( name );\n\t\t} );\n\t}, [ _allowedBlockTypes, blockTypes ] );\n\n\tconst filteredBlockTypes = allowedBlockTypes.filter(\n\t\t( blockType ) =>\n\t\t\thasBlockSupport( blockType, 'inserter', true ) &&\n\t\t\t( ! blockType.parent ||\n\t\t\t\tblockType.parent.includes( 'core/post-content' ) )\n\t);\n\n\t// Some hidden blocks become unregistered\n\t// by removing for instance the plugin that registered them, yet\n\t// they're still remain as hidden by the user's action.\n\t// We consider \"hidden\", blocks which were hidden and\n\t// are still registered.\n\tconst hiddenBlockTypes = _hiddenBlockTypes.filter( ( hiddenBlock ) => {\n\t\treturn filteredBlockTypes.some(\n\t\t\t( registeredBlock ) => registeredBlock.name === hiddenBlock\n\t\t);\n\t} );\n\n\tconst selectedBlockTypes = filteredBlockTypes.filter(\n\t\t( blockType ) => ! hiddenBlockTypes.includes( blockType.name )\n\t);\n\n\tconst numberOfHiddenBlocks =\n\t\tfilteredBlockTypes.length - selectedBlockTypes.length;\n\n\tfunction enableAllBlockTypes() {\n\t\tonChangeSelectedBlockTypes( filteredBlockTypes );\n\t}\n\n\tconst onChangeSelectedBlockTypes = ( newSelectedBlockTypes ) => {\n\t\tif ( selectedBlockTypes.length > newSelectedBlockTypes.length ) {\n\t\t\tconst blockTypesToHide = selectedBlockTypes.filter(\n\t\t\t\t( blockType ) =>\n\t\t\t\t\t! newSelectedBlockTypes.find(\n\t\t\t\t\t\t( { name } ) => name === blockType.name\n\t\t\t\t\t)\n\t\t\t);\n\t\t\thideBlockTypes( blockTypesToHide.map( ( { name } ) => name ) );\n\t\t} else if ( selectedBlockTypes.length < newSelectedBlockTypes.length ) {\n\t\t\tconst blockTypesToShow = newSelectedBlockTypes.filter(\n\t\t\t\t( blockType ) =>\n\t\t\t\t\t! selectedBlockTypes.find(\n\t\t\t\t\t\t( { name } ) => name === blockType.name\n\t\t\t\t\t)\n\t\t\t);\n\t\t\tshowBlockTypes( blockTypesToShow.map( ( { name } ) => name ) );\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"editor-block-visibility\">\n\t\t\t{ !! numberOfHiddenBlocks && (\n\t\t\t\t<div className=\"editor-block-visibility__disabled-blocks-count\">\n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %d: number of blocks. */\n\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t'%d block is hidden.',\n\t\t\t\t\t\t\t'%d blocks are hidden.',\n\t\t\t\t\t\t\tnumberOfHiddenBlocks\n\t\t\t\t\t\t),\n\t\t\t\t\t\tnumberOfHiddenBlocks\n\t\t\t\t\t) }\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\t\tonClick={ enableAllBlockTypes }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t<BlockManager\n\t\t\t\tblockTypes={ filteredBlockTypes }\n\t\t\t\tselectedBlockTypes={ selectedBlockTypes }\n\t\t\t\tonChange={ onChangeSelectedBlockTypes }\n\t\t\t\tshowSelectAll={ false }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],
"mappings": "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",
"names": ["blockEditorPrivateApis", "editorStore", "blocksStore", "preferencesStore"]
}