Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Calculate cart totals after running extensions #7490

Merged
merged 3 commits into from
Oct 27, 2022

Conversation

senadir
Copy link
Member

@senadir senadir commented Oct 26, 2022

In a recent refactor #7361 we switched from calling the cart endpoint in CartExtensions to calling the schema, which is more efficient and inline with architecture. However, previously when we called the endpoint directly, we were recalculating the cart each time, that refactor removed that.

Now, whether we should recalculate totals or not within CartExtensions or leave it to extensions is debatable, but we sort of created a regression in which plugins which assumed totals will be recalculated no longer had that.

In this PR I ensure we recalculate totals, and refactor some code so the recalculation code is shared.

Testing

  1. Install WooCommerce Gift Cards.
  2. Create a new gift card Simple Product and buy it.
  3. Mark the order as 'Completed'.
  4. Navigate to Marketing > Gift Cards and copy the generated gift card code.
  5. Add a non-gift card product to the cart.
  6. Navigate to the cart block.
  7. Apply the gift card you previously copied. You should see: 1) an indication that the gift card was applied, 2) a bullet bubble with the gift card number in this format XXXX-XXX-XXX-XXX and 3) updated cart totals that include the gift card discount.
  8. Remove the gift card. You should see that the cart totals are restored.
  • Do not include in the Testing Notes

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Changelog

Fix a bug in which cart totals aren't recalculated aftering running CartExtensions

@senadir senadir self-assigned this Oct 26, 2022
@senadir senadir added type: bug The issue/PR concerns a confirmed bug. block: checkout Issues related to the checkout block. labels Oct 26, 2022
@rubikuserbot rubikuserbot requested review from a team and tarhi-saad and removed request for a team October 26, 2022 16:03
@github-actions
Copy link
Contributor

The release ZIP for this PR is accessible via:

https://wcblocks.wpcomstaging.com/wp-content/uploads/woocommerce-gutenberg-products-block-7490.zip

@github-actions
Copy link
Contributor

github-actions bot commented Oct 26, 2022

Size Change: -121 B (0%)

Total Size: 992 kB

