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

Product button: sync temporary number of items on instantiation #10604

Merged
merged 3 commits into from
Sep 5, 2023

Conversation

luisherranz
Copy link
Collaborator

@luisherranz luisherranz commented Aug 15, 2023

What

I've fixed a sync problem between the number of items in the cart (state.woocommerce.cart) and the number of items that we show in the Product Button (context.woocommerce.temporaryNumberOfItems).

Why

We use two values to be able to trigger an animation when those values are different (for example, when updated from the MiniCart). When using client-side navigation, we want to show the number in state.woocommerce.cart, not in context.woocommerce.temporaryNumberOfItems because the cart is the source of truth. Also, we don't want to trigger an animation, we want to show it right away.

How

I've used a useLayoutEffect to sync the temporaryNumberOfItems with the cart items when the element is instantiated and the cart (state.woocommerce.cart) has already loaded. I don't love it because it means manually syncing both states, which is something we should try to avoid whenever possible.

Anyway, I'll think more about this pattern, but this should fix it for now.

It also adds key's to the Product Collection array.

Screenshots

https://www.loom.com/share/c43275ccb80d4286b96da2c3b75e9280

Testing

  1. Add a Product Collection block
  2. Add items to the cart
  3. Paginate to a different page
  4. Add more items to the cart
  5. Check that when paginating back and forth, it shows the correct number of items
  6. Open the MiniCart block
  7. Change the number of items of products that are in the same page
  8. Check that the animation is triggered
  9. Change the number of items of products that are not in the same page
  10. Navigate to the page that has those products and check that the number of items is correct
  11. Use a cache plugin (or simulate a cached page)
  12. Check everything again

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Checklist

Required:

  • This PR has either a [type] label or a [skip-changelog] label.
  • This PR is assigned to a milestone.

Conditional:

  • This PR has a changelog description (if [skip-changelog] label is not present).
  • This PR adds/removes a feature flag & I've updated this doc.
  • This PR adds/removes an experimental interfaces, and I've updated this doc.
  • This PR has been accessibility tested.
  • This PR has had any necessary documentation added/updated.

Changelog

Fixed a sync problem between the number of items in the car and the number of items that we show in the Product Button

@github-actions
Copy link
Contributor

github-actions bot commented Aug 15, 2023

The release ZIP for this PR is accessible via:

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

Script Dependencies Report

The compare-assets action has detected some changed script dependencies between this branch and trunk. Please review and confirm the following are correct before merging.

