diff --git a/plugins/woocommerce-blocks/assets/js/base/context/hooks/use-checkout-address.ts b/plugins/woocommerce-blocks/assets/js/base/context/hooks/use-checkout-address.ts index a13b6ad1bab..71a5ab7a49b 100644 --- a/plugins/woocommerce-blocks/assets/js/base/context/hooks/use-checkout-address.ts +++ b/plugins/woocommerce-blocks/assets/js/base/context/hooks/use-checkout-address.ts @@ -6,6 +6,7 @@ import { AddressFields, ShippingAddress, BillingAddress, + getSetting, } from '@woocommerce/settings'; import { useCallback } from '@wordpress/element'; import { useDispatch, useSelect } from '@wordpress/data'; @@ -30,6 +31,7 @@ interface CheckoutAddress { defaultAddressFields: AddressFields; showShippingFields: boolean; showBillingFields: boolean; + forcedBillingAddress: boolean; } /** @@ -72,7 +74,10 @@ export const useCheckoutAddress = (): CheckoutAddress => { } ), [ setShippingAddress ] ); - + const forcedBillingAddress: boolean = getSetting( + 'forcedBillingAddress', + false + ); return { shippingAddress, billingAddress, @@ -84,7 +89,9 @@ export const useCheckoutAddress = (): CheckoutAddress => { defaultAddressFields, useShippingAsBilling, setUseShippingAsBilling: __internalSetUseShippingAsBilling, - showShippingFields: needsShipping, - showBillingFields: ! needsShipping || ! useShippingAsBilling, + showShippingFields: ! forcedBillingAddress && needsShipping, + showBillingFields: + forcedBillingAddress || ! needsShipping || ! useShippingAsBilling, + forcedBillingAddress, }; }; diff --git a/plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/block.tsx b/plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/block.tsx index 9c126c1aea0..f60f7f3df7e 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/block.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/block.tsx @@ -37,11 +37,12 @@ const Block = ( { defaultAddressFields, billingAddress, setBillingAddress, + setShippingAddress, setBillingPhone, } = useCheckoutAddress(); const { dispatchCheckoutEvent } = useStoreEvents(); const { isEditor } = useEditorContext(); - + const { forcedBillingAddress } = useCheckoutAddress(); // Clears data if fields are hidden. useEffect( () => { if ( ! showPhoneField ) { @@ -74,6 +75,9 @@ const Block = ( { type="billing" onChange={ ( values: Partial< BillingAddress > ) => { setBillingAddress( values ); + if ( forcedBillingAddress ) { + setShippingAddress( values ); + } dispatchCheckoutEvent( 'set-billing-address' ); } } values={ billingAddress } diff --git a/plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/frontend.tsx b/plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/frontend.tsx index c4041c30046..2bda8820638 100644 --- a/plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/frontend.tsx +++ b/plugins/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/frontend.tsx @@ -35,9 +35,9 @@ const FrontendBlock = ( { const checkoutIsProcessing = useSelect( ( select ) => select( CHECKOUT_STORE_KEY ).isProcessing() ); - const { showShippingFields } = useCheckoutAddress(); + const { showShippingFields, forcedBillingAddress } = useCheckoutAddress(); - if ( ! showShippingFields ) { + if ( ! showShippingFields && ! forcedBillingAddress ) { return null; } diff --git a/plugins/woocommerce-blocks/src/BlockTypes/Checkout.php b/plugins/woocommerce-blocks/src/BlockTypes/Checkout.php index 0e712fd3bd7..e6c5b315279 100644 --- a/plugins/woocommerce-blocks/src/BlockTypes/Checkout.php +++ b/plugins/woocommerce-blocks/src/BlockTypes/Checkout.php @@ -236,6 +236,7 @@ class Checkout extends AbstractBlock { $this->asset_data_registry->add( 'checkoutShowLoginReminder', filter_var( get_option( 'woocommerce_enable_checkout_login_reminder' ), FILTER_VALIDATE_BOOLEAN ), true ); $this->asset_data_registry->add( 'displayCartPricesIncludingTax', 'incl' === get_option( 'woocommerce_tax_display_cart' ), true ); $this->asset_data_registry->add( 'displayItemizedTaxes', 'itemized' === get_option( 'woocommerce_tax_total_display' ), true ); + $this->asset_data_registry->add( 'forcedBillingAddress', 'billing_only' === get_option( 'woocommerce_ship_to_destination' ), true ); $this->asset_data_registry->add( 'taxesEnabled', wc_tax_enabled(), true ); $this->asset_data_registry->add( 'couponsEnabled', wc_coupons_enabled(), true ); $this->asset_data_registry->add( 'shippingEnabled', wc_shipping_enabled(), true );