@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
75 lines (71 loc) • 3.51 kB
JavaScript
/**
* External dependencies
*/
import { pick, defaultTo } from 'lodash';
/**
* WordPress dependencies
*/
import { Platform, useMemo } from '@wordpress/element';
import { useDispatch, useSelect } from '@wordpress/data';
import { store as coreStore, __experimentalFetchLinkSuggestions as fetchLinkSuggestions, __experimentalFetchRemoteUrlData as fetchRemoteUrlData } from '@wordpress/core-data';
/**
* Internal dependencies
*/
import { mediaUpload } from '../../utils';
import { store as editorStore } from '../../store';
/**
* React hook used to compute the block editor settings to use for the post editor.
*
* @param {Object} settings EditorProvider settings prop.
* @param {boolean} hasTemplate Whether template mode is enabled.
*
* @return {Object} Block Editor Settings.
*/
function useBlockEditorSettings(settings, hasTemplate) {
const {
reusableBlocks,
hasUploadPermissions,
canUseUnfilteredHTML,
isTitleSelected
} = useSelect(select => {
const {
canUserUseUnfilteredHTML,
isPostTitleSelected
} = select(editorStore);
const {
canUser
} = select(coreStore);
return {
canUseUnfilteredHTML: canUserUseUnfilteredHTML(),
reusableBlocks: select(coreStore).getEntityRecords('postType', 'wp_block',
/**
* Unbounded queries are not supported on native so as a workaround, we set per_page with the maximum value that native version can handle.
* Related issue: https://github.com/wordpress-mobile/gutenberg-mobile/issues/2661
*/
{
per_page: Platform.select({
web: -1,
native: 10
})
}),
hasUploadPermissions: defaultTo(canUser('create', 'media'), true),
// This selector is only defined on mobile.
isTitleSelected: isPostTitleSelected && isPostTitleSelected()
};
}, []);
const {
undo
} = useDispatch(editorStore);
return useMemo(() => ({ ...pick(settings, ['__experimentalBlockDirectory', '__experimentalBlockPatternCategories', '__experimentalBlockPatterns', '__experimentalFeatures', '__experimentalGlobalStylesBaseStyles', '__experimentalGlobalStylesUserEntityId', '__experimentalPreferredStyleVariations', '__experimentalSetIsInserterOpened', 'alignWide', 'allowedBlockTypes', 'bodyPlaceholder', 'codeEditingEnabled', 'colors', 'disableCustomColors', 'disableCustomFontSizes', 'disableCustomGradients', 'enableCustomLineHeight', 'enableCustomSpacing', 'enableCustomUnits', 'focusMode', 'fontSizes', 'gradients', 'hasFixedToolbar', 'hasReducedUI', 'imageDefaultSize', 'imageDimensions', 'imageEditing', 'imageSizes', 'isRTL', 'keepCaretInsideBlock', 'maxWidth', 'onUpdateDefaultBlockStyles', 'styles', 'template', 'templateLock', 'titlePlaceholder', 'supportsLayout', 'widgetTypesToHideFromLegacyWidgetBlock']),
mediaUpload: hasUploadPermissions ? mediaUpload : undefined,
__experimentalReusableBlocks: reusableBlocks,
__experimentalFetchLinkSuggestions: (search, searchOptions) => fetchLinkSuggestions(search, searchOptions, settings),
__experimentalFetchRemoteUrlData: url => fetchRemoteUrlData(url),
__experimentalCanUserUseUnfilteredHTML: canUseUnfilteredHTML,
__experimentalUndo: undo,
__experimentalShouldInsertAtTheTop: isTitleSelected,
outlineMode: hasTemplate
}), [settings, hasUploadPermissions, reusableBlocks, canUseUnfilteredHTML, undo, isTitleSelected, hasTemplate]);
}
export default useBlockEditorSettings;
//# sourceMappingURL=use-block-editor-settings.js.map