From bf19a5d4f5e18eee8570d15e9751c9bf3d079f3f Mon Sep 17 00:00:00 2001 From: Glen Davies Date: Mon, 24 Jul 2023 17:16:52 +1200 Subject: [PATCH 1/7] Allow inserting of unsynced patterns from quick inserter --- .../block-editor/src/autocompleters/block.js | 27 ++++++++++++++----- .../inserter/reusable-blocks-tab.js | 5 +++- packages/block-editor/src/store/selectors.js | 14 ++-------- .../components/src/autocomplete/index.tsx | 6 ++++- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/packages/block-editor/src/autocompleters/block.js b/packages/block-editor/src/autocompleters/block.js index 4d189e52b7cdd..bc06c9de5aaaf 100644 --- a/packages/block-editor/src/autocompleters/block.js +++ b/packages/block-editor/src/autocompleters/block.js @@ -5,6 +5,7 @@ import { useSelect } from '@wordpress/data'; import { createBlock, createBlocksFromInnerBlocksTemplate, + parse, } from '@wordpress/blocks'; import { useMemo } from '@wordpress/element'; @@ -116,14 +117,28 @@ function createBlockCompleter() { return ! ( /\S/.test( before ) || /\S/.test( after ) ); }, getOptionCompletion( inserterItem ) { - const { name, initialAttributes, innerBlocks } = inserterItem; + const { + name, + initialAttributes, + innerBlocks, + syncStatus, + content, + } = inserterItem; + return { action: 'replace', - value: createBlock( - name, - initialAttributes, - createBlocksFromInnerBlocksTemplate( innerBlocks ) - ), + value: + syncStatus === 'unsynced' + ? parse( content, { + __unstableSkipMigrationLogs: true, + } ) + : createBlock( + name, + initialAttributes, + createBlocksFromInnerBlocksTemplate( + innerBlocks + ) + ), }; }, }; diff --git a/packages/block-editor/src/components/inserter/reusable-blocks-tab.js b/packages/block-editor/src/components/inserter/reusable-blocks-tab.js index 08cd8d57ba0d0..920b9f56384d4 100644 --- a/packages/block-editor/src/components/inserter/reusable-blocks-tab.js +++ b/packages/block-editor/src/components/inserter/reusable-blocks-tab.js @@ -22,7 +22,10 @@ function ReusableBlocksList( { onHover, onInsert, rootClientId } ) { ); const filteredItems = useMemo( () => { - return items.filter( ( { category } ) => category === 'reusable' ); + return items.filter( + ( { category, syncStatus } ) => + category === 'reusable' && syncStatus !== 'unsynced' + ); }, [ items ] ); if ( filteredItems.length === 0 ) { diff --git a/packages/block-editor/src/store/selectors.js b/packages/block-editor/src/store/selectors.js index c3d8847b03239..e459e536c9091 100644 --- a/packages/block-editor/src/store/selectors.js +++ b/packages/block-editor/src/store/selectors.js @@ -2023,6 +2023,7 @@ export const getInserterItems = createSelector( utility: 1, // Deprecated. frecency, content: reusableBlock.content.raw, + syncStatus: reusableBlock.wp_pattern_sync_status, }; }; @@ -2031,18 +2032,7 @@ export const getInserterItems = createSelector( 'core/block', rootClientId ) - ? getReusableBlocks( state ) - .filter( - ( reusableBlock ) => - // Reusable blocks that are fully synced should have no sync status set - // for backwards compat between patterns and old reusable blocks, but - // some in release 16.1 may have had sync status inadvertantly set to - // 'fully' if created in the site editor. - reusableBlock.wp_pattern_sync_status === 'fully' || - reusableBlock.wp_pattern_sync_status === '' || - ! reusableBlock.wp_pattern_sync_status - ) - .map( buildReusableBlockInserterItem ) + ? getReusableBlocks( state ).map( buildReusableBlockInserterItem ) : []; const buildBlockTypeInserterItem = buildBlockTypeItem( state, { diff --git a/packages/components/src/autocomplete/index.tsx b/packages/components/src/autocomplete/index.tsx index 7825526fe34a5..1c93d11c70f62 100644 --- a/packages/components/src/autocomplete/index.tsx +++ b/packages/components/src/autocomplete/index.tsx @@ -108,7 +108,11 @@ export function useAutocomplete( { } as InsertOption ); if ( 'replace' === completionObject.action ) { - onReplace( [ completionObject.value ] ); + onReplace( + Array.isArray( completionObject.value ) + ? completionObject.value + : [ completionObject.value ] + ); // When replacing, the component will unmount, so don't reset // state (below) on an unmounted component. return; From 2d179563ab8db1110c1460feddd730002104f295 Mon Sep 17 00:00:00 2001 From: Glen Davies Date: Tue, 25 Jul 2023 09:35:55 +1200 Subject: [PATCH 2/7] Add components changelog entry --- packages/components/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 45ed6d2ec13fc..5bac14ae5147f 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -8,6 +8,7 @@ - `TextControl`: Add `id` prop to allow for custom IDs in `TextControl`s ([#52028](https://github.com/WordPress/gutenberg/pull/52028)). - `Navigator`: Add `replace` option to `navigator.goTo()` and `navigator.goToParent()` ([#52456](https://github.com/WordPress/gutenberg/pull/52456)). +- `Autocomplete`: Update `onReplace` to allow for `value` to already be an array. ([#52866](https://github.com/WordPress/gutenberg/pull/52866)). ### Bug Fix From 01f8dd0d4b07031a59cab2a3dfe75b910c94f923 Mon Sep 17 00:00:00 2001 From: Glen Davies Date: Tue, 25 Jul 2023 09:39:55 +1200 Subject: [PATCH 3/7] fix changelog --- packages/components/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 5bac14ae5147f..b49a612e0389d 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Enhancements + +- `Autocomplete`: Update `onReplace` to allow for `value` to already be an array. ([#52866](https://github.com/WordPress/gutenberg/pull/52866)). + ## 25.4.0 (2023-07-20) ### Enhancements From 6cf629a9685f7a72d6179e26e357a4ea8d4aaaba Mon Sep 17 00:00:00 2001 From: Glen Davies Date: Tue, 25 Jul 2023 09:41:12 +1200 Subject: [PATCH 4/7] Doh! Another fix of chanelog - 3rd time lucky! --- packages/components/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index b49a612e0389d..fde7f4127565c 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -12,7 +12,6 @@ - `TextControl`: Add `id` prop to allow for custom IDs in `TextControl`s ([#52028](https://github.com/WordPress/gutenberg/pull/52028)). - `Navigator`: Add `replace` option to `navigator.goTo()` and `navigator.goToParent()` ([#52456](https://github.com/WordPress/gutenberg/pull/52456)). -- `Autocomplete`: Update `onReplace` to allow for `value` to already be an array. ([#52866](https://github.com/WordPress/gutenberg/pull/52866)). ### Bug Fix From 49a9e920a9a6bf71ff8e2240b09144fd6389f501 Mon Sep 17 00:00:00 2001 From: Glen Davies Date: Tue, 25 Jul 2023 10:14:37 +1200 Subject: [PATCH 5/7] Avoid modifying the autocomplete component --- packages/block-editor/src/components/block-list/block.js | 6 +++++- packages/components/CHANGELOG.md | 4 ---- packages/components/src/autocomplete/index.tsx | 6 +----- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/block-editor/src/components/block-list/block.js b/packages/block-editor/src/components/block-list/block.js index aa1a40ef48057..17e3d9e45d2b3 100644 --- a/packages/block-editor/src/components/block-list/block.js +++ b/packages/block-editor/src/components/block-list/block.js @@ -505,9 +505,13 @@ const applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => { ) { __unstableMarkLastChangeAsPersistent(); } + const replacementBlocks = + blocks?.length === 1 && Array.isArray( blocks[ 0 ] ) + ? blocks[ 0 ] + : blocks; replaceBlocks( [ ownProps.clientId ], - blocks, + replacementBlocks, indexToSelect, initialPosition ); diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index fde7f4127565c..45ed6d2ec13fc 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -2,10 +2,6 @@ ## Unreleased -### Enhancements - -- `Autocomplete`: Update `onReplace` to allow for `value` to already be an array. ([#52866](https://github.com/WordPress/gutenberg/pull/52866)). - ## 25.4.0 (2023-07-20) ### Enhancements diff --git a/packages/components/src/autocomplete/index.tsx b/packages/components/src/autocomplete/index.tsx index 1c93d11c70f62..7825526fe34a5 100644 --- a/packages/components/src/autocomplete/index.tsx +++ b/packages/components/src/autocomplete/index.tsx @@ -108,11 +108,7 @@ export function useAutocomplete( { } as InsertOption ); if ( 'replace' === completionObject.action ) { - onReplace( - Array.isArray( completionObject.value ) - ? completionObject.value - : [ completionObject.value ] - ); + onReplace( [ completionObject.value ] ); // When replacing, the component will unmount, so don't reset // state (below) on an unmounted component. return; From fed359b78f123b744b4ae82ad6050503682f7922 Mon Sep 17 00:00:00 2001 From: Glen Davies Date: Tue, 25 Jul 2023 10:24:29 +1200 Subject: [PATCH 6/7] Add comment to explain flattening --- packages/block-editor/src/components/block-list/block.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/block-editor/src/components/block-list/block.js b/packages/block-editor/src/components/block-list/block.js index 17e3d9e45d2b3..a2acb3c7b53be 100644 --- a/packages/block-editor/src/components/block-list/block.js +++ b/packages/block-editor/src/components/block-list/block.js @@ -505,6 +505,7 @@ const applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => { ) { __unstableMarkLastChangeAsPersistent(); } + //Unsynced patterns are nested in an array so we need to flatten them. const replacementBlocks = blocks?.length === 1 && Array.isArray( blocks[ 0 ] ) ? blocks[ 0 ] From e2d4f469f454c2b249a8ad68b10b7d64b526e5c1 Mon Sep 17 00:00:00 2001 From: Glen Davies Date: Tue, 25 Jul 2023 15:09:30 +1200 Subject: [PATCH 7/7] fix typo --- .../src/components/inserter/hooks/use-patterns-state.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/block-editor/src/components/inserter/hooks/use-patterns-state.js b/packages/block-editor/src/components/inserter/hooks/use-patterns-state.js index 6d6333587b7d0..c0b8d7ff92512 100644 --- a/packages/block-editor/src/components/inserter/hooks/use-patterns-state.js +++ b/packages/block-editor/src/components/inserter/hooks/use-patterns-state.js @@ -15,7 +15,7 @@ import { store as blockEditorStore } from '../../../store'; const CUSTOM_CATEGORY = { name: 'custom', label: __( 'My patterns' ), - description: __( 'Custom patterns add by site users' ), + description: __( 'Custom patterns added by site users' ), }; /**