@wordpress/block-editor
Version:
146 lines (125 loc) • 4.84 kB
JavaScript
;
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