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

Add LocalPickupSelect component #8634

Merged
merged 7 commits into from
Mar 10, 2023
Merged

Add LocalPickupSelect component #8634

merged 7 commits into from
Mar 10, 2023

Conversation

opr
Copy link
Contributor

@opr opr commented Mar 3, 2023

This PR is part of #7998. I am splitting the work up so it is easier to review. There will be a followup where this component is actually used and passed through to Slot/Fill.

This PR adds a new component, LocalPickupSelect (and unit tests for it) which incorporates the existing RadioControl but wraps it in a div and outputs an optional title (if one is supplied).

This component is required because when showing multiple packages in WC Subscriptions, it is helpful to know the names of the packages.

Without this PR, WC subs would need to render a RadioControl and title separately, resulting in a poorer DX.

This change also allows us to have a focused and dedicated component for displaying pickup rates, which is more explicitly named, making it easier to reason with in future.

Testing

Automated Tests

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

User Facing Testing

  1. Go to WooCommerce -> Settings -> Shipping -> Local Pickup and activate Local Pickup. Ensure you have added a couple of locations.
  2. Add an item to your cart and go to the Checkout block.
  3. Select Local Pickup and ensure the options you set up in step 1 are visible.
  • Do not include in the Testing Notes

Internal testing notes

  1. Go to assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/block.tsx and remove the RadioControl rendered by Block and replace it with:
<LocalPickupSelect
	setSelectedOption={ setSelectedOption }
	selectedOption={ selectedOption }
	pickupLocations={ pickupLocations }
	renderPickupLocation={ renderPickupLocation }
	onSelectRate={ ( value: string ) => {
		setSelectedOption( value );
		onSelectRate( value );
	} }
        packageCount={ shippingRates.length }
/>
  1. Go to the front-end and ensure the local pickup rates render correctly, and that switching between them works as expected.
  2. In WooCommerce -> Settings -> Shipping -> Local pickup, add a cost for local pickup on the Add a price for customers who choose local pickup option.
  3. Check out using a local pickup rate and ensure it is correctly added to the order in the dashboard.
  4. Install Multiple Packages for WooCommerce
  5. Go to WooCommerce -> Settings -> Multiple Packages and enable it. In the "Group by" option, choose "Product (individual)`. Save the settings.
  6. Add multiple items to your cart.
  7. Go to the Checkout block and choose local pickup. Ensure the price shown for local pickup says $5.00 x 5 packages (the numbers will be different for you depending on what you entered in step 7, and how many items are in your cart).

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Changelog

Skipping

opr added 3 commits March 3, 2023 14:27
This will be used to render the local pickup options and also display a title if there are more than one package (e.g. if WC subs adds them)
@opr opr added status: needs review skip-changelog PRs that you don't want to appear in the changelog. focus: blocks Specific work involving or impacting how blocks behave. block: checkout Issues related to the checkout block. type: technical debt This issue/PR represents/solves the technical debt of the project. labels Mar 3, 2023
@opr opr self-assigned this Mar 3, 2023
@woocommercebot woocommercebot requested review from a team and tarhi-saad and removed request for a team March 3, 2023 22:42
@github-actions
Copy link
Contributor

github-actions bot commented Mar 3, 2023

The release ZIP for this PR is accessible via:

https://wcblocks.wpcomstaging.com/wp-content/uploads/woocommerce-gutenberg-products-block-8634.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: 487
  • Total errors: 2308

🎉 🎉 This PR does not introduce new TS errors.

comments-aggregator

@github-actions
Copy link
Contributor

github-actions bot commented Mar 3, 2023

Size Change: +15.7 kB (+1%)

Total Size: 1.12 MB

