@gechiui/block-editor
Version:
57 lines (53 loc) • 1.67 kB
JavaScript
/**
* 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;
//# sourceMappingURL=use-patterns-state.js.map