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

Style the Filter by Price block based on the wrapper width #6943

Merged
merged 4 commits into from
Aug 24, 2022
Merged

Conversation

dinhtungdu
Copy link
Member

Fixes #6942

This PR calculates the wrapper width on render, then use that width to control the inline layout of the price silder.

  • When the width of the wrapper is ≤ 300px, the Inline input fields is forced disabled.
  • When the Inline input fields is enabled or the wrapper width ≤ 300px, the input field width is always set to 60px.

These additional conditions make the price slider works as expected with any screen size.

Accessibility

Other Checks

  • 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.
  • I tagged two reviewers because this PR makes queries to the database or I think it might have some security impact.

Screenshots

Before After
image image

Testing

Automated Tests

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

User Facing Testing

  1. Before checking out this PR, create a new page then add a 3-7 columns block.
  2. Add the Filter by price block to the smaller column, and All products block to the bigger column.
  3. On the front end, collapse the browser windows to make the small column width less than 300px.
  4. See the issue as captured in the screenshot above.
  5. Check out this PR and built.
  6. On the frontend, reload the page, ensure the width of the smaller column is less than 300px.
  7. See the input fields now are below the slider and have the width set to 60px.
  • Do not include in the Testing Notes

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Performance Impact

N/a

Changelog

N/a

@dinhtungdu dinhtungdu self-assigned this Aug 19, 2022
@rubikuserbot rubikuserbot requested review from a team and danielwrobert and removed request for a team August 19, 2022 10:12
@dinhtungdu dinhtungdu added status: needs review type: bug The issue/PR concerns a confirmed bug. skip-changelog PRs that you don't want to appear in the changelog. block: filter by price Issues related to the Filter by Price block. labels Aug 19, 2022
@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-6943.zip

@github-actions
Copy link
Contributor

github-actions bot commented Aug 19, 2022

Size Change: +707 B (0%)

Total Size: 868 kB

Filename Size Change
build/active-filters.js 7.99 kB -1 B (0%)
build/all-products.js 33.7 kB +8 B (0%)
build/all-reviews.js 7.79 kB -3 B (0%)
build/attribute-filter.js 12.9 kB +1 B (0%)
build/cart.js 41.3 kB +7 B (0%)
build/checkout.js 42.6 kB +4 B (0%)
build/mini-cart-contents.js 22.9 kB +1 B (0%)
build/mini-cart.js 4.58 kB -1 B (0%)
build/price-filter-frontend.js 13.3 kB +88 B (+1%)
build/price-filter.js 9.17 kB +80 B (+1%)
build/product-add-to-cart--product-button--product-image--product-title.js 2.66 kB -1 B (0%)
build/product-add-to-cart.js 6.89 kB +2 B (0%)
build/product-button--product-image--product-rating--product-sale-badge--product-title.js 300 B -1 B (0%)
build/product-rating.js 742 B -1 B (0%)
build/product-search.js 2.64 kB +464 B (+21%) 🚨
build/product-sku.js 379 B -2 B (-1%)
build/product-stock-indicator.js 624 B -2 B (0%)
build/product-summary.js 920 B -1 B (0%)
build/product-tag-list.js 498 B -2 B (0%)
build/reviews-by-category.js 11.2 kB -2 B (0%)
build/reviews-by-product.js 12.3 kB -3 B (0%)
build/single-product.js 10 kB +2 B (0%)
build/stock-filter.js 7.46 kB +2 B (0%)
build/wc-blocks-editor-style-rtl.css 5.08 kB +15 B (0%)
build/wc-blocks-editor-style.css 5.09 kB +14 B (0%)
build/wc-blocks-style-rtl.css 22.5 kB +20 B (0%)
build/wc-blocks-style.css 22.4 kB +19 B (0%)
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 7.34 kB
build/all-products-frontend.js 18.1 kB
build/attribute-filter-frontend.js 21.9 kB
build/blocks-checkout.js 17.4 kB
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.16 kB
build/cart-blocks/cart-express-payment-frontend.js 5.09 kB
build/cart-blocks/cart-items-frontend.js 299 B
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.27 kB
build/cart-blocks/cart-line-items-frontend.js 428 B
build/cart-blocks/cart-order-summary-frontend.js 1.1 kB
build/cart-blocks/cart-totals-frontend.js 321 B
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/filled-cart-frontend.js 781 B
build/cart-blocks/order-summary-coupon-form-frontend.js 2.65 kB
build/cart-blocks/order-summary-discount-frontend.js 2.15 kB
build/cart-blocks/order-summary-fee-frontend.js 274 B
build/cart-blocks/order-summary-heading-frontend.js 454 B
build/cart-blocks/order-summary-shipping--checkout-blocks/order-summary-shipping-frontend.js 6.37 kB
build/cart-blocks/order-summary-shipping-frontend.js 426 B
build/cart-blocks/order-summary-subtotal-frontend.js 274 B
build/cart-blocks/order-summary-taxes-frontend.js 433 B
build/cart-blocks/proceed-to-checkout-frontend.js 1.15 kB
build/cart-frontend.js 47 kB
build/checkout-blocks/actions-frontend.js 1.42 kB
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.12 kB
build/checkout-blocks/billing-address-frontend.js 891 B
build/checkout-blocks/contact-information-frontend.js 2.83 kB
build/checkout-blocks/express-payment-frontend.js 5.38 kB
build/checkout-blocks/fields-frontend.js 345 B
build/checkout-blocks/order-note-frontend.js 1.07 kB
build/checkout-blocks/order-summary-cart-items-frontend.js 3.66 kB
build/checkout-blocks/order-summary-coupon-form-frontend.js 2.8 kB
build/checkout-blocks/order-summary-discount-frontend.js 2.26 kB
build/checkout-blocks/order-summary-fee-frontend.js 276 B
build/checkout-blocks/order-summary-frontend.js 1.1 kB
build/checkout-blocks/order-summary-shipping-frontend.js 604 B
build/checkout-blocks/order-summary-subtotal-frontend.js 274 B
build/checkout-blocks/order-summary-taxes-frontend.js 433 B
build/checkout-blocks/payment-frontend.js 7.7 kB
build/checkout-blocks/shipping-address-frontend.js 1.03 kB
build/checkout-blocks/shipping-methods-frontend.js 4.74 kB
build/checkout-blocks/terms-frontend.js 1.23 kB
build/checkout-blocks/totals-frontend.js 325 B
build/checkout-frontend.js 49.2 kB
build/featured-category.js 13.2 kB
build/featured-product.js 13.5 kB
build/general-style-rtl.css 1.29 kB
build/general-style.css 1.29 kB
build/handpicked-products.js 7.36 kB
build/legacy-template.js 2.79 kB
build/mini-cart-component-frontend.js 16.8 kB
build/mini-cart-contents-block/empty-cart-frontend.js 365 B
build/mini-cart-contents-block/filled-cart-frontend.js 229 B
build/mini-cart-contents-block/footer--mini-cart-contents-block/products-table-frontend.js 4.69 kB
build/mini-cart-contents-block/footer-frontend.js 6.98 kB
build/mini-cart-contents-block/items-frontend.js 237 B
build/mini-cart-contents-block/products-table-frontend.js 289 B
build/mini-cart-contents-block/shopping-button-frontend.js 288 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/mini-cart-frontend.js 1.71 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 223 B
build/product-add-to-cart-frontend.js 6.95 kB
build/product-best-sellers.js 7.71 kB
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 436 B
build/product-button-frontend.js 1.87 kB
build/product-button.js 1.57 kB
build/product-categories.js 2.42 kB
build/product-category-list-frontend.js 879 B
build/product-category-list.js 503 B
build/product-category.js 8.69 kB
build/product-image-frontend.js 1.88 kB
build/product-image.js 1.59 kB
build/product-new.js 7.71 kB
build/product-on-sale.js 8.03 kB
build/product-price-frontend.js 1.9 kB
build/product-price.js 1.51 kB
build/product-query.js 647 B
build/product-rating-frontend.js 1.16 kB
build/product-sale-badge-frontend.js 1.13 kB
build/product-sale-badge.js 804 B
build/product-sku-frontend.js 381 B
build/product-stock-indicator-frontend.js 993 B
build/product-summary-frontend.js 1.29 kB
build/product-tag-list-frontend.js 872 B
build/product-tag.js 8.08 kB
build/product-title-frontend.js 1.31 kB
build/product-title.js 922 B
build/product-top-rated.js 7.95 kB
build/products-by-attribute.js 8.63 kB
build/reviews-frontend.js 7.02 kB
build/single-product-frontend.js 21.4 kB
build/stock-filter-frontend.js 7.51 kB
build/vendors--cart-blocks/cart-line-items--cart-blocks/cart-order-summary--cart-blocks/order-summary-shi--c02aad66-frontend.js 5.26 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/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--decc3dc6-frontend.js 19.1 kB
build/vendors--mini-cart-contents-block/footer-frontend.js 6.86 kB
build/vendors--product-add-to-cart-frontend.js 7.53 kB
build/wc-blocks-data.js 9.87 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 930 B
build/wc-blocks-registry.js 2.7 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.14 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 54.5 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

