UNPKG

@wordpress/block-editor

Version:
129 lines (105 loc) 3.76 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("@wordpress/element"); var _i18n = require("@wordpress/i18n"); var _components = require("@wordpress/components"); var _blocks = require("@wordpress/blocks"); var _compose = require("@wordpress/compose"); var _data = require("@wordpress/data"); var _warning = _interopRequireDefault(require("../warning")); var _blockCompare = _interopRequireDefault(require("../block-compare")); var _store = require("../../store"); /** * WordPress dependencies */ /** * Internal dependencies */ function BlockInvalidWarning({ convertToHTML, convertToBlocks, convertToClassic, attemptBlockRecovery, block }) { 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.__)('Convert to HTML'), onClick: convertToHTML }, { title: (0, _i18n.__)('Convert to Classic Block'), 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, isPrimary: true }, (0, _i18n.__)('Attempt Block Recovery'))], secondaryActions: hiddenActions }, (0, _i18n.__)('This block contains unexpected or invalid content.')), compare && (0, _element.createElement)(_components.Modal, { title: // translators: Dialog title to fix block content (0, _i18n.__)('Resolve Block'), onRequestClose: onCompareClose, className: "block-editor-block-compare" }, (0, _element.createElement)(_blockCompare.default, { block: block, onKeep: convertToHTML, onConvert: convertToBlocks, convertor: blockToBlocks, convertButtonText: (0, _i18n.__)('Convert to Blocks') }))); } 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 = ({ name, attributes, innerBlocks }) => (0, _blocks.createBlock)(name, attributes, innerBlocks); var _default = (0, _compose.compose)([(0, _data.withSelect)((select, { clientId }) => ({ block: select(_store.store).getBlock(clientId) })), (0, _data.withDispatch)((dispatch, { block }) => { 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