Filename Size Change
build/active-filters-frontend.js 7.97 kB +3 B (0%)
build/active-filters-wrapper-frontend.js 5.98 kB -4 B (0%)
build/active-filters.js 7.37 kB +57 B (+1%)
build/all-products-frontend.js 11.7 kB +3 B (0%)
build/all-products.js 37.7 kB +1.29 kB (+4%)
build/all-reviews.js 7.66 kB +9 B (0%)
build/attribute-filter-frontend.js 22.5 kB +49 B (0%)
build/attribute-filter-wrapper--stock-filter-wrapper-frontend.js 3.36 kB -1 B (0%)
build/attribute-filter-wrapper-frontend.js 4.49 kB +33 B (+1%)
build/attribute-filter.js 13.1 kB +687 B (+6%) 🔍
build/breadcrumbs.js 2.05 kB +1 B (0%)
build/cart-blocks/cart-cross-sells-products-frontend.js 9.74 kB +55 B (+1%)
build/cart-blocks/cart-express-payment-frontend.js 720 B +1 B (0%)
build/cart-blocks/cart-items-frontend.js 301 B -1 B (0%)
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.36 kB +2 B (0%)
build/cart-blocks/cart-line-items-frontend.js 1.07 kB +1 B (0%)
build/cart-blocks/cart-order-summary-frontend.js 1.24 kB +1 B (0%)
build/cart-blocks/cart-totals-frontend.js 307 B -1 B (0%)
build/cart-blocks/empty-cart-frontend.js 346 B +1 B (0%)
build/cart-blocks/filled-cart-frontend.js 653 B -2 B (0%)
build/cart-blocks/order-summary-coupon-form-frontend.js 1.62 kB -1 B (0%)
build/cart-blocks/order-summary-discount-frontend.js 2.12 kB +1 B (0%)
build/cart-blocks/order-summary-shipping-frontend.js 14.8 kB +3 B (0%)
build/cart-blocks/proceed-to-checkout-frontend.js 1.24 kB -1 B (0%)
build/cart-frontend.js 28.9 kB -8 B (0%)
build/cart.js 47.6 kB +168 B (0%)
build/catalog-sorting.js 1.7 kB +2 B (0%)
build/checkout-blocks/actions-frontend.js 1.85 kB -1 B (0%)
build/checkout-blocks/billing-address-frontend.js 1.18 kB +4 B (0%)
build/checkout-blocks/express-payment-frontend.js 1.13 kB +1 B (0%)
build/checkout-blocks/fields-frontend.js 330 B -1 B (0%)
build/checkout-blocks/order-summary-cart-items-frontend.js 3.67 kB +4 B (0%)
build/checkout-blocks/order-summary-coupon-form-frontend.js 1.79 kB +1 B (0%)
build/checkout-blocks/order-summary-discount-frontend.js 2.29 kB +1 B (0%)
build/checkout-blocks/order-summary-shipping-frontend.js 14.9 kB +5 B (0%)
build/checkout-blocks/payment-frontend.js 8.43 kB +2 B (0%)
build/checkout-blocks/pickup-options-frontend.js 2.8 kB +2 B (0%)
build/checkout-blocks/shipping-address-frontend.js 1.14 kB +2 B (0%)
build/checkout-blocks/shipping-method-frontend.js 2.27 kB -3 B (0%)
build/checkout-blocks/shipping-methods-frontend.js 4.58 kB +2 B (0%)
build/checkout-blocks/terms-frontend.js 1.56 kB +1 B (0%)
build/checkout-blocks/totals-frontend.js 311 B +1 B (0%)
build/checkout-frontend.js 30.4 kB -35 B (0%)
build/checkout.js 44.2 kB -45 B (0%)
build/customer-account.js 3.16 kB -4 B (0%)
build/featured-category.js 14 kB +496 B (+4%)
build/featured-product.js 14.2 kB +570 B (+4%)
build/filter-wrapper-frontend.js 14.1 kB -2 B (0%)
build/filter-wrapper.js 2.39 kB -2 B (0%)
build/handpicked-products.js 7.91 kB +667 B (+9%) 🔍
build/legacy-template.js 5.32 kB +39 B (+1%)
build/mini-cart-component-frontend.js 28 kB -4 B (0%)
build/mini-cart-contents-block/footer-frontend.js 2.87 kB +1 B (0%)
build/mini-cart-contents-block/shopping-button-frontend.js 573 B -2 B (0%)
build/mini-cart-contents.js 16.6 kB +26 B (0%)
build/mini-cart-frontend.js 2.02 kB +20 B (+1%)
build/mini-cart.js 4.29 kB -1 B (0%)
build/price-filter-frontend.js 13.9 kB +3 B (0%)
build/price-filter-wrapper-frontend.js 6.99 kB +1 B (0%)
build/product-add-to-cart-frontend.js 6.69 kB -1 B (0%)
build/product-add-to-cart.js 8.61 kB +10 B (0%)
build/product-best-sellers.js 8.25 kB +654 B (+9%) 🔍
build/product-button-frontend.js 2.22 kB +2 B (0%)
build/product-button.js 3.99 kB +1 B (0%)
build/product-categories.js 2.36 kB -1 B (0%)
build/product-category-list-frontend.js 1.19 kB -1 B (0%)
build/product-category.js 9.24 kB +659 B (+8%) 🔍
build/product-image-frontend.js 2.22 kB -4 B (0%)
build/product-image.js 4.1 kB +7 B (0%)
build/product-new.js 8.25 kB +663 B (+9%) 🔍
build/product-on-sale.js 8.57 kB +666 B (+8%) 🔍
build/product-price-frontend.js 2.38 kB +61 B (+3%)
build/product-price.js 1.63 kB +54 B (+3%)
build/product-query.js 10.8 kB +4.2 kB (+64%) 🆘
build/product-rating-frontend.js 1.65 kB -2 B (0%)
build/product-rating.js 919 B -1 B (0%)
build/product-sale-badge-frontend.js 1.45 kB -1 B (0%)
build/product-sale-badge.js 819 B +3 B (0%)
build/product-search.js 2.63 kB +2 B (0%)
build/product-sku-frontend.js 707 B +78 B (+12%) ⚠️
build/product-sku.js 452 B +76 B (+20%) 🚨
build/product-stock-indicator-frontend.js 1.32 kB +2 B (0%)
build/product-summary.js 919 B -1 B (0%)
build/product-tag-list-frontend.js 1.19 kB +2 B (0%)
build/product-tag-list.js 498 B +1 B (0%)
build/product-tag.js 8.73 kB +663 B (+8%) 🔍
build/product-title.js 3.46 kB -1 B (0%)
build/product-top-rated.js 8.49 kB +666 B (+9%) 🔍
build/products-by-attribute.js 9.45 kB +917 B (+11%) ⚠️
build/rating-filter-wrapper-frontend.js 5.61 kB +1 B (0%)
build/rating-filter.js 7.41 kB -1 B (0%)
build/reviews-by-category.js 11.9 kB +656 B (+6%) 🔍
build/reviews-by-product.js 13 kB +623 B (+5%) 🔍
build/reviews-frontend.js 7.13 kB +3 B (0%)
build/single-product-frontend.js 17.9 kB -1 B (0%)
build/single-product.js 10.6 kB +661 B (+7%) 🔍
build/stock-filter.js 8.13 kB -2 B (0%)
build/store-notices.js 1.69 kB -1 B (0%)
build/vendors--attribute-filter-wrapper--rating-filter-wrapper--stock-filter-wrapper-frontend.js 7.69 kB +1 B (0%)
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/order-summary-shipping--checkout-blocks--18f9376a-frontend.js 19.4 kB -4 B (0%)
build/vendors--cart-blocks/cart-cross-sells-products--product-add-to-cart-frontend.js 7.25 kB -1 B (0%)
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--5b8feb0b-frontend.js 4.83 kB -1 B (0%)
build/wc-blocks-data.js 21.5 kB +17 B (0%)
build/wc-blocks-editor-style-rtl.css 5.82 kB +72 B (+1%)
build/wc-blocks-editor-style.css 5.82 kB +70 B (+1%)
build/wc-blocks-style-rtl.css 26.9 kB +89 B (0%)
build/wc-blocks-style.css 26.8 kB +93 B (0%)
build/wc-blocks-vendors.js 64.4 kB +8 B (0%)
ℹ️ View Unchanged
Filename Size
build/blocks-checkout.js 41.2 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-express-payment--checkout-blocks/express-payment-frontend.js 5.19 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-subtotal-frontend.js 275 B
build/cart-blocks/order-summary-taxes-frontend.js 434 B
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 3.92 kB
build/checkout-blocks/contact-information-frontend.js 2.05 kB
build/checkout-blocks/order-note-frontend.js 1.14 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-subtotal-frontend.js 275 B
build/checkout-blocks/order-summary-taxes-frontend.js 435 B
build/general-style-rtl.css 1.31 kB
build/general-style.css 1.31 kB
build/mini-cart-contents-block/empty-cart-frontend.js 360 B
build/mini-cart-contents-block/filled-cart-frontend.js 268 B
build/mini-cart-contents-block/items-frontend.js 237 B
build/mini-cart-contents-block/products-table-frontend.js 588 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/price-filter.js 8.38 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 253 B
build/product-add-to-cart--product-button--product-image--product-rating--product-title.js 151 B
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 500 B
build/product-button--product-image--product-price--product-rating--product-sale-badge--product-title.js 262 B
build/product-category-list.js 502 B
build/product-results-count.js 1.65 kB
build/product-stock-indicator.js 645 B
build/product-summary-frontend.js 1.58 kB
build/product-title-frontend.js 1.65 kB
build/rating-filter-frontend.js 20.9 kB
build/stock-filter-frontend.js 21.1 kB
build/stock-filter-wrapper-frontend.js 3.15 kB
build/vendors--attribute-filter-wrapper--cart-blocks/cart-cross-sells-products--cart-blocks/order-summary--82e4ed06-frontend.js 6.86 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-line-items--checkout-blocks/order-summary-cart-items--mini-cart-contents---233ab542-frontend.js 3.14 kB
build/vendors--checkout-blocks/shipping-method-frontend.js 12 kB
build/vendors--checkout-blocks/shipping-methods-frontend.js 8.84 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 933 B
build/wc-blocks-registry.js 3.15 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.73 kB
build/wc-blocks-vendors-style-rtl.css 1.96 kB
build/wc-blocks-vendors-style.css 1.96 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
build/woo-directives-runtime.js 2.73 kB
build/woo-directives-vendors.js 7.91 kB