Copy link
Contributor

@danielwrobert danielwrobert left a comment

Choose a reason for hiding this comment

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

LGTM! 🚀

Everything tests as described. In addition, I tested different column container widths and everything works as expected across the board.

It would be nice if we could shift the layout with a media query in CSS so we wouldn't have to calculate the wrapper width to set the positioning of the price input fields.

For example, if the input fields are rendered on the same row as the slider bar, they will remain on that row even as the viewport changes in size.

That being said, this is a very nice improvement and if the above route is even a plausible option, it could be considered in a follow-up.

Nice work!

@dinhtungdu
Copy link
Member Author

It would be nice if we could shift the layout with a media query in CSS so we wouldn't have to calculate the wrapper width to set the positioning of the price input fields.

@danielwrobert AFAIK, we can't use media query for this because it attaches to the window width. For example, the sidebar can be very narrow on a portrait tablet and we can't detect it using @media as the window width is still something like 768px.

@container query should be the best solution for this type of issue but we have to wait for it.

For example, if the input fields are rendered on the same row as the slider bar, they will remain on that row even as the viewport changes in size.

I noticed this too. We can fix this by listening to the browser resize and rerun the width calculation. We can even create a custom hook to encapsulate the logic (and to use in other components). But I think it can be a follow-up PR as we need to pay great attention to the performance of that hook. Performance is also the reason I didn't update the width on browser resize for this PR.

@danielwrobert
Copy link
Contributor

danielwrobert commented Aug 23, 2022

@container query should be the best solution for this type of issue but we have to wait for it.

@dinhtungdu yeah, I see what you're saying. That's a great point!

But I think it can be a follow-up PR as we need to pay great attention to the performance of that hook. Performance is also the reason I didn't update the width on browser resize for this PR.

Yeah, I agree. I think you made the right call here.

I approved this PR so my notes weren't meant to be blocking. Great work on this! :shipit:

@dinhtungdu dinhtungdu merged commit 485598a into trunk Aug 24, 2022
@dinhtungdu dinhtungdu deleted the fix/6942 branch August 24, 2022 09:10
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
block: filter by price Issues related to the Filter by Price block. skip-changelog PRs that you don't want to appear in the changelog. type: bug The issue/PR concerns a confirmed bug.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Price input is too large for inline editable layout
2 participants