Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix WooPay pre-checking place order bug when buying a subscription #9450

Merged
merged 2 commits into from
Sep 19, 2024

Conversation

alefesouza
Copy link
Member

@alefesouza alefesouza commented Sep 17, 2024

Fixes #9449

Changes proposed in this Pull Request

  • Fixes the Save my info getting hidden.
  • Fixes the place order bug.

When buying a subscription via blocks checkout while WooPay pre-checking is enabled.

This bug was introduced on #9378 due to the late loading of the payment methods section, this way this line would initially return undefined, undefined as it checks the existence of the section radio buttons before it's loaded.

It looks like WC Blocks wait the registerExpressPaymentMethod here get fully loaded (since the mentioned PR it uses a Promise) to the payment methods section on the checkout page.

To fix it, I simply used the hooks used by WC Blocks itself to detect the current payment method, checking if the current one is woocommerce_payments and the load the Save my info section, for the classic checkout, it works the same way it worked before.

The Place order button bug was caused by the WooPay component (Save my info section) phone number validation, it was loaded even though it was hidden.

Screenshot 2024-09-13 at 5 14 31 PM

Testing instructions

  • Enable WooPay pre-checking (you can use WCPay DevTools).
  • Add a subscription to the cart.
  • Access the blocks checkout page.
  • The Save my info should show up.
  • The Place order button should work as expected.
  • Add a new subscription to the cart.
  • Access the classic checkout page.
  • The Save my info should show up.
  • The Place order button should work as expected.
  • Enable more payment methods.
  • Access the blocks checkout page.
  • The Save my info section should be shown only when the WCPay payment method is selected.
  • Access the classic checkout page.
  • The Save my info section should be shown only when the WCPay payment method is selected.

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@alefesouza alefesouza requested a review from asumaran September 17, 2024 04:42
@botwoo
Copy link
Collaborator

botwoo commented Sep 17, 2024

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 9450 or branch name fix/woopay-pre-checking-save-my-info-place-order in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: dbd21e8
  • Build time: 2024-09-17 04:47:02 UTC

Note: the build is updated when a new commit is pushed to this PR.

Copy link
Contributor

Size Change: +28 B (0%)

Total Size: 1.33 MB

Filename Size Change
release/woocommerce-payments/dist/woopay.js 71.3 kB +28 B (0%)
ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.08 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.08 kB
release/woocommerce-payments/assets/css/success.css 173 B
release/woocommerce-payments/assets/css/success.rtl.css 173 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.52 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.52 kB
release/woocommerce-payments/dist/blocks-checkout.js 66.6 kB
release/woocommerce-payments/dist/cart-block.js 16.3 kB
release/woocommerce-payments/dist/cart.js 5.73 kB
release/woocommerce-payments/dist/checkout-rtl.css 927 B
release/woocommerce-payments/dist/checkout.css 927 B
release/woocommerce-payments/dist/checkout.js 32.4 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 230 B
release/woocommerce-payments/dist/express-checkout.css 230 B
release/woocommerce-payments/dist/express-checkout.js 14.3 kB
release/woocommerce-payments/dist/frontend-tracks.js 858 B
release/woocommerce-payments/dist/index-rtl.css 39.2 kB
release/woocommerce-payments/dist/index.css 39.2 kB
release/woocommerce-payments/dist/index.js 302 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 4.5 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.5 kB
release/woocommerce-payments/dist/multi-currency.css 4.5 kB
release/woocommerce-payments/dist/multi-currency.js 57.2 kB
release/woocommerce-payments/dist/order-rtl.css 730 B
release/woocommerce-payments/dist/order.css 730 B
release/woocommerce-payments/dist/order.js 42 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.35 kB
release/woocommerce-payments/dist/payment-gateways.css 1.35 kB
release/woocommerce-payments/dist/payment-gateways.js 38.4 kB
release/woocommerce-payments/dist/payment-request-rtl.css 230 B
release/woocommerce-payments/dist/payment-request.css 230 B
release/woocommerce-payments/dist/payment-request.js 13.7 kB
release/woocommerce-payments/dist/plugins-page-rtl.css 386 B
release/woocommerce-payments/dist/plugins-page.css 386 B
release/woocommerce-payments/dist/plugins-page.js 20.1 kB
release/woocommerce-payments/dist/product-details-rtl.css 433 B
release/woocommerce-payments/dist/product-details.css 436 B
release/woocommerce-payments/dist/product-details.js 11.6 kB
release/woocommerce-payments/dist/settings-rtl.css 11.6 kB
release/woocommerce-payments/dist/settings.css 11.5 kB
release/woocommerce-payments/dist/settings.js 223 kB
release/woocommerce-payments/dist/subscription-edit-page.js 703 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.2 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 730 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.3 kB
release/woocommerce-payments/dist/tokenized-payment-request-rtl.css 230 B
release/woocommerce-payments/dist/tokenized-payment-request.css 230 B
release/woocommerce-payments/dist/tokenized-payment-request.js 14.5 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 235 B
release/woocommerce-payments/dist/tos.js 21.8 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 6.14 kB
release/woocommerce-payments/dist/woopay-express-button.js 24.1 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.54 kB
release/woocommerce-payments/dist/woopay.css 4.51 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 625 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 814 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.46 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/jetpack-script-data.js 735 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/react-jsx-runtime.js 553 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.02 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/script-data.js 69 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/babel.config.js 163 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.css 2.45 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.js 14.2 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.rtl.css 2.45 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.js 280 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.rtl.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.css 625 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.js 333 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.rtl.css 626 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-users.js 417 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 584 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.css 215 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.css 721 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.js 412 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-users.js 621 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.04 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 294 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 408 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.59 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 301 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 746 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 574 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 414 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 543 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.78 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.84 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 545 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.2 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.7 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 507 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 358 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 428 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 782 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.09 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.26 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 391 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.04 kB

