47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { registerBlockComponent } from '@woocommerce/blocks-registry';
|
|
|
|
/**
|
|
* Internal dependencies
|
|
*/
|
|
import type { CheckoutBlockOptions } from './types';
|
|
import {
|
|
assertBlockName,
|
|
assertBlockParent,
|
|
assertOption,
|
|
assertBlockComponent,
|
|
} from './utils';
|
|
import { registeredBlocks } from './registered-blocks';
|
|
|
|
/**
|
|
* Main API for registering a new checkout block within areas.
|
|
*/
|
|
export const registerCheckoutBlock = (
|
|
options: CheckoutBlockOptions
|
|
): void => {
|
|
assertOption( options, 'metadata', 'object' );
|
|
assertBlockName( options.metadata.name );
|
|
assertBlockParent( options.metadata.parent );
|
|
assertBlockComponent( options, 'component' );
|
|
|
|
/**
|
|
* This ensures the frontend component for the checkout block is available.
|
|
*/
|
|
registerBlockComponent( {
|
|
blockName: options.metadata.name as string,
|
|
component: options.component,
|
|
} );
|
|
|
|
/**
|
|
* Store block metadata for later lookup.
|
|
*/
|
|
registeredBlocks[ options.metadata.name ] = {
|
|
blockName: options.metadata.name,
|
|
metadata: options.metadata,
|
|
component: options.component,
|
|
force: !! options.metadata?.attributes?.lock?.default?.remove,
|
|
};
|
|
};
|