UNPKG

@wordpress/blocks

Version:
84 lines (71 loc) 2.49 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.withBlockContentContext = void 0; var _element = require("@wordpress/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _compose = require("@wordpress/compose"); var _api = require("../api"); /** * WordPress dependencies */ /** * Internal dependencies */ const { Consumer, Provider } = (0, _element.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 = (0, _api.serialize)(innerBlocks, { isInnerBlocks: true }); // Use special-cased raw HTML tag to avoid default escaping return (0, _element.createElement)(_element.RawHTML, null, html); }; return (0, _element.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. */ const withBlockContentContext = (0, _compose.createHigherOrderComponent)(OriginalComponent => { return props => (0, _element.createElement)(Consumer, null, context => (0, _element.createElement)(OriginalComponent, (0, _extends2.default)({}, props, { BlockContent: context }))); }, 'withBlockContentContext'); exports.withBlockContentContext = withBlockContentContext; var _default = BlockContentProvider; exports.default = _default; //# sourceMappingURL=index.js.map