compressed-size-action

@asumaran
Copy link
Contributor

@alefesouza I've tested you branch with the tool above to generate a JN instance using your branch and seems to be working fine.

However, when I tested it locally by pulling your branch, it didn’t behave as expected. In the attached video, you can see that the first time I click the button, the form doesn’t submit. There’s no validation error or anything else that could prevent submission. The form only submits on the second click.

Are you experiencing similar behavior, or could this be something specific to my setup? As I mentioned, it works fine on JN, but the issue occurs when testing locally.

Screen.Recording.2024-09-17.at.1.58.33.PM.mov

@asumaran
Copy link
Contributor

@alefesouza If ‘Pre-check’ is enabled and I fill in the input with my phone, it seems to work as expected.

@asumaran
Copy link
Contributor

asumaran commented Sep 17, 2024

Disabling WooPay also fixes "the issue". It works as expected after it.

@alefesouza
Copy link
Member Author

@asumaran I could not reproduce this issue locally using the following steps:

  • Disable pre-check
  • Add a subscription to the cart
  • Access blocks checkout
  • Click Place order
  • It should not work on the first try

Are the steps correct? Also I don't see the Save my info section on your video, did you run npm start locally? Could you check the browser console or Redux DevTools for any errors?

@asumaran
Copy link
Contributor

@alefesouza I've figured out why it fails for me. Normally, when I run my tests, fill in all the information and at the end, I uncheck the "Save my info" option to avoid creating an unnecessary WooPay account. But immediately after, I click "Sign up now" without waiting for the last batch request to finish. That’s why it works the second time, once the last request that updates the cart has completed.

I've tested with other fields and the behavior is the same. For example, when I modify the address and quickly click the ‘Sign up now’ button, the form doesn’t submit, but it works fine after the request has finished.

So, I think this is the expected behavior and I believe the "Save my info" section isn't introducing anything different."

I'll do a final round of tests and will finish my review.

@asumaran
Copy link
Contributor

Maybe the question is. Should the "Save my info" trigger a batch request when unchecking its checkbox? It doesn't seem to be saving anything.

@alefesouza
Copy link
Member Author

Should the "Save my info" trigger a batch request when unchecking its checkbox? It doesn't seem to be saving anything.

I see the request is sent here, it looks like we need it to save the phone information in session, this way we don't lose it when reloading or moving to another page, by sending an empty request when unchecking we are removing this information from session.

@asumaran
Copy link
Contributor

@alefesouza I see, that makes sense! I didn't test filling in the phone number.

Copy link
Contributor

@asumaran asumaran 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 with the following combinations:

  • Checkout Block.
  • Checkout Shortcode.
  • WooPay enabled.
  • WooPay disabled.
  • Precheck disabled.
  • Regular product
  • Express Checkout Disabled.
  • Checkout page
    • With regular theme.
    • With block theme.
  • Check "Save my info"
    • Creates woopay account.
  • With PayPal enabled.
    • Doesn’t support subscriptions.
  • WooPay auto redirect works normally.

and didn't found an issue.

Nice fix @alefesouza!

@alefesouza alefesouza added this pull request to the merge queue Sep 19, 2024
Merged via the queue into develop with commit c83f5de Sep 19, 2024
25 checks passed
@alefesouza alefesouza deleted the fix/woopay-pre-checking-save-my-info-place-order branch September 19, 2024 00:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Cannot place order on blocks checkout when buying a subscription while WooPay pre-checked is enabled
3 participants