UNPKG

@wordpress/block-library

Version:
69 lines (64 loc) 2.83 kB
import { createElement } from "@wordpress/element"; /** * WordPress dependencies */ import { useDispatch, useSelect } from '@wordpress/data'; import { useEntityBlockEditor, useEntityProp, useEntityRecord } from '@wordpress/core-data'; import { Placeholder, Spinner, ToolbarGroup, ToolbarButton, TextControl, PanelBody } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { useInnerBlocksProps, __experimentalRecursionProvider as RecursionProvider, __experimentalUseHasRecursion as useHasRecursion, InnerBlocks, BlockControls, InspectorControls, useBlockProps, Warning, store as blockEditorStore } from '@wordpress/block-editor'; import { store as reusableBlocksStore } from '@wordpress/reusable-blocks'; import { ungroup } from '@wordpress/icons'; export default function ReusableBlockEdit(_ref) { let { attributes: { ref }, clientId } = _ref; const hasAlreadyRendered = useHasRecursion(ref); const { record, hasResolved } = useEntityRecord('postType', 'wp_block', ref); const isMissing = hasResolved && !record; const canRemove = useSelect(select => select(blockEditorStore).canRemoveBlock(clientId), [clientId]); const { __experimentalConvertBlockToStatic: convertBlockToStatic } = useDispatch(reusableBlocksStore); const [blocks, onInput, onChange] = useEntityBlockEditor('postType', 'wp_block', { id: ref }); const [title, setTitle] = useEntityProp('postType', 'wp_block', 'title', ref); const blockProps = useBlockProps({ className: 'block-library-block__reusable-block-container' }); const innerBlocksProps = useInnerBlocksProps(blockProps, { value: blocks, onInput, onChange, renderAppender: blocks !== null && blocks !== void 0 && blocks.length ? undefined : InnerBlocks.ButtonBlockAppender }); if (hasAlreadyRendered) { return createElement("div", blockProps, createElement(Warning, null, __('Block cannot be rendered inside itself.'))); } if (isMissing) { return createElement("div", blockProps, createElement(Warning, null, __('Block has been deleted or is unavailable.'))); } if (!hasResolved) { return createElement("div", blockProps, createElement(Placeholder, null, createElement(Spinner, null))); } return createElement(RecursionProvider, { uniqueId: ref }, canRemove && createElement(BlockControls, null, createElement(ToolbarGroup, null, createElement(ToolbarButton, { onClick: () => convertBlockToStatic(clientId), label: __('Convert to regular blocks'), icon: ungroup, showTooltip: true }))), createElement(InspectorControls, null, createElement(PanelBody, null, createElement(TextControl, { label: __('Name'), value: title, onChange: setTitle }))), createElement("div", innerBlocksProps)); } //# sourceMappingURL=edit.js.map