diff --git a/package-lock.json b/package-lock.json index d4c6b8bc293f3..3cd1b0d9e3856 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7902,7 +7902,9 @@ "@babel/runtime": "^7.4.4", "@wordpress/block-editor": "file:packages/block-editor", "@wordpress/block-library": "file:packages/block-library", + "@wordpress/blocks": "file:packages/blocks", "@wordpress/components": "file:packages/components", + "@wordpress/core-data": "file:packages/core-data", "@wordpress/data": "file:packages/data", "@wordpress/element": "file:packages/element", "@wordpress/hooks": "file:packages/hooks", diff --git a/packages/edit-site/package.json b/packages/edit-site/package.json index 7f9029f5fb493..6bc88e9ec3327 100644 --- a/packages/edit-site/package.json +++ b/packages/edit-site/package.json @@ -24,7 +24,9 @@ "@babel/runtime": "^7.4.4", "@wordpress/block-editor": "file:../block-editor", "@wordpress/block-library": "file:../block-library", + "@wordpress/blocks": "file:../blocks", "@wordpress/components": "file:../components", + "@wordpress/core-data": "file:../core-data", "@wordpress/data": "file:../data", "@wordpress/element": "file:../element", "@wordpress/hooks": "file:../hooks", diff --git a/packages/edit-site/src/components/block-editor/index.js b/packages/edit-site/src/components/block-editor/index.js index c049e78e0c51d..9e0703bb0e0d7 100644 --- a/packages/edit-site/src/components/block-editor/index.js +++ b/packages/edit-site/src/components/block-editor/index.js @@ -2,8 +2,10 @@ * WordPress dependencies */ import { useSelect } from '@wordpress/data'; -import { useMemo, useState } from '@wordpress/element'; +import { useMemo, useCallback } from '@wordpress/element'; import { uploadMedia } from '@wordpress/media-utils'; +import { useEntityProp } from '@wordpress/core-data'; +import { parse, serialize } from '@wordpress/blocks'; import { BlockEditorProvider, BlockEditorKeyboardShortcuts, @@ -39,13 +41,34 @@ export default function BlockEditor( { settings: _settings } ) { }, }; }, [ canUserCreateMedia, _settings ] ); - const [ blocks, setBlocks ] = useState( [] ); + const [ content, _setContent ] = useEntityProp( + 'postType', + 'wp_template', + 'content' + ); + const initialBlocks = useMemo( () => { + if ( typeof content !== 'function' ) { + const parsedContent = parse( content ); + return parsedContent.length ? parsedContent : undefined; + } + }, [] ); + const [ blocks = initialBlocks, setBlocks ] = useEntityProp( + 'postType', + 'wp_template', + 'blocks' + ); + const setContent = useCallback( ( nextBlocks ) => { + setBlocks( nextBlocks ); + _setContent( ( { blocks: blocksForSerialization = nextBlocks } ) => + serialize( blocksForSerialization ) + ); + }, [] ); return ( diff --git a/packages/edit-site/src/components/editor/index.js b/packages/edit-site/src/components/editor/index.js index f7f0ef0286b10..83a0f498a35fc 100644 --- a/packages/edit-site/src/components/editor/index.js +++ b/packages/edit-site/src/components/editor/index.js @@ -1,12 +1,14 @@ /** * WordPress dependencies */ +import { useSelect } from '@wordpress/data'; import { SlotFillProvider, DropZoneProvider, Popover, navigateRegions, } from '@wordpress/components'; +import { EntityProvider } from '@wordpress/core-data'; /** * Internal dependencies @@ -17,17 +19,32 @@ import Sidebar from '../sidebar'; import BlockEditor from '../block-editor'; function Editor( { settings } ) { - return ( + const template = useSelect( + ( select ) => + select( 'core' ).getEntityRecord( + 'postType', + 'wp_template', + settings.templateId + ), + [] + ); + return template ? ( - -
- - - + + +
+ + + + - ); + ) : null; } export default navigateRegions( Editor );