UNPKG

@wordpress/blocks

Version:
71 lines (64 loc) 2.13 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { createElement } from "@wordpress/element"; /** * WordPress dependencies */ import { createHigherOrderComponent } from '@wordpress/compose'; import { createContext, RawHTML } from '@wordpress/element'; /** * Internal dependencies */ import { serialize } from '../api'; const { Consumer, Provider } = createContext(() => {}); /** * An internal block component used in block content serialization to inject * nested block content within the `save` implementation of the ancestor * component in which it is nested. The component provides a pre-bound * `BlockContent` component via context, which is used by the developer-facing * `InnerBlocks.Content` component to render block content. * * @example * * ```jsx * <BlockContentProvider innerBlocks={ innerBlocks }> * { blockSaveElement } * </BlockContentProvider> * ``` * * @param {Object} props Component props. * @param {WPElement} props.children Block save result. * @param {Array} props.innerBlocks Block(s) to serialize. * * @return {WPComponent} Element with BlockContent injected via context. */ const BlockContentProvider = ({ children, innerBlocks }) => { const BlockContent = () => { // Value is an array of blocks, so defer to block serializer const html = serialize(innerBlocks, { isInnerBlocks: true }); // Use special-cased raw HTML tag to avoid default escaping return createElement(RawHTML, null, html); }; return createElement(Provider, { value: BlockContent }, children); }; /** * A Higher Order Component used to inject BlockContent using context to the * wrapped component. * * @return {WPComponent} Enhanced component with injected BlockContent as prop. */ export const withBlockContentContext = createHigherOrderComponent(OriginalComponent => { return props => createElement(Consumer, null, context => createElement(OriginalComponent, _extends({}, props, { BlockContent: context }))); }, 'withBlockContentContext'); export default BlockContentProvider; //# sourceMappingURL=index.js.map