@gechiui/block-editor
Version:
118 lines (106 loc) • 3.36 kB
JavaScript
import { createElement, Fragment } from "@gechiui/element";
/**
* GeChiUI dependencies
*/
import { __, _x } from '@gechiui/i18n';
import { Button, Modal } from '@gechiui/components';
import { useState, useCallback, useMemo } from '@gechiui/element';
import { getBlockType, createBlock, rawHandler } from '@gechiui/blocks';
import { compose } from '@gechiui/compose';
import { withDispatch, withSelect } from '@gechiui/data';
/**
* Internal dependencies
*/
import Warning from '../warning';
import BlockCompare from '../block-compare';
import { store as blockEditorStore } from '../../store';
export function BlockInvalidWarning(_ref) {
let {
convertToHTML,
convertToBlocks,
convertToClassic,
attemptBlockRecovery,
block
} = _ref;
const hasHTMLBlock = !!getBlockType('core/html');
const [compare, setCompare] = useState(false);
const onCompare = useCallback(() => setCompare(true), []);
const onCompareClose = useCallback(() => setCompare(false), []); // We memo the array here to prevent the children components from being updated unexpectedly
const hiddenActions = useMemo(() => [{
// translators: Button to fix block content
title: _x('Resolve', 'imperative verb'),
onClick: onCompare
}, hasHTMLBlock && {
title: __('转换为HTML'),
onClick: convertToHTML
}, {
title: __('转换为经典区块'),
onClick: convertToClassic
}].filter(Boolean), [onCompare, convertToHTML, convertToClassic]);
return createElement(Fragment, null, createElement(Warning, {
actions: [createElement(Button, {
key: "recover",
onClick: attemptBlockRecovery,
variant: "primary"
}, __('尝试恢复区块'))],
secondaryActions: hiddenActions
}, __('此区块包含未预料的或无效的内容。')), compare && createElement(Modal, {
title: // translators: Dialog title to fix block content
__('解析区块'),
onRequestClose: onCompareClose,
className: "block-editor-block-compare"
}, createElement(BlockCompare, {
block: block,
onKeep: convertToHTML,
onConvert: convertToBlocks,
convertor: blockToBlocks,
convertButtonText: __('转换为区块')
})));
}
const blockToClassic = block => createBlock('core/freeform', {
content: block.originalContent
});
const blockToHTML = block => createBlock('core/html', {
content: block.originalContent
});
const blockToBlocks = block => rawHandler({
HTML: block.originalContent
});
const recoverBlock = _ref2 => {
let {
name,
attributes,
innerBlocks
} = _ref2;
return createBlock(name, attributes, innerBlocks);
};
export default compose([withSelect((select, _ref3) => {
let {
clientId
} = _ref3;
return {
block: select(blockEditorStore).getBlock(clientId)
};
}), withDispatch((dispatch, _ref4) => {
let {
block
} = _ref4;
const {
replaceBlock
} = dispatch(blockEditorStore);
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);
//# sourceMappingURL=block-invalid-warning.js.map