From b1de10f60b26eb7011827369e1867db0541c524c Mon Sep 17 00:00:00 2001 From: epiqueras Date: Fri, 10 Jan 2020 22:55:43 -0500 Subject: [PATCH] Block Library: Add a Post Comments block. --- lib/blocks.php | 1 + packages/block-library/src/index.js | 3 +- .../src/post-comments/block.json | 4 ++ .../block-library/src/post-comments/edit.js | 28 +++++++++++++ .../block-library/src/post-comments/index.js | 18 ++++++++ .../block-library/src/post-comments/index.php | 41 +++++++++++++++++++ packages/core-data/src/entities.js | 1 + 7 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 packages/block-library/src/post-comments/block.json create mode 100644 packages/block-library/src/post-comments/edit.js create mode 100644 packages/block-library/src/post-comments/index.js create mode 100644 packages/block-library/src/post-comments/index.php diff --git a/lib/blocks.php b/lib/blocks.php index f120d571f89b3..1a857573ca942 100644 --- a/lib/blocks.php +++ b/lib/blocks.php @@ -56,6 +56,7 @@ function gutenberg_reregister_core_block_types() { 'template-part.php' => 'core/template-part', 'post-title.php' => 'core/post-title', 'post-content.php' => 'core/post-content', + 'post-comments.php' => 'core/post-comments', ); $registry = WP_Block_Type_Registry::get_instance(); diff --git a/packages/block-library/src/index.js b/packages/block-library/src/index.js index 15c200636626d..9198cfb51f49e 100644 --- a/packages/block-library/src/index.js +++ b/packages/block-library/src/index.js @@ -68,6 +68,7 @@ import * as siteTitle from './site-title'; import * as templatePart from './template-part'; import * as postTitle from './post-title'; import * as postContent from './post-content'; +import * as postComments from './post-comments'; /** * Function to register an individual block. @@ -187,7 +188,7 @@ export const __experimentalRegisterExperimentalCoreBlocks = // Register Full Site Editing Blocks. ...( __experimentalEnableFullSiteEditing ? - [ siteTitle, templatePart, postTitle, postContent ] : + [ siteTitle, templatePart, postTitle, postContent, postComments ] : [] ), ].forEach( registerBlock ); } : diff --git a/packages/block-library/src/post-comments/block.json b/packages/block-library/src/post-comments/block.json new file mode 100644 index 0000000000000..fdd930fb3d26c --- /dev/null +++ b/packages/block-library/src/post-comments/block.json @@ -0,0 +1,4 @@ +{ + "name": "core/post-comments", + "category": "layout" +} diff --git a/packages/block-library/src/post-comments/edit.js b/packages/block-library/src/post-comments/edit.js new file mode 100644 index 0000000000000..914e79323b9c6 --- /dev/null +++ b/packages/block-library/src/post-comments/edit.js @@ -0,0 +1,28 @@ +/** + * WordPress dependencies + */ +import { useSelect } from '@wordpress/data'; +import { useEntityId } from '@wordpress/core-data'; + +function PostCommentsDisplay( { postId } ) { + return useSelect( + ( select ) => { + const comments = select( 'core' ).getEntityRecords( 'root', 'comment', { + post: postId, + } ); + return ( + comments && + comments.map( ( comment ) =>

{ comment.content.raw }

) + ); + }, + [ postId ] + ); +} + +export default function PostCommentsEdit() { + const postId = useEntityId( 'postType', 'post' ); + if ( ! postId ) { + return 'Post Comments Placeholder'; + } + return ; +} diff --git a/packages/block-library/src/post-comments/index.js b/packages/block-library/src/post-comments/index.js new file mode 100644 index 0000000000000..fd76cc6167813 --- /dev/null +++ b/packages/block-library/src/post-comments/index.js @@ -0,0 +1,18 @@ +/** + * WordPress dependencies + */ +import { __ } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import edit from './edit'; + +const { name } = metadata; +export { metadata, name }; + +export const settings = { + title: __( 'Post Comments' ), + edit, +}; diff --git a/packages/block-library/src/post-comments/index.php b/packages/block-library/src/post-comments/index.php new file mode 100644 index 0000000000000..2b9851b6e00c4 --- /dev/null +++ b/packages/block-library/src/post-comments/index.php @@ -0,0 +1,41 @@ + $post->ID, + ) + ); + $output = ''; + foreach ( $comments as $comment ) { + $output .= '

' . $comment->comment_author . '
' . $comment->comment_content . '

'; + } + return $output; +} + +/** + * Registers the `core/post-comments` block on the server. + */ +function register_block_core_post_comments() { + register_block_type( + 'core/post-comments', + array( + 'render_callback' => 'render_block_core_post_comments', + ) + ); +} +add_action( 'init', 'register_block_core_post_comments' ); diff --git a/packages/core-data/src/entities.js b/packages/core-data/src/entities.js index ec4c3712da6d1..326b9c482752a 100644 --- a/packages/core-data/src/entities.js +++ b/packages/core-data/src/entities.js @@ -17,6 +17,7 @@ export const defaultEntities = [ { name: 'media', kind: 'root', baseURL: '/wp/v2/media', plural: 'mediaItems' }, { name: 'taxonomy', kind: 'root', key: 'slug', baseURL: '/wp/v2/taxonomies', plural: 'taxonomies' }, { name: 'widgetArea', kind: 'root', baseURL: '/__experimental/widget-areas', plural: 'widgetAreas', transientEdits: { blocks: true } }, + { name: 'comment', kind: 'root', baseURL: '/wp/v2/comments' }, ]; export const kinds = [