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 UPE styles extraction in the Site Editor #10433

Merged
merged 6 commits into from
Feb 27, 2025

Conversation

danielmx-dev
Copy link
Contributor

@danielmx-dev danielmx-dev commented Feb 24, 2025

Fixes #10335

Changes proposed in this Pull Request

In order to prevent from bleeding into the page preview, the site editor embeds the contents into an iframe, however, react still runs in the context of the host page.

The code that extracts the style also runs within the context of the host page, so any reference to the global window and host document will refer to this host page, instead of the elements that are contained within the page preview, this means that none of the style extraction will be performed as expected.

In this PR, we'll make sure that we use the correct document and window objects when performing the style extraction process.

Testing instructions

  • Use the twenty twenty-five theme
  • Make sure you are using blocks checkout
  • Using the WCPay Dev tool, click on Delete UPE appearance transients. Make sure you don't have any other tabs/windows using checkout to prevent the styles from being computed before we finish our testing.
  • Go to Appearance > Editor > Pages > Select your checkout page

In develop

  • The inputs in the preview are displayed using a dark theme (even if we are using a light theme)
    image

  • If you open the actual checkout, the inputs will be dark:
    image

Current branch

  • The inputs will appear with a styling that is more similar to the rest of checkout
    image

  • If you open the actual checkout page, the styles should be consistent with the rest of the page
    image


  • 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

Copy link
Contributor

github-actions bot commented Feb 24, 2025

Size Change: +612 B (0%)

Total Size: 1.29 MB

Filename Size Change
release/woocommerce-payments/dist/blocks-checkout.js 55.5 kB +154 B (0%)
release/woocommerce-payments/dist/cart-block.js 17.3 kB +53 B (0%)
release/woocommerce-payments/dist/checkout.js 34.6 kB +70 B (0%)
release/woocommerce-payments/dist/express-checkout.js 15.8 kB +83 B (+1%)
release/woocommerce-payments/dist/product-details.js 12.6 kB +66 B (+1%)
release/woocommerce-payments/dist/settings.js 224 kB +57 B (0%)
release/woocommerce-payments/dist/tokenized-express-checkout.js 16.8 kB +71 B (0%)
release/woocommerce-payments/dist/woopay-express-button.js 23.4 kB +58 B (0%)
ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.4 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.4 kB
release/woocommerce-payments/assets/css/success.css 189 B
release/woocommerce-payments/assets/css/success.rtl.css 190 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.67 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.67 kB
release/woocommerce-payments/dist/cart.js 5.73 kB
release/woocommerce-payments/dist/checkout-rtl.css 1.28 kB
release/woocommerce-payments/dist/checkout.css 1.28 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 236 B
release/woocommerce-payments/dist/express-checkout.css 236 B
release/woocommerce-payments/dist/frontend-tracks.js 854 B
release/woocommerce-payments/dist/index-rtl.css 35.5 kB
release/woocommerce-payments/dist/index.css 35.6 kB
release/woocommerce-payments/dist/index.js 234 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 4.29 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 61.1 kB
release/woocommerce-payments/dist/multi-currency.css 4.29 kB
release/woocommerce-payments/dist/multi-currency.js 59.2 kB
release/woocommerce-payments/dist/order-rtl.css 740 B
release/woocommerce-payments/dist/order.css 740 B
release/woocommerce-payments/dist/order.js 42.6 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.34 kB
release/woocommerce-payments/dist/payment-gateways.css 1.34 kB
release/woocommerce-payments/dist/payment-gateways.js 40.2 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/settings-rtl.css 11.4 kB
release/woocommerce-payments/dist/settings.css 11.4 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-express-checkout-rtl.css 236 B
release/woocommerce-payments/dist/tokenized-express-checkout.css 236 B
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.13 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.31 kB
release/woocommerce-payments/dist/woopay.css 4.28 kB
release/woocommerce-payments/dist/woopay.js 71 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 772 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.47 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.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.css 10 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.js 28.4 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.rtl.css 10 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 424 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 585 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 632 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

@botwoo
Copy link
Collaborator

