Commit 562c653299 for woocommerce

commit 562c653299d369372b51667406c40cf8f305c30f
Author: Sam Seay <samueljseay@gmail.com>
Date:   Tue Jan 13 15:44:02 2026 +1300

    Interactivity API Mini Cart: utilize data-wp-on-document directive to handle add/remove cart events. (#62673)

diff --git a/plugins/woocommerce/changelog/62673-wooplug-4701-interactivity-api-powered-mini-cart-move b/plugins/woocommerce/changelog/62673-wooplug-4701-interactivity-api-powered-mini-cart-move
new file mode 100644
index 0000000000..14f814c5fc
--- /dev/null
+++ b/plugins/woocommerce/changelog/62673-wooplug-4701-interactivity-api-powered-mini-cart-move
@@ -0,0 +1,4 @@
+Significance: minor
+Type: dev
+
+Interactivity API Mini Cart: utilize data-wp-on-document directive to handle add/remove cart events.
\ No newline at end of file
diff --git a/plugins/woocommerce/client/blocks/assets/js/blocks/mini-cart/iapi-frontend.ts b/plugins/woocommerce/client/blocks/assets/js/blocks/mini-cart/iapi-frontend.ts
index 98796e44c6..18838dcf5d 100644
--- a/plugins/woocommerce/client/blocks/assets/js/blocks/mini-cart/iapi-frontend.ts
+++ b/plugins/woocommerce/client/blocks/assets/js/blocks/mini-cart/iapi-frontend.ts
@@ -34,7 +34,6 @@ const { currency, placeholderImgSrc } = getConfig(
 	'woocommerce'
 ) as WooCommerceConfig;
 const {
-	addToCartBehaviour,
 	onCartClickBehaviour,
 	checkoutUrl,
 	displayCartPriceIncludingTax,
@@ -95,7 +94,7 @@ type MiniCart = {
 		handleOverlayKeydown: ( e: KeyboardEvent ) => void;
 	};
 	callbacks: {
-		setupEventListeners: () => void;
+		setupJQueryEventBridge: () => void;
 		disableScrollingOnBody: () => void;
 		focusFirstElement: () => void;
 	};
@@ -307,56 +306,26 @@ store< MiniCart >(
 		},

 		callbacks: {
-			*setupEventListeners() {
-				// eslint-disable-next-line @typescript-eslint/no-empty-function
-				const noop = () => {};
-				let removeJQueryAddedToCartEvent = noop;
-				let removeJQueryRemovedFromCartEvent = noop;
-				if ( 'jQuery' in window ) {
-					// Make it so we can read jQuery events triggered by WC Core elements.
-					removeJQueryAddedToCartEvent = translateJQueryEventToNative(
+			*setupJQueryEventBridge() {
+				if ( ! ( 'jQuery' in window ) ) {
+					return;
+				}
+
+				// Make it so we can read jQuery events triggered by WC Core elements.
+				const removeJQueryAddedToCartEvent =
+					translateJQueryEventToNative(
 						'added_to_cart',
 						'wc-blocks_added_to_cart'
 					);
-					removeJQueryRemovedFromCartEvent =
-						translateJQueryEventToNative(
-							'removed_from_cart',
-							'wc-blocks_removed_from_cart'
-						);
-				}
-				document.body.addEventListener(
-					'wc-blocks_added_to_cart',
-					actions.refreshCartItems
-				);
-				document.body.addEventListener(
-					'wc-blocks_removed_from_cart',
-					actions.refreshCartItems
-				);
-
-				if ( addToCartBehaviour === 'open_drawer' ) {
-					document.body.addEventListener(
-						'wc-blocks_added_to_cart',
-						miniCartActions.openDrawer
+				const removeJQueryRemovedFromCartEvent =
+					translateJQueryEventToNative(
+						'removed_from_cart',
+						'wc-blocks_removed_from_cart'
 					);
-				}

 				return () => {
-					document.body.removeEventListener(
-						'wc-blocks_added_to_cart',
-						actions.refreshCartItems
-					);
-					document.body.removeEventListener(
-						'wc-blocks_removed_from_cart',
-						actions.refreshCartItems
-					);
-					document.body.removeEventListener(
-						'wc-blocks_added_to_cart',
-						miniCartActions.openDrawer
-					);
-					if ( 'jQuery' in window ) {
-						removeJQueryAddedToCartEvent();
-						removeJQueryRemovedFromCartEvent();
-					}
+					removeJQueryAddedToCartEvent();
+					removeJQueryRemovedFromCartEvent();
 				};
 			},

diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
index 786235e2b9..daa7d3c111 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
@@ -578,7 +578,6 @@ class MiniCart extends AbstractBlock {
 				$this->get_full_block_name(),
 				array(
 					'displayCartPriceIncludingTax' => $display_cart_price_including_tax,
-					'addToCartBehaviour'           => $attributes['addToCartBehaviour'],
 					'onCartClickBehaviour'         => $on_cart_click_behaviour,
 					'checkoutUrl'                  => wc_get_checkout_url(),
 					'buttonAriaLabelTemplate'      => $button_aria_label_template,
@@ -601,8 +600,13 @@ class MiniCart extends AbstractBlock {

 			<div
 				data-wp-interactive="woocommerce/mini-cart"
-				data-wp-init="callbacks.setupEventListeners"
+				data-wp-init="callbacks.setupJQueryEventBridge"
 				data-wp-init--refresh-cart-items="woocommerce::actions.refreshCartItems"
+				data-wp-on-document--wc-blocks_added_to_cart="woocommerce::actions.refreshCartItems"
+				data-wp-on-document--wc-blocks_removed_from_cart="woocommerce::actions.refreshCartItems"
+				<?php if ( 'open_drawer' === $attributes['addToCartBehaviour'] ) : ?>
+				data-wp-on-document--wc-blocks_added_to_cart---open-drawer="actions.openDrawer"
+				<?php endif; ?>
 				data-wp-watch="callbacks.disableScrollingOnBody"
 				<?php // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
 				<?php echo wp_interactivity_data_wp_context( $context ); ?>