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

Add Skeleton loading component to the PMME element on the PDP #9166

Merged
merged 12 commits into from
Aug 1, 2024

Conversation

FangedParakeet
Copy link
Contributor

@FangedParakeet FangedParakeet commented Jul 25, 2024

Fixes #9126

Changes proposed in this Pull Request

Skeleton loader for BNPL PMME on PDP

To prevent the page from jumping when the BNPL PMME is loading on the product details page, this PR adds fixed dimensions to the PMME container and places a skeleton loading animation in place of the PMME, while it is still loading.

Testing instructions

  • Enable Affirm, Afterpay, Klarna in settings.
  • Visit product details page and view presence of skeleton loader while PMME is loading.
  • Test with multiple BNPL payment methods and single payment method enabled.
  • Test on both blocks (e.g. Twenty-Twenty Four) and shortcode (e.g. Storefront) themes.
Screen.Recording.2024-07-26.at.18.56.17.mov

  • 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

@botwoo
Copy link
Collaborator

botwoo commented Jul 25, 2024

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 9166 or branch name 9126/add-pmme-pdp-skeleton-loader 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: f079915
  • Build time: 2024-08-01 01:48:56 UTC

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

Copy link
Contributor

github-actions bot commented Jul 25, 2024

Size Change: +109 B (0%)

Total Size: 1.33 MB

Filename Size Change
release/woocommerce-payments/dist/product-details-rtl.css 433 B +36 B (+9%) 🔍
release/woocommerce-payments/dist/product-details.css 436 B +38 B (+10%) ⚠️
release/woocommerce-payments/dist/product-details.js 11.3 kB +35 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.21 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.21 kB
release/woocommerce-payments/dist/blocks-checkout.js 61.1 kB
release/woocommerce-payments/dist/bnpl-announcement-rtl.css 528 B
release/woocommerce-payments/dist/bnpl-announcement.css 529 B
release/woocommerce-payments/dist/bnpl-announcement.js 20.8 kB
release/woocommerce-payments/dist/cart-block.js 16.2 kB
release/woocommerce-payments/dist/cart.js 5.72 kB
release/woocommerce-payments/dist/checkout-rtl.css 600 B
release/woocommerce-payments/dist/checkout.css 600 B
release/woocommerce-payments/dist/checkout.js 31.7 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 235 B
release/woocommerce-payments/dist/express-checkout.css 235 B
release/woocommerce-payments/dist/express-checkout.js 14 kB
release/woocommerce-payments/dist/index-rtl.css 39.1 kB
release/woocommerce-payments/dist/index.css 39 kB
release/woocommerce-payments/dist/index.js 296 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.41 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.5 kB
release/woocommerce-payments/dist/multi-currency.css 3.41 kB
release/woocommerce-payments/dist/multi-currency.js 55.5 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.7 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 39.2 kB
release/woocommerce-payments/dist/payment-request-rtl.css 235 B
release/woocommerce-payments/dist/payment-request.css 235 B
release/woocommerce-payments/dist/payment-request.js 13.5 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/settings-rtl.css 11.2 kB
release/woocommerce-payments/dist/settings.css 11.1 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 235 B
release/woocommerce-payments/dist/tokenized-payment-request.css 235 B
release/woocommerce-payments/dist/tokenized-payment-request.js 14.3 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-rtl.css 235 B
release/woocommerce-payments/dist/woopay-express-button.css 235 B
release/woocommerce-payments/dist/woopay-express-button.js 23.9 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.5 kB
release/woocommerce-payments/dist/woopay.css 4.48 kB
release/woocommerce-payments/dist/woopay.js 71.1 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/src/js/i18n-loader.js 1.02 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 20 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 20 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 392 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 520 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/babel.config.js 159 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.css 2.36 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.6 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.36 kB
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

@gpressutto5
Copy link
Contributor

This implementation looks similar to the one in this comment, but it does not flicker when we replace the loader with the PMME. I see we use the same logic of removing the loader and setting the display of the PMME to block. Have you had a similar issue while working on this?

@FangedParakeet FangedParakeet marked this pull request as ready for review July 26, 2024 23:28
@FangedParakeet
Copy link
Contributor Author

