@gechiui/reusable-blocks

3.0.24 • Public • Published

Reusable blocks

Reusable blocks components and logic.

Installation

Install the module

npm install @gechiui/reusable-blocks --save

This package assumes that your code will run in an ES2015+ environment. If you're using an environment that has limited or no support for such language features and APIs, you should include the polyfill shipped in @gechiui/babel-preset-default in your code.

How it works

This experimental module provides support for reusable blocks.

Reusable blocks are GeChiUI entities and the following is enough to ensure they are available in the inserter:

const { __experimentalReusableBlocks } = useSelect( ( select ) =>
	select( 'core' ).getEntityRecords( 'postType', 'gc_block' )
);

return (
	<BlockEditorProvider
		value={ blocks }
		onInput={ onInput }
		onChange={ onChange }
		settings={ {
			...settings,
			__experimentalReusableBlocks,
		} }
		{ ...props }
	/>
);

With the above configuration management features (such as creating new reusable blocks) are still missing from the editor. Enter @gechiui/reusable-blocks:

import { ReusableBlocksMenuItems } from '@gechiui/reusable-blocks';

const { __experimentalReusableBlocks } = useSelect( ( select ) =>
	select( 'core' ).getEntityRecords( 'postType', 'gc_block' )
);

return (
	<BlockEditorProvider
		value={ blocks }
		onInput={ onInput }
		onChange={ onChange }
		settings={ {
			...settings,
			__experimentalReusableBlocks,
		} }
		{ ...props }
	>
		<ReusableBlocksMenuItems />
		{ children }
	</BlockEditorProvider>
);

This package also provides convenient utilities for managing reusable blocks through redux actions:

import { store as reusableBlocksStore } from '@gechiui/reusable-blocks';

function MyConvertToStaticButton( { clientId } ) {
	const { __experimentalConvertBlockToStatic } = useDispatch(
		reusableBlocksStore
	);
	return (
		<button
			onClick={ () => __experimentalConvertBlockToStatic( clientId ) }
		>
			Convert to static
		</button>
	);
}

function MyConvertToReusableButton( { clientId } ) {
	const { __experimentalConvertBlocksToReusable } = useDispatch(
		reusableBlocksStore
	);
	return (
		<button
			onClick={ () =>
				__experimentalConvertBlocksToReusable( [ clientId ] )
			}
		>
			Convert to reusable
		</button>
	);
}

function MyDeleteReusableBlockButton( { id } ) {
	const { __experimentalDeleteReusableBlock } = useDispatch(
		reusableBlocksStore
	);
	return (
		<button onClick={ () => __experimentalDeleteReusableBlock( id ) }>
			Delete reusable block
		</button>
	);
}



Code is Poetry.

Dependencies (12)

Dev Dependencies (0)

    Package Sidebar

    Install

    npm i @gechiui/reusable-blocks

    Weekly Downloads

    85

    Version

    3.0.24

    License

    GPL-2.0-or-later

    Unpacked Size

    147 kB

    Total Files

    67

    Last publish

    Collaborators

    • gechiui