Skip to content

Conversation

@dmallory42
Copy link
Contributor

@dmallory42 dmallory42 commented Nov 21, 2025

Fixes WOOPMNT-5463

Changes proposed in this Pull Request

This PR integrates the spotlight promotion component on three pages in the admin:

  • WooPayments overview page
  • WooPayments settings page
  • WooCommerce payment settings page (WC 9.9.2+ only)

The spotlight component displays promotional content by fetching promotion data from the promotions API and rendering the first available spotlight variation. It only displays when the account is fully onboarded (status: 'complete' or 'enabled').

Testing instructions

Prerequisites:

  • Ensure WooCommerce 9.9.2+ is installed
  • Run npm install and npm start

Unit Tests:

# PHP tests
npm run test:php -- --filter=WC_Payments_Admin

# JavaScript tests  
npm run test:js -- client/promotions/spotlight/__tests__/

Manual Testing:

Note: this is just a test promotion so the text doesn't match the designs yet.

  1. WooPayments Overview page - Navigate to WooPayments > Overview

    • Verify spotlight appears in bottom-right corner after 4 seconds (if promotion data is available)
    • Click "Activate" button - should call activation endpoint
    • Click "Learn more" - should open link in new tab
    • Click X to dismiss - should hide spotlight
  2. WooPayments Settings page - Navigate to WooPayments > Settings

    • Same behavior as Overview page
  3. WooCommerce Payment Settings page - Navigate to WooCommerce > Settings > Payments

    • Same behavior as above (only on WC 9.9.2+)
    • On WC < 9.9.2, spotlight should not appear
  4. Verify correct page detection - Navigate to other admin pages and verify spotlight does not appear

  5. Account status check - The spotlight should only appear when account is onboarded (status 'complete' or 'enabled')

Screenshots

Screenshot 2025-11-21 at 11 34 36 Screenshot 2025-11-21 at 11 34 23 Screenshot 2025-11-21 at 11 34 14
  • 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

dmallory42 and others added 3 commits November 21, 2025 11:19
This implements WOOPMNT-5463 to display spotlight promotions on three pages:
1. WooPayments overview page
2. WooPayments settings page
3. WooCommerce payment settings page (WC 9.9.2+ only)

**Frontend Changes:**
- Create SpotlightPromotion container component at client/promotions/spotlight/
- Integrates with promotions API using usePromotions() and usePromotionActions() hooks
- Only displays if account is onboarded (status 'complete' or 'enabled')
- Finds first available promotion with 'spotlight' variation type
- Supports footnotes and terms & conditions URLs
- Integrated into overview and settings pages with ErrorBoundary

**Spotlight Component Improvements:**
- Fix animation timing issue on overview page using double requestAnimationFrame
- Ensures browser paints initial state before applying animation class
- Load SVG using ?asset suffix pattern to avoid bundling in JS

**WC Payment Settings Integration:**
- Create standalone entry point at client/wc-payment-settings-spotlight.js
- Add webpack entry for wc-payment-settings-spotlight bundle
- Register and enqueue script/styles in WC_Payments_Admin class
- Add WooCommerce 9.9.2+ version check (when new payment settings enabled)
- Use admin_footer hook to inject container div safely
- Localize wcpaySettings to provide account data to component

**PHP Implementation:**
- Add enqueue_wc_payment_settings_spotlight() method with version check
- Add inject_payment_settings_spotlight_container() method
- Add is_wc_payment_settings_page() helper to detect correct page
- Register WCPAY_WC_PAYMENT_SETTINGS_SPOTLIGHT script and style

**Tests:**
- Add 5 unit tests for new WC_Payments_Admin methods
- Test page detection logic (correct page, wrong page, with section param)
- Test container injection behavior

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add 11 comprehensive unit tests for SpotlightPromotion container
- Test rendering with different account onboarding statuses
- Test promotion data filtering (spotlight vs other types)
- Test loading states and empty data scenarios
- Test user interactions (activate, dismiss, learn more)
- Test disclaimer rendering with and without terms link
- Mock usePromotions, usePromotionActions hooks and wcpaySettings global
- All tests passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@dmallory42 dmallory42 changed the base branch from develop to add/payment-method-promotions November 21, 2025 11:31
@github-actions
Copy link
Contributor

github-actions bot commented Nov 21, 2025

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 11147 or branch name add/spotlight-integration-WOOPMNT-5463 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: 1d22eaa
  • Build time: 2025-11-21 18:39:23 UTC

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

