UNPKG

@wordpress/block-library

Version:
169 lines (166 loc) 5.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = PostContentEdit; var _i18n = require("@wordpress/i18n"); var _blockEditor = require("@wordpress/block-editor"); var _blocks = require("@wordpress/blocks"); var _coreData = require("@wordpress/core-data"); var _data = require("@wordpress/data"); var _element = require("@wordpress/element"); var _hooks = require("../utils/hooks"); var _jsxRuntime = require("react/jsx-runtime"); /** * WordPress dependencies */ /** * Internal dependencies */ function ReadOnlyContent({ parentLayout, layoutClassNames, userCanEdit, postType, postId }) { const [,, content] = (0, _coreData.useEntityProp)('postType', postType, 'content', postId); const blockProps = (0, _blockEditor.useBlockProps)({ className: layoutClassNames }); const blocks = (0, _element.useMemo)(() => { return content?.raw ? (0, _blocks.parse)(content.raw) : []; }, [content?.raw]); const blockPreviewProps = (0, _blockEditor.__experimentalUseBlockPreview)({ blocks, props: blockProps, layout: parentLayout }); if (userCanEdit) { /* * Rendering the block preview using the raw content blocks allows for * block support styles to be generated and applied by the editor. * * The preview using the raw blocks can only be presented to users with * edit permissions for the post to prevent potential exposure of private * block content. */ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { ...blockPreviewProps }); } return content?.protected ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { ...blockProps, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockEditor.Warning, { children: (0, _i18n.__)('This content is password protected.') }) }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { ...blockProps, dangerouslySetInnerHTML: { __html: content?.rendered } }); } function EditableContent({ context = {} }) { const { postType, postId } = context; const [blocks, onInput, onChange] = (0, _coreData.useEntityBlockEditor)('postType', postType, { id: postId }); const entityRecord = (0, _data.useSelect)(select => { return select(_coreData.store).getEntityRecord('postType', postType, postId); }, [postType, postId]); const hasInnerBlocks = !!entityRecord?.content?.raw || blocks?.length; const initialInnerBlocks = [['core/paragraph']]; const props = (0, _blockEditor.useInnerBlocksProps)((0, _blockEditor.useBlockProps)({ className: 'entry-content' }), { value: blocks, onInput, onChange, template: !hasInnerBlocks ? initialInnerBlocks : undefined }); return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { ...props }); } function Content(props) { const { context: { queryId, postType, postId } = {}, layoutClassNames } = props; const userCanEdit = (0, _hooks.useCanEditEntity)('postType', postType, postId); if (userCanEdit === undefined) { return null; } const isDescendentOfQueryLoop = Number.isFinite(queryId); const isEditable = userCanEdit && !isDescendentOfQueryLoop; return isEditable ? /*#__PURE__*/(0, _jsxRuntime.jsx)(EditableContent, { ...props }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(ReadOnlyContent, { parentLayout: props.parentLayout, layoutClassNames: layoutClassNames, userCanEdit: userCanEdit, postType: postType, postId: postId }); } function Placeholder({ layoutClassNames }) { const blockProps = (0, _blockEditor.useBlockProps)({ className: layoutClassNames }); return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", { ...blockProps, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", { children: (0, _i18n.__)('This is the Content block, it will display all the blocks in any single post or page.') }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", { children: (0, _i18n.__)('That might be a simple arrangement like consecutive paragraphs in a blog post, or a more elaborate composition that includes image galleries, videos, tables, columns, and any other block types.') }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", { children: (0, _i18n.__)('If there are any Custom Post Types registered at your site, the Content block can display the contents of those entries as well.') })] }); } function RecursionError() { const blockProps = (0, _blockEditor.useBlockProps)(); return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { ...blockProps, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockEditor.Warning, { children: (0, _i18n.__)('Block cannot be rendered inside itself.') }) }); } function PostContentEdit({ context, __unstableLayoutClassNames: layoutClassNames, __unstableParentLayout: parentLayout }) { const { postId: contextPostId, postType: contextPostType } = context; const hasAlreadyRendered = (0, _blockEditor.useHasRecursion)(contextPostId); if (contextPostId && contextPostType && hasAlreadyRendered) { return /*#__PURE__*/(0, _jsxRuntime.jsx)(RecursionError, {}); } return /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockEditor.RecursionProvider, { uniqueId: contextPostId, children: contextPostId && contextPostType ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Content, { context: context, parentLayout: parentLayout, layoutClassNames: layoutClassNames }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(Placeholder, { layoutClassNames: layoutClassNames }) }); } //# sourceMappingURL=edit.js.map