Skip to content

Commit

Permalink
Blocks: Introduce registerBlockTypeFromMetadata API
Browse files Browse the repository at this point in the history
  • Loading branch information
gziolo committed Mar 26, 2021
1 parent 883d7d4 commit dd78fb3
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 10 deletions.
8 changes: 2 additions & 6 deletions packages/block-library/src/index.js
Expand Up @@ -4,12 +4,11 @@
import '@wordpress/core-data';
import '@wordpress/block-editor';
import {
registerBlockType,
registerBlockTypeFromMetadata,
setDefaultBlockName,
setFreeformContentHandlerName,
setUnregisteredTypeHandlerName,
setGroupingBlockName,
unstable__bootstrapServerSideBlockDefinitions, // eslint-disable-line camelcase
} from '@wordpress/blocks';

/**
Expand Down Expand Up @@ -105,10 +104,7 @@ const registerBlock = ( block ) => {
return;
}
const { metadata, settings, name } = block;
if ( metadata ) {
unstable__bootstrapServerSideBlockDefinitions( { [ name ]: metadata } );
}
registerBlockType( name, settings );
registerBlockTypeFromMetadata( { name, ...metadata }, settings );
};

/**
Expand Down
12 changes: 8 additions & 4 deletions packages/block-library/src/index.native.js
Expand Up @@ -10,6 +10,7 @@ import { sortBy } from 'lodash';
import {
hasBlockSupport,
registerBlockType,
registerBlockTypeFromMetadata,
setDefaultBlockName,
setFreeformContentHandlerName,
setUnregisteredTypeHandlerName,
Expand Down Expand Up @@ -125,10 +126,13 @@ const registerBlock = ( block ) => {
return;
}
const { metadata, settings, name } = block;
registerBlockType( name, {
...metadata,
...settings,
} );
registerBlockTypeFromMetadata(
{
name,
...metadata,
},
settings
);
};

/**
Expand Down
19 changes: 19 additions & 0 deletions packages/blocks/README.md
Expand Up @@ -711,6 +711,25 @@ _Returns_

- `?WPBlock`: The block, if it has been successfully registered; otherwise `undefined`.

<a name="registerBlockTypeFromMetadata" href="#registerBlockTypeFromMetadata">#</a> **registerBlockTypeFromMetadata**

Registers a new block provided from metadata stored in `block.json` file.
It uses `registerBlockType` internally.

_Related_

- registerBlockType

_Parameters_

- _metadata_ `Object`: Block metadata loaded from `block.json`.
- _metadata.name_ `string`: Block name.
- _additionalSettings_ `Object`: Additional block settings.

_Returns_

- `?WPBlock`: The block, if it has been successfully registered; otherwise `undefined`.

<a name="registerBlockVariation" href="#registerBlockVariation">#</a> **registerBlockVariation**

Registers a new block variation for the given block type.
Expand Down
1 change: 1 addition & 0 deletions packages/blocks/src/api/index.js
Expand Up @@ -108,6 +108,7 @@ export { getCategories, setCategories, updateCategory } from './categories';
// children of another block.
export {
registerBlockType,
registerBlockTypeFromMetadata,
registerBlockCollection,
unregisterBlockType,
setFreeformContentHandlerName,
Expand Down
40 changes: 40 additions & 0 deletions packages/blocks/src/api/registration.js
Expand Up @@ -308,6 +308,46 @@ export function registerBlockType( name, settings ) {
return settings;
}

/**
* Registers a new block provided from metadata stored in `block.json` file.
* It uses `registerBlockType` internally.
*
* @see registerBlockType
*
* @param {Object} metadata Block metadata loaded from `block.json`.
* @param {string} metadata.name Block name.
* @param {Object} additionalSettings Additional block settings.
*
* @return {?WPBlock} The block, if it has been successfully registered;
* otherwise `undefined`.
*/
export function registerBlockTypeFromMetadata(
{ name, ...metadata },
additionalSettings
) {
const allowedFields = [
'title',
'category',
'parent',
'icon',
'description',
'keywords',
'attributes',
'providesContext',
'usesContext',
'supports',
'styles',
'example',
'apiVersion',
];

unstable__bootstrapServerSideBlockDefinitions( {
[ name ]: pick( metadata, allowedFields ),
} );

return registerBlockType( name, additionalSettings );
}

/**
* Registers a new block collection to group blocks in the same namespace in the inserter.
*
Expand Down

0 comments on commit dd78fb3

Please sign in to comment.