From 7bdf71ff7b4131103cd813ac80703a9c21c43e78 Mon Sep 17 00:00:00 2001 From: Ella Date: Wed, 24 Jan 2024 13:10:10 +0200 Subject: [PATCH] Separate fetch from static patterns setting --- .../src/store/private-selectors.js | 13 +++++--- packages/block-editor/src/store/resolvers.js | 2 +- .../provider/use-block-editor-settings.js | 33 +++++++++++-------- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/packages/block-editor/src/store/private-selectors.js b/packages/block-editor/src/store/private-selectors.js index f12794d0820a82..adad08c7b98dc8 100644 --- a/packages/block-editor/src/store/private-selectors.js +++ b/packages/block-editor/src/store/private-selectors.js @@ -297,7 +297,6 @@ export const getAllPatterns = createRegistrySelector( ( select ) => // This setting is left for back compat. const { __experimentalBlockPatterns = [], - __experimentalFetchBlockPatterns, __experimentalUserPatternCategories = [], __experimentalReusableBlocks = [], } = state.settings; @@ -321,10 +320,14 @@ export const getAllPatterns = createRegistrySelector( ( select ) => }; } ); - const blockPatterns = __experimentalFetchBlockPatterns - ? unlock( select( store ) ).getFetchedPatterns() - : __experimentalBlockPatterns; - return [ ...userPatterns, ...blockPatterns ]; + return [ + ...userPatterns, + ...__experimentalBlockPatterns, + ...unlock( select( store ) ).getFetchedPatterns(), + ].filter( + ( x, index, arr ) => + index === arr.findIndex( ( y ) => x.name === y.name ) + ); }, getAllPatternsDependants ) ); diff --git a/packages/block-editor/src/store/resolvers.js b/packages/block-editor/src/store/resolvers.js index b730e4e761f756..40c51d241ac676 100644 --- a/packages/block-editor/src/store/resolvers.js +++ b/packages/block-editor/src/store/resolvers.js @@ -3,7 +3,7 @@ export const getFetchedPatterns = async ( { dispatch, select } ) => { const { __experimentalFetchBlockPatterns } = select.getSettings(); if ( ! __experimentalFetchBlockPatterns ) { - return; + return []; } const patterns = await __experimentalFetchBlockPatterns(); dispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } ); diff --git a/packages/editor/src/components/provider/use-block-editor-settings.js b/packages/editor/src/components/provider/use-block-editor-settings.js index f605a0a78f0b34..78c9b1a56e83a7 100644 --- a/packages/editor/src/components/provider/use-block-editor-settings.js +++ b/packages/editor/src/components/provider/use-block-editor-settings.js @@ -160,6 +160,20 @@ function useBlockEditorSettings( settings, postType, postId ) { settings.__experimentalAdditionalBlockPatternCategories ?? // WP 6.0 settings.__experimentalBlockPatternCategories; // WP 5.9 + const blockPatterns = useMemo( + () => + [ ...( settingsBlockPatterns || [] ) ].filter( + ( { postTypes } ) => { + return ( + ! postTypes || + ( Array.isArray( postTypes ) && + postTypes.includes( postType ) ) + ); + } + ), + [ settingsBlockPatterns, postType ] + ); + const blockPatternCategories = useMemo( () => [ @@ -232,24 +246,17 @@ function useBlockEditorSettings( settings, postType, postId ) { isDistractionFree, keepCaretInsideBlock, mediaUpload: hasUploadPermissions ? mediaUpload : undefined, + __experimentalBlockPatterns: blockPatterns, __experimentalFetchBlockPatterns: async () => { - const restPatterns = await fetchBlockPatterns(); - return [ - ...( settingsBlockPatterns || [] ), - ...( restPatterns || [] ), - ] - .filter( - ( x, index, arr ) => - index === - arr.findIndex( ( y ) => x.name === y.name ) - ) - .filter( ( { postTypes } ) => { + return ( await fetchBlockPatterns() ).filter( + ( { postTypes } ) => { return ( ! postTypes || ( Array.isArray( postTypes ) && postTypes.includes( postType ) ) ); - } ); + } + ); }, __experimentalReusableBlocks: reusableBlocks, __experimentalBlockPatternCategories: blockPatternCategories, @@ -292,7 +299,7 @@ function useBlockEditorSettings( settings, postType, postId ) { hasUploadPermissions, reusableBlocks, userPatternCategories, - settingsBlockPatterns, + blockPatterns, blockPatternCategories, canUseUnfilteredHTML, undo,