UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 7.34 kB
{ "version": 3, "sources": ["../../../src/template-part/edit/inner-blocks.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useEntityBlockEditor, store as coreStore } from '@wordpress/core-data';\nimport {\n\tInnerBlocks,\n\tuseInnerBlocksProps,\n\tuseSettings,\n\tstore as blockEditorStore,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { parse } from '@wordpress/blocks';\n\nfunction useRenderAppender( hasInnerBlocks ) {\n\tconst blockEditingMode = useBlockEditingMode();\n\t// Disable appending when the editing mode is 'contentOnly'. This is so that the user can't\n\t// append into a template part when editing a page in the site editor. See\n\t// DisableNonPageContentBlocks. Ideally instead of (mis)using editing mode there would be a\n\t// block editor API for achieving this.\n\tif ( blockEditingMode === 'contentOnly' ) {\n\t\treturn false;\n\t}\n\tif ( ! hasInnerBlocks ) {\n\t\treturn InnerBlocks.ButtonBlockAppender;\n\t}\n}\n\nfunction useLayout( layout ) {\n\tconst themeSupportsLayout = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings()?.supportsLayout;\n\t}, [] );\n\tconst [ defaultLayout ] = useSettings( 'layout' );\n\tif ( themeSupportsLayout ) {\n\t\treturn layout?.inherit ? defaultLayout || {} : layout;\n\t}\n}\n\nfunction NonEditableTemplatePartPreview( {\n\tpostId: id,\n\tlayout,\n\ttagName: TagName,\n\tblockProps,\n} ) {\n\tuseBlockEditingMode( 'disabled' );\n\n\tconst { content, editedBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! id ) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\tconst { getEditedEntityRecord } = select( coreStore );\n\t\t\tconst editedRecord = getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\tid,\n\t\t\t\t{ context: 'view' }\n\t\t\t);\n\t\t\treturn {\n\t\t\t\teditedBlocks: editedRecord.blocks,\n\t\t\t\tcontent: editedRecord.content,\n\t\t\t};\n\t\t},\n\t\t[ id ]\n\t);\n\n\tconst blocks = useMemo( () => {\n\t\tif ( ! id ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ( editedBlocks ) {\n\t\t\treturn editedBlocks;\n\t\t}\n\n\t\tif ( ! content || typeof content !== 'string' ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn parse( content );\n\t}, [ id, editedBlocks, content ] );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tvalue: blocks,\n\t\tonInput: () => {},\n\t\tonChange: () => {},\n\t\trenderAppender: false,\n\t\tlayout: useLayout( layout ),\n\t} );\n\n\treturn <TagName { ...innerBlocksProps } />;\n}\n\nfunction EditableTemplatePartInnerBlocks( {\n\tpostId: id,\n\thasInnerBlocks,\n\tlayout,\n\ttagName: TagName,\n\tblockProps,\n} ) {\n\tconst onNavigateToEntityRecord = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getSettings().onNavigateToEntityRecord,\n\t\t[]\n\t);\n\n\tconst [ blocks, onInput, onChange ] = useEntityBlockEditor(\n\t\t'postType',\n\t\t'wp_template_part',\n\t\t{ id }\n\t);\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tvalue: blocks,\n\t\tonInput,\n\t\tonChange,\n\t\trenderAppender: useRenderAppender( hasInnerBlocks ),\n\t\tlayout: useLayout( layout ),\n\t} );\n\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst customProps =\n\t\tblockEditingMode === 'contentOnly' && onNavigateToEntityRecord\n\t\t\t? {\n\t\t\t\t\tonDoubleClick: () =>\n\t\t\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\t\t\tpostId: id,\n\t\t\t\t\t\t\tpostType: 'wp_template_part',\n\t\t\t\t\t\t} ),\n\t\t\t }\n\t\t\t: {};\n\n\treturn <TagName { ...innerBlocksProps } { ...customProps } />;\n}\n\nexport default function TemplatePartInnerBlocks( {\n\tpostId: id,\n\thasInnerBlocks,\n\tlayout,\n\ttagName: TagName,\n\tblockProps,\n} ) {\n\tconst { canViewTemplatePart, canEditTemplatePart } = useSelect(\n\t\t( select ) => {\n\t\t\treturn {\n\t\t\t\tcanViewTemplatePart: !! select( coreStore ).canUser( 'read', {\n\t\t\t\t\tkind: 'postType',\n\t\t\t\t\tname: 'wp_template_part',\n\t\t\t\t\tid,\n\t\t\t\t} ),\n\t\t\t\tcanEditTemplatePart: !! select( coreStore ).canUser( 'update', {\n\t\t\t\t\tkind: 'postType',\n\t\t\t\t\tname: 'wp_template_part',\n\t\t\t\t\tid,\n\t\t\t\t} ),\n\t\t\t};\n\t\t},\n\t\t[ id ]\n\t);\n\n\tif ( ! canViewTemplatePart ) {\n\t\treturn null;\n\t}\n\n\tconst TemplatePartInnerBlocksComponent = canEditTemplatePart\n\t\t? EditableTemplatePartInnerBlocks\n\t\t: NonEditableTemplatePartPreview;\n\n\treturn (\n\t\t<TemplatePartInnerBlocksComponent\n\t\t\tpostId={ id }\n\t\t\thasInnerBlocks={ hasInnerBlocks }\n\t\t\tlayout={ layout }\n\t\t\ttagName={ TagName }\n\t\t\tblockProps={ blockProps }\n\t\t/>\n\t);\n}\n"], "mappings": "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", "names": [] }