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

Add validation error to prevent checkout when there is no shipping method available #8384

Merged
merged 3 commits into from
Mar 17, 2023

Conversation

tarunvijwani
Copy link

@tarunvijwani tarunvijwani commented Feb 4, 2023

With this PR, we're preventing checkout if no shipping methods are available.

Fixes #8348

Changes in the PR:

  • Add the validation error in ShippingSelector to prevent checkout when no shipping rates are available.
  • Add a notice to the checkout processor so that notice appears after clicking on the place order button.

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. Enable local pickup with pickup price.
  2. Remove the shipping methods from the WC settings.
  3. Go to the Checkout block and select the shipping option.
  4. Confirm error notice is being displayed at the top.
  5. Confirm you're not able to place the order.
  6. Select local pickup.
  7. Confirm you're able to place an order
  • Do not include in the Testing Notes

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Performance Impact

Changelog

Add validation error to prevent checkout when there is no shipping method available

@tarunvijwani tarunvijwani self-assigned this Feb 4, 2023
@tarunvijwani tarunvijwani added the block: checkout Issues related to the checkout block. label Feb 4, 2023
@woocommercebot woocommercebot requested review from a team and alexflorisca and removed request for a team February 4, 2023 00:05
@github-actions
Copy link
Contributor

github-actions bot commented Feb 4, 2023

The release ZIP for this PR is accessible via:

https://wcblocks.wpcomstaging.com/wp-content/uploads/woocommerce-gutenberg-products-block-8384.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: 2307

🎉 🎉 This PR does not introduce new TS errors.

comments-aggregator

@github-actions
Copy link
Contributor

github-actions bot commented Feb 4, 2023

Size Change: +298 B (0%)

Total Size: 1.12 MB

Filename Size Change
build/cart-frontend.js 29 kB +47 B (0%)
build/cart.js 48 kB +34 B (0%)
build/checkout-blocks/shipping-method-frontend.js 2.6 kB +131 B (+5%) 🔍
build/checkout-frontend.js 30.5 kB +49 B (0%)
build/checkout.js 45.6 kB +37 B (0%)
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 7.97 kB
build/active-filters-wrapper-frontend.js 5.99 kB
build/active-filters.js 7.47 kB
build/all-products-frontend.js 11.7 kB
build/all-products.js 37.7 kB
build/all-reviews.js 7.66 kB
build/attribute-filter-frontend.js 22.5 kB
build/attribute-filter-wrapper--stock-filter-wrapper-frontend.js 3.35 kB
build/attribute-filter-wrapper-frontend.js 4.5 kB
build/attribute-filter.js 13.2 kB
build/blocks-checkout.js 43.9 kB
build/breadcrumbs.js 2.04 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.75 kB
build/cart-blocks/cart-express-payment--checkout-blocks/express-payment-frontend.js 5.19 kB
build/cart-blocks/cart-express-payment-frontend.js 720 B
build/cart-blocks/cart-items-frontend.js 302 B
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.36 kB
build/cart-blocks/cart-line-items-frontend.js 1.07 kB
build/cart-blocks/cart-order-summary-frontend.js 1.24 kB
build/cart-blocks/cart-totals-frontend.js 307 B
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/filled-cart-frontend.js 654 B
build/cart-blocks/order-summary-coupon-form-frontend.js 1.62 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 11.2 kB
build/cart-blocks/order-summary-subtotal-frontend.js 275 B
build/cart-blocks/order-summary-taxes-frontend.js 434 B
build/cart-blocks/proceed-to-checkout-frontend.js 1.33 kB
build/catalog-sorting.js 1.7 kB
build/checkout-blocks/actions-frontend.js 1.84 kB
build/checkout-blocks/billing-address-frontend.js 4.19 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 330 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.79 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 11.2 kB
build/checkout-blocks/order-summary-subtotal-frontend.js 275 B
build/checkout-blocks/order-summary-taxes-frontend.js 435 B
build/checkout-blocks/payment-frontend.js 8.43 kB
build/checkout-blocks/pickup-options-frontend.js 4.04 kB
build/checkout-blocks/shipping-address-frontend.js 4.14 kB
build/checkout-blocks/shipping-methods-frontend.js 5.26 kB
build/checkout-blocks/terms-frontend.js 1.56 kB
build/checkout-blocks/totals-frontend.js 310 B
build/customer-account.js 3.17 kB
build/featured-category.js 14 kB
build/featured-product.js 14.2 kB
build/filter-wrapper-frontend.js 14.1 kB
build/filter-wrapper.js 2.4 kB
build/general-style-rtl.css 1.31 kB
build/general-style.css 1.31 kB
build/handpicked-products.js 7.91 kB
build/legacy-template.js 5.32 kB
build/mini-cart-component-frontend.js 28 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/footer-frontend.js 2.86 kB
build/mini-cart-contents-block/items-frontend.js 237 B
build/mini-cart-contents-block/products-table-frontend.js 589 B
build/mini-cart-contents-block/shopping-button-frontend.js 572 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/mini-cart-contents.js 16.9 kB
build/mini-cart-frontend.js 2.02 kB
build/mini-cart.js 4.49 kB
build/price-filter-frontend.js 13.8 kB
build/price-filter-wrapper-frontend.js 6.99 kB
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-add-to-cart-frontend.js 6.69 kB
build/product-add-to-cart.js 8.62 kB
build/product-best-sellers.js 8.25 kB
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-button-frontend.js 2.22 kB
build/product-button.js 4.01 kB
build/product-categories.js 2.36 kB
build/product-category-list-frontend.js 1.19 kB
build/product-category-list.js 502 B
build/product-category.js 9.24 kB
build/product-image-frontend.js 2.22 kB
build/product-image.js 4.11 kB
build/product-new.js 8.25 kB
build/product-on-sale.js 8.58 kB
build/product-price-frontend.js 2.39 kB
build/product-price.js 1.64 kB
build/product-query.js 11 kB
build/product-rating-frontend.js 1.65 kB
build/product-rating.js 919 B
build/product-results-count.js 1.65 kB
build/product-sale-badge-frontend.js 1.45 kB
build/product-sale-badge.js 820 B
build/product-search.js 2.63 kB
build/product-sku-frontend.js 707 B
build/product-sku.js 452 B
build/product-stock-indicator-frontend.js 1.32 kB
build/product-stock-indicator.js 646 B
build/product-summary-frontend.js 1.58 kB
build/product-summary.js 920 B
build/product-tag-list-frontend.js 1.18 kB
build/product-tag-list.js 498 B
build/product-tag.js 8.73 kB
build/product-title-frontend.js 1.65 kB
build/product-title.js 3.48 kB
build/product-top-rated.js 8.48 kB
build/products-by-attribute.js 9.58 kB
build/rating-filter-frontend.js 20.8 kB
build/rating-filter-wrapper-frontend.js 5.61 kB
build/rating-filter.js 7.42 kB
build/reviews-by-category.js 11.9 kB
build/reviews-by-product.js 13 kB
build/reviews-frontend.js 7.13 kB
build/single-product-frontend.js 17.9 kB
build/single-product.js 10.6 kB
build/stock-filter-frontend.js 21 kB
build/stock-filter-wrapper-frontend.js 3.15 kB
build/stock-filter.js 8.13 kB
build/store-notices.js 1.69 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.7 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.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/order-summary-shipping--checkout-block--24d3fc0c-frontend.js 8.24 kB
build/vendors--checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 5.44 kB
build/vendors--checkout-blocks/shipping-method-frontend.js 12 kB
build/wc-blocks-data.js 21.8 kB
build/wc-blocks-editor-style-rtl.css 5.82 kB
build/wc-blocks-editor-style.css 5.82 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 930 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-style-rtl.css 26.9 kB
build/wc-blocks-style.css 26.9 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.4 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.9 kB
build/woo-directives-runtime.js 2.73 kB
build/woo-directives-vendors.js 7.91 kB

compressed-size-action

Copy link
Member

@senadir senadir left a comment

Choose a reason for hiding this comment

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

This is not working for me :/

This is now working for me, but it still seems to be buggy.

If you go regular shipping, place, get an error, switch to local pickup, the error goes away, switch back to regular shipping, the error surfaces again for some seconds before it disappears.

@senadir senadir added the status: blocked The issue is blocked from progressing, waiting for another piece of work to be done. label Feb 7, 2023
Copy link
Member

@senadir senadir left a comment

Choose a reason for hiding this comment

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

Hey @tarunvijwani , we're going to put this on hold until @elizaan36 figures out some design next steps when it comes to validation and text.

@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 Feb 15, 2023
@elizaan36
Copy link

elizaan36 commented Feb 17, 2023

When the user first lands on the Checkout block with no address provided, can we hide the "Shipping options" section?

Then if an address is entered that's not within a valid shipping zone, we can present a notice inline in the shipping options section. The top level notice isn't necessary in this case. Let me know what you think @tarunvijwani @senadir

image

@github-actions github-actions bot removed the status: stale Stale issues and PRs have had no updates for 60 days. label Feb 17, 2023
@mikejolley mikejolley marked this pull request as draft February 17, 2023 10:53
@mikejolley mikejolley removed the request for review from alexflorisca February 17, 2023 10:53
@senadir
Copy link
Member

senadir commented Feb 20, 2023

Hey @elizaan36 this will still get us to the same place of needing something to prevent the customer from placing order.

The issue here is that a shopper still has Local Pickup selected (even if not visible) and they can place the order with the error shown.

@ralucaStan
Copy link
Contributor

Noting that we don't have information-type notices implemented in the project. We could display a normal error notice in the shipping section until we have the new notice types added in the blocks. Does that sound good to you @elizaan36 ?

@elizaan36
Copy link

Yep, sounds good. Based on the conversation in Slack, there should be the same pattern/message for the same error whether local pickup is enabled or not.

When pickup is not enabled, there's an error notice in the Shipping options section.

There are no shipping options available. Please check your shipping address.

Then if user proceeds to checkout there's a top level notice.

Sorry, this order requires a shipping option.

@tarunvijwani
Copy link
Author

Thank you, @senadir and @elizaan36, for the review. I have updated the code. 👍

@tarunvijwani tarunvijwani marked this pull request as ready for review February 23, 2023 20:37
@tarunvijwani tarunvijwani requested a review from senadir February 23, 2023 20:37
@woocommercebot woocommercebot requested a review from a team February 23, 2023 20:37
Copy link
Member

@mikejolley mikejolley left a comment

Choose a reason for hiding this comment

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

Missing some localisation functions here, but it tested ok!

@@ -124,7 +124,7 @@ const processInvalidParamResponse = (
*/
export const processErrorResponse = (
response: ApiErrorResponse,
context: string | undefined
context?: string | undefined
Copy link
Author

Choose a reason for hiding this comment

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

This change will fix the TypeScript error present in the assets/js/base/context/providers/cart-checkout/checkout-processor.ts file for not passing two arguments.

@tarunvijwani
Copy link
Author

@mikejolley Thank you for the review. I have updated the code. 👍

@tarunvijwani tarunvijwani removed the status: blocked The issue is blocked from progressing, waiting for another piece of work to be done. label Mar 3, 2023
@opr opr force-pushed the add/pickup-from branch from b753412 to 4ec94ea Compare March 10, 2023 18:02
@mikejolley
Copy link
Member

@tarunvijwani this needs a rebase - ready for final review?

@tarunvijwani tarunvijwani changed the base branch from add/pickup-from to trunk March 16, 2023 06:42
@tarunvijwani tarunvijwani changed the base branch from trunk to add/pickup-from March 16, 2023 06:42
@tarunvijwani tarunvijwani changed the base branch from add/pickup-from to trunk March 16, 2023 06:43
Tarun Vijwani added 2 commits March 16, 2023 11:06
-  Add the validation error in ShippingSelector to prevent checkout when no shipping rates available.
- Add notice to Checkout processor so that notice appears after clicking on place order button.
-   Make multiple prop as optional in RatePrice component to fix TypeScript error.
@tarunvijwani tarunvijwani force-pushed the add/8348-validation-error-to-prevent-checkout branch from 8932bc9 to d77e28b Compare March 16, 2023 07:09
@@ -16,7 +16,7 @@ export const RatePrice = ( {
}: {
minRate: CartShippingPackageShippingRate | undefined;
maxRate: CartShippingPackageShippingRate | undefined;
multiple: boolean;
multiple?: boolean;
Copy link
Author

Choose a reason for hiding this comment

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

This change will fix the TypeScript error in assets/js/blocks/checkout/inner-blocks/checkout-shipping-method-block/block.tsx for not passing the multiple prop.

@tarunvijwani
Copy link
Author

@tarunvijwani this needs a rebase - ready for final review?

@mikejolley I have fixed the conflicts. This is now ready for review. Thank you! 🙂

@tarunvijwani tarunvijwani added the type: bug The issue/PR concerns a confirmed bug. label Mar 16, 2023
Copy link
Member

@mikejolley mikejolley left a comment

Choose a reason for hiding this comment

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

👍🏻

@tarunvijwani tarunvijwani merged commit 542cb76 into trunk Mar 17, 2023
@tarunvijwani tarunvijwani deleted the add/8348-validation-error-to-prevent-checkout branch March 17, 2023 15:32
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.

Local pickup: Add validation error to prevent checkout when there is no shipping method
5 participants