diff --git a/packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js b/packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js index 9e5b6373e54d8c..071a9c479003fa 100644 --- a/packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js +++ b/packages/block-editor/src/components/inserter/block-patterns-tab/pattern-category-previews.js @@ -70,27 +70,27 @@ export function PatternCategoryPreviews( { if ( category.name === allPatternsCategory.name ) { return true; } + if ( category.name === myPatternsCategory.name && pattern.type === PATTERN_TYPES.user ) { return true; } - if ( category.name !== 'uncategorized' ) { - return pattern.categories?.includes( category.name ); - } - // The uncategorized category should show all the patterns without any category - // or with no available category. - const availablePatternCategories = - pattern.categories?.filter( ( cat ) => - availableCategories.find( - ( availableCategory ) => - availableCategory.name === cat - ) - ) ?? []; + if ( category.name === 'uncategorized' ) { + // The uncategorized category should show all the patterns without any category... + if ( ! pattern.categories ) { + return true; + } + + // ...or with no available category. + return ! pattern.categories.some( ( catName ) => + availableCategories.some( ( c ) => c.name === catName ) + ); + } - return availablePatternCategories.length === 0; + return pattern.categories?.includes( category.name ); } ), [ allPatterns, diff --git a/packages/block-editor/src/components/inserter/block-patterns-tab/use-pattern-categories.js b/packages/block-editor/src/components/inserter/block-patterns-tab/use-pattern-categories.js index 12e885954f4bf3..9f4d598ce37cbf 100644 --- a/packages/block-editor/src/components/inserter/block-patterns-tab/use-pattern-categories.js +++ b/packages/block-editor/src/components/inserter/block-patterns-tab/use-pattern-categories.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { useMemo, useCallback } from '@wordpress/element'; +import { useMemo } from '@wordpress/element'; import { _x, _n, sprintf } from '@wordpress/i18n'; import { speak } from '@wordpress/a11y'; @@ -17,6 +17,16 @@ import { PATTERN_TYPES, } from './utils'; +function hasRegisteredCategory( pattern, allCategories ) { + if ( ! pattern.categories || ! pattern.categories.length ) { + return false; + } + + return pattern.categories.some( ( cat ) => + allCategories.some( ( category ) => category.name === cat ) + ); +} + export function usePatternCategories( rootClientId, sourceFilter = 'all' ) { const [ patterns, allCategories ] = usePatternsState( undefined, @@ -34,19 +44,6 @@ export function usePatternCategories( rootClientId, sourceFilter = 'all' ) { [ sourceFilter, patterns ] ); - const hasRegisteredCategory = useCallback( - ( pattern ) => { - if ( ! pattern.categories || ! pattern.categories.length ) { - return false; - } - - return pattern.categories.some( ( cat ) => - allCategories.some( ( category ) => category.name === cat ) - ); - }, - [ allCategories ] - ); - // Remove any empty categories. const populatedCategories = useMemo( () => { const categories = allCategories @@ -59,7 +56,7 @@ export function usePatternCategories( rootClientId, sourceFilter = 'all' ) { if ( filteredPatterns.some( - ( pattern ) => ! hasRegisteredCategory( pattern ) + ( pattern ) => ! hasRegisteredCategory( pattern, allCategories ) ) && ! categories.find( ( category ) => category.name === 'uncategorized' @@ -95,7 +92,7 @@ export function usePatternCategories( rootClientId, sourceFilter = 'all' ) { ) ); return categories; - }, [ allCategories, filteredPatterns, hasRegisteredCategory ] ); + }, [ allCategories, filteredPatterns ] ); return populatedCategories; } diff --git a/packages/block-editor/src/components/inserter/menu.js b/packages/block-editor/src/components/inserter/menu.js index cd44b902f491a5..24c099869ae0d6 100644 --- a/packages/block-editor/src/components/inserter/menu.js +++ b/packages/block-editor/src/components/inserter/menu.js @@ -67,26 +67,18 @@ function InserterMenu( insertionIndex: __experimentalInsertionIndex, shouldFocusBlock, } ); - const { showPatterns, inserterItems } = useSelect( + const { showPatterns } = useSelect( ( select ) => { - const { hasAllowedPatterns, getInserterItems } = unlock( - select( blockEditorStore ) - ); + const { hasAllowedPatterns } = unlock( select( blockEditorStore ) ); return { showPatterns: hasAllowedPatterns( destinationRootClientId ), - inserterItems: getInserterItems( destinationRootClientId ), }; }, [ destinationRootClientId ] ); - const hasReusableBlocks = useMemo( () => { - return inserterItems.some( - ( { category } ) => category === 'reusable' - ); - }, [ inserterItems ] ); const mediaCategories = useMediaCategories( destinationRootClientId ); - const showMedia = !! mediaCategories.length; + const showMedia = mediaCategories.length > 0; const onInsert = useCallback( ( blocks, meta, shouldForceFocusBlock ) => { @@ -211,9 +203,7 @@ function InserterMenu( selectedTab === 'patterns' && ! delayedFilterValue && selectedPatternCategory; - const showAsTabs = - ! delayedFilterValue && - ( showPatterns || hasReusableBlocks || showMedia ); + const showAsTabs = ! delayedFilterValue && ( showPatterns || showMedia ); const showMediaPanel = selectedTab === 'media' && ! delayedFilterValue && @@ -267,7 +257,6 @@ function InserterMenu( { showAsTabs && ( { - const tempTabs = []; - if ( prioritizePatterns && showPatterns ) { - tempTabs.push( patternsTab ); - } - tempTabs.push( blocksTab ); - if ( ! prioritizePatterns && showPatterns ) { - tempTabs.push( patternsTab ); - } - if ( showMedia ) { - tempTabs.push( mediaTab ); - } - return tempTabs; - }, [ prioritizePatterns, showPatterns, showMedia ] ); + const tabs = [ + prioritizePatterns && showPatterns && patternsTab, + blocksTab, + ! prioritizePatterns && showPatterns && patternsTab, + showMedia && mediaTab, + ].filter( Boolean ); return (