UNPKG

@wordpress/block-editor

Version:
146 lines (125 loc) 4.84 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.withBlockControls = void 0; var _element = require("@wordpress/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _components = require("@wordpress/components"); var _compose = require("@wordpress/compose"); var _data = require("@wordpress/data"); var _hooks = require("@wordpress/hooks"); var _i18n = require("@wordpress/i18n"); var _store = require("../store"); var _components2 = require("../components"); /** * WordPress dependencies */ /** * Internal dependencies */ function StopEditingAsBlocksOnOutsideSelect({ clientId, stopEditingAsBlock }) { const isBlockOrDescendantSelected = (0, _data.useSelect)(select => { const { isBlockSelected, hasSelectedInnerBlock } = select(_store.store); return isBlockSelected(clientId) || hasSelectedInnerBlock(clientId, true); }, [clientId]); (0, _element.useEffect)(() => { if (!isBlockOrDescendantSelected) { stopEditingAsBlock(); } }, [isBlockOrDescendantSelected, stopEditingAsBlock]); return null; } const withBlockControls = (0, _compose.createHigherOrderComponent)(BlockEdit => props => { const { getBlockListSettings, getSettings } = (0, _data.useSelect)(_store.store); const focusModeToRevert = (0, _element.useRef)(); const { templateLock, isLockedByParent, isEditingAsBlocks } = (0, _data.useSelect)(select => { const { __unstableGetContentLockingParent, getTemplateLock, __unstableGetTemporarilyEditingAsBlocks } = select(_store.store); return { templateLock: getTemplateLock(props.clientId), isLockedByParent: !!__unstableGetContentLockingParent(props.clientId), isEditingAsBlocks: __unstableGetTemporarilyEditingAsBlocks() === props.clientId }; }, [props.clientId]); const { updateSettings, updateBlockListSettings, __unstableSetTemporarilyEditingAsBlocks } = (0, _data.useDispatch)(_store.store); const isContentLocked = !isLockedByParent && templateLock === 'contentOnly'; const { __unstableMarkNextChangeAsNotPersistent, updateBlockAttributes } = (0, _data.useDispatch)(_store.store); const stopEditingAsBlock = (0, _element.useCallback)(() => { __unstableMarkNextChangeAsNotPersistent(); updateBlockAttributes(props.clientId, { templateLock: 'contentOnly' }); updateBlockListSettings(props.clientId, { ...getBlockListSettings(props.clientId), templateLock: 'contentOnly' }); updateSettings({ focusMode: focusModeToRevert.current }); __unstableSetTemporarilyEditingAsBlocks(); }, [props.clientId, updateSettings, updateBlockListSettings, getBlockListSettings, __unstableMarkNextChangeAsNotPersistent, updateBlockAttributes, __unstableSetTemporarilyEditingAsBlocks]); if (!isContentLocked && !isEditingAsBlocks) { return (0, _element.createElement)(BlockEdit, (0, _extends2.default)({ key: "edit" }, props)); } const showStopEditingAsBlocks = isEditingAsBlocks && !isContentLocked; const showStartEditingAsBlocks = !isEditingAsBlocks && isContentLocked && props.isSelected; return (0, _element.createElement)(_element.Fragment, null, showStopEditingAsBlocks && (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(StopEditingAsBlocksOnOutsideSelect, { clientId: props.clientId, stopEditingAsBlock: stopEditingAsBlock }), (0, _element.createElement)(_components2.BlockControls, { group: "other" }, (0, _element.createElement)(_components.ToolbarButton, { onClick: () => { stopEditingAsBlock(); } }, (0, _i18n.__)('Done')))), showStartEditingAsBlocks && (0, _element.createElement)(_components2.BlockSettingsMenuControls, null, ({ onClose }) => (0, _element.createElement)(_components.MenuItem, { onClick: () => { __unstableMarkNextChangeAsNotPersistent(); updateBlockAttributes(props.clientId, { templateLock: undefined }); updateBlockListSettings(props.clientId, { ...getBlockListSettings(props.clientId), templateLock: false }); focusModeToRevert.current = getSettings().focusMode; updateSettings({ focusMode: true }); __unstableSetTemporarilyEditingAsBlocks(props.clientId); onClose(); } }, (0, _i18n.__)('Modify'))), (0, _element.createElement)(BlockEdit, (0, _extends2.default)({ key: "edit" }, props))); }, 'withToolbarControls'); exports.withBlockControls = withBlockControls; (0, _hooks.addFilter)('editor.BlockEdit', 'core/content-lock-ui/with-block-controls', withBlockControls); //# sourceMappingURL=content-lock-ui.js.map