woocommerce/plugins/woocommerce-blocks/docs/internal-developers/block-client-apis/notices.md

2.5 KiB

Frontend notices

Table of contents

Notices in WooCommerce Blocks

WooCommerce Blocks uses the @wordpress/notices package to display notices in the frontend. For more information on the actions and selectors available on this data store, please review the @wordpress/notices documentation

StoreNoticesContainer

To display notices of a certain context, use the StoreNoticesContainer and pass the context as a prop to it.

The below example will show all notices with type default that are in the wc/cart context. If no context prop is passed, then the default context will be used.

On the Cart Block, a StoreNoticesContainer is already rendered with the wc/cart context, and on the Checkout Block, a StoreNoticesContainer is already rendered with the wc/checkout context. To display errors from other contexts, you can use the StoreNoticesContainer component with context passed as a prop.

StoreNoticesContainer also support passing an array of context strings to it, this allows you to capture several contexts at once, while filtering out similar notices.

Single context

const { StoreNoticesContainer } = window.wc.blocksCheckout;

const PaymentErrors = () => {
	return <StoreNoticesContainer context="wc/payment" />;
};

Multiple contexts

const { StoreNoticesContainer } = window.wc.blocksCheckout;

const AddressForm = () => {
	return (
		<StoreNoticesContainer
			context={ [
				'wc/checkout/shipping-address',
				'wc/checkout/billing-address',
			] }
		/>
	);
};

Snackbar notices in WooCommerce Blocks

WooCommerce Blocks also shows snackbar notices, to add a snackbar notice you need to create a notice with type:snackbar in the options object.

const { dispatch } = window.wp.data;

dispatch( 'core/notices' ).createNotice(
	'snackbar',
	'This is a snackbar notice',
	{
		type: 'snackbar',
		actions: [
			{
				label: 'Dismiss',
				onClick: () => {
					dispatch( 'core/notices' ).removeNotice(
						'snackbar-notice-id'
					);
				},
			},
		],
	},
	'snackbar-notice-id'
);