UNPKG

@gechiui/block-editor

Version:
40 lines (34 loc) 1.07 kB
/** * External dependencies */ import { mapValues } from 'lodash'; /** * Block context cache, implemented as a WeakMap mapping block types to a * WeakMap mapping attributes object to context value. * * @type {WeakMap<string,WeakMap<string,*>>} */ const BLOCK_CONTEXT_CACHE = new WeakMap(); /** * Returns a cached context object value for a given set of attributes for the * block type. * * @param {Record<string,*>} attributes Block attributes object. * @param {GCBlockType} blockType Block type settings. * * @return {Record<string,*>} Context value. */ export default function getBlockContext( attributes, blockType ) { if ( ! BLOCK_CONTEXT_CACHE.has( blockType ) ) { BLOCK_CONTEXT_CACHE.set( blockType, new WeakMap() ); } const blockTypeCache = BLOCK_CONTEXT_CACHE.get( blockType ); if ( ! blockTypeCache.has( attributes ) ) { const context = mapValues( blockType.providesContext, ( attributeName ) => attributes[ attributeName ] ); blockTypeCache.set( attributes, context ); } return blockTypeCache.get( attributes ); }