but it does not flicker when we replace the loader with the PMME. I see we use the same logic of removing the loader and setting the display of the PMME to block. Have you had a similar issue while working on this?

@gpressutto5, I ended up smoothing this out by giving the PMME element and its contents defined dimensions and adding the loader as a fixed element inside it, so I didn't have to really remove and replace anything. That solved a lot of issues with bits of the DOM jumping around awkwardly, so perhaps that approach could be helpful on the cart as well.

That being said, the cart page reloads more readily than the PDP page, so I can't say whether this adds more of the flickering that you're encountering. If that is the case, I can't think of a very good solution from our perspective unfortunately.

@FangedParakeet FangedParakeet requested review from a team and brettshumaker and removed request for a team July 26, 2024 23:32
Copy link
Contributor

@brettshumaker brettshumaker left a comment

Choose a reason for hiding this comment

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

Just had a minor comment about some scss that should be resolved before merging.

client/product-details/bnpl-site-messaging/style.scss Outdated Show resolved Hide resolved
Copy link
Contributor

@gpressutto5 gpressutto5 left a comment

Choose a reason for hiding this comment

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

While working on the same approach for the blocks cart (#9107) I found a few issues:

1. 4rem is not always enough

image

This example uses:

font-family: 'Verdana';
font-size: 1.25rem;

2. empty space when element is not loaded

When the element is not properly loaded (because the price/product is invalid or because there was a server error) we will have an empty blank space. I simulated a server error by adding 127.0.0.1 m.stripe.network to my hosts file.

image

image

@FangedParakeet
Copy link
Contributor Author

  1. 4rem is not always enough

After refactoring the styles, I was able to remove the hidden overflow and used em instead of rem to measure the PMME container (this uses the size of the parent element, rather than the root HTML element). I think this provides a more consistent and appropriate height. Plus, this also allows the PMME to overflow slightly, in case the iframe content wraps and spills below.

No more cropping
No more cropping on narrow views

  1. empty space when element is not loaded

I raised that here -> #9126 (comment)

...and I think we're fine with this. Comparing the approach of other competitors, it seems somewhat standard to just leave this space empty if we are unable to display a PMME (see here -> #9126 (comment) )

AmericanEagle.com has a similar approach to what you proposed above. They've created some dedicated space that will or won't get filled depending if an offer is available.

@gpressutto5, made some fixes in 03caf47. Let me know if these compromises sound reasonable to you and if this does manage to solve a few problems for you on the cart-side implementation. 🙏

Copy link
Contributor

@brettshumaker brettshumaker left a comment

Choose a reason for hiding this comment

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

Thanks for addressing those issues. I agree with your fix for keeping the loading component generally constrained but allowing it to move to full width on more narrow views. 👍

@FangedParakeet
Copy link
Contributor Author

@pierorocca, following your feedback in #9107 (comment) ...

Let's make the skeleton occupy the full width of what it could take up. Looks cutoff and unbalanced.

...should we make the width of the skeleton on the PDP fill the full width of its container or keep it closer to the width of its contents? Examples below.

Screen.Recording.2024-07-31.at.2.59.23.PM.mov

Full width skeleton above.

Screen.Recording.2024-07-31.at.2.59.44.PM.mov

And the shorter, PMME-sized skeleton above here. Thoughts?

@pierorocca
Copy link
Contributor

pierorocca commented Jul 31, 2024

@FangedParakeet the latter of the two options. Nice work all collabing on optimizing this experience.

@FangedParakeet
Copy link
Contributor Author

the latter of the two options.

Awesome! That's what is implemented here. Onwards and upwards we go...

@FangedParakeet FangedParakeet added this pull request to the merge queue Aug 1, 2024
Merged via the queue into develop with commit ada8639 Aug 1, 2024
23 checks passed
@FangedParakeet FangedParakeet deleted the 9126/add-pmme-pdp-skeleton-loader branch August 1, 2024 02:00
rafaelzaleski pushed a commit that referenced this pull request Aug 27, 2024
Co-authored-by: Brett Shumaker <brettshumaker@gmail.com>
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.

Add Skeleton loading component to the PMME element on the PDP
5 participants