56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
|
/**
|
||
|
* External dependencies
|
||
|
*/
|
||
|
import {
|
||
|
BlockConfiguration,
|
||
|
registerBlockType,
|
||
|
unregisterBlockType,
|
||
|
registerBlockVariation,
|
||
|
unregisterBlockVariation,
|
||
|
BlockVariation,
|
||
|
BlockAttributes,
|
||
|
} from '@wordpress/blocks';
|
||
|
|
||
|
export interface BlockRegistrationStrategy {
|
||
|
register(
|
||
|
blockNameOrMetadata: string | Partial< BlockConfiguration >,
|
||
|
blockSettings: Partial< BlockConfiguration >
|
||
|
): boolean;
|
||
|
unregister( blockName: string, variationName?: string ): boolean;
|
||
|
}
|
||
|
|
||
|
export class BlockTypeStrategy implements BlockRegistrationStrategy {
|
||
|
register(
|
||
|
blockNameOrMetadata: string | Partial< BlockConfiguration >,
|
||
|
blockSettings: Partial< BlockConfiguration >
|
||
|
): boolean {
|
||
|
return Boolean(
|
||
|
// @ts-expect-error: `registerBlockType` is typed in WordPress core
|
||
|
registerBlockType( blockNameOrMetadata, blockSettings )
|
||
|
);
|
||
|
}
|
||
|
|
||
|
unregister( blockName: string ): boolean {
|
||
|
return Boolean( unregisterBlockType( blockName ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Strategy for BlockVariation
|
||
|
export class BlockVariationStrategy implements BlockRegistrationStrategy {
|
||
|
register(
|
||
|
blockName: string,
|
||
|
blockSettings: Partial< BlockConfiguration >
|
||
|
): boolean {
|
||
|
return Boolean(
|
||
|
registerBlockVariation(
|
||
|
blockName,
|
||
|
blockSettings as BlockVariation< BlockAttributes >
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
unregister( blockName: string, variationName: string ): boolean {
|
||
|
return Boolean( unregisterBlockVariation( blockName, variationName ) );
|
||
|
}
|
||
|
}
|