UNPKG

@gechiui/block-editor

Version:
137 lines (113 loc) 3.88 kB
"use strict"; 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