UNPKG

@gechiui/block-editor

Version:
118 lines (106 loc) 3.36 kB
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