Script Handle Added Removed
reviews-frontend.js wc-settings, wp-a11y, wp-api-fetch, wp-compose, wp-element, wp-i18n, wp-is-shallow-equal, wp-polyfill ⚠️
active-filters-frontend.js wc-blocks-data-store, wc-price-format, wc-settings, wp-data, wp-element, wp-html-entities, wp-i18n, wp-is-shallow-equal, wp-polyfill, wp-primitives, wp-url ⚠️
all-products-frontend.js lodash, react, wc-blocks-checkout, wc-blocks-data-store, wc-blocks-registry, wc-blocks-shared-context, wc-blocks-shared-hocs, wc-price-format, wc-settings, wp-a11y, wp-api-fetch, wp-autop, wp-blocks, wp-components, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-hooks, wp-html-entities, wp-i18n, wp-is-shallow-equal, wp-polyfill, wp-primitives, wp-style-engine, wp-url, wp-warning, wp-wordcount ⚠️
attribute-filter-frontend.js lodash, react, wc-blocks-checkout, wc-blocks-data-store, wc-settings, wp-a11y, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-html-entities, wp-i18n, wp-is-shallow-equal, wp-keycodes, wp-polyfill, wp-primitives, wp-url, wp-warning ⚠️
cart-frontend.js lodash, react, wc-blocks-checkout, wc-blocks-data-store, wc-blocks-registry, wc-blocks-shared-context, wc-blocks-shared-hocs, wc-price-format, wc-settings, wp-a11y, wp-api-fetch, wp-autop, wp-blocks, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-hooks, wp-html-entities, wp-i18n, wp-is-shallow-equal, wp-keycodes, wp-plugins, wp-polyfill, wp-primitives, wp-style-engine, wp-url, wp-warning, wp-wordcount ⚠️
checkout-frontend.js lodash, react, wc-blocks-checkout, wc-blocks-data-store, wc-blocks-registry, wc-blocks-shared-hocs, wc-price-format, wc-settings, wp-a11y, wp-api-fetch, wp-autop, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-hooks, wp-html-entities, wp-i18n, wp-is-shallow-equal, wp-keycodes, wp-plugins, wp-polyfill, wp-primitives, wp-url, wp-warning, wp-wordcount ⚠️
filter-wrapper-frontend.js lodash, react, wc-blocks-checkout, wc-blocks-data-store, wc-blocks-registry, wc-price-format, wc-settings, wp-a11y, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-html-entities, wp-i18n, wp-is-shallow-equal, wp-keycodes, wp-polyfill, wp-primitives, wp-style-engine, wp-url, wp-warning ⚠️
mini-cart-frontend.js wc-price-format, wc-settings, wp-i18n, wp-polyfill ⚠️
price-filter-frontend.js react, wc-blocks-data-store, wc-price-format, wc-settings, wp-data, wp-element, wp-i18n, wp-is-shallow-equal, wp-polyfill, wp-url ⚠️
product-gallery-frontend.js wc-interactivity, wp-polyfill ⚠️
rating-filter-frontend.js lodash, react, wc-blocks-checkout, wc-blocks-data-store, wc-settings, wp-a11y, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-i18n, wp-is-shallow-equal, wp-keycodes, wp-polyfill, wp-primitives, wp-url, wp-warning ⚠️
stock-filter-frontend.js lodash, react, wc-blocks-checkout, wc-blocks-data-store, wc-settings, wp-a11y, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-html-entities, wp-i18n, wp-is-shallow-equal, wp-keycodes, wp-polyfill, wp-primitives, wp-url, wp-warning ⚠️
mini-cart-component-frontend.js lodash, react, wc-blocks-checkout, wc-blocks-data-store, wc-blocks-registry, wc-price-format, wc-settings, wp-a11y, wp-autop, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-hooks, wp-html-entities, wp-i18n, wp-is-shallow-equal, wp-keycodes, wp-polyfill, wp-primitives, wp-style-engine, wp-url, wp-warning, wp-wordcount ⚠️
product-button-interactivity-frontend.js lodash, wc-blocks-data-store, wc-interactivity, wp-a11y, wp-compose, wp-data, wp-deprecated, wp-dom, wp-element, wp-i18n, wp-is-shallow-equal, wp-polyfill, wp-primitives, wp-warning ⚠️

This comment was automatically generated by the ./github/compare-assets action.

TypeScript Errors Report

  • Files with errors: 474
  • Total errors: 2255

⚠️ ⚠️ This PR introduces new TS errors on 2 files:

assets/js/interactivity/directives.js

assets/js/interactivity/hooks.js

comments-aggregator

@github-actions
Copy link
Contributor

github-actions bot commented Aug 15, 2023

Size Change: +76 B (0%)

Total Size: 1.43 MB

