@wordpress/block-library
Version:
Block library for the WordPress editor.
57 lines (53 loc) • 2.22 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getTransformedMetadata = getTransformedMetadata;
var _blocks = require("@wordpress/blocks");
/**
* WordPress dependencies
*/
/**
* Transform the metadata attribute with only the values and bindings specified by each transform.
* Returns `undefined` if the input metadata is falsy.
*
* @param {Object} metadata Original metadata attribute from the block that is being transformed.
* @param {Object} newBlockName Name of the final block after the transformation.
* @param {Function} bindingsCallback Optional callback to transform the `bindings` property object.
* @return {Object|undefined} New metadata object only with the relevant properties.
*/
function getTransformedMetadata(metadata, newBlockName, bindingsCallback) {
if (!metadata) {
return;
}
const {
supports
} = (0, _blocks.getBlockType)(newBlockName);
// Fixed until an opt-in mechanism is implemented.
const BLOCK_BINDINGS_SUPPORTED_BLOCKS = ['core/paragraph', 'core/heading', 'core/image', 'core/button'];
// The metadata properties that should be preserved after the transform.
const transformSupportedProps = [];
// If it support bindings, and there is a transform bindings callback, add the `id` and `bindings` properties.
if (BLOCK_BINDINGS_SUPPORTED_BLOCKS.includes(newBlockName) && bindingsCallback) {
transformSupportedProps.push('id', 'bindings');
}
// If it support block naming (true by default), add the `name` property.
if (supports.renaming !== false) {
transformSupportedProps.push('name');
}
// Return early if no supported properties.
if (!transformSupportedProps.length) {
return;
}
const newMetadata = Object.entries(metadata).reduce((obj, [prop, value]) => {
// If prop is not supported, don't add it to the new metadata object.
if (!transformSupportedProps.includes(prop)) {
return obj;
}
obj[prop] = prop === 'bindings' ? bindingsCallback(value) : value;
return obj;
}, {});
// Return undefined if object is empty.
return Object.keys(newMetadata).length ? newMetadata : undefined;
}
//# sourceMappingURL=get-transformed-metadata.js.map
;