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 the prompt "Are you satisfied with WooPayments?" for eligible merchants, behind feature flag #10370

Open
wants to merge 27 commits into
base: develop
Choose a base branch
from

Conversation

Jinksi
Copy link
Member

@Jinksi Jinksi commented Feb 14, 2025

Resolves #10326
Partially resolves #10331 by adding tracks events for some interactions introduced in this PR

Changes proposed in this Pull Request

image

Pages where this is visible:

  • Payments overview
  • Capital loans list
  • Payout list
  • Payout detail
  • Dispute list (not dispute challenge form, to not bother merchants while responding to dispute)
  • Documents list
  • Transactions list
  • Transactions detail

Temporary snackbar implementation / hack

  • The snackbar was heavily customised using custom React markup to workaround the following limitations:
    • The bundled @wordpress/components version in WooPayments doesn't support explicit dismiss button (x)
    • The @wordpress/components Snackbar/SnackbarList doesn't allow two actions to be rendered
    • The core/notices createNotice() only accepts a single action and no custom React markup
  • This prompt is a "shadow" SnackbarList that uses a React portal to place this snackbar in the same position that WC-wide createNotice() snackbars are rendered.
  • This workaround/hack will remain in place until, either:
    • We remove the prompt at the end of the campaign
    • The required changes to Snackbar are introduced to Gutenberg and WooPayments unbundles/upgrades to the required wp.components version

Important

This prompt is only visible if the development feature flag _wcpay_feature_prompt_merchant_for_review is enabled

Testing instructions

  • Checkout the transact-platform-server PR https://github.com/Automattic/transact-platform-server/pull/7246 this has been deployed
  • Enable the dev feature flag _wcpay_feature_prompt_merchant_for_review.
    • update_option( '_wcpay_feature_prompt_merchant_for_review', '1' )
  • Ensure your store meets the campaign elibility criteria from the server PR linked above, or manually set 'wporgReview2025' => true here
  • Visit Payments → Overview or any of the pages mentioned in the PR description.
  • Ensure you see the new snackbar prompt.
  • Ensure the prompt disappears if other snackbar notices are presented, e.g. when exporting CSV reports from the Transactions List screen.
  • Ensure the snackbar is dismissed when clicking yes, no, X or the snackbar itself.
  • Ensure tracks events are recorded when the snackbar is rendered and for each interaction event.
  • Visiting other Payments screens listed above will render the bar after dismissing: this dismiss behaviour will be persisted in a separate issue Task: Hide the review prompt on user interactions #10329
  • With the dev feature flag or campaign eligibility flag disabled, you should not see any notice on any WooPayments page, e.g. Overview, Transactions, Disputes, etc.

  • 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 Feb 14, 2025

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 10370 or branch name add/10326-add-prompt-for-review 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: b387cd8
  • Build time: 2025-02-27 04:46:03 UTC

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

Copy link
Contributor

github-actions bot commented Feb 14, 2025

Size Change: +1.61 kB (0%)

Total Size: 1.29 MB

Filename Size Change
release/woocommerce-payments/dist/index-rtl.css 35.6 kB +71 B (0%)
release/woocommerce-payments/dist/index.css 35.6 kB +72 B (0%)
release/woocommerce-payments/dist/index.js 235 kB +1.47 kB (+1%)
ℹ️ 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/blocks-checkout.js 55.3 kB
release/woocommerce-payments/dist/cart-block.js 17.3 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/checkout.js 34.6 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 236 B
release/woocommerce-payments/dist/express-checkout.css 236 B
release/woocommerce-payments/dist/express-checkout.js 15.7 kB
release/woocommerce-payments/dist/frontend-tracks.js 854 B
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/product-details.js 12.5 kB
release/woocommerce-payments/dist/settings-rtl.css 11.4 kB
release/woocommerce-payments/dist/settings.css 11.4 kB
release/woocommerce-payments/dist/settings.js 224 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/tokenized-express-checkout.js 16.7 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.13 kB
release/woocommerce-payments/dist/woopay-express-button.js 23.3 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

Copy link
Contributor

@haszari haszari left a comment

Choose a reason for hiding this comment

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

Left some comments – mainly me exploring the different flags and getting a feel for this.

The key feedback (likely already on your radar, WIP!) is to clearly document the various flags (across plugin and service) and which are for production / launch vs to help us during development.

@@ -17,6 +17,7 @@ declare global {
paymentTimeline: boolean;
isDisputeIssuerEvidenceEnabled: boolean;
isPaymentOverviewWidgetEnabled?: boolean;
isMerchantFeedbackPromptEnabled: boolean;
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this the same as the server side eligibility flag (i.e. is this a placeholder)?

Copy link
Member Author

Choose a reason for hiding this comment

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

This is a client-only dev flag, needed to allow us to push in-development code to trunk. I've renamed to clarify in in 6d0e870.

@@ -69,6 +70,9 @@ declare global {
declineOnAVSFailure: boolean;
declineOnCVCFailure: boolean;
};
campaigns: {
wporgReview2025: boolean;
};
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we need to document campaigns somewhere? Feels like a new concept. Also will all the children of it follow similar rules (e.g. inactive if MIA etc)?

Copy link
Contributor

Choose a reason for hiding this comment

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

Should we use campaigns.wporgReview2025 to track if merchant has responded or dismissed?

If campaigns.wporgReview2025 stays boolean, how can we rename it so it's super obvious how it works / what it is?

Copy link
Member Author

Choose a reason for hiding this comment

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

I've added some comments in ed1e318 to clarify this.

@@ -393,4 +395,13 @@ private static function is_woopayments_gateway_enabled() {

return 'yes' === $woopayments_enabled_setting;
}

/**
* Checks if the merchant feedback prompt feature flag is enabled.
Copy link
Contributor

Choose a reason for hiding this comment

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

Might as well use this comment to clearly define/document this feature flag.

Is this a temporary feature flag, to allow us to ship the code and opt-in manually to test (e.g. on local or staging sites)?

When the dust settles on this PR will be useful to document the various flags at plugin and service level, and which are for development purposes vs. to manage eligibility and dismiss state (etc) after launch.

Copy link
Member Author

@Jinksi Jinksi Feb 25, 2025

Choose a reason for hiding this comment

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

I've added a comment here and renamed this across the codebase to clarify that this is a temporary, development feature-flag in 6d0e870

@Jinksi Jinksi marked this pull request as ready for review February 25, 2025 04:58
@Jinksi Jinksi requested a review from a team February 25, 2025 05:16
@Jinksi Jinksi changed the title [WIP] Add the prompt "Are you satisfied with WooPayments?" Add the prompt "Are you satisfied with WooPayments?" for eligible merchants, behind feature flag Feb 25, 2025
* See https://github.com/WordPress/gutenberg/blob/c300edfebb48f79f6f0f6643ce04dd73303c5fcb/packages/components/src/snackbar/index.tsx#L119-L126
*/
content: (
<Flex
Copy link

Choose a reason for hiding this comment

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

Using VStack could be a simpler way to achieve the same layout

Copy link
Member Author

Choose a reason for hiding this comment

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

Thanks @ciampo, TIL about VStack!

Unfortunately, our outdated bundled version of @wordpress/components (19.8.5) and the deprecated @types/wordpress__components doesn't allow me to import VStack or __experimentalVStack, so I'd need to either override the type definitions manually or update the components or @types library versions, both out of scope for this UI change.

I'd also be concerned about using an early (3+ years old) version of an experimental component, when Flex seems to do the trick well enough.

Copy link

Choose a reason for hiding this comment

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

Got it. I strongly recommend updating @wordpress/* dependencies, since, as you also mention, they are 3+ years old. The package has been shipping its own types for a while, on top of adding several improvements and features.

Copy link
Member Author

@Jinksi Jinksi Feb 27, 2025

Choose a reason for hiding this comment

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

Yes 100% agree @ciampo, these problems are only going to get worse as time goes on. This is a known issue that we're prioritising in these P2 posts:

Aligning WooPayments with the WordPress component package
and
Spike: How WooPayments imports, bundles, and overrides styles from WP components

Copy link
Contributor

@jessy-p jessy-p left a comment

Choose a reason for hiding this comment

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

Tested ✅
image

As already mentioned in the issue, snackbar is re-rendered on refresh of page even after dismissing, which will be fixed in #10329

@Jinksi
Copy link
Member Author

Jinksi commented Feb 27, 2025

PS @Automattic/helix if anyone approves this, please feel free to merge to help unblock subsequent project PRs 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
6 participants