Filename Size Change
build/product-button-interactivity-frontend.js 9.55 kB +32 B (0%)
build/wc-interactivity.js 10.8 kB +44 B (0%)
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 8.57 kB
build/active-filters-rtl.css 1.99 kB
build/active-filters-wrapper--mini-cart-contents-block/cart-button--mini-cart-contents-block/checkout-but--e791dc6c-style.js 929 B
build/active-filters-wrapper-frontend.js 7.57 kB
build/active-filters-wrapper-rtl.css 1.85 kB
build/active-filters-wrapper.css 1.85 kB
build/active-filters.css 1.99 kB
build/active-filters.js 7.5 kB
build/add-to-cart-form-rtl.css 355 B
build/add-to-cart-form.css 354 B
build/all-products-frontend.js 9.95 kB
build/all-products-rtl.css 4.4 kB
build/all-products.css 4.39 kB
build/all-products.js 41.3 kB
build/all-reviews-rtl.css 1.79 kB
build/all-reviews.css 1.79 kB
build/all-reviews.js 7.76 kB
build/attribute-filter-frontend.js 22.9 kB
build/attribute-filter-rtl.css 4.14 kB
build/attribute-filter-wrapper-frontend.js 8.01 kB
build/attribute-filter-wrapper-rtl.css 4.01 kB
build/attribute-filter-wrapper.css 4.01 kB
build/attribute-filter.css 4.14 kB
build/attribute-filter.js 13.1 kB
build/blocks-checkout.js 35.1 kB
build/breadcrumbs-rtl.css 232 B
build/breadcrumbs.css 232 B
build/breadcrumbs.js 2.27 kB
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.34 kB
build/cart-blocks/cart-accepted-payment-methods-style.js 137 B
build/cart-blocks/cart-cross-sells-frontend.js 250 B
build/cart-blocks/cart-cross-sells-products--product-price-frontend.js 2.89 kB
build/cart-blocks/cart-cross-sells-products-frontend.js 3.72 kB
build/cart-blocks/cart-cross-sells-products-style.js 137 B
build/cart-blocks/cart-cross-sells-style.js 250 B
build/cart-blocks/cart-express-payment--checkout-blocks/express-payment-frontend.js 5 kB
build/cart-blocks/cart-express-payment-frontend.js 711 B
build/cart-blocks/cart-express-payment-style.js 137 B
build/cart-blocks/cart-items-frontend.js 284 B
build/cart-blocks/cart-items-style.js 219 B
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.34 kB
build/cart-blocks/cart-line-items-frontend.js 1.04 kB
build/cart-blocks/cart-line-items-style.js 137 B
build/cart-blocks/cart-order-summary-frontend.js 1.24 kB
build/cart-blocks/cart-order-summary-style.js 318 B
build/cart-blocks/cart-totals-frontend.js 289 B
build/cart-blocks/cart-totals-style.js 228 B
build/cart-blocks/empty-cart-frontend.js 353 B
build/cart-blocks/empty-cart-style.js 345 B
build/cart-blocks/filled-cart-frontend.js 652 B
build/cart-blocks/filled-cart-style.js 309 B
build/cart-blocks/order-summary-coupon-form-frontend.js 1.57 kB
build/cart-blocks/order-summary-coupon-form-style.js 137 B
build/cart-blocks/order-summary-discount-frontend.js 2.04 kB
build/cart-blocks/order-summary-discount-style.js 137 B
build/cart-blocks/order-summary-fee-frontend.js 271 B
build/cart-blocks/order-summary-fee-style.js 137 B
build/cart-blocks/order-summary-heading-frontend.js 326 B
build/cart-blocks/order-summary-heading-style.js 326 B
build/cart-blocks/order-summary-shipping-frontend.js 12 kB
build/cart-blocks/order-summary-shipping-style.js 178 B
build/cart-blocks/order-summary-subtotal-frontend.js 272 B
build/cart-blocks/order-summary-subtotal-style.js 135 B
build/cart-blocks/order-summary-taxes-frontend.js 433 B
build/cart-blocks/order-summary-taxes-style.js 177 B
build/cart-blocks/proceed-to-checkout-frontend.js 1.41 kB
build/cart-blocks/proceed-to-checkout-style.js 1.09 kB
build/cart-frontend.js 29.7 kB
build/cart-rtl.css 9.71 kB
build/cart.css 9.7 kB
build/cart.js 45 kB
build/catalog-sorting-rtl.css 256 B
build/catalog-sorting.css 256 B
build/catalog-sorting.js 1.71 kB
build/checkout-blocks/actions--checkout-blocks/terms-style.js 487 B
build/checkout-blocks/actions-frontend.js 1.81 kB
build/checkout-blocks/actions-style.js 682 B
build/checkout-blocks/billing-address-frontend.js 4.29 kB
build/checkout-blocks/billing-address-style.js 533 B
build/checkout-blocks/contact-information-frontend.js 2.03 kB
build/checkout-blocks/contact-information-style.js 605 B
build/checkout-blocks/express-payment-frontend.js 1.12 kB
build/checkout-blocks/fields-frontend.js 300 B
build/checkout-blocks/fields-style.js 250 B
build/checkout-blocks/order-note-frontend.js 1.1 kB
build/checkout-blocks/order-summary-cart-items-frontend.js 3.64 kB
build/checkout-blocks/order-summary-cart-items-style.js 137 B
build/checkout-blocks/order-summary-coupon-form-frontend.js 1.73 kB
build/checkout-blocks/order-summary-coupon-form-style.js 137 B
build/checkout-blocks/order-summary-discount-frontend.js 2.22 kB
build/checkout-blocks/order-summary-discount-style.js 137 B
build/checkout-blocks/order-summary-fee-frontend.js 274 B
build/checkout-blocks/order-summary-fee-style.js 137 B
build/checkout-blocks/order-summary-frontend.js 1.24 kB
build/checkout-blocks/order-summary-shipping-frontend.js 12 kB
build/checkout-blocks/order-summary-shipping-style.js 137 B
build/checkout-blocks/order-summary-style.js 318 B
build/checkout-blocks/order-summary-subtotal-frontend.js 272 B
build/checkout-blocks/order-summary-subtotal-style.js 137 B
build/checkout-blocks/order-summary-taxes-frontend.js 434 B
build/checkout-blocks/order-summary-taxes-style.js 177 B
build/checkout-blocks/payment-frontend.js 9.13 kB
build/checkout-blocks/payment-style.js 459 B
build/checkout-blocks/pickup-options-frontend.js 4.13 kB
build/checkout-blocks/pickup-options-style.js 440 B
build/checkout-blocks/shipping-address-frontend.js 4.28 kB
build/checkout-blocks/shipping-address-style.js 476 B
build/checkout-blocks/shipping-method-frontend.js 2.59 kB
build/checkout-blocks/shipping-method-style.js 1.35 kB
build/checkout-blocks/shipping-methods-frontend.js 5.68 kB
build/checkout-blocks/shipping-methods-style.js 417 B
build/checkout-blocks/terms-frontend.js 1.51 kB
build/checkout-blocks/terms-style.js 672 B
build/checkout-blocks/totals-frontend.js 333 B
build/checkout-blocks/totals-style.js 275 B
build/checkout-frontend.js 31.6 kB
build/checkout-rtl.css 9.08 kB
build/checkout.css 9.07 kB
build/checkout.js 47.7 kB
build/combobox-control-style-rtl.css 585 B
build/combobox-control-style.css 585 B
build/custom-select-control-style-rtl.css 479 B
build/custom-select-control-style.css 479 B
build/customer-account-rtl.css 388 B
build/customer-account.css 387 B
build/customer-account.js 3.18 kB
build/featured-category-rtl.css 971 B
build/featured-category.css 970 B
build/featured-category.js 14.9 kB
build/featured-product-rtl.css 1.02 kB
build/featured-product.css 1.02 kB
build/featured-product.js 15.1 kB
build/filter-wrapper-frontend.js 14.1 kB
build/filter-wrapper-rtl.css 375 B
build/filter-wrapper.css 375 B
build/filter-wrapper.js 2.39 kB
build/form-token-field-style-rtl.css 1.23 kB
build/form-token-field-style.css 1.22 kB
build/handpicked-products.js 7.97 kB
build/legacy-template-rtl.css 238 B
build/legacy-template.css 238 B
build/legacy-template.js 8.14 kB
build/mini-cart-component-frontend.js 30.7 kB
build/mini-cart-contents-block/cart-button--mini-cart-contents-block/checkout-button--mini-cart-contents---358acf4e-style.js 248 B
build/mini-cart-contents-block/cart-button--mini-cart-contents-block/checkout-button--mini-cart-contents---a5b7fa58-style.js 930 B
build/mini-cart-contents-block/cart-button-frontend.js 1.69 kB
build/mini-cart-contents-block/cart-button-style.js 385 B
build/mini-cart-contents-block/checkout-button-frontend.js 1.77 kB
build/mini-cart-contents-block/checkout-button-style.js 466 B
build/mini-cart-contents-block/empty-cart-frontend.js 359 B
build/mini-cart-contents-block/empty-cart-style.js 356 B
build/mini-cart-contents-block/filled-cart-frontend.js 267 B
build/mini-cart-contents-block/filled-cart-style.js 267 B
build/mini-cart-contents-block/footer-frontend.js 3.77 kB
build/mini-cart-contents-block/footer-rtl.css 400 B
build/mini-cart-contents-block/footer-style.js 2.35 kB
build/mini-cart-contents-block/footer.css 400 B
build/mini-cart-contents-block/items-frontend.js 228 B
build/mini-cart-contents-block/items-style.js 228 B
build/mini-cart-contents-block/products-table--product-image--product-title-style.js 316 B
build/mini-cart-contents-block/products-table-frontend.js 549 B
build/mini-cart-contents-block/products-table-rtl.css 2.12 kB
build/mini-cart-contents-block/products-table-style.js 5.32 kB
build/mini-cart-contents-block/products-table.css 2.11 kB
build/mini-cart-contents-block/shopping-button-frontend.js 489 B
build/mini-cart-contents-block/shopping-button-style.js 396 B
build/mini-cart-contents-block/title-frontend.js 1.86 kB
build/mini-cart-contents-block/title-items-counter-frontend.js 1.58 kB
build/mini-cart-contents-block/title-items-counter-style.js 302 B
build/mini-cart-contents-block/title-label-frontend.js 1.51 kB
build/mini-cart-contents-block/title-label-style.js 301 B
build/mini-cart-contents-block/title-style.js 438 B
build/mini-cart-contents-rtl.css 2.66 kB
build/mini-cart-contents.css 2.65 kB
build/mini-cart-contents.js 17.6 kB
build/mini-cart-frontend.js 2.79 kB
build/mini-cart-rtl.css 2.56 kB
build/mini-cart.css 2.56 kB
build/mini-cart.js 6.35 kB
build/packages-style-rtl.css 3.55 kB
build/packages-style.css 3.55 kB
build/price-filter-frontend.js 14.5 kB
build/price-filter-rtl.css 2.69 kB
build/price-filter-wrapper-frontend.js 8.57 kB
build/price-filter-wrapper-rtl.css 2.55 kB
build/price-filter-wrapper.css 2.54 kB
build/price-filter.css 2.69 kB
build/price-filter.js 8.53 kB
build/price-format.js 1.15 kB
build/product-add-to-cart--product-average-rating--product-button--product-image--product-price--product---1d132d69.js 273 B
build/product-add-to-cart--product-button--product-rating--product-rating-counter--product-rating-stars.js 150 B
build/product-add-to-cart--product-image--product-title.js 319 B
build/product-add-to-cart-frontend.js 8.5 kB
build/product-add-to-cart-rtl.css 1.35 kB
build/product-add-to-cart.css 1.36 kB
build/product-add-to-cart.js 8.55 kB
build/product-average-rating--product-button--product-image--product-price--product-rating--product-ratin--e23975b5.js 933 B
build/product-average-rating-frontend.js 1.71 kB
build/product-average-rating.js 400 B
build/product-best-sellers.js 8.32 kB
build/product-button-frontend.js 4.88 kB
build/product-button-rtl.css 1.12 kB
build/product-button.css 1.11 kB
build/product-button.js 3.88 kB
build/product-categories-rtl.css 651 B
build/product-categories.css 649 B
build/product-categories.js 2.72 kB
build/product-category.js 9.29 kB
build/product-collection.js 14.9 kB
build/product-details-rtl.css 394 B
build/product-details.css 391 B
build/product-gallery-frontend.js 594 B
build/product-gallery-large-image-rtl.css 295 B
build/product-gallery-large-image.css 295 B
build/product-gallery-large-image.js 2.03 kB
build/product-gallery-pager-rtl.css 289 B
build/product-gallery-pager.css 289 B
build/product-gallery-pager.js 3.5 kB
build/product-gallery-rtl.css 464 B
build/product-gallery-thumbnails-rtl.css 272 B
build/product-gallery-thumbnails.css 271 B
build/product-gallery-thumbnails.js 3.91 kB
build/product-gallery.css 462 B
build/product-gallery.js 7.54 kB
build/product-image-frontend.js 2.65 kB
build/product-image-gallery-rtl.css 304 B
build/product-image-gallery.css 303 B
build/product-image-rtl.css 922 B
build/product-image.css 920 B
build/product-image.js 1.51 kB
build/product-new.js 8.6 kB
build/product-on-sale.js 8.61 kB
build/product-price-frontend.js 247 B
build/product-price-rtl.css 667 B
build/product-price.css 665 B
build/product-price.js 1.65 kB
build/product-query-rtl.css 347 B
build/product-query.css 347 B
build/product-query.js 13.1 kB
build/product-rating-counter-frontend.js 2.01 kB
build/product-rating-counter.js 688 B
build/product-rating-frontend.js 2.36 kB
build/product-rating-rtl.css 244 B
build/product-rating-stars-frontend.js 2.25 kB
build/product-rating-stars-rtl.css 895 B
build/product-rating-stars.css 897 B
build/product-rating-stars.js 938 B
build/product-rating.css 244 B
build/product-rating.js 1.04 kB
build/product-results-count-rtl.css 228 B
build/product-results-count.css 228 B
build/product-results-count.js 1.66 kB
build/product-reviews-rtl.css 456 B
build/product-reviews.css 455 B
build/product-sale-badge-frontend.js 1.8 kB
build/product-sale-badge-rtl.css 369 B
build/product-sale-badge.css 370 B
build/product-sale-badge.js 671 B
build/product-search-rtl.css 415 B
build/product-search.css 415 B
build/product-search.js 2.63 kB
build/product-sku-frontend.js 1.84 kB
build/product-sku-rtl.css 237 B
build/product-sku.css 237 B
build/product-sku.js 521 B
build/product-stock-indicator-frontend.js 2.02 kB
build/product-stock-indicator-rtl.css 229 B
build/product-stock-indicator.css 229 B
build/product-stock-indicator.js 707 B
build/product-summary-frontend.js 2.18 kB
build/product-summary-rtl.css 546 B
build/product-summary.css 546 B
build/product-summary.js 917 B
build/product-tag.js 8.61 kB
build/product-template-rtl.css 418 B
build/product-template.css 418 B
build/product-template.js 2.87 kB
build/product-title-frontend.js 2.21 kB
build/product-title-rtl.css 688 B
build/product-title.css 689 B
build/product-title.js 963 B
build/product-top-rated.js 8.86 kB
build/products-by-attribute.js 9.63 kB
build/rating-filter-frontend.js 21.4 kB
build/rating-filter-rtl.css 4.2 kB
build/rating-filter-wrapper-frontend.js 6.62 kB
build/rating-filter-wrapper-rtl.css 4.07 kB
build/rating-filter-wrapper.css 4.07 kB
build/rating-filter.css 4.19 kB
build/rating-filter.js 6.88 kB
build/reviews-by-category-rtl.css 1.79 kB
build/reviews-by-category.css 1.79 kB
build/reviews-by-category.js 12 kB
build/reviews-by-product-rtl.css 1.79 kB
build/reviews-by-product.css 1.79 kB
build/reviews-by-product.js 13.1 kB
build/reviews-frontend.js 7.07 kB
build/single-product-rtl.css 375 B
build/single-product.css 375 B
build/single-product.js 11.2 kB
build/snackbar-notice-style-rtl.css 672 B
build/snackbar-notice-style.css 671 B
build/stock-filter-frontend.js 21.6 kB
build/stock-filter-rtl.css 4.01 kB
build/stock-filter-wrapper-frontend.js 6.82 kB
build/stock-filter-wrapper-rtl.css 3.88 kB
build/stock-filter-wrapper.css 3.88 kB
build/stock-filter.css 4.01 kB
build/stock-filter.js 7.6 kB
build/store-notices.js 1.69 kB
build/vendors--active-filters-wrapper--attribute-filter-wrapper--mini-cart-contents-block/cart-button--mi--d6bb29e6-style.js 606 B
build/vendors--attribute-filter-wrapper--cart-blocks/order-summary-coupon-form--cart-blocks/order-summary--48e1e4bb-frontend.js 6.84 kB
build/vendors--attribute-filter-wrapper--rating-filter-wrapper--stock-filter-wrapper-frontend.js 8.31 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/cart-line-items--cart-blocks/cart-order--3c5fe802-frontend.js 5.29 kB
build/vendors--cart-blocks/cart-line-items--checkout-blocks/order-summary-cart-items--mini-cart-contents---233ab542-frontend.js 3.55 kB
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--decc3dc6-frontend.js 19.4 kB
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/order-summary-shipping--checkout-block--24d3fc0c-frontend.js 8.22 kB
build/vendors--cart-blocks/proceed-to-checkout-style.js 178 B
build/vendors--checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 5.6 kB
build/vendors--checkout-blocks/shipping-method-frontend.js 12.4 kB
build/vendors--checkout-blocks/shipping-method-style.js 11.7 kB
build/vendors--mini-cart-contents-block/products-table--price-filter-wrapper--product-price-style.js 5.27 kB
build/vendors--mini-cart-contents-block/products-table-style.js 3.16 kB
build/vendors--product-add-to-cart-frontend.js 7.52 kB
build/wc-all-blocks-style-rtl.css 29.2 kB
build/wc-all-blocks-style.css 29.2 kB
build/wc-blocks-classic-template-revert-button-style-rtl.css 237 B
build/wc-blocks-classic-template-revert-button-style.css 236 B
build/wc-blocks-classic-template-revert-button.js 1.53 kB
build/wc-blocks-data.js 21.9 kB
build/wc-blocks-editor-style-rtl.css 6.44 kB
build/wc-blocks-editor-style.css 6.44 kB
build/wc-blocks-google-analytics.js 1.55 kB
build/wc-blocks-middleware.js 934 B
build/wc-blocks-registry.js 3.19 kB
build/wc-blocks-rtl.css 2.46 kB
build/wc-blocks-shared-context.js 1.1 kB
build/wc-blocks-shared-hocs.js 1.63 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 65.5 kB
build/wc-blocks.css 2.46 kB
build/wc-blocks.js 2.62 kB
build/wc-payment-method-bacs.js 817 B
build/wc-payment-method-cheque.js 813 B
build/wc-payment-method-cod.js 914 B
build/wc-payment-method-paypal.js 852 B
build/wc-settings.js 2.68 kB
build/wc-shipping-method-pickup-location.js 30.4 kB

