diff --git a/packages/block-editor/src/components/block-pattern-setup/use-patterns-setup.js b/packages/block-editor/src/components/block-pattern-setup/use-patterns-setup.js index 709e127ded6428..1b6a90b87457a0 100644 --- a/packages/block-editor/src/components/block-pattern-setup/use-patterns-setup.js +++ b/packages/block-editor/src/components/block-pattern-setup/use-patterns-setup.js @@ -14,23 +14,17 @@ function usePatternsSetup( clientId, blockName, filterPatternsFn ) { const { getBlockRootClientId, __experimentalGetPatternsByBlockTypes, - __experimentalGetParsedPattern, __experimentalGetAllowedPatterns, } = select( blockEditorStore ); const rootClientId = getBlockRootClientId( clientId ); - let patterns = []; if ( filterPatternsFn ) { - patterns = __experimentalGetAllowedPatterns( - rootClientId - ).filter( filterPatternsFn ); - } else { - patterns = __experimentalGetPatternsByBlockTypes( - blockName, - rootClientId + return __experimentalGetAllowedPatterns( rootClientId ).filter( + filterPatternsFn ); } - return patterns.map( ( { name } ) => - __experimentalGetParsedPattern( name ) + return __experimentalGetPatternsByBlockTypes( + blockName, + rootClientId ); }, [ clientId, blockName, filterPatternsFn ] diff --git a/packages/block-editor/src/components/block-switcher/use-transformed-patterns.js b/packages/block-editor/src/components/block-switcher/use-transformed-patterns.js index 0ce374fbbc8cbc..7f8c956ea69883 100644 --- a/packages/block-editor/src/components/block-switcher/use-transformed-patterns.js +++ b/packages/block-editor/src/components/block-switcher/use-transformed-patterns.js @@ -3,13 +3,11 @@ */ import { useMemo } from '@wordpress/element'; import { cloneBlock } from '@wordpress/blocks'; -import { useSelect } from '@wordpress/data'; /** * Internal dependencies */ import { getMatchingBlockByName, getRetainedBlockAttributes } from './utils'; -import { store as blockEditorStore } from '../../store'; /** * Mutate the matched block's attributes by getting @@ -96,19 +94,9 @@ export const getPatternTransformedBlocks = ( */ // TODO tests const useTransformedPatterns = ( patterns, selectedBlocks ) => { - const parsedPatterns = useSelect( - ( select ) => - patterns.map( ( { name } ) => - select( blockEditorStore ).__experimentalGetParsedPattern( - name - ) - ), - [ patterns ] - ); - return useMemo( () => - parsedPatterns.reduce( ( accumulator, _pattern ) => { + patterns.reduce( ( accumulator, _pattern ) => { const transformedBlocks = getPatternTransformedBlocks( selectedBlocks, _pattern.blocks @@ -121,7 +109,7 @@ const useTransformedPatterns = ( patterns, selectedBlocks ) => { } return accumulator; }, [] ), - [ parsedPatterns, selectedBlocks ] + [ patterns, selectedBlocks ] ); }; diff --git a/packages/block-editor/src/store/selectors.js b/packages/block-editor/src/store/selectors.js index 8dabce62e33568..de8dd02b2c0e4e 100644 --- a/packages/block-editor/src/store/selectors.js +++ b/packages/block-editor/src/store/selectors.js @@ -30,7 +30,6 @@ import { } from '@wordpress/blocks'; import { SVG, Rect, G, Path } from '@wordpress/components'; import { Platform } from '@wordpress/element'; -import { parse as parseBlocks } from '@wordpress/block-serialization-default-parser'; /** * A block selection object. @@ -1830,17 +1829,11 @@ const getAllAllowedPatterns = createSelector( ( state ) => { const patterns = state.settings.__experimentalBlockPatterns; const { allowedBlockTypes } = getSettings( state ); - const parsedPatterns = patterns.map( ( pattern ) => ( { - ...pattern, - // We only need the overall block structure of the pattern. So, for - // performance reasons, we can parse the pattern's content using - // the raw blocks parser, also known as the "stage I" block parser. - // This is about 250x faster than the full parse that the Block API - // offers. - blockNodes: parseBlocks( pattern.content ), - } ) ); - const allowedPatterns = parsedPatterns.filter( ( { blockNodes } ) => - checkAllowListRecursive( blockNodes, allowedBlockTypes ) + const parsedPatterns = patterns.map( ( { name } ) => + __experimentalGetParsedPattern( state, name ) + ); + const allowedPatterns = parsedPatterns.filter( ( { blocks } ) => + checkAllowListRecursive( blocks, allowedBlockTypes ) ); return allowedPatterns; }, @@ -1863,11 +1856,12 @@ export const __experimentalGetAllowedPatterns = createSelector( const availableParsedPatterns = getAllAllowedPatterns( state ); const patternsAllowed = filter( availableParsedPatterns, - ( { blockNodes } ) => - blockNodes.every( ( { blockName } ) => - canInsertBlockType( state, blockName, rootClientId ) + ( { blocks } ) => + blocks.every( ( { name } ) => + canInsertBlockType( state, name, rootClientId ) ) ); + return patternsAllowed; }, ( state, rootClientId ) => [