UNPKG

@wordpress/editor

Version:
476 lines (473 loc) 13.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useCommands; var _data = require("@wordpress/data"); var _i18n = require("@wordpress/i18n"); var _icons = require("@wordpress/icons"); var _commands = require("@wordpress/commands"); var _preferences = require("@wordpress/preferences"); var _notices = require("@wordpress/notices"); var _blockEditor = require("@wordpress/block-editor"); var _coreData = require("@wordpress/core-data"); var _interface = require("@wordpress/interface"); var _url = require("@wordpress/url"); var _htmlEntities = require("@wordpress/html-entities"); var _lockUnlock = require("../../lock-unlock"); var _store = require("../../store"); var _constants = require("../../store/constants"); var _patternRenameModal = require("../pattern-rename-modal"); var _patternDuplicateModal = require("../pattern-duplicate-modal"); var _isTemplateRevertable = _interopRequireDefault(require("../../store/utils/is-template-revertable")); /** * WordPress dependencies */ /** * Internal dependencies */ const getEditorCommandLoader = () => function useEditorCommandLoader() { const { editorMode, isListViewOpen, showBlockBreadcrumbs, isDistractionFree, isFocusMode, isPreviewMode, isViewable, isCodeEditingEnabled, isRichEditingEnabled, isPublishSidebarEnabled } = (0, _data.useSelect)(select => { var _get, _getPostType$viewable; const { get } = select(_preferences.store); const { isListViewOpened, getCurrentPostType, getEditorSettings } = select(_store.store); const { getSettings } = select(_blockEditor.store); const { getPostType } = select(_coreData.store); return { editorMode: (_get = get('core', 'editorMode')) !== null && _get !== void 0 ? _get : 'visual', isListViewOpen: isListViewOpened(), showBlockBreadcrumbs: get('core', 'showBlockBreadcrumbs'), isDistractionFree: get('core', 'distractionFree'), isFocusMode: get('core', 'focusMode'), isPreviewMode: getSettings().isPreviewMode, isViewable: (_getPostType$viewable = getPostType(getCurrentPostType())?.viewable) !== null && _getPostType$viewable !== void 0 ? _getPostType$viewable : false, isCodeEditingEnabled: getEditorSettings().codeEditingEnabled, isRichEditingEnabled: getEditorSettings().richEditingEnabled, isPublishSidebarEnabled: select(_store.store).isPublishSidebarEnabled() }; }, []); const { getActiveComplementaryArea } = (0, _data.useSelect)(_interface.store); const { toggle } = (0, _data.useDispatch)(_preferences.store); const { createInfoNotice } = (0, _data.useDispatch)(_notices.store); const { __unstableSaveForPreview, setIsListViewOpened, switchEditorMode, toggleDistractionFree, toggleSpotlightMode, toggleTopToolbar } = (0, _data.useDispatch)(_store.store); const { openModal, enableComplementaryArea, disableComplementaryArea } = (0, _data.useDispatch)(_interface.store); const { getCurrentPostId } = (0, _data.useSelect)(_store.store); const { isBlockBasedTheme, canCreateTemplate } = (0, _data.useSelect)(select => { return { isBlockBasedTheme: select(_coreData.store).getCurrentTheme()?.is_block_theme, canCreateTemplate: select(_coreData.store).canUser('create', { kind: 'postType', name: 'wp_template' }) }; }, []); const allowSwitchEditorMode = isCodeEditingEnabled && isRichEditingEnabled; if (isPreviewMode) { return { commands: [], isLoading: false }; } const commands = []; commands.push({ name: 'core/open-shortcut-help', label: (0, _i18n.__)('Keyboard shortcuts'), icon: _icons.keyboard, callback: ({ close }) => { close(); openModal('editor/keyboard-shortcut-help'); } }); commands.push({ name: 'core/toggle-distraction-free', label: isDistractionFree ? (0, _i18n.__)('Exit Distraction free') : (0, _i18n.__)('Enter Distraction free'), callback: ({ close }) => { toggleDistractionFree(); close(); } }); commands.push({ name: 'core/open-preferences', label: (0, _i18n.__)('Editor preferences'), callback: ({ close }) => { close(); openModal('editor/preferences'); } }); commands.push({ name: 'core/toggle-spotlight-mode', label: isFocusMode ? (0, _i18n.__)('Exit Spotlight mode') : (0, _i18n.__)('Enter Spotlight mode'), callback: ({ close }) => { toggleSpotlightMode(); close(); } }); commands.push({ name: 'core/toggle-list-view', label: isListViewOpen ? (0, _i18n.__)('Close List View') : (0, _i18n.__)('Open List View'), icon: _icons.listView, callback: ({ close }) => { setIsListViewOpened(!isListViewOpen); close(); createInfoNotice(isListViewOpen ? (0, _i18n.__)('List View off.') : (0, _i18n.__)('List View on.'), { id: 'core/editor/toggle-list-view/notice', type: 'snackbar' }); } }); commands.push({ name: 'core/toggle-top-toolbar', label: (0, _i18n.__)('Top toolbar'), callback: ({ close }) => { toggleTopToolbar(); close(); } }); if (allowSwitchEditorMode) { commands.push({ name: 'core/toggle-code-editor', label: editorMode === 'visual' ? (0, _i18n.__)('Open code editor') : (0, _i18n.__)('Exit code editor'), icon: _icons.code, callback: ({ close }) => { switchEditorMode(editorMode === 'visual' ? 'text' : 'visual'); close(); } }); } commands.push({ name: 'core/toggle-breadcrumbs', label: showBlockBreadcrumbs ? (0, _i18n.__)('Hide block breadcrumbs') : (0, _i18n.__)('Show block breadcrumbs'), callback: ({ close }) => { toggle('core', 'showBlockBreadcrumbs'); close(); createInfoNotice(showBlockBreadcrumbs ? (0, _i18n.__)('Breadcrumbs hidden.') : (0, _i18n.__)('Breadcrumbs visible.'), { id: 'core/editor/toggle-breadcrumbs/notice', type: 'snackbar' }); } }); commands.push({ name: 'core/open-settings-sidebar', label: (0, _i18n.__)('Show or hide the Settings panel'), icon: (0, _i18n.isRTL)() ? _icons.drawerLeft : _icons.drawerRight, callback: ({ close }) => { const activeSidebar = getActiveComplementaryArea('core'); close(); if (activeSidebar === 'edit-post/document') { disableComplementaryArea('core'); } else { enableComplementaryArea('core', 'edit-post/document'); } } }); commands.push({ name: 'core/open-block-inspector', label: (0, _i18n.__)('Show or hide the Block settings panel'), icon: _icons.blockDefault, callback: ({ close }) => { const activeSidebar = getActiveComplementaryArea('core'); close(); if (activeSidebar === 'edit-post/block') { disableComplementaryArea('core'); } else { enableComplementaryArea('core', 'edit-post/block'); } } }); commands.push({ name: 'core/toggle-publish-sidebar', label: isPublishSidebarEnabled ? (0, _i18n.__)('Disable pre-publish checks') : (0, _i18n.__)('Enable pre-publish checks'), icon: _icons.formatListBullets, callback: ({ close }) => { close(); toggle('core', 'isPublishSidebarEnabled'); createInfoNotice(isPublishSidebarEnabled ? (0, _i18n.__)('Pre-publish checks disabled.') : (0, _i18n.__)('Pre-publish checks enabled.'), { id: 'core/editor/publish-sidebar/notice', type: 'snackbar' }); } }); if (isViewable) { commands.push({ name: 'core/preview-link', label: (0, _i18n.__)('Preview in a new tab'), icon: _icons.external, callback: async ({ close }) => { close(); const postId = getCurrentPostId(); const link = await __unstableSaveForPreview(); window.open(link, `wp-preview-${postId}`); } }); } if (canCreateTemplate && isBlockBasedTheme) { const isSiteEditor = (0, _url.getPath)(window.location.href)?.includes('site-editor.php'); if (!isSiteEditor) { commands.push({ name: 'core/go-to-site-editor', label: (0, _i18n.__)('Open Site Editor'), callback: ({ close }) => { close(); document.location = 'site-editor.php'; } }); } } return { commands, isLoading: false }; }; const getEditedEntityContextualCommands = () => function useEditedEntityContextualCommands() { const { postType } = (0, _data.useSelect)(select => { const { getCurrentPostType } = select(_store.store); return { postType: getCurrentPostType() }; }, []); const { openModal } = (0, _data.useDispatch)(_interface.store); const commands = []; if (postType === _constants.PATTERN_POST_TYPE) { commands.push({ name: 'core/rename-pattern', label: (0, _i18n.__)('Rename pattern'), icon: _icons.edit, callback: ({ close }) => { openModal(_patternRenameModal.modalName); close(); } }); commands.push({ name: 'core/duplicate-pattern', label: (0, _i18n.__)('Duplicate pattern'), icon: _icons.symbol, callback: ({ close }) => { openModal(_patternDuplicateModal.modalName); close(); } }); } return { isLoading: false, commands }; }; const getPageContentFocusCommands = () => function usePageContentFocusCommands() { const { onNavigateToEntityRecord, goBack, templateId, isPreviewMode } = (0, _data.useSelect)(select => { const { getRenderingMode, getEditorSettings: _getEditorSettings, getCurrentTemplateId } = (0, _lockUnlock.unlock)(select(_store.store)); const editorSettings = _getEditorSettings(); return { isTemplateHidden: getRenderingMode() === 'post-only', onNavigateToEntityRecord: editorSettings.onNavigateToEntityRecord, getEditorSettings: _getEditorSettings, goBack: editorSettings.onNavigateToPreviousEntityRecord, templateId: getCurrentTemplateId(), isPreviewMode: editorSettings.isPreviewMode }; }, []); const { editedRecord: template, hasResolved } = (0, _coreData.useEntityRecord)('postType', 'wp_template', templateId); if (isPreviewMode) { return { isLoading: false, commands: [] }; } const commands = []; if (templateId && hasResolved) { commands.push({ name: 'core/switch-to-template-focus', label: (0, _i18n.sprintf)(/* translators: %s: template title */ (0, _i18n.__)('Edit template: %s'), (0, _htmlEntities.decodeEntities)(template.title)), icon: _icons.layout, callback: ({ close }) => { onNavigateToEntityRecord({ postId: templateId, postType: 'wp_template' }); close(); } }); } if (!!goBack) { commands.push({ name: 'core/switch-to-previous-entity', label: (0, _i18n.__)('Go back'), icon: _icons.page, callback: ({ close }) => { goBack(); close(); } }); } return { isLoading: false, commands }; }; const getManipulateDocumentCommands = () => function useManipulateDocumentCommands() { const { postType, postId } = (0, _data.useSelect)(select => { const { getCurrentPostId, getCurrentPostType } = select(_store.store); return { postType: getCurrentPostType(), postId: getCurrentPostId() }; }, []); const { editedRecord: template, hasResolved } = (0, _coreData.useEntityRecord)('postType', postType, postId); // eslint-disable-next-line @wordpress/no-unused-vars-before-return const { revertTemplate } = (0, _lockUnlock.unlock)((0, _data.useDispatch)(_store.store)); if (!hasResolved || ![_constants.TEMPLATE_PART_POST_TYPE, _constants.TEMPLATE_POST_TYPE].includes(postType)) { return { isLoading: true, commands: [] }; } const commands = []; if ((0, _isTemplateRevertable.default)(template)) { const label = template.type === _constants.TEMPLATE_POST_TYPE ? (0, _i18n.sprintf)(/* translators: %s: template title */ (0, _i18n.__)('Reset template: %s'), (0, _htmlEntities.decodeEntities)(template.title)) : (0, _i18n.sprintf)(/* translators: %s: template part title */ (0, _i18n.__)('Reset template part: %s'), (0, _htmlEntities.decodeEntities)(template.title)); commands.push({ name: 'core/reset-template', label, icon: (0, _i18n.isRTL)() ? _icons.rotateRight : _icons.rotateLeft, callback: ({ close }) => { revertTemplate(template); close(); } }); } return { isLoading: !hasResolved, commands }; }; function useCommands() { (0, _commands.useCommandLoader)({ name: 'core/editor/edit-ui', hook: getEditorCommandLoader() }); (0, _commands.useCommandLoader)({ name: 'core/editor/contextual-commands', hook: getEditedEntityContextualCommands(), context: 'entity-edit' }); (0, _commands.useCommandLoader)({ name: 'core/editor/page-content-focus', hook: getPageContentFocusCommands(), context: 'entity-edit' }); (0, _commands.useCommandLoader)({ name: 'core/edit-site/manipulate-document', hook: getManipulateDocumentCommands() }); } //# sourceMappingURL=index.js.map