UNPKG

@gechiui/block-editor

Version:
64 lines (58 loc) 1.66 kB
/** * External dependencies */ import { map } from 'lodash'; /** * GeChiUI dependencies */ import { useCallback } from '@gechiui/element'; import { cloneBlock } from '@gechiui/blocks'; import { useDispatch, useSelect } from '@gechiui/data'; import { __, sprintf } from '@gechiui/i18n'; import { store as noticesStore } from '@gechiui/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. */ __( '区块样板“%s”已插入。' ), pattern.title ), { type: 'snackbar', } ); }, [] ); return [ patterns, patternCategories, onClickPattern ]; }; export default usePatternsState;