diff --git a/package-lock.json b/package-lock.json
index 9d5b12e749d123..e76ea379cd1a6e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -53169,6 +53169,7 @@
"@wordpress/keycodes": "*",
"@wordpress/notices": "*",
"@wordpress/preferences": "*",
+ "@wordpress/priority-queue": "*",
"@wordpress/private-apis": "*",
"@wordpress/rich-text": "*",
"@wordpress/style-engine": "*",
diff --git a/packages/block-editor/package.json b/packages/block-editor/package.json
index 2b5cc8d6275e89..b2740a1f01885e 100644
--- a/packages/block-editor/package.json
+++ b/packages/block-editor/package.json
@@ -59,6 +59,7 @@
"@wordpress/keycodes": "*",
"@wordpress/notices": "*",
"@wordpress/preferences": "*",
+ "@wordpress/priority-queue": "*",
"@wordpress/private-apis": "*",
"@wordpress/rich-text": "*",
"@wordpress/style-engine": "*",
diff --git a/packages/block-editor/src/components/block-patterns-list/README.md b/packages/block-editor/src/components/block-patterns-list/README.md
index f63ea449059572..18e7ead5d1805a 100644
--- a/packages/block-editor/src/components/block-patterns-list/README.md
+++ b/packages/block-editor/src/components/block-patterns-list/README.md
@@ -18,7 +18,6 @@ import { BlockPatternsList } from '@wordpress/block-editor';
const MyBlockPatternsList = () => (
);
@@ -33,13 +32,6 @@ An array of block patterns that can be shown in the block patterns list.
- Type: `Array`
- Required: Yes
-#### shownPatterns
-
-An array of shown block patterns objects.
-
-- Type: `Array`
-- Required: Yes
-
#### onClickPattern
The performed event after a click on a block pattern. In most cases, the pattern is inserted in the block editor.
diff --git a/packages/block-editor/src/components/block-patterns-list/index.js b/packages/block-editor/src/components/block-patterns-list/index.js
index 2609cc2db97a13..741a92ddf10dfa 100644
--- a/packages/block-editor/src/components/block-patterns-list/index.js
+++ b/packages/block-editor/src/components/block-patterns-list/index.js
@@ -134,10 +134,14 @@ function BlockPattern( {
} }
onMouseLeave={ () => onHover?.( null ) }
>
-
+ }
+ >
+
+
{ showTitle && (
- shownPatterns.includes( pattern )
- )?.name;
+ const firstCompositeItemId = blockPatterns[ 0 ]?.name;
setActiveCompositeId( firstCompositeItemId );
- }, [ shownPatterns, blockPatterns ] );
+ }, [ blockPatterns ] );
return (
- { blockPatterns.map( ( pattern ) => {
- const isShown = shownPatterns.includes( pattern );
- return isShown ? (
-
- ) : (
-
- );
- } ) }
+ { blockPatterns.map( ( pattern ) => (
+
+ ) ) }
{ pagingProps && }
);
diff --git a/packages/block-editor/src/components/block-patterns-list/stories/index.story.js b/packages/block-editor/src/components/block-patterns-list/stories/index.story.js
index 9eb393ea13e762..0ebb4520d98fd4 100644
--- a/packages/block-editor/src/components/block-patterns-list/stories/index.story.js
+++ b/packages/block-editor/src/components/block-patterns-list/stories/index.story.js
@@ -3,11 +3,6 @@
*/
import blockLibraryStyles from '!!raw-loader!../../../../../block-library/build-style/style.css';
-/**
- * WordPress dependencies
- */
-import { useAsyncList } from '@wordpress/compose';
-
/**
* Internal dependencies
*/
@@ -26,13 +21,9 @@ export default {
export const Default = {
render: function Template( props ) {
- const shownPatterns = useAsyncList( props.blockPatterns );
return (
-
+
);
},
diff --git a/packages/edit-site/src/components/async/index.js b/packages/block-editor/src/components/block-preview/async.js
similarity index 100%
rename from packages/edit-site/src/components/async/index.js
rename to packages/block-editor/src/components/block-preview/async.js
diff --git a/packages/block-editor/src/components/block-preview/index.js b/packages/block-editor/src/components/block-preview/index.js
index 9eef0f1dc2abd5..62b137ff37194b 100644
--- a/packages/block-editor/src/components/block-preview/index.js
+++ b/packages/block-editor/src/components/block-preview/index.js
@@ -19,6 +19,7 @@ import AutoHeightBlockPreview from './auto';
import EditorStyles from '../editor-styles';
import { store as blockEditorStore } from '../../store';
import { BlockListItems } from '../block-list';
+import { Async } from './async';
const EMPTY_ADDITIONAL_STYLES = [];
@@ -86,6 +87,10 @@ export function BlockPreview( {
);
}
+const MemoizedBlockPreview = memo( BlockPreview );
+
+MemoizedBlockPreview.Async = Async;
+
/**
* BlockPreview renders a preview of a block or array of blocks.
*
@@ -97,7 +102,7 @@ export function BlockPreview( {
*
* @return {Component} The component to be rendered.
*/
-export default memo( BlockPreview );
+export default MemoizedBlockPreview;
/**
* This hook is used to lightly mark an element as a block preview wrapper
diff --git a/packages/block-editor/src/components/block-toolbar/change-design.js b/packages/block-editor/src/components/block-toolbar/change-design.js
index ecfeff6cb1ed3e..9da1affe4273cc 100644
--- a/packages/block-editor/src/components/block-toolbar/change-design.js
+++ b/packages/block-editor/src/components/block-toolbar/change-design.js
@@ -10,7 +10,6 @@ import {
import { __ } from '@wordpress/i18n';
import { cloneBlock } from '@wordpress/blocks';
import { useMemo } from '@wordpress/element';
-import { useAsyncList } from '@wordpress/compose';
import { useSelect, useDispatch } from '@wordpress/data';
/**
@@ -81,10 +80,6 @@ export default function ChangeDesign( { clientId } ) {
.slice( 0, MAX_PATTERNS_TO_SHOW );
}, [ categories, currentPatternName, patterns ] );
- const currentShownPatterns = useAsyncList(
- sameCategoryPatternsWithSingleWrapper
- );
-
if ( sameCategoryPatternsWithSingleWrapper.length < 2 ) {
return null;
}
@@ -121,7 +116,6 @@ export default function ChangeDesign( { clientId } ) {
paddingSize="none"
>
{
const scrollContainer = getScrollContainer(
@@ -68,7 +64,6 @@ export default function usePatternsPaging(
return {
totalItems,
categoryPatterns,
- categoryPatternsAsyncList,
numPages,
changePage,
currentPage,
diff --git a/packages/block-editor/src/components/inserter/search-results.js b/packages/block-editor/src/components/inserter/search-results.js
index 9c001823745e6c..5a5725a3bb08cd 100644
--- a/packages/block-editor/src/components/inserter/search-results.js
+++ b/packages/block-editor/src/components/inserter/search-results.js
@@ -159,11 +159,6 @@ function InserterSearchResults( {
const currentShownBlockTypes = useAsyncList( filteredBlockTypes, {
step: INITIAL_INSERTER_RESULTS,
} );
- const currentShownPatterns = useAsyncList(
- currentShownBlockTypes.length === filteredBlockTypes.length
- ? filteredBlockPatterns
- : EMPTY_ARRAY
- );
const hasItems =
filteredBlockTypes.length > 0 || filteredBlockPatterns.length > 0;
@@ -190,7 +185,6 @@ function InserterSearchResults( {
>
{
return searchPatterns( blockPatterns, searchValue );
}, [ blockPatterns, searchValue ] );
- const shownBlockPatterns = useAsyncList( filteredBlockPatterns );
return (
diff --git a/packages/block-library/src/template-part/edit/index.js b/packages/block-library/src/template-part/edit/index.js
index ae941c977e14fd..a318fd285cdc33 100644
--- a/packages/block-library/src/template-part/edit/index.js
+++ b/packages/block-library/src/template-part/edit/index.js
@@ -21,7 +21,6 @@ import {
MenuItem,
ToolbarButton,
} from '@wordpress/components';
-import { useAsyncList } from '@wordpress/compose';
import { __, sprintf } from '@wordpress/i18n';
import { store as coreStore } from '@wordpress/core-data';
import { useState } from '@wordpress/element';
@@ -85,7 +84,6 @@ function TemplatesList( { area, clientId, isEntityAvailable, onSelect } ) {
isEntityAvailable &&
!! blockPatterns.length &&
( area === 'header' || area === 'footer' );
- const shownTemplates = useAsyncList( blockPatterns );
if ( ! canReplace ) {
return null;
@@ -96,7 +94,6 @@ function TemplatesList( { area, clientId, isEntityAvailable, onSelect } ) {
diff --git a/packages/block-library/src/template-part/edit/selection-modal.js b/packages/block-library/src/template-part/edit/selection-modal.js
index 5fa5d9786d8c96..71093306b93b2f 100644
--- a/packages/block-library/src/template-part/edit/selection-modal.js
+++ b/packages/block-library/src/template-part/edit/selection-modal.js
@@ -5,7 +5,6 @@ import { useMemo, useState } from '@wordpress/element';
import { __, sprintf } from '@wordpress/i18n';
import { store as noticesStore } from '@wordpress/notices';
import { useDispatch } from '@wordpress/data';
-import { useAsyncList } from '@wordpress/compose';
import { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';
import {
SearchControl,
@@ -43,7 +42,6 @@ export default function TemplatePartSelectionModal( {
return searchPatterns( partsAsPatterns, searchValue );
}, [ templateParts, searchValue ] );
- const shownTemplateParts = useAsyncList( filteredTemplateParts );
const blockPatterns = useAlternativeBlockPatterns( area, clientId );
const filteredBlockPatterns = useMemo( () => {
return searchPatterns( blockPatterns, searchValue );
@@ -89,7 +87,6 @@ export default function TemplatePartSelectionModal( {
{ __( 'Existing template parts' ) }
{
onTemplatePartSelect( pattern.templatePart );
} }
diff --git a/packages/edit-site/src/components/page-patterns/fields.js b/packages/edit-site/src/components/page-patterns/fields.js
index 74433b3de72f0e..0ad47e90c20402 100644
--- a/packages/edit-site/src/components/page-patterns/fields.js
+++ b/packages/edit-site/src/components/page-patterns/fields.js
@@ -25,7 +25,6 @@ import { decodeEntities } from '@wordpress/html-entities';
/**
* Internal dependencies
*/
-import { Async } from '../async';
import {
PATTERN_TYPES,
TEMPLATE_PART_POST_TYPE,
@@ -88,12 +87,12 @@ function PreviewField( { item } ) {
{ isEmpty && isTemplatePart && __( 'Empty template part' ) }
{ isEmpty && ! isTemplatePart && __( 'Empty pattern' ) }
{ ! isEmpty && (
-
+
-
+
) }
{ !! description && (
diff --git a/packages/edit-site/src/components/page-templates/fields.js b/packages/edit-site/src/components/page-templates/fields.js
index d26f1906a10664..69e0596bf49d47 100644
--- a/packages/edit-site/src/components/page-templates/fields.js
+++ b/packages/edit-site/src/components/page-templates/fields.js
@@ -20,7 +20,6 @@ import { EditorProvider } from '@wordpress/editor';
/**
* Internal dependencies
*/
-import { Async } from '../async';
import { default as Link, useLink } from '../routes/link';
import { useAddedBy } from './hooks';
@@ -63,9 +62,9 @@ function PreviewField( { item } ) {
>
{ isEmpty && __( 'Empty template' ) }
{ ! isEmpty && (
-
+
-
+
) }
diff --git a/packages/editor/src/components/post-template/swap-template-button.js b/packages/editor/src/components/post-template/swap-template-button.js
index 5eed287f7f1709..bdda349398406b 100644
--- a/packages/editor/src/components/post-template/swap-template-button.js
+++ b/packages/editor/src/components/post-template/swap-template-button.js
@@ -9,7 +9,6 @@ import { __ } from '@wordpress/i18n';
import { useDispatch } from '@wordpress/data';
import { store as coreStore } from '@wordpress/core-data';
import { parse } from '@wordpress/blocks';
-import { useAsyncList } from '@wordpress/compose';
/**
* Internal dependencies
@@ -71,12 +70,10 @@ function TemplatesList( { postType, onSelect } ) {
} ) ),
[ availableTemplates ]
);
- const shownTemplates = useAsyncList( templatesAsPatterns );
return (
);
diff --git a/packages/editor/src/components/post-transform-panel/index.js b/packages/editor/src/components/post-transform-panel/index.js
index 08139c2c3c6645..88ca6dc3965a11 100644
--- a/packages/editor/src/components/post-transform-panel/index.js
+++ b/packages/editor/src/components/post-transform-panel/index.js
@@ -5,7 +5,6 @@ import { useSelect, useDispatch } from '@wordpress/data';
import { store as coreStore } from '@wordpress/core-data';
import { PanelBody } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
-import { useAsyncList } from '@wordpress/compose';
import { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';
import { serialize } from '@wordpress/blocks';
@@ -20,7 +19,6 @@ import {
} from '../../store/constants';
function TemplatesList( { availableTemplates, onSelect } ) {
- const shownTemplates = useAsyncList( availableTemplates );
if ( ! availableTemplates || availableTemplates?.length === 0 ) {
return null;
}
@@ -29,7 +27,6 @@ function TemplatesList( { availableTemplates, onSelect } ) {
diff --git a/packages/editor/src/components/start-page-options/index.js b/packages/editor/src/components/start-page-options/index.js
index 07fee67fbed19b..783a4a224fa378 100644
--- a/packages/editor/src/components/start-page-options/index.js
+++ b/packages/editor/src/components/start-page-options/index.js
@@ -9,7 +9,6 @@ import {
__experimentalBlockPatternsList as BlockPatternsList,
} from '@wordpress/block-editor';
import { useSelect, useDispatch } from '@wordpress/data';
-import { useAsyncList } from '@wordpress/compose';
import { store as coreStore } from '@wordpress/core-data';
import { __unstableSerializeAndClean } from '@wordpress/blocks';
import { store as preferencesStore } from '@wordpress/preferences';
@@ -66,7 +65,6 @@ export function useStartPatterns() {
}
function PatternSelection( { blockPatterns, onChoosePattern } ) {
- const shownBlockPatterns = useAsyncList( blockPatterns );
const { editEntityRecord } = useDispatch( coreStore );
const { postType, postId } = useSelect( ( select ) => {
const { getCurrentPostType, getCurrentPostId } = select( editorStore );
@@ -79,7 +77,6 @@ function PatternSelection( { blockPatterns, onChoosePattern } ) {
return (
{
editEntityRecord( 'postType', postType, postId, {
blocks,
diff --git a/packages/editor/src/components/start-template-options/index.js b/packages/editor/src/components/start-template-options/index.js
index 3651c5c029a2c7..8d3910341aff43 100644
--- a/packages/editor/src/components/start-template-options/index.js
+++ b/packages/editor/src/components/start-template-options/index.js
@@ -6,7 +6,6 @@ import { __ } from '@wordpress/i18n';
import { useState, useMemo, useEffect } from '@wordpress/element';
import { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';
import { useSelect } from '@wordpress/data';
-import { useAsyncList } from '@wordpress/compose';
import { parse } from '@wordpress/blocks';
import { store as coreStore, useEntityBlockEditor } from '@wordpress/core-data';
@@ -111,11 +110,9 @@ function useStartPatterns( fallbackContent ) {
function PatternSelection( { fallbackContent, onChoosePattern, postType } ) {
const [ , , onChange ] = useEntityBlockEditor( 'postType', postType );
const blockPatterns = useStartPatterns( fallbackContent );
- const shownBlockPatterns = useAsyncList( blockPatterns );
return (
{
onChange( blocks, { selection: undefined } );
onChoosePattern();