compressed-size-action

Copy link
Contributor

@imanish003 imanish003 left a comment

Choose a reason for hiding this comment

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

Hey @luisherranz,

Appreciate the prompt resolution of the issue. I've tested the modifications, and it seems the problem is resolved 🚀.

Additionally, the code changes look good to me. As I'm still acquainting myself with the intricacies of coding related to the Interactivity API, it would be helpful if either @DAreRodz or @gigitux could review the code as well.

Thanks! 🙌🏻

@luisherranz
Copy link
Collaborator Author

I don't love it because it means manually syncing both states, which is something we should try to avoid whenever possible.

I guess this is ok to merge because it fixes the pagination issue, but we need to make state.woocommerce.cart the source of truth at some point (i.e., the one that reads on idle) or we're going to keep bumping into syncing problems like this:

Screen.Capture.on.2023-08-16.at.10-21-45.mp4

@luisherranz
Copy link
Collaborator Author

By the way, I just checked and it seems to work fine with the Products (beta) block as well because the Products Template block is the same, but it'd be great if someone could confirm this 🙂

@gigitux
Copy link
Contributor

gigitux commented Aug 16, 2023

By the way, I just checked and it seems to work fine with the Products (beta) block as well because the Products Template block is the same, but it'd be great if someone could confirm this 🙂

