@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
117 lines (111 loc) • 3.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = EditorKeyboardShortcuts;
var _keyboardShortcuts = require("@wordpress/keyboard-shortcuts");
var _data = require("@wordpress/data");
var _interface = require("@wordpress/interface");
var _blockEditor = require("@wordpress/block-editor");
var _store = require("../../store");
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
/**
* Handles the keyboard shortcuts for the editor.
*
* It provides functionality for various keyboard shortcuts such as toggling editor mode,
* toggling distraction-free mode, undo/redo, saving the post, toggling list view,
* and toggling the sidebar.
*/
function EditorKeyboardShortcuts() {
const isModeToggleDisabled = (0, _data.useSelect)(select => {
const {
richEditingEnabled,
codeEditingEnabled
} = select(_store.store).getEditorSettings();
return !richEditingEnabled || !codeEditingEnabled;
}, []);
const {
getBlockSelectionStart
} = (0, _data.useSelect)(_blockEditor.store);
const {
getActiveComplementaryArea
} = (0, _data.useSelect)(_interface.store);
const {
enableComplementaryArea,
disableComplementaryArea
} = (0, _data.useDispatch)(_interface.store);
const {
redo,
undo,
savePost,
setIsListViewOpened,
switchEditorMode,
toggleDistractionFree
} = (0, _data.useDispatch)(_store.store);
const {
isEditedPostDirty,
isPostSavingLocked,
isListViewOpened,
getEditorMode
} = (0, _data.useSelect)(_store.store);
(0, _keyboardShortcuts.useShortcut)('core/editor/toggle-mode', () => {
switchEditorMode(getEditorMode() === 'visual' ? 'text' : 'visual');
}, {
isDisabled: isModeToggleDisabled
});
(0, _keyboardShortcuts.useShortcut)('core/editor/toggle-distraction-free', () => {
toggleDistractionFree();
});
(0, _keyboardShortcuts.useShortcut)('core/editor/undo', event => {
undo();
event.preventDefault();
});
(0, _keyboardShortcuts.useShortcut)('core/editor/redo', event => {
redo();
event.preventDefault();
});
(0, _keyboardShortcuts.useShortcut)('core/editor/save', event => {
event.preventDefault();
/**
* Do not save the post if post saving is locked.
*/
if (isPostSavingLocked()) {
return;
}
// TODO: This should be handled in the `savePost` effect in
// considering `isSaveable`. See note on `isEditedPostSaveable`
// selector about dirtiness and meta-boxes.
//
// See: `isEditedPostSaveable`
if (!isEditedPostDirty()) {
return;
}
savePost();
});
// Only opens the list view. Other functionality for this shortcut happens in the rendered sidebar.
(0, _keyboardShortcuts.useShortcut)('core/editor/toggle-list-view', event => {
if (!isListViewOpened()) {
event.preventDefault();
setIsListViewOpened(true);
}
});
(0, _keyboardShortcuts.useShortcut)('core/editor/toggle-sidebar', event => {
// This shortcut has no known clashes, but use preventDefault to prevent any
// obscure shortcuts from triggering.
event.preventDefault();
const isEditorSidebarOpened = ['edit-post/document', 'edit-post/block'].includes(getActiveComplementaryArea('core'));
if (isEditorSidebarOpened) {
disableComplementaryArea('core');
} else {
const sidebarToOpen = getBlockSelectionStart() ? 'edit-post/block' : 'edit-post/document';
enableComplementaryArea('core', sidebarToOpen);
}
});
return null;
}
//# sourceMappingURL=index.js.map