@github-actions
Copy link
Contributor

github-actions bot commented Nov 21, 2025

Size Change: +24.8 kB (+3%)

Total Size: 903 kB

Filename Size Change
release/woocommerce-payments/dist/index-rtl.css 21.6 kB +397 B (+2%)
release/woocommerce-payments/dist/index.css 21.6 kB +398 B (+2%)
release/woocommerce-payments/dist/index.js 155 kB +1.03 kB (+1%)
release/woocommerce-payments/dist/settings-rtl.css 12.2 kB +356 B (+3%)
release/woocommerce-payments/dist/settings.css 12 kB +353 B (+3%)
release/woocommerce-payments/dist/settings.js 142 kB +1.06 kB (+1%)
release/woocommerce-payments/dist/wc-payment-settings-spotlight-rtl.css 1.3 kB +1.3 kB (new file) 🆕
release/woocommerce-payments/dist/wc-payment-settings-spotlight.css 1.3 kB +1.3 kB (new file) 🆕
release/woocommerce-payments/dist/wc-payment-settings-spotlight.js 18.6 kB +18.6 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.45 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.45 kB
release/woocommerce-payments/assets/css/success.css 1.06 kB
release/woocommerce-payments/assets/css/success.rtl.css 1.06 kB
release/woocommerce-payments/dist/blocks-checkout-rtl.css 3.05 kB
release/woocommerce-payments/dist/blocks-checkout.css 3.05 kB
release/woocommerce-payments/dist/blocks-checkout.js 54.6 kB
release/woocommerce-payments/dist/cart-block-rtl.css 113 B
release/woocommerce-payments/dist/cart-block.css 112 B
release/woocommerce-payments/dist/cart-block.js 16.7 kB
release/woocommerce-payments/dist/cart.js 5.27 kB
release/woocommerce-payments/dist/checkout-rtl.css 1.13 kB
release/woocommerce-payments/dist/checkout.css 1.13 kB
release/woocommerce-payments/dist/checkout.js 34.6 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 367 B
release/woocommerce-payments/dist/express-checkout.css 367 B
release/woocommerce-payments/dist/express-checkout.js 16.9 kB
release/woocommerce-payments/dist/frontend-tracks.js 833 B
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.82 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 18.8 kB
release/woocommerce-payments/dist/multi-currency.css 3.83 kB
release/woocommerce-payments/dist/multi-currency.js 25.3 kB
release/woocommerce-payments/dist/order-rtl.css 740 B
release/woocommerce-payments/dist/order.css 740 B
release/woocommerce-payments/dist/order.js 21.9 kB
release/woocommerce-payments/dist/plugins-page-rtl.css 484 B
release/woocommerce-payments/dist/plugins-page.css 484 B
release/woocommerce-payments/dist/plugins-page.js 2.64 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 12.3 kB
release/woocommerce-payments/dist/subscription-edit-page.js 703 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 1.98 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 1.9 kB
release/woocommerce-payments/dist/success.js 6.03 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 235 B
release/woocommerce-payments/dist/tos.js 3 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 5.68 kB
release/woocommerce-payments/dist/woopay-express-button.js 22.8 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.27 kB
release/woocommerce-payments/dist/woopay.css 4.25 kB
release/woocommerce-payments/dist/woopay.js 70.8 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 957 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.3 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.1 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.js 29.7 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.rtl.css 10.1 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/jetpack-users-connection.js 161 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 625 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

@dmallory42 dmallory42 requested a review from a team November 21, 2025 11:45
- Create spotlightImages mapping to link promo_id to local image assets
- Update mock promotion to use 'klarna-2026-promo' as promo_id
- Promotions without mapped images will render without an image
- Allows easy addition of new promotion images by updating the mapping
Add specific CSS rule to override WC settings page styles that remove box-shadow from cards. Uses higher specificity selector instead of !important.
@dmallory42 dmallory42 self-assigned this Nov 21, 2025
Copy link
Contributor

@mordeth mordeth left a comment

Choose a reason for hiding this comment

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

✅ Code changes are looking good!
✅ Unit tests are passing successfully!
❌ All CI jobs are failing.
✅ Testing instructions are checking out correctly!

Image Image

@dmallory42 dmallory42 merged commit 20527e8 into add/payment-method-promotions Nov 21, 2025
24 checks passed
@dmallory42 dmallory42 deleted the add/spotlight-integration-WOOPMNT-5463 branch November 21, 2025 18:44
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.

3 participants