Filename Size Change
build/active-filters.js 7.3 kB -139 B (-2%)
build/attribute-filter.js 12.2 kB -212 B (-2%)
build/filter-wrapper.js 2.88 kB +487 B (+20%) 🚨
build/price-filter.js 8.31 kB -156 B (-2%)
build/rating-filter.js 6.16 kB -101 B (-2%)
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 7.73 kB
build/active-filters-wrapper-frontend.js 6 kB
build/all-products-frontend.js 26.5 kB
build/all-products.js 33.6 kB
build/all-reviews.js 7.79 kB
build/attribute-filter-frontend.js 22.5 kB
build/attribute-filter-wrapper-frontend.js 7.04 kB
build/blocks-checkout.js 17.5 kB
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.38 kB
build/cart-blocks/cart-cross-sells-frontend.js 253 B
build/cart-blocks/cart-cross-sells-products--product-add-to-cart-frontend.js 5.64 kB
build/cart-blocks/cart-cross-sells-products-frontend.js 4.67 kB
build/cart-blocks/cart-express-payment--checkout-blocks/express-payment-frontend.js 5.1 kB
build/cart-blocks/cart-express-payment-frontend.js 786 B
build/cart-blocks/cart-items-frontend.js 299 B
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.31 kB
build/cart-blocks/cart-line-items-frontend.js 1.07 kB
build/cart-blocks/cart-order-summary-frontend.js 1.11 kB
build/cart-blocks/cart-totals-frontend.js 320 B
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/filled-cart-frontend.js 783 B
build/cart-blocks/order-summary-coupon-form-frontend.js 2.73 kB
build/cart-blocks/order-summary-discount-frontend.js 2.16 kB
build/cart-blocks/order-summary-fee-frontend.js 272 B
build/cart-blocks/order-summary-heading-frontend.js 455 B
build/cart-blocks/order-summary-shipping--checkout-blocks/order-summary-shipping-frontend.js 6.61 kB
build/cart-blocks/order-summary-shipping-frontend.js 428 B
build/cart-blocks/order-summary-subtotal-frontend.js 273 B
build/cart-blocks/order-summary-taxes-frontend.js 433 B
build/cart-blocks/proceed-to-checkout-frontend.js 1.19 kB
build/cart-frontend.js 54.5 kB
build/cart.js 47.5 kB
build/checkout-blocks/actions-frontend.js 1.78 kB
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.98 kB
build/checkout-blocks/billing-address-frontend.js 954 B
build/checkout-blocks/contact-information-frontend.js 3.02 kB
build/checkout-blocks/express-payment-frontend.js 1.13 kB
build/checkout-blocks/fields-frontend.js 343 B
build/checkout-blocks/order-note-frontend.js 1.14 kB
build/checkout-blocks/order-summary-cart-items-frontend.js 3.67 kB
build/checkout-blocks/order-summary-coupon-form-frontend.js 2.89 kB
build/checkout-blocks/order-summary-discount-frontend.js 2.28 kB
build/checkout-blocks/order-summary-fee-frontend.js 275 B
build/checkout-blocks/order-summary-frontend.js 1.11 kB
build/checkout-blocks/order-summary-shipping-frontend.js 603 B
build/checkout-blocks/order-summary-subtotal-frontend.js 273 B
build/checkout-blocks/order-summary-taxes-frontend.js 433 B
build/checkout-blocks/payment-frontend.js 7.86 kB
build/checkout-blocks/shipping-address-frontend.js 1.06 kB
build/checkout-blocks/shipping-methods-frontend.js 4.89 kB
build/checkout-blocks/terms-frontend.js 1.64 kB
build/checkout-blocks/totals-frontend.js 323 B
build/checkout-frontend.js 56.6 kB
build/checkout.js 41.2 kB
build/featured-category.js 13.2 kB
build/featured-product.js 13.5 kB
build/filter-wrapper-frontend.js 13.8 kB
build/general-style-rtl.css 1.29 kB
build/general-style.css 1.29 kB
build/handpicked-products.js 7.33 kB
build/legacy-template.js 2.83 kB
build/mini-cart-component-frontend.js 20.2 kB
build/mini-cart-contents-block/empty-cart-frontend.js 367 B
build/mini-cart-contents-block/filled-cart-frontend.js 230 B
build/mini-cart-contents-block/footer-frontend.js 2.98 kB
build/mini-cart-contents-block/items-frontend.js 236 B
build/mini-cart-contents-block/products-table-frontend.js 590 B
build/mini-cart-contents-block/shopping-button-frontend.js 287 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/mini-cart-contents.js 16.8 kB
build/mini-cart-frontend.js 1.71 kB
build/mini-cart.js 4.57 kB
build/price-filter-frontend.js 13.6 kB
build/price-filter-wrapper-frontend.js 6.95 kB
build/price-format.js 1.19 kB
build/product-add-to-cart--product-button--product-category-list--product-image--product-price--product-r--a0326d00.js 227 B
build/product-add-to-cart--product-button--product-image--product-title.js 2.67 kB
build/product-add-to-cart-frontend.js 1.25 kB
build/product-add-to-cart.js 6.48 kB
build/product-best-sellers.js 7.7 kB
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 433 B
build/product-button--product-image--product-rating--product-sale-badge--product-title.js 301 B
build/product-button-frontend.js 1.89 kB
build/product-button.js 1.58 kB
build/product-categories.js 2.36 kB
build/product-category-list-frontend.js 881 B
build/product-category-list.js 502 B
build/product-category.js 8.69 kB
build/product-image-frontend.js 1.91 kB
build/product-image.js 1.62 kB
build/product-new.js 7.69 kB
build/product-on-sale.js 8.01 kB
build/product-price-frontend.js 1.92 kB
build/product-price.js 1.53 kB
build/product-query.js 2.46 kB
build/product-rating-frontend.js 1.18 kB
build/product-rating.js 773 B
build/product-sale-badge-frontend.js 1.15 kB
build/product-sale-badge.js 817 B
build/product-search.js 2.61 kB
build/product-sku-frontend.js 380 B
build/product-sku.js 380 B
build/product-stock-indicator-frontend.js 997 B
build/product-stock-indicator.js 624 B
build/product-summary-frontend.js 1.29 kB
build/product-summary.js 921 B
build/product-tag-list-frontend.js 877 B
build/product-tag-list.js 497 B
build/product-tag.js 8.05 kB
build/product-title-frontend.js 1.34 kB
build/product-title.js 937 B
build/product-top-rated.js 7.93 kB
build/products-by-attribute.js 8.61 kB
build/rating-filter-frontend.js 7.09 kB
build/rating-filter-wrapper-frontend.js 5.34 kB
build/reviews-by-category.js 11.3 kB
build/reviews-by-product.js 12.4 kB
build/reviews-frontend.js 7.01 kB
build/single-product-frontend.js 32.3 kB
build/single-product.js 10.1 kB
build/stock-filter-frontend.js 7.73 kB
build/stock-filter-wrapper-frontend.js 5.99 kB
build/stock-filter.js 6.65 kB
build/vendors--attribute-filter-wrapper--mini-cart-contents-block/footer-frontend.js 6.86 kB
build/vendors--attribute-filter-wrapper-frontend.js 8.21 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/cart-line-items--cart-blocks/cart-order--671ca56f-frontend.js 5.26 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/order-summary-shipping--checkout-blocks--18f9376a-frontend.js 19.1 kB
build/vendors--cart-blocks/cart-cross-sells-products--product-add-to-cart-frontend.js 7.53 kB
build/vendors--cart-blocks/cart-line-items--checkout-blocks/order-summary-cart-items--mini-cart-contents---233ab542-frontend.js 3.14 kB
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--5b8feb0b-frontend.js 4.85 kB
build/wc-blocks-data.js 18.3 kB
build/wc-blocks-editor-style-rtl.css 5.24 kB
build/wc-blocks-editor-style.css 5.24 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 932 B
build/wc-blocks-registry.js 2.93 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.72 kB
build/wc-blocks-style-rtl.css 24.2 kB
build/wc-blocks-style.css 24.1 kB
build/wc-blocks-vendors-style-rtl.css 1.95 kB
build/wc-blocks-vendors-style.css 1.95 kB
build/wc-blocks-vendors.js 62.4 kB
build/wc-blocks.js 2.62 kB
build/wc-payment-method-bacs.js 816 B
build/wc-payment-method-cheque.js 811 B
build/wc-payment-method-cod.js 909 B
build/wc-payment-method-paypal.js 837 B
build/wc-settings.js 2.6 kB