I tested with the Products beta block and it doesn't work:

Screen.Capture.on.2023-08-16.at.11-16-12.mp4

On the Products (beta) block, the Products Template block is just a variation of the Post Template core block. (source code). So this means that the data-wc-key isn't added. I suspect that adding this attribute to the post template could be complex.

Since we will migrate all the Products (beta) blocks to the Product Collection and deprecate the Products (beta) block, I would enable #10200 only for the Product Collection.

Thoughts? cc @kmanijak @imanish003

@luisherranz
Copy link
Collaborator Author

Ok. Thanks for checking this out, @gigitux 🙂

@imanish003
Copy link
Contributor

imanish003 commented Aug 16, 2023

Hey @gigitux,

Since we will migrate all the Products (beta) blocks to the Product Collection and deprecate the Products (beta) block, I would enable #10200 only for the Product Collection.

If it's not feasible to include data-wc-key in the post template, then it would be logical to enable it solely for the Product Collection block.

@luisherranz FYI Products (Beta) block is a variation of Query Loop block. It uses variation of post-template block, as you can see here. Therefore, I am not sure how we can add data-wc-key to it. The PHP file of post-template can be found here on GB repo.

If it’s not possible to add data-wc-key to Post Template, then:

@luisherranz
Copy link
Collaborator Author

I am not sure how we can add data-wc-key to it. The PHP file of post-template can be found here on GB repo

I'm not saying that you should, but in theory you could add it using the WP_HTML_Tag_Processor and the render_block_core/post-template filter, although I'm not sure where you could get the post id.

Anyway, I think it'd be simpler to add it to the new block only if the old one is going to be deprecated soon.

We are going to release Product Collection block in 1-2 weeks.

By the way, we still need to figure out the (auto) opt-in/out mechanism.

@gigitux gigitux added the type: enhancement The issue is a request for an enhancement. label Aug 16, 2023
@imanish003
Copy link
Contributor

@luisherranz

By the way, we still need to figure out the (auto) opt-in/out mechanism.

May I know what you mean by (auto) opt-in/out mechanism.? 🤔

@gigitux
Copy link
Contributor

gigitux commented Aug 16, 2023

I am not sure how we can add data-wc-key to it. The PHP file of post-template can be found here on GB repo

I'm not saying that you should, but in theory you could add it using the WP_HTML_Tag_Processor and the render_block_core/post-template filter, although I'm not sure where you could get the post id.

Yeah, we can follow this approach, but Product Collection will be released soon so I don't see any advantages to do this kind of work.

Anyway, I think it'd be simpler to add it to the new block only if the old one is going to be deprecated soon.

We are going to release Product Collection block in 1-2 weeks.

By the way, we still need to figure out the (auto) opt-in/out mechanism.

Can you expand this?

@luisherranz
Copy link
Collaborator Author

The client-side router knows how to hydrate interactive blocks that use the Interactivity API (like the Product Button block), but it doesn't know how to hydrate interactive blocks that rely on DOM ready events or other methods for hydration. Therefore, if people add external interactive blocks to the Product Template, they won't work after the first client-side navigation.

We need to figure out an opt-in or an opt-out mechanism to enable/disable the client-side navigation. It can be manual or we may try to do something that is more automatic. Either way, the site owner should be able to overwrite its value, so probably the options should be "on", "auto" and "off".

We could start with an "off" by default that users can turn "on" (opt-in). Then try to figure out if there's a way to make it automatic in a way that is reliable, and if there is, switch to "auto" by default (opt-out).

@imanish003 imanish003 self-requested a review August 17, 2023 04:54
Copy link
Collaborator

@DAreRodz DAreRodz left a comment

Choose a reason for hiding this comment

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

I see it great codewise. 😄 ✅

BTW, @luisherranz, what do you think of moving the layout-init logic to the regular init directive in the future? E.g., init could also accept an object, which would contain the callback path and if it's going to do a layout change.

<button data-wc-init='{ "path": "init.ItemsOnLoad", "layout": true }'>

I'm aware that this would make directives bigger; I'm just curious about your opinion on this.

@github-actions github-actions bot added this to the 11.0.0 milestone Aug 18, 2023
@DAreRodz DAreRodz self-requested a review August 18, 2023 10:17
@DAreRodz
Copy link
Collaborator

@gigitux @imanish003, regarding the (auto) opt-in/out mechanism and the data-wc-key issue, are they blockers that prevent merging this PR? 🤔

@luisherranz
Copy link
Collaborator Author

I'm just curious about your opinion on this.

It's an interesting alternative. Would you mind sharing it in this discussion?

@github-actions
Copy link
Contributor

This PR has been marked as stale because it has not seen any activity within the past 7 days. Our team uses this tool to help surface pull requests that have slipped through review.

If deemed still relevant, the pr can be kept active by ensuring it's up to date with the main branch and removing the stale label.

@github-actions github-actions bot added the status: stale Stale issues and PRs have had no updates for 60 days. label Aug 26, 2023
@nefeline nefeline removed this from the 11.0.0 milestone Aug 28, 2023
@nefeline nefeline added this to the 11.1.0 milestone Aug 28, 2023
@gigitux
Copy link
Contributor

gigitux commented Aug 28, 2023

I think that we can merge this PR, right? cc @imanish003 @luisherranz

@github-actions github-actions bot removed the status: stale Stale issues and PRs have had no updates for 60 days. label Aug 28, 2023
@imanish003
Copy link
Contributor

I think that we can merge this PR, right? cc @imanish003 @luisherranz

I think so. I plan to review it once more today to ensure that everything is functioning as intended.

Copy link
Contributor

@imanish003 imanish003 left a comment

Choose a reason for hiding this comment

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

I've tested the fix, and I can confirm that everything is working as expected. I greatly appreciate the video explanation, @luisherranz. It was incredibly helpful in comprehending the modifications made in this pull request. 🚀

@github-actions
Copy link
Contributor

github-actions bot commented Sep 5, 2023

This PR has been marked as stale because it has not seen any activity within the past 7 days. Our team uses this tool to help surface pull requests that have slipped through review.

If deemed still relevant, the pr can be kept active by ensuring it's up to date with the main branch and removing the stale label.

@github-actions github-actions bot added the status: stale Stale issues and PRs have had no updates for 60 days. label Sep 5, 2023
@luisherranz
Copy link
Collaborator Author

I think that we can merge this PR, right? cc @imanish003 @luisherranz

It's fine to me. We will improve it in the future.

@imanish003
Copy link
Contributor

I think that we can merge this PR, right? cc @imanish003 @luisherranz

It's fine to me. We will improve it in the future.

@luisherranz I believe we're ready to proceed with merging this PR. If you're in agreement, could you please merge it?

@luisherranz
Copy link
Collaborator Author

Oh, I didn't realize it had to be me the one merging it. I'll merge it now.

@luisherranz luisherranz merged commit 24c3efb into trunk Sep 5, 2023
35 checks passed
@luisherranz luisherranz deleted the fix/add-to-cart-using-temp-value-on-init branch September 5, 2023 12:37
@tarhi-saad tarhi-saad added type: bug The issue/PR concerns a confirmed bug. and removed type: enhancement The issue is a request for an enhancement. labels Sep 11, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
status: stale Stale issues and PRs have had no updates for 60 days. type: bug The issue/PR concerns a confirmed bug.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants