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 ); ?>