botwoo commented Feb 24, 2025

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 10433 or branch name fix/style-extraction-in-editor 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: 5e370c8
  • Build time: 2025-02-27 16:38:08 UTC

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

@danielmx-dev danielmx-dev marked this pull request as ready for review February 24, 2025 18:25
@@ -50,7 +50,7 @@ export const appearanceSelectors = {
pmmeRelativeTextSizeSelector: '.wc_payment_method > label',
},
blocksCheckout: {
appendTarget: '#contact-fields',
appendTarget: '.wc-block-checkout__contact-fields',
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I had to change since the original selector was not present in edit mode.

Comment on lines +48 to +55
watchPathIgnorePatterns: [
'/node_modules/',
'/vendor/',
'<rootDir>/.*/build/',
'<rootDir>/.*/build-module/',
'<rootDir>/docker/',
'<rootDir>/tests/e2e',
],
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is slightly unrelated to the PR but I'm always having issues when trying to run npm run test:watch due to the large number of files. Please let me know if I should revert this or put it in a separate PR.

@danielmx-dev danielmx-dev requested review from a team and frosso and removed request for a team February 24, 2025 18:30
Copy link
Contributor

@frosso frosso left a comment

Choose a reason for hiding this comment

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

I tested the changes with Chrome, Safari, Firefox, and they seem to behave consistently, so I think your approach is good 👍

In develop on the "preview" pages, I see the loading box match the theme's color scheme if a dark theme is used (in this case, with TT5):
Screenshot 2025-02-27 at 2 48 30 PM

But with these changes, I see the light color scheme for the preview:
Screenshot 2025-02-27 at 2 52 28 PM

Is that something that can be improved?

</Elements>
</LoadableBlock>
<div ref={ containerRef }>
<LoadableBlock isLoading={ ! appearance } numLines={ 3 }>
Copy link
Contributor

Choose a reason for hiding this comment

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

I suppose that it's a micro-optimization now, but what do you think of changing this line to

Suggested change
<LoadableBlock isLoading={ ! appearance } numLines={ 3 }>
<LoadableBlock isLoading={ ! appearance || !stripeForUPE } numLines={ 3 }>

and removing the if ( ! stripeForUPE ) check a few lines above?

I'm thinking that with your changes, the generateUPEAppearance() function won't be executed until stripeForUPE has been provided.
But if instead we move the conditional on stripeForUPE below, we can load Stripe and generate the UPE appearance concurrently.

/>
</Elements>
</LoadableBlock>
<div ref={ containerRef }>
Copy link
Contributor

Choose a reason for hiding this comment

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

(minor and optional, up to discussion) I have some (minor) concerns about wrapping the whole thing with this div.
I understand that it's necessary to get a reference for the getFontRulesFromPage/getAppearance functions.
I guess my concern lies with the possibility of breaking some CSS selectors 🤷

But what do you think about wrapping everything in a Fragment, and mounting this div just as an empty element somewhere within that fragment?

I'm thinking of something like this:

return (
		<>
			<LoadableBlock ...>
			  <Elements ... />
			</LoadableBlock>
			<div ref={ containerRef }></div>
		</>
);

Again, optional an up for discussion!

Copy link
Contributor

@frosso frosso 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 for connecting earlier @danielmx-dev !

In develop on the "preview" pages, I see the loading box match the theme's color scheme if a dark theme is used (in this case, with TT5)
But with these changes, I see the light color scheme for the preview:

I think we were able to pinpoint this to a skill issue on my side: it looks like I was probably using "light" inputs, instead of the dark ones 🤦

I'm good with your changes, since the other comments are pretty much optional 👍

Thanks again! :shipit:

Copy link
Contributor

@frosso frosso left a comment

Choose a reason for hiding this comment

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

Checked again, still looking good! Thank you for considering my comments!

@danielmx-dev danielmx-dev added this pull request to the merge queue Feb 27, 2025
Merged via the queue into develop with commit 0bf5df6 Feb 27, 2025
28 checks passed
@danielmx-dev danielmx-dev deleted the fix/style-extraction-in-editor branch February 27, 2025 17:29
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.

WooPayments card form fields are showing up in dark mode
3 participants