@gechiui/block-editor
Version:
137 lines (113 loc) • 3.88 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.BlockInvalidWarning = BlockInvalidWarning;
exports.default = void 0;
var _element = require("@gechiui/element");
var _i18n = require("@gechiui/i18n");
var _components = require("@gechiui/components");
var _blocks = require("@gechiui/blocks");
var _compose = require("@gechiui/compose");
var _data = require("@gechiui/data");
var _warning = _interopRequireDefault(require("../warning"));
var _blockCompare = _interopRequireDefault(require("../block-compare"));
var _store = require("../../store");
/**
* GeChiUI dependencies
*/
/**
* Internal dependencies
*/
function BlockInvalidWarning(_ref) {
let {
convertToHTML,
convertToBlocks,
convertToClassic,
attemptBlockRecovery,
block
} = _ref;
const hasHTMLBlock = !!(0, _blocks.getBlockType)('core/html');
const [compare, setCompare] = (0, _element.useState)(false);
const onCompare = (0, _element.useCallback)(() => setCompare(true), []);
const onCompareClose = (0, _element.useCallback)(() => setCompare(false), []); // We memo the array here to prevent the children components from being updated unexpectedly
const hiddenActions = (0, _element.useMemo)(() => [{
// translators: Button to fix block content
title: (0, _i18n._x)('Resolve', 'imperative verb'),
onClick: onCompare
}, hasHTMLBlock && {
title: (0, _i18n.__)('转换为HTML'),
onClick: convertToHTML
}, {
title: (0, _i18n.__)('转换为经典区块'),
onClick: convertToClassic
}].filter(Boolean), [onCompare, convertToHTML, convertToClassic]);
return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_warning.default, {
actions: [(0, _element.createElement)(_components.Button, {
key: "recover",
onClick: attemptBlockRecovery,
variant: "primary"
}, (0, _i18n.__)('尝试恢复区块'))],
secondaryActions: hiddenActions
}, (0, _i18n.__)('此区块包含未预料的或无效的内容。')), compare && (0, _element.createElement)(_components.Modal, {
title: // translators: Dialog title to fix block content
(0, _i18n.__)('解析区块'),
onRequestClose: onCompareClose,
className: "block-editor-block-compare"
}, (0, _element.createElement)(_blockCompare.default, {
block: block,
onKeep: convertToHTML,
onConvert: convertToBlocks,
convertor: blockToBlocks,
convertButtonText: (0, _i18n.__)('转换为区块')
})));
}
const blockToClassic = block => (0, _blocks.createBlock)('core/freeform', {
content: block.originalContent
});
const blockToHTML = block => (0, _blocks.createBlock)('core/html', {
content: block.originalContent
});
const blockToBlocks = block => (0, _blocks.rawHandler)({
HTML: block.originalContent
});
const recoverBlock = _ref2 => {
let {
name,
attributes,
innerBlocks
} = _ref2;
return (0, _blocks.createBlock)(name, attributes, innerBlocks);
};
var _default = (0, _compose.compose)([(0, _data.withSelect)((select, _ref3) => {
let {
clientId
} = _ref3;
return {
block: select(_store.store).getBlock(clientId)
};
}), (0, _data.withDispatch)((dispatch, _ref4) => {
let {
block
} = _ref4;
const {
replaceBlock
} = dispatch(_store.store);
return {
convertToClassic() {
replaceBlock(block.clientId, blockToClassic(block));
},
convertToHTML() {
replaceBlock(block.clientId, blockToHTML(block));
},
convertToBlocks() {
replaceBlock(block.clientId, blockToBlocks(block));
},
attemptBlockRecovery() {
replaceBlock(block.clientId, recoverBlock(block));
}
};
})])(BlockInvalidWarning);
exports.default = _default;
//# sourceMappingURL=block-invalid-warning.js.map