Skip to content

Commit

Permalink
Select starter patterns
Browse files Browse the repository at this point in the history
  • Loading branch information
ellatrix committed May 9, 2024
1 parent 241fd67 commit 41170d6
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,21 @@ import { store as noticesStore } from '@wordpress/notices';
import { store as blockEditorStore } from '../../../store';
import { INSERTER_PATTERN_TYPES } from '../block-patterns-tab/utils';

function useStartPatterns() {
// A pattern is a start pattern if it includes 'core/post-content' in its blockTypes,
// and it has no postTypes declared and the current post type is page or if
// the current post type is part of the postTypes declared.
const { blockPatternsWithPostContentBlockType } = useSelect( ( select ) => {
const { getPatternsByBlockTypes } = select( blockEditorStore );
return {
blockPatternsWithPostContentBlockType:
getPatternsByBlockTypes( 'core/post-content' ),
};
}, [] );

return blockPatternsWithPostContentBlockType;
}

/**
* Retrieves the block patterns inserter state.
*
Expand All @@ -39,8 +54,34 @@ const usePatternsState = ( onInsert, rootClientId ) => {
[ rootClientId ]
);

const starterPatterns = useStartPatterns();

const newPatterns = useMemo(
() =>
patterns.map( ( pattern ) => {
if ( starterPatterns.includes( pattern ) ) {
return {
...pattern,
categories: [
...( pattern.categories ?? [] ),
'core/content',
],
};
}

return pattern;
} ),
[ patterns, starterPatterns ]
);

const allCategories = useMemo( () => {
const categories = [ ...patternCategories ];
const categories = [
{
name: 'core/content',
label: __( 'Starter content' ),
},
...patternCategories,
];
userPatternCategories?.forEach( ( userCategory ) => {
if (
! categories.find(
Expand Down Expand Up @@ -81,7 +122,7 @@ const usePatternsState = ( onInsert, rootClientId ) => {
[ createSuccessNotice, onInsert ]
);

return [ patterns, allCategories, onClickPattern ];
return [ newPatterns, allCategories, onClickPattern ];
};

export default usePatternsState;
6 changes: 3 additions & 3 deletions packages/block-editor/src/components/inserter/menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ function InserterMenu(
const [ filterValue, setFilterValue, delayedFilterValue ] =
useDebouncedInput( __experimentalFilterValue );
const [ hoveredItem, setHoveredItem ] = useState( null );
const [ selectedPatternCategory, setSelectedPatternCategory ] = useState(
__experimentalInitialCategory
);
const [ selectedPatternCategory, setSelectedPatternCategory ] = useState( {
name: __experimentalInitialCategory,
} );
const [ patternFilter, setPatternFilter ] = useState( 'all' );
const [ selectedMediaCategory, setSelectedMediaCategory ] =
useState( null );
Expand Down
27 changes: 22 additions & 5 deletions packages/block-editor/src/store/selectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -2391,10 +2391,23 @@ export const getPatternsByBlockTypes = createRegistrySelector( ( select ) =>
if ( ! blockNames ) {
return EMPTY_ARRAY;
}
const patterns =
select( STORE_NAME ).__experimentalGetAllowedPatterns(
rootClientId
);
let patterns;

if ( rootClientId ) {
patterns =
select( STORE_NAME ).__experimentalGetAllowedPatterns(
rootClientId
);
} else {
const {
getAllPatterns,
__experimentalGetParsedPattern: getParsedPattern,
} = unlock( select( STORE_NAME ) );
patterns = getAllPatterns()
.filter( ( { inserter = true } ) => !! inserter )
.map( ( { name } ) => getParsedPattern( name ) );
}

const normalizedBlockNames = Array.isArray( blockNames )
? blockNames
: [ blockNames ];
Expand All @@ -2409,7 +2422,11 @@ export const getPatternsByBlockTypes = createRegistrySelector( ( select ) =>
return filteredPatterns;
},
( state, blockNames, rootClientId ) =>
getAllowedPatternsDependants( select )( state, rootClientId )
! rootClientId
? unlock( select( STORE_NAME ) ).getAllPatterns()
: select( STORE_NAME ).__experimentalGetAllowedPatterns(
rootClientId
)
)
);

Expand Down
2 changes: 1 addition & 1 deletion packages/editor/src/components/start-page-options/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { store as editorStore } from '../../store';
function StartPageOptionsModal() {
const { setIsInserterOpened } = useDispatch( editorStore );
useEffect( () => {
setIsInserterOpened( { tab: 'patterns', category: 'all' } );
setIsInserterOpened( { tab: 'patterns', category: 'core/content' } );
}, [ setIsInserterOpened ] );
return null;
}
Expand Down

0 comments on commit 41170d6

Please sign in to comment.