compressed-size-action

Copy link
Contributor

@tarhi-saad tarhi-saad left a comment

Choose a reason for hiding this comment

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

Hello @opr! Thank you for working on this PR! I only have one question that you kind check below!

} }
selected={ selectedOption }
options={ pickupLocations.map( ( location ) =>
renderPickupLocation( location, pickupLocations.length )
Copy link
Contributor

Choose a reason for hiding this comment

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

I believe we should check the length of the shippingRates instead of pickupLocations, the same in this line: https://github.com/woocommerce/woocommerce-blocks/blob/trunk/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/block.tsx#L152

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hey @tarhi-saad I updated some internal testing notes and added one to test for this. Thanks for spotting it!

@tarhi-saad tarhi-saad self-requested a review March 10, 2023 09:03
Copy link
Contributor

@tarhi-saad tarhi-saad left a comment

Choose a reason for hiding this comment

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

Thank you, @opr, for the changes! Everything works as expected! 🙌 There is just one minor TS error in the unit tests file (see the message below). And I have some questions/suggestions about the internal testing notes:

  • In step 1, we ask to remove the RadioControl rendered by Block. But it's already replaced in the last commit: Add packageCount as an option to LocalPickupSelect
  • I added packageCount={ shippingRates.length } to the code snippet from step 1
  • In step 8, I replaced depending on what you entered in step 1 with depending on what you entered in step 7

selectedOptionOverride?: null | ( ( value: string ) => void );
onSelectRateOverride?: null | ( ( value: string ) => void );
} ) => (
<LocalPickupSelect
Copy link
Contributor

Choose a reason for hiding this comment

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

We have a TS error here: Property 'packageCount' is missing

@opr
Copy link
Contributor Author

opr commented Mar 10, 2023

Hey @tarhi-saad thanks for the review, ok in 10b1dc9 the component was not supposed to change, that's my bad! I will revert it so the testing instructions make sense.

I'll also address that TS issue. Thanks!

@opr opr merged commit ff84f72 into trunk Mar 10, 2023
@opr opr deleted the add/local-pickup-select branch March 10, 2023 15:52
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. focus: blocks Specific work involving or impacting how blocks behave. skip-changelog PRs that you don't want to appear in the changelog. type: technical debt This issue/PR represents/solves the technical debt of the project.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants