UNPKG

@wordpress/block-editor

Version:
64 lines (58 loc) 1.66 kB
/** * External dependencies */ import { map } from 'lodash'; /** * WordPress dependencies */ import { useCallback } from '@wordpress/element'; import { cloneBlock } from '@wordpress/blocks'; import { useDispatch, useSelect } from '@wordpress/data'; import { __, sprintf } from '@wordpress/i18n'; import { store as noticesStore } from '@wordpress/notices'; /** * Internal dependencies */ import { store as blockEditorStore } from '../../../store'; /** * Retrieves the block patterns inserter state. * * @param {Function} onInsert function called when inserter a list of blocks. * @param {string=} rootClientId Insertion's root client ID. * * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler) */ const usePatternsState = ( onInsert, rootClientId ) => { const { patternCategories, patterns } = useSelect( ( select ) => { const { __experimentalGetAllowedPatterns, getSettings } = select( blockEditorStore ); return { patterns: __experimentalGetAllowedPatterns( rootClientId ), patternCategories: getSettings() .__experimentalBlockPatternCategories, }; }, [ rootClientId ] ); const { createSuccessNotice } = useDispatch( noticesStore ); const onClickPattern = useCallback( ( pattern, blocks ) => { onInsert( map( blocks, ( block ) => cloneBlock( block ) ), pattern.name ); createSuccessNotice( sprintf( /* translators: %s: block pattern title. */ __( 'Block pattern "%s" inserted.' ), pattern.title ), { type: 'snackbar', } ); }, [] ); return [ patterns, patternCategories, onClickPattern ]; }; export default usePatternsState;