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

Fix Stylebook filter blocks preview #8295

Closed
wants to merge 6 commits into from

Conversation

gigitux
Copy link
Contributor

@gigitux gigitux commented Jan 25, 2023

This PR fixes the filter blocks preview on Stylebook. The error was caused by the filter wrapper and the logic to render the notice. It isn't necessary to render the notice when the isPreview attribute is set to true.

All the filter blocks have the isPreview attribute, except for the Price Filter block. This PR fixes this too.

Fixes #8175

Screenshots

Before After
image image
image image
image image

Testing

Automated Tests

  • Changes in this PR are covered by Automated Tests.
    • Unit tests
    • E2E tests

User Facing Testing

  1. With WordPress 6.2 (or a previous version with GB installed) and a block theme like Twenty Twenty-Three enabled.
  2. Go to Appearance > Editor and edit a template.
  3. In the toolbar, select Styles (black and white circle) and then, Open Style Book (eye icon).
  4. Go to the WooCommerce tab.
  5. Be sure that the Filter Attributes, Filter Price and Filter Stock blocks preview don't have any notice
  • Do not include in the Testing Notes

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Performance Impact

Changelog

Filter blocks: Fix preview on Stylebook

opr and others added 6 commits January 19, 2023 17:41
This is because by the time we reach this line, innerBlocks will be an empty array (or we wouldn't make it this far) and if nextBlocks contains ANY items it will, by definition be unequal, so a length check is simpler and more performant. Also we can remove the dependence on yet another lodash function by doing it this way.
@gigitux gigitux added type: bug The issue/PR concerns a confirmed bug. block-type: filter blocks Issues related to all of the filter blocks. labels Jan 25, 2023
@gigitux gigitux self-assigned this Jan 25, 2023
@gigitux gigitux marked this pull request as draft January 25, 2023 17:55
@woocommercebot woocommercebot requested review from a team and nefeline and removed request for a team January 25, 2023 17:55
@github-actions
Copy link
Contributor

github-actions bot commented Jan 25, 2023

The release ZIP for this PR is accessible via:

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

Script Dependencies Report

There is no changed script dependency between this branch and trunk.

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

TypeScript Errors Report

  • Files with errors: 496
  • Total errors: 2256

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

assets/js/blocks/cart-checkout-shared/use-forced-layout.ts

comments-aggregator

@github-actions
Copy link
Contributor

Size Change: +66 B (0%)

Total Size: 1.09 MB

Filename Size Change
build/active-filters.js 7.33 kB +12 B (0%)
build/attribute-filter.js 12.4 kB +10 B (0%)
build/cart.js 47.7 kB +2 B (0%)
build/checkout.js 43.5 kB +3 B (0%)
build/filter-wrapper-frontend.js 14 kB +1 B (0%)
build/mini-cart-contents.js 17 kB -4 B (0%)
build/price-filter-frontend.js 13.9 kB +9 B (0%)
build/price-filter-wrapper-frontend.js 7.01 kB +8 B (0%)
build/price-filter.js 8.42 kB +18 B (0%)
build/stock-filter.js 8.18 kB +7 B (0%)
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 7.99 kB
build/active-filters-wrapper-frontend.js 6 kB
build/all-products-frontend.js 11.7 kB
build/all-products.js 33.6 kB
build/all-reviews.js 7.66 kB
build/attribute-filter-frontend.js 22.9 kB
build/attribute-filter-wrapper-frontend.js 7.68 kB
build/blocks-checkout.js 41 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-frontend.js 9.64 kB
build/cart-blocks/cart-express-payment--checkout-blocks/express-payment-frontend.js 5.08 kB
build/cart-blocks/cart-express-payment-frontend.js 720 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.34 kB
build/cart-blocks/cart-line-items-frontend.js 1.06 kB
build/cart-blocks/cart-order-summary-frontend.js 1.24 kB
build/cart-blocks/cart-totals-frontend.js 321 B
build/cart-blocks/empty-cart-frontend.js 345 B
build/cart-blocks/filled-cart-frontend.js 655 B
build/cart-blocks/order-summary-coupon-form-frontend.js 1.69 kB
build/cart-blocks/order-summary-discount-frontend.js 2.12 kB
build/cart-blocks/order-summary-fee-frontend.js 274 B
build/cart-blocks/order-summary-heading-frontend.js 455 B
build/cart-blocks/order-summary-shipping-frontend.js 14.9 kB
build/cart-blocks/order-summary-subtotal-frontend.js 275 B
build/cart-blocks/order-summary-taxes-frontend.js 435 B
build/cart-blocks/proceed-to-checkout-frontend.js 1.24 kB
build/cart-frontend.js 28.7 kB
build/catalog-sorting.js 1.71 kB
build/checkout-blocks/actions-frontend.js 1.86 kB
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 3.92 kB
build/checkout-blocks/billing-address-frontend.js 1.16 kB
build/checkout-blocks/contact-information-frontend.js 2.05 kB
build/checkout-blocks/express-payment-frontend.js 1.13 kB
build/checkout-blocks/fields-frontend.js 344 B
build/checkout-blocks/order-note-frontend.js 1.14 kB
build/checkout-blocks/order-summary-cart-items-frontend.js 3.68 kB
build/checkout-blocks/order-summary-coupon-form-frontend.js 1.85 kB
build/checkout-blocks/order-summary-discount-frontend.js 2.29 kB
build/checkout-blocks/order-summary-fee-frontend.js 277 B
build/checkout-blocks/order-summary-frontend.js 1.24 kB
build/checkout-blocks/order-summary-shipping-frontend.js 14.9 kB
build/checkout-blocks/order-summary-subtotal-frontend.js 275 B
build/checkout-blocks/order-summary-taxes-frontend.js 434 B
build/checkout-blocks/payment-frontend.js 8.32 kB
build/checkout-blocks/pickup-options-frontend.js 2.81 kB
build/checkout-blocks/shipping-address-frontend.js 1.12 kB
build/checkout-blocks/shipping-method-frontend.js 2.27 kB
build/checkout-blocks/shipping-methods-frontend.js 4.83 kB
build/checkout-blocks/terms-frontend.js 1.56 kB
build/checkout-blocks/totals-frontend.js 324 B
build/checkout-frontend.js 30.2 kB
build/customer-account.js 3.08 kB
build/featured-category.js 13.1 kB
build/featured-product.js 13.4 kB
build/filter-wrapper.js 2.39 kB
build/general-style-rtl.css 1.31 kB
build/general-style.css 1.31 kB
build/handpicked-products.js 7.24 kB
build/legacy-template.js 2.87 kB
build/mini-cart-component-frontend.js 27.8 kB
build/mini-cart-contents-block/empty-cart-frontend.js 366 B
build/mini-cart-contents-block/filled-cart-frontend.js 268 B
build/mini-cart-contents-block/footer-frontend.js 2.82 kB
build/mini-cart-contents-block/items-frontend.js 237 B
build/mini-cart-contents-block/products-table-frontend.js 590 B
build/mini-cart-contents-block/shopping-button-frontend.js 313 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/mini-cart-frontend.js 2 kB
build/mini-cart.js 4.29 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 226 B
build/product-add-to-cart--product-button--product-image--product-rating--product-title.js 151 B
build/product-add-to-cart-frontend.js 6.72 kB
build/product-add-to-cart.js 8.59 kB
build/product-best-sellers.js 7.61 kB
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 439 B
build/product-button--product-image--product-price--product-rating--product-sale-badge--product-title.js 257 B
build/product-button-frontend.js 2.14 kB
build/product-button.js 3.97 kB
build/product-categories.js 2.36 kB
build/product-category-list-frontend.js 1.14 kB
build/product-category-list.js 503 B
build/product-category.js 8.6 kB
build/product-image-frontend.js 2.15 kB
build/product-image.js 4.07 kB
build/product-new.js 7.6 kB
build/product-on-sale.js 7.92 kB
build/product-price-frontend.js 2.23 kB
build/product-price.js 1.58 kB
build/product-query.js 5.99 kB
build/product-rating-frontend.js 1.57 kB
build/product-rating.js 920 B
build/product-results-count.js 1.67 kB
build/product-sale-badge-frontend.js 1.38 kB
build/product-sale-badge.js 814 B
build/product-search.js 2.61 kB
build/product-sku-frontend.js 629 B
build/product-sku.js 377 B
build/product-stock-indicator-frontend.js 1.27 kB
build/product-stock-indicator.js 645 B
build/product-summary-frontend.js 1.53 kB
build/product-summary.js 920 B
build/product-tag-list-frontend.js 1.13 kB
build/product-tag-list.js 496 B
build/product-tag.js 8.08 kB
build/product-title-frontend.js 1.57 kB
build/product-title.js 3.44 kB
build/product-top-rated.js 7.84 kB
build/products-by-attribute.js 8.52 kB
build/rating-filter-frontend.js 21.4 kB
build/rating-filter-wrapper-frontend.js 6.21 kB
build/rating-filter.js 7.45 kB
build/reviews-by-category.js 11.2 kB
build/reviews-by-product.js 12.3 kB
build/reviews-frontend.js 7.15 kB
build/single-product-frontend.js 17.8 kB
build/single-product.js 9.99 kB
build/stock-filter-frontend.js 21.1 kB
build/stock-filter-wrapper-frontend.js 5.88 kB
build/store-notices.js 1.65 kB
build/vendors--attribute-filter-wrapper--cart-blocks/cart-cross-sells-products--cart-blocks/order-summary--82e4ed06-frontend.js 6.86 kB
build/vendors--attribute-filter-wrapper--rating-filter-wrapper--stock-filter-wrapper-frontend.js 7.69 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/cart-line-items--cart-blocks/cart-order--3c5fe802-frontend.js 5.26 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/order-summary-shipping--checkout-blocks--18f9376a-frontend.js 19.4 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.83 kB
build/vendors--checkout-blocks/shipping-method-frontend.js 12 kB
build/vendors--checkout-blocks/shipping-methods-frontend.js 9.48 kB
build/wc-blocks-data.js 22 kB
build/wc-blocks-editor-style-rtl.css 5.47 kB
build/wc-blocks-editor-style.css 5.47 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 933 B
build/wc-blocks-registry.js 3.16 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.73 kB
build/wc-blocks-style-rtl.css 25.7 kB
build/wc-blocks-style.css 25.6 kB
build/wc-blocks-vendors-style-rtl.css 1.96 kB
build/wc-blocks-vendors-style.css 1.96 kB
build/wc-blocks-vendors.js 64.2 kB
build/wc-blocks.js 2.63 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
build/wc-shipping-method-pickup-location.js 29.7 kB

compressed-size-action

@nefeline
Copy link
Contributor

Thanks for working on this @gigitux !

I see the PR was moved back to draft, but sharing my insights as I worked through this issue last week:

The error was caused by the filter wrapper and the logic to render the notice. It isn't necessary to render the notice when the isPreview attribute is set to true.

IMO hiding the notice is not the solution for this problem, as we are still rendering the older version of these blocks on Stylebook. In other words, the preview displayed in the editor currently differs from what is displayed on Stylebook.

I've explored many different avenues for solving this last week. Still, I couldn't find a path that wouldn't involve a bigger change, or even a refactor of these blocks given the way they are currently structured: I was curious about what would be your approach/thoughts on this as the Porter this week: looks like we are converging to the same conclusions regarding the need of a bigger change.

@gigitux
Copy link
Contributor Author

gigitux commented Jan 25, 2023

Hi @nefeline, thanks for your great feedback!
This is the reason why I put the PR in draft status :'(

I will explain what I discovered, I will use the Filter by Stock Controls as an example, but the concept is the same for all the blocks.

I noticed that the Style Book previews the Filter by Stock Controls. In the editor, Filter by Stock Controls corresponds to the checkbox list. The wrapper (that it is another block) adds the header (source code).

We have two options:

  • hide the header in the edit.js of the Filter by Stock Controls, so it will be visible the checkbox list.
  • hide the preview of the Filter by Stock Controls and show the preview of the Filter Wrapper block (I don't understand why the filter wrapper isn't rendered on the Style Book, also I don't think that it supports multiple variations of the same block).

image
image

Also, I noticed another issue. At the current stage, some blocks are ready to use the example property in the block.json , while others no. So, for example, the filter blocks (except for the Filter Attribute) fetch the WP Rest API to get the data. Theoretically, the blocks in “preview mode” should use the attributes in the examples property. Rewrite the logic to use the attributes in the example property could require some time. Should we do this in this first iteration or should we postpone this?

@gigitux
Copy link
Contributor Author

gigitux commented Jan 26, 2023

I think that the right approach is to show the preview of the Filter Wrapper. Unfortunately, it seems that Style Book doesn't support the preview of multiple variations of the same block. I opened an issue WordPress/gutenberg#47443

cc @Aljullu

@gigitux
Copy link
Contributor Author

gigitux commented Jan 30, 2023

Since that #8309 has been merged, I'm going to close this PR.

@gigitux gigitux closed this Jan 30, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
block-type: filter blocks Issues related to all of the filter blocks. type: bug The issue/PR concerns a confirmed bug.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Style Book: old versions of the Filter by Attribute, Stock and Price are displayed
4 participants