compressed-size-action

@xristos3490 xristos3490 self-requested a review October 27, 2022 07:59
@xristos3490
Copy link
Member

This works great with Gift Cards! 👌

@senadir senadir requested a review from opr October 27, 2022 13:50
@senadir senadir force-pushed the fix/recalc-after-extensions-update branch from 17f1727 to 8889854 Compare October 27, 2022 13:51
Comment on lines +39 to +44
add_action(
'woocommerce_cart_calculate_fees',
function() {
wc()->cart->add_fee( 'Surcharge', 10, true, 'standard' );
}
);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're using fees here because they're the only core cart method that doesn't trigger its own recalc, however, they only work if you add them within this action.

Copy link
Contributor

@opr opr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works perfect 👌🏼 thanks Nadir.

The tests you've added are great too. Something to work on in future could be: based on pca54o-4Bi-p2#comment-4596 we should try adding a test where two "extensions" use the same extensibility point and ensure they both get the expected results.

@github-actions github-actions bot added this to the 8.9.0 milestone Oct 27, 2022
@senadir senadir merged commit 1a291d9 into trunk Oct 27, 2022
@senadir senadir deleted the fix/recalc-after-extensions-update branch October 27, 2022 14:29
opr pushed a commit that referenced this pull request Oct 27, 2022
* calculate cart totals afer running extensions

* update totlas call in CartUpdateCustomer

* test that cart is recalcing
@opr opr modified the milestones: 8.9.0, 8.8.1 Oct 27, 2022
gigitux added a commit that referenced this pull request Oct 31, 2022
* Empty commit for release pull request

* Calculate cart totals after running extensions (#7490)

* calculate cart totals afer running extensions

* update totlas call in CartUpdateCustomer

* test that cart is recalcing

* Update changelog in readme

* Add release testing notes

* Update release date in readme

* Bumping version strings to new version.

* update readme

* Update styles of the Filter by Attribute dropdown so it looks good in TT3 (#7506)

* Use theme's body background color as the mini cart contents default background color (#7510)

Co-authored-by: Albert Juhé Lluveras <[email protected]>

* Price Slider: use `currentColor` for the slider (#7527)

* Fixed Price Slider Issue

Located where the price slider was hard coded and replaced it.

* fix CSS lint

* use currentColor instead of hard-coded color for the slider of the Filter By Price block #7130

use currentColor instead of hard-coded color for the slider of the Filte By Price block

* use currentColor instead of hard-coded color for the slider of the Filter By Price block #7130

use currentColor instead of hard-coded color for the slider of the Filte By Price block

* remove background-color

Co-authored-by: EmptySet-Exe <[email protected]>
Co-authored-by: Niels Lange <[email protected]>

* Make price slider 'inactive' range half transparent so it looks better in dark themes (#7525)

* Fix inconsistent button styling with TT3 (#7516)

* fix inconsistent button styling with TT3

* use wc_wp_theme_get_element_class_name

* add check to be sure that wc_wp_theme_get_element_class_name function exists

* Fix Mini Cart Block global styles #7379 (#7515)

* Fix Mini Cart Block global styles #7379

Fix Mini Cart Block global styles

* add font_size

* upload a new build

* Bumping version strings to new version.

Co-authored-by: github-actions <[email protected]>
Co-authored-by: Seghir Nadir <[email protected]>
Co-authored-by: Thomas Roberts <[email protected]>
Co-authored-by: Luigi <[email protected]>
Co-authored-by: Albert Juhé Lluveras <[email protected]>
Co-authored-by: Tung Du <[email protected]>
Co-authored-by: EmptySet-Exe <[email protected]>
Co-authored-by: Niels Lange <[email protected]>
senadir added a commit to senadir/woocommerce-blocks that referenced this pull request Nov 12, 2022
* calculate cart totals afer running extensions

* update totlas call in CartUpdateCustomer

* test that cart is recalcing
senadir added a commit to senadir/woocommerce-blocks that referenced this pull request Nov 12, 2022
* Empty commit for release pull request

* Calculate cart totals after running extensions (woocommerce#7490)

* calculate cart totals afer running extensions

* update totlas call in CartUpdateCustomer

* test that cart is recalcing

* Update changelog in readme

* Add release testing notes

* Update release date in readme

* Bumping version strings to new version.

* update readme

* Update styles of the Filter by Attribute dropdown so it looks good in TT3 (woocommerce#7506)

* Use theme's body background color as the mini cart contents default background color (woocommerce#7510)

Co-authored-by: Albert Juhé Lluveras <[email protected]>

* Price Slider: use `currentColor` for the slider (woocommerce#7527)

* Fixed Price Slider Issue

Located where the price slider was hard coded and replaced it.

* fix CSS lint

* use currentColor instead of hard-coded color for the slider of the Filter By Price block woocommerce#7130

use currentColor instead of hard-coded color for the slider of the Filte By Price block

* use currentColor instead of hard-coded color for the slider of the Filter By Price block woocommerce#7130

use currentColor instead of hard-coded color for the slider of the Filte By Price block

* remove background-color

Co-authored-by: EmptySet-Exe <[email protected]>
Co-authored-by: Niels Lange <[email protected]>

* Make price slider 'inactive' range half transparent so it looks better in dark themes (woocommerce#7525)

* Fix inconsistent button styling with TT3 (woocommerce#7516)

* fix inconsistent button styling with TT3

* use wc_wp_theme_get_element_class_name

* add check to be sure that wc_wp_theme_get_element_class_name function exists

* Fix Mini Cart Block global styles woocommerce#7379 (woocommerce#7515)

* Fix Mini Cart Block global styles woocommerce#7379

Fix Mini Cart Block global styles

* add font_size

* upload a new build

* Bumping version strings to new version.

Co-authored-by: github-actions <[email protected]>
Co-authored-by: Seghir Nadir <[email protected]>
Co-authored-by: Thomas Roberts <[email protected]>
Co-authored-by: Luigi <[email protected]>
Co-authored-by: Albert Juhé Lluveras <[email protected]>
Co-authored-by: Tung Du <[email protected]>
Co-authored-by: EmptySet-Exe <[email protected]>
Co-authored-by: Niels Lange <[email protected]>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
block: checkout Issues related to the checkout block. type: bug The issue/PR concerns a confirmed bug.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants