File "inner-blocks-style.tsx"

Full Path: /home/warrior1/public_html/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks-style.tsx
File size: 1.41 KB
MIME-type: text/html
Charset: utf-8

/**
 * This is a workaround to style inner blocks using the color
 * settings of the Mini Cart Contents block. It's possible to get
 * the Mini Cart Contents block's attributes inside the inner blocks
 * components, but we have 4 out of 7 inner blocks that inherit
 * style from the Mini Cart Contents block, so we need to apply the
 * styles here to avoid duplication.
 *
 * We only use this hack for the Site Editor. On the frontend, we
 * manipulate the style using block attributes and inject the CSS
 * via `wp_add_inline_style()` function.
 */
export const MiniCartInnerBlocksStyle = ( {
	style,
}: {
	style: Record< string, unknown >;
} ): JSX.Element => {
	const innerStyles = [
		{
			selector:
				'.wc-block-mini-cart__footer .wc-block-mini-cart__footer-actions .wc-block-mini-cart__footer-checkout',
			properties: [
				{
					property: 'color',
					value: style.backgroundColor,
				},
				{
					property: 'background-color',
					value: style.color,
				},
				{
					property: 'border-color',
					value: style.color,
				},
			],
		},
	]
		.map( ( { selector, properties } ) => {
			const rules = properties
				.filter( ( { value } ) => value )
				.map( ( { property, value } ) => `${ property }: ${ value };` )
				.join( '' );

			if ( rules ) return `${ selector } { ${ rules } }`;
			return '';
		} )
		.join( '' )
		.trim();

	if ( ! innerStyles ) {
		return <></>;
	}

	return <style>{ innerStyles } </style>;
};