47 lines
1.0 KiB
TypeScript
47 lines
1.0 KiB
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { getBlockType } from '@wordpress/blocks';
|
|
import { subscribe, select } from '@wordpress/data';
|
|
|
|
export const registerBlockSingleProductTemplate = ( {
|
|
registerBlockFn,
|
|
unregisterBlockFn,
|
|
blockName,
|
|
}: {
|
|
registerBlockFn: () => void;
|
|
unregisterBlockFn: () => void;
|
|
blockName: string;
|
|
} ) => {
|
|
let currentTemplateId: string | undefined;
|
|
|
|
subscribe( () => {
|
|
const previousTemplateId = currentTemplateId;
|
|
const store = select( 'core/edit-site' );
|
|
currentTemplateId = store?.getEditedPostId() as string | undefined;
|
|
|
|
if ( previousTemplateId === currentTemplateId ) {
|
|
return;
|
|
}
|
|
|
|
const parsedTemplate = currentTemplateId?.split( '//' )[ 1 ];
|
|
|
|
if ( parsedTemplate === null || parsedTemplate === undefined ) {
|
|
return;
|
|
}
|
|
|
|
const block = getBlockType( blockName );
|
|
|
|
if (
|
|
block === undefined &&
|
|
parsedTemplate.includes( 'single-product' )
|
|
) {
|
|
registerBlockFn();
|
|
}
|
|
|
|
if ( block !== undefined ) {
|
|
unregisterBlockFn();
|
|
}
|
|
}, 'core/edit-site' );
|
|
};
|