@wordpress/blocks
Version:
Block API for WordPress.
79 lines (74 loc) • 2.05 kB
text/typescript
/**
* Internal dependencies
*/
import { processBlockType } from './process-block-type';
import type { BlockBindingsSource, BlockType } from '../types';
import type { Action, BlocksStoreThunkArgs } from './types';
/**
* Add bootstrapped block type metadata to the store. These metadata usually come from
* the `block.json` file and are either statically bootstrapped from the server, or
* passed as the `metadata` parameter to the `registerBlockType` function.
*
* @param name Block name.
* @param blockType Block type metadata.
*/
export function addBootstrappedBlockType(
name: string,
blockType: Partial< BlockType >
): Action {
return {
type: 'ADD_BOOTSTRAPPED_BLOCK_TYPE',
name,
blockType,
};
}
/**
* Add unprocessed block type settings to the store. These data are passed as the
* `settings` parameter to the client-side `registerBlockType` function.
*
* @param name Block name.
* @param blockType Unprocessed block type settings.
*/
export function addUnprocessedBlockType(
name: string,
blockType: Partial< BlockType >
) {
return ( { dispatch }: BlocksStoreThunkArgs ) => {
dispatch( { type: 'ADD_UNPROCESSED_BLOCK_TYPE', name, blockType } );
const processedBlockType = dispatch(
processBlockType( name, blockType )
);
if ( ! processedBlockType ) {
return;
}
dispatch.addBlockTypes( processedBlockType );
};
}
/**
* Adds new block bindings source.
*
* @param source The source to register.
*/
export function addBlockBindingsSource( source: BlockBindingsSource ): Action {
return {
type: 'ADD_BLOCK_BINDINGS_SOURCE',
name: source.name,
label: source.label,
usesContext: source.usesContext,
getValues: source.getValues,
setValues: source.setValues,
canUserEditValue: source.canUserEditValue,
getFieldsList: source.getFieldsList,
};
}
/**
* Removes existing block bindings source.
*
* @param name Name of the source to remove.
*/
export function removeBlockBindingsSource( name: string ): Action {
return {
type: 'REMOVE_BLOCK_BINDINGS_SOURCE',
name,
};
}