@wordpress/block-library
Version:
Block library for the WordPress editor.
69 lines (64 loc) • 2.83 kB
JavaScript
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