diff --git a/assets/js/atomic/blocks/product-elements/button/block.tsx b/assets/js/atomic/blocks/product-elements/button/block.tsx
index ddab78646fe..c3ed224b08f 100644
--- a/assets/js/atomic/blocks/product-elements/button/block.tsx
+++ b/assets/js/atomic/blocks/product-elements/button/block.tsx
@@ -7,12 +7,7 @@ import {
useStoreEvents,
useStoreAddToCart,
} from '@woocommerce/base-context/hooks';
-import {
- useBorderProps,
- useColorProps,
- useTypographyProps,
- useSpacingProps,
-} from '@woocommerce/base-hooks';
+import { useStyleProps } from '@woocommerce/base-hooks';
import { decodeEntities } from '@wordpress/html-entities';
import { CART_URL } from '@woocommerce/block-settings';
import { getSetting } from '@woocommerce/settings';
@@ -35,22 +30,18 @@ import type {
/**
* Product Button Block Component.
*
- * @param {Object} props Incoming props.
- * @param {Object} [props.product] Product.
- * @param {Object} [props.colorStyles] Object contains CSS class and CSS style for color.
- * @param {Object} [props.borderStyles] Object contains CSS class and CSS style for border.
- * @param {Object} [props.typographyStyles] Object contains CSS class and CSS style for typography.
- * @param {Object} [props.spacingStyles] Object contains CSS style for spacing.
- * @param {Object} [props.textAlign] Text alignment.
+ * @param {Object} props Incoming props.
+ * @param {Object} [props.product] Product.
+ * @param {Object} [props.style] Object contains CSS Styles.
+ * @param {string} [props.className] String contains CSS class.
+ * @param {Object} [props.textAlign] Text alignment.
*
* @return {*} The component.
*/
const AddToCartButton = ( {
product,
- colorStyles,
- borderStyles,
- typographyStyles,
- spacingStyles,
+ className,
+ style,
textAlign,
}: AddToCartButtonAttributes ): JSX.Element => {
const {
@@ -114,14 +105,15 @@ const AddToCartButton = ( {
return (
{ buttonText }
@@ -147,19 +132,15 @@ const AddToCartButton = ( {
/**
* Product Button Block Component.
*
- * @param {Object} props Incoming props.
- * @param {Object} [props.colorStyles] Object contains CSS class and CSS style for color.
- * @param {Object} [props.borderStyles] Object contains CSS class and CSS style for border.
- * @param {Object} [props.typographyStyles] Object contains CSS class and CSS style for typography.
- * @param {Object} [props.spacingStyles] Object contains CSS style for spacing.
+ * @param {Object} props Incoming props.
+ * @param {Object} [props.style] Object contains CSS Styles.
+ * @param {string} [props.className] String contains CSS class.
*
* @return {*} The component.
*/
const AddToCartButtonPlaceholder = ( {
- colorStyles,
- borderStyles,
- typographyStyles,
- spacingStyles,
+ className,
+ style,
}: AddToCartButtonPlaceholderAttributes ): JSX.Element => {
return (
);
@@ -193,12 +168,9 @@ const AddToCartButtonPlaceholder = ( {
*/
export const Block = ( props: BlockAttributes ): JSX.Element => {
const { className, textAlign } = props;
+ const styleProps = useStyleProps( props );
const { parentClassName } = useInnerBlockLayoutContext();
const { product } = useProductDataContext();
- const colorProps = useColorProps( props );
- const borderProps = useBorderProps( props );
- const typographyProps = useTypographyProps( props );
- const spacingProps = useSpacingProps( props );
return (
{
{ product.id ? (
) : (
) }
diff --git a/assets/js/atomic/blocks/product-elements/button/types.ts b/assets/js/atomic/blocks/product-elements/button/types.ts
index 96b78d60573..39ba0a1f168 100644
--- a/assets/js/atomic/blocks/product-elements/button/types.ts
+++ b/assets/js/atomic/blocks/product-elements/button/types.ts
@@ -14,10 +14,8 @@ export interface BlockAttributes {
}
export interface AddToCartButtonPlaceholderAttributes {
- borderStyles: WithClass & WithStyle;
- colorStyles: WithClass & WithStyle;
- spacingStyles: WithStyle;
- typographyStyles: WithStyle;
+ className: string;
+ style: Record< string, unknown >;
}
export interface AddToCartButtonAttributes
diff --git a/assets/js/atomic/blocks/product-elements/image/block.tsx b/assets/js/atomic/blocks/product-elements/image/block.tsx
index 99f09c682d9..280d5462f86 100644
--- a/assets/js/atomic/blocks/product-elements/image/block.tsx
+++ b/assets/js/atomic/blocks/product-elements/image/block.tsx
@@ -9,11 +9,7 @@ import {
useInnerBlockLayoutContext,
useProductDataContext,
} from '@woocommerce/shared-context';
-import {
- useBorderProps,
- useSpacingProps,
- useTypographyProps,
-} from '@woocommerce/base-hooks';
+import { useStyleProps } from '@woocommerce/base-hooks';
import { withProductDataContext } from '@woocommerce/shared-hocs';
import { useStoreEvents } from '@woocommerce/base-context/hooks';
import type { HTMLAttributes } from 'react';
@@ -87,12 +83,10 @@ export const Block = ( props: Props ): JSX.Element | null => {
saleBadgeAlign = 'right',
...restProps
} = props;
+ const styleProps = useStyleProps( props );
const { parentClassName } = useInnerBlockLayoutContext();
const { product, isLoading } = useProductDataContext();
const { dispatchStoreEvent } = useStoreEvents();
- const typographyProps = useTypographyProps( props );
- const borderProps = useBorderProps( props );
- const spacingProps = useSpacingProps( props );
if ( ! product.id ) {
return (
@@ -104,13 +98,9 @@ export const Block = ( props: Props ): JSX.Element | null => {
[ `${ parentClassName }__product-image` ]:
parentClassName,
},
- borderProps.className
+ styleProps.className
) }
- style={ {
- ...typographyProps.style,
- ...borderProps.style,
- ...spacingProps.style,
- } }
+ style={ styleProps.style }
>
@@ -142,13 +132,9 @@ export const Block = ( props: Props ): JSX.Element | null => {
{
[ `${ parentClassName }__product-image` ]: parentClassName,
},
- borderProps.className
+ styleProps.className
) }
- style={ {
- ...typographyProps.style,
- ...borderProps.style,
- ...spacingProps.style,
- } }
+ style={ styleProps.style }
>
{ !! showSaleBadge && (
diff --git a/assets/js/atomic/blocks/product-elements/image/test/block.test.tsx b/assets/js/atomic/blocks/product-elements/image/test/block.test.tsx
index d7f6498b73d..7f47f6e8e27 100644
--- a/assets/js/atomic/blocks/product-elements/image/test/block.test.tsx
+++ b/assets/js/atomic/blocks/product-elements/image/test/block.test.tsx
@@ -13,16 +13,10 @@ import { ImageSizing } from '../types';
jest.mock( '@woocommerce/base-hooks', () => ( {
__esModule: true,
- useBorderProps: jest.fn( () => ( {
+ useStyleProps: jest.fn( () => ( {
className: '',
style: {},
} ) ),
- useTypographyProps: jest.fn( () => ( {
- style: {},
- } ) ),
- useSpacingProps: jest.fn( () => ( {
- style: {},
- } ) ),
} ) );
const productWithoutImages: ProductResponseItem = {
diff --git a/assets/js/atomic/blocks/product-elements/price/block.tsx b/assets/js/atomic/blocks/product-elements/price/block.tsx
index 8d89d032976..8561b00c3d6 100644
--- a/assets/js/atomic/blocks/product-elements/price/block.tsx
+++ b/assets/js/atomic/blocks/product-elements/price/block.tsx
@@ -8,11 +8,7 @@ import {
useInnerBlockLayoutContext,
useProductDataContext,
} from '@woocommerce/shared-context';
-import {
- useColorProps,
- useSpacingProps,
- useTypographyProps,
-} from '@woocommerce/base-hooks';
+import { useStyleProps } from '@woocommerce/base-hooks';
import { withProductDataContext } from '@woocommerce/shared-hocs';
import { CurrencyCode } from '@woocommerce/type-defs/currency';
import type { HTMLAttributes } from 'react';
@@ -41,23 +37,20 @@ interface PriceProps {
export const Block = ( props: Props ): JSX.Element | null => {
const { className, textAlign, isDescendentOfSingleProductTemplate } = props;
+ const styleProps = useStyleProps( props );
const { parentName, parentClassName } = useInnerBlockLayoutContext();
const { product } = useProductDataContext();
const isDescendentOfAllProductsBlock =
parentName === 'woocommerce/all-products';
- const colorProps = useColorProps( props );
- const spacingProps = useSpacingProps( props );
- const typographyProps = useTypographyProps( props );
const wrapperClassName = classnames(
'wc-block-components-product-price',
className,
- colorProps.className,
+ styleProps.className,
{
[ `${ parentClassName }__product-price` ]: parentClassName,
- },
- typographyProps.className
+ }
);
if ( ! product.id && ! isDescendentOfSingleProductTemplate ) {
@@ -74,13 +67,6 @@ export const Block = ( props: Props ): JSX.Element | null => {
return productPriceComponent;
}
- const style = {
- ...colorProps.style,
- ...typographyProps.style,
- };
- const spacingStyle = {
- ...spacingProps.style,
- };
const prices: PriceProps = product.prices;
const currency = isDescendentOfSingleProductTemplate
? getCurrencyFromPriceResponse()
@@ -97,8 +83,9 @@ export const Block = ( props: Props ): JSX.Element | null => {
{
[ `${ parentClassName }__product-price__regular` ]:
parentClassName,
} ) }
- spacingStyle={ spacingStyle }
/>
);
if ( isDescendentOfAllProductsBlock ) {
diff --git a/assets/js/atomic/blocks/product-elements/rating/block.tsx b/assets/js/atomic/blocks/product-elements/rating/block.tsx
index db4db52604a..8de5e5ebbc2 100644
--- a/assets/js/atomic/blocks/product-elements/rating/block.tsx
+++ b/assets/js/atomic/blocks/product-elements/rating/block.tsx
@@ -7,11 +7,7 @@ import {
useInnerBlockLayoutContext,
useProductDataContext,
} from '@woocommerce/shared-context';
-import {
- useColorProps,
- useSpacingProps,
- useTypographyProps,
-} from '@woocommerce/base-hooks';
+import { useStyleProps } from '@woocommerce/base-hooks';
import { withProductDataContext } from '@woocommerce/shared-hocs';
import { isNumber, ProductResponseItem } from '@woocommerce/types';
@@ -136,17 +132,15 @@ interface ProductRatingProps {
export const Block = ( props: ProductRatingProps ): JSX.Element | null => {
const { textAlign, isDescendentOfSingleProductBlock } = props;
+ const styleProps = useStyleProps( props );
const { parentClassName } = useInnerBlockLayoutContext();
const { product } = useProductDataContext();
const rating = getAverageRating( product );
- const colorProps = useColorProps( props );
- const typographyProps = useTypographyProps( props );
- const spacingProps = useSpacingProps( props );
const reviews = getRatingCount( product );
const href = getReviewsHref( product );
const className = classnames(
- colorProps.className,
+ styleProps.className,
'wc-block-components-product-rating',
{
[ `${ parentClassName }__product-rating` ]: parentClassName,
@@ -165,14 +159,7 @@ export const Block = ( props: ProductRatingProps ): JSX.Element | null => {
);
return (
-
+
{ content }
{ reviews && isDescendentOfSingleProductBlock ? (
diff --git a/assets/js/atomic/blocks/product-elements/sale-badge/block.tsx b/assets/js/atomic/blocks/product-elements/sale-badge/block.tsx
index 815048af958..6fbc4107f44 100644
--- a/assets/js/atomic/blocks/product-elements/sale-badge/block.tsx
+++ b/assets/js/atomic/blocks/product-elements/sale-badge/block.tsx
@@ -8,12 +8,7 @@ import {
useInnerBlockLayoutContext,
useProductDataContext,
} from '@woocommerce/shared-context';
-import {
- useBorderProps,
- useColorProps,
- useSpacingProps,
- useTypographyProps,
-} from '@woocommerce/base-hooks';
+import { useStyleProps } from '@woocommerce/base-hooks';
import { withProductDataContext } from '@woocommerce/shared-hocs';
import type { HTMLAttributes } from 'react';
@@ -27,12 +22,9 @@ type Props = BlockAttributes & HTMLAttributes< HTMLDivElement >;
export const Block = ( props: Props ): JSX.Element | null => {
const { className, align } = props;
+ const styleProps = useStyleProps( props );
const { parentClassName } = useInnerBlockLayoutContext();
const { product } = useProductDataContext();
- const borderProps = useBorderProps( props );
- const colorProps = useColorProps( props );
- const typographyProps = useTypographyProps( props );
- const spacingProps = useSpacingProps( props );
if ( ! product.id || ! product.on_sale ) {
return null;
@@ -52,16 +44,9 @@ export const Block = ( props: Props ): JSX.Element | null => {
{
[ `${ parentClassName }__product-onsale` ]: parentClassName,
},
- colorProps.className,
- borderProps.className,
- typographyProps.className
+ styleProps.className
) }
- style={ {
- ...colorProps.style,
- ...borderProps.style,
- ...typographyProps.style,
- ...spacingProps.style,
- } }
+ style={ styleProps.style }
>