diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/block-settings/index.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/block-settings/index.tsx index 3ccef0fd129..cea7839f110 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/block-settings/index.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/block-settings/index.tsx @@ -9,14 +9,48 @@ import { __ } from '@wordpress/i18n'; * Internal dependencies */ import type { ProductGallerySettingsProps } from '../types'; +import { ProductGalleryThumbnailsBlockSettings } from '../inner-blocks/product-gallery-thumbnails/block-settings'; +import { ProductGalleryPagerBlockSettings } from '../inner-blocks/product-gallery-pager/settings'; +import { ProductGalleryNextPreviousBlockSettings } from '../inner-blocks/product-gallery-large-image-next-previous/settings'; export const ProductGalleryBlockSettings = ( { attributes, setAttributes, + context, }: ProductGallerySettingsProps ) => { const { cropImages, hoverZoom, fullScreenOnClick } = attributes; + const { + productGalleryClientId, + pagerDisplayMode, + nextPreviousButtonsPosition, + thumbnailsNumberOfThumbnails, + thumbnailsPosition, + } = context; return ( + + + + + diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/edit.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/edit.tsx index 12d5e2a71e4..9264f5b07ec 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/edit.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/edit.tsx @@ -19,11 +19,8 @@ import { getInnerBlocksLockAttributes, getClassNameByNextPreviousButtonsPosition, } from './utils'; -import { ProductGalleryThumbnailsBlockSettings } from './inner-blocks/product-gallery-thumbnails/block-settings'; -import { ProductGalleryPagerBlockSettings } from './inner-blocks/product-gallery-pager/settings'; import { ProductGalleryBlockSettings } from './block-settings/index'; import type { ProductGalleryAttributes } from './types'; -import { ProductGalleryNextPreviousBlockSettings } from './inner-blocks/product-gallery-large-image-next-previous/settings'; const TEMPLATE: InnerBlockTemplate[] = [ [ @@ -137,35 +134,18 @@ export const Edit = ( { return (
- - - - - - - diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image-next-previous/edit.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image-next-previous/edit.tsx index db146df1f4f..17b4f9a2e36 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image-next-previous/edit.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image-next-previous/edit.tsx @@ -4,6 +4,7 @@ import { InspectorControls, useBlockProps } from '@wordpress/block-editor'; import { useMemo } from '@wordpress/element'; import { BlockAttributes } from '@wordpress/blocks'; +import { PanelBody } from '@wordpress/components'; import classNames from 'classnames'; /** @@ -57,7 +58,11 @@ export const Edit = ( { return (
- + + +
, @@ -54,41 +53,38 @@ const getHelpText = ( buttonPosition: NextPreviousButtonSettingValues ) => { export const ProductGalleryNextPreviousBlockSettings = ( { context, }: { - context: Context; + context: ProductGalleryLargeImageNextPreviousContext; } ) => { const { productGalleryClientId, nextPreviousButtonsPosition } = context; // @ts-expect-error @wordpress/block-editor/store types not provided const { updateBlockAttributes } = useDispatch( blockEditorStore ); return ( - + updateBlockAttributes( productGalleryClientId, { + nextPreviousButtonsPosition: value, + } ) + } + help={ getHelpText( nextPreviousButtonsPosition ) } + value={ nextPreviousButtonsPosition } > - - updateBlockAttributes( productGalleryClientId, { - nextPreviousButtonsPosition: value, - } ) - } - help={ getHelpText( nextPreviousButtonsPosition ) } - value={ nextPreviousButtonsPosition } - > - - - - - + + + + ); }; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/edit.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/edit.tsx index 698bc6fb971..4ff8ad0609e 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/edit.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/edit.tsx @@ -3,6 +3,7 @@ */ import { Icon } from '@wordpress/icons'; import { InspectorControls, useBlockProps } from '@wordpress/block-editor'; +import { PanelBody } from '@wordpress/components'; import classNames from 'classnames'; /** @@ -97,7 +98,9 @@ export const Edit = ( props: EditProps ): JSX.Element => { return (
- + + + diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/settings.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/settings.tsx index 811b22b33c4..8ec946cd2a4 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/settings.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/settings.tsx @@ -5,7 +5,6 @@ import { store as blockEditorStore } from '@wordpress/block-editor'; import { useDispatch } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; import { - PanelBody, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - Ignoring because `__experimentalToggleGroupControl` is not yet in the type definitions. // eslint-disable-next-line @wordpress/no-unsafe-wp-apis @@ -58,35 +57,31 @@ export const ProductGalleryPagerBlockSettings = ( { const { updateBlockAttributes } = useDispatch( blockEditorStore ); return ( - { + updateBlockAttributes( productGalleryClientId, { + pagerDisplayMode: value, + } ); + } } + help={ getHelpText( pagerDisplayMode ) } + value={ pagerDisplayMode } > - { - updateBlockAttributes( productGalleryClientId, { - pagerDisplayMode: value, - } ); - } } - help={ getHelpText( pagerDisplayMode ) } - value={ pagerDisplayMode } - > - - } - /> - } - /> - - + + } + /> + } + /> + ); }; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/block-settings/index.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/block-settings/index.tsx index 8bed14c16f2..cdf4e133cfb 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/block-settings/index.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/block-settings/index.tsx @@ -1,10 +1,7 @@ /** * External dependencies */ -import { - InspectorControls, - store as blockEditorStore, -} from '@wordpress/block-editor'; +import { store as blockEditorStore } from '@wordpress/block-editor'; import { __ } from '@wordpress/i18n'; import { Icon } from '@wordpress/icons'; import { @@ -14,7 +11,6 @@ import { } from '@woocommerce/icons'; import { useDispatch } from '@wordpress/data'; import { - PanelBody, RangeControl, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - Ignoring because `__experimentalToggleGroupControlOption` is not yet in the type definitions. @@ -61,76 +57,66 @@ export const ProductGalleryThumbnailsBlockSettings = ( { const { updateBlockAttributes } = useDispatch( blockEditorStore ); return ( - - + + updateBlockAttributes( productGalleryClientId, { + thumbnailsPosition: value, + } ) + } > - + } - onChange={ ( value: string ) => + /> + + } + /> + + } + /> + + { context.thumbnailsPosition !== ThumbnailsPosition.OFF && ( + updateBlockAttributes( productGalleryClientId, { - thumbnailsPosition: value, + thumbnailsNumberOfThumbnails: value, } ) } - > - - - } - /> - - } - /> - - } - /> - - { context.thumbnailsPosition !== ThumbnailsPosition.OFF && ( - - updateBlockAttributes( productGalleryClientId, { - thumbnailsNumberOfThumbnails: value, - } ) - } - help={ __( - 'Choose how many thumbnails (2-8) will display. If more images exist, a “View all” button will display.', - 'woo-gutenberg-products-block' - ) } - max={ maxNumberOfThumbnails } - min={ minNumberOfThumbnails } - /> - ) } - - + help={ __( + 'Choose how many thumbnails (2-8) will display. If more images exist, a “View all” button will display.', + 'woo-gutenberg-products-block' + ) } + max={ maxNumberOfThumbnails } + min={ minNumberOfThumbnails } + /> + ) } + ); }; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/edit.tsx b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/edit.tsx index f47bca3bb73..d62da00ad1a 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/edit.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/edit.tsx @@ -2,7 +2,7 @@ * External dependencies */ import { InspectorControls, useBlockProps } from '@wordpress/block-editor'; -import { Disabled } from '@wordpress/components'; +import { Disabled, PanelBody } from '@wordpress/components'; import type { BlockEditProps } from '@wordpress/blocks'; import { WC_BLOCKS_IMAGE_URL } from '@woocommerce/block-settings'; import classNames from 'classnames'; @@ -55,11 +55,13 @@ export const Edit = ( { attributes, setAttributes, context }: EditProps ) => { <>
- + + + diff --git a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/types.ts b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/types.ts index f7bd4b4a965..94a41285304 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/types.ts +++ b/plugins/woocommerce-blocks/assets/js/blocks/product-gallery/types.ts @@ -33,14 +33,11 @@ export interface ProductGalleryBlockEditProps { export interface ProductGallerySettingsProps { attributes: ProductGalleryBlockAttributes; setAttributes: ( attributes: ProductGalleryBlockAttributes ) => void; + context: ProductGalleryContext; } export interface ProductGalleryThumbnailsSettingsProps { - attributes: ProductGalleryThumbnailsBlockAttributes; - setAttributes: ( - attributes: ProductGalleryThumbnailsBlockAttributes - ) => void; - context: ProductGalleryThumbnailsBlockAttributes; + context: ProductGalleryThumbnailsContext; } export type ProductGalleryContext = { @@ -55,6 +52,18 @@ export type ProductGalleryPagerContext = Pick< 'productGalleryClientId' | 'pagerDisplayMode' >; +export type ProductGalleryLargeImageNextPreviousContext = Pick< + ProductGalleryContext, + 'productGalleryClientId' | 'nextPreviousButtonsPosition' +>; + +export type ProductGalleryThumbnailsContext = Pick< + ProductGalleryContext, + | 'productGalleryClientId' + | 'thumbnailsPosition' + | 'thumbnailsNumberOfThumbnails' +>; + export type ProductGalleryAttributes = ProductGalleryThumbnailsBlockAttributes & ProductGalleryBlockAttributes & ProductGalleryPagerBlockAttributes & diff --git a/plugins/woocommerce-blocks/tests/e2e/tests/product-gallery/inner-blocks/product-gallery-pager/product-gallery-pager.block_theme.side_effects.spec.ts b/plugins/woocommerce-blocks/tests/e2e/tests/product-gallery/inner-blocks/product-gallery-pager/product-gallery-pager.block_theme.side_effects.spec.ts index 524986839e9..781a8f8305e 100644 --- a/plugins/woocommerce-blocks/tests/e2e/tests/product-gallery/inner-blocks/product-gallery-pager/product-gallery-pager.block_theme.side_effects.spec.ts +++ b/plugins/woocommerce-blocks/tests/e2e/tests/product-gallery/inner-blocks/product-gallery-pager/product-gallery-pager.block_theme.side_effects.spec.ts @@ -20,8 +20,7 @@ const blockData = { }, editor: { settings: { - pagerSettingsContainer: - '.wc-block-editor-product-gallery-pager-settings', + pagerSettingsContainer: 'div[aria-label="Pager"]', displayModeOffOption: 'button[data-value=off]', displayModeDotsOption: 'button[data-value=dots]', displayModeDigitsOption: 'button[data-value=digits]',