{
- return items.filter(
- ( { category, syncStatus } ) =>
- category === 'reusable' && syncStatus !== 'unsynced'
- );
- }, [ items ] );
-
- if ( filteredItems.length === 0 ) {
- return ;
- }
-
- return (
-
-
-
- );
-}
-
-// The unwrapped component is only exported for use by unit tests.
-/**
- * List of reusable blocks shown in the "Reusable" tab of the inserter.
- *
- * @param {Object} props Component props.
- * @param {?string} props.rootClientId Client id of block to insert into.
- * @param {Function} props.onInsert Callback to run when item is inserted.
- * @param {Function} props.onHover Callback to run when item is hovered.
- *
- * @return {WPComponent} The component.
- */
-export function ReusableBlocksTab( { rootClientId, onInsert, onHover } ) {
- return (
- <>
-
-
-
-
-
-
-
- >
- );
-}
-
-export default ReusableBlocksTab;
diff --git a/packages/block-editor/src/components/inserter/tabs.js b/packages/block-editor/src/components/inserter/tabs.js
index 1ff8b529707a4..2444bfe6d056c 100644
--- a/packages/block-editor/src/components/inserter/tabs.js
+++ b/packages/block-editor/src/components/inserter/tabs.js
@@ -1,7 +1,6 @@
/**
* WordPress dependencies
*/
-import { symbol as reusableBlockIcon } from '@wordpress/icons';
import { useMemo } from '@wordpress/element';
import { TabPanel } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
@@ -16,12 +15,6 @@ const patternsTab = {
/* translators: Theme and Directory Patterns tab title in the block inserter. */
title: __( 'Patterns' ),
};
-const reusableBlocksTab = {
- name: 'reusable',
- /* translators: Locally created Patterns tab title in the block inserter. */
- title: __( 'Synced patterns' ),
- icon: reusableBlockIcon,
-};
const mediaTab = {
name: 'media',
/* translators: Media tab title in the block inserter. */
@@ -31,7 +24,6 @@ const mediaTab = {
function InserterTabs( {
children,
showPatterns = false,
- showReusableBlocks = false,
showMedia = false,
onSelect,
prioritizePatterns,
@@ -48,11 +40,8 @@ function InserterTabs( {
if ( showMedia ) {
tempTabs.push( mediaTab );
}
- if ( showReusableBlocks ) {
- tempTabs.push( reusableBlocksTab );
- }
return tempTabs;
- }, [ prioritizePatterns, showPatterns, showReusableBlocks, showMedia ] );
+ }, [ prioritizePatterns, showPatterns, showMedia ] );
return (
{
- // This allows us to tweak the returned value on each test.
- const mock = jest.fn();
- return mock;
-} );
-
-describe( 'InserterMenu', () => {
- beforeAll( () => {
- registerBlockType( 'core/block', {
- save: () => {},
- title: 'reusable block',
- edit: () => {},
- } );
- } );
-
- afterAll( () => {
- unregisterBlockType( 'core/block' );
- } );
-
- beforeEach( () => {
- useBlockTypesState.mockImplementation( () => [
- items,
- categories,
- collections,
- ] );
- } );
-
- it( 'should show nothing if there are no items', () => {
- const noItems = [];
- useBlockTypesState.mockImplementation( () => [
- noItems,
- categories,
- collections,
- ] );
-
- render( );
-
- expect( screen.queryByRole( 'option' ) ).not.toBeInTheDocument();
- } );
-
- it( 'should list reusable blocks', () => {
- render( );
-
- expect(
- screen.getByRole( 'option', { name: 'My reusable block' } )
- ).toBeVisible();
- } );
-
- it( 'should trim whitespace of search terms', () => {
- render( );
-
- expect(
- screen.getByRole( 'option', { name: 'My reusable block' } )
- ).toBeVisible();
- } );
-} );
diff --git a/packages/block-editor/src/store/selectors.js b/packages/block-editor/src/store/selectors.js
index 3c961c130b78a..e3859f7ab298a 100644
--- a/packages/block-editor/src/store/selectors.js
+++ b/packages/block-editor/src/store/selectors.js
@@ -2294,19 +2294,16 @@ function getUnsyncedPatterns( state ) {
const reusableBlocks =
state?.settings?.__experimentalReusableBlocks ?? EMPTY_ARRAY;
- return reusableBlocks
- .filter(
- ( reusableBlock ) =>
- reusableBlock.wp_pattern_sync_status === 'unsynced'
- )
- .map( ( reusableBlock ) => {
- return {
- name: `core/block/${ reusableBlock.id }`,
- title: reusableBlock.title.raw,
- categories: [ 'custom' ],
- content: reusableBlock.content.raw,
- };
- } );
+ return reusableBlocks.map( ( reusableBlock ) => {
+ return {
+ id: reusableBlock.id,
+ name: `core/block/${ reusableBlock.id }`,
+ title: reusableBlock.title.raw,
+ categories: [ 'custom' ],
+ content: reusableBlock.content.raw,
+ syncStatus: reusableBlock.wp_pattern_sync_status,
+ };
+ } );
}
export const __experimentalGetParsedPattern = createSelector(
diff --git a/packages/block-editor/src/style.scss b/packages/block-editor/src/style.scss
index 5eafc0766ae22..51ca87b758a1e 100644
--- a/packages/block-editor/src/style.scss
+++ b/packages/block-editor/src/style.scss
@@ -12,6 +12,8 @@
@import "./components/block-navigation/style.scss";
@import "./components/block-parent-selector/style.scss";
@import "./components/block-patterns-list/style.scss";
+@import "./components/block-patterns-paging/style.scss";
+@import "./components/block-patterns-sync-filter/style.scss";
@import "./components/block-popover/style.scss";
@import "./components/block-preview/style.scss";
@import "./components/block-settings-menu/style.scss";