-
Notifications
You must be signed in to change notification settings - Fork 2k
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
GF Signup : Experiment Allow Paid Domain redirect For all Domains #80647
Conversation
@@ -211,7 +211,7 @@ const PlansFeaturesMain = ( { | |||
isSpotlightOnCurrentPlan, | |||
}: PlansFeaturesMainProps ) => { | |||
const [ isFreePlanPaidDomainDialogOpen, setIsFreePlanPaidDomainDialogOpen ] = useState( false ); | |||
const [ isFreeFreeUpsellOpen, setIsFreeFreeUpsellOpen ] = useState( false ); | |||
const [ isFreePlanFreeDomainDialogOpen, setIsFreePlanFreeDomainDialogOpen ] = useState( false ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unrelated: Renamed a confusing variable.
Here is how your PR affects size of JS and CSS bundles shipped to the user's browser: Sections (~108 bytes added 📈 [gzipped])
Sections contain code specific for a given set of routes. Is downloaded and parsed only when a particular route is navigated to. Async-loaded Components (~155 bytes added 📈 [gzipped])
React components that are loaded lazily, when a certain part of UI is displayed for the first time. Legend What is parsed and gzip size?Parsed Size: Uncompressed size of the JS and CSS files. This much code needs to be parsed and stored in memory. Generated by performance advisor bot at iscalypsofastyet.com. |
39cd7cf
to
3249370
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good so far and tests well for both onboarding
and onboarding-pm
.
We are splitting the tests so that the onboarding
flow uses calypso_onboarding_plans_paid_domain_on_free_plan
and the onboarding-pm
flow uses calypso_onboardingpm_plans_paid_domain_on_free_plan
.
): DataResponse< boolean > => { | ||
const [ isLoadingAssignment, experimentAssignment ] = useExperiment( | ||
'calypso_onboarding_plans_dotblog_on_free_plan_202307', | ||
const [ isLoadingAnyDomainExperiment, assignmentAnyDomainExperiment ] = useExperiment( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider using the word "paid" in AnyPaidDomain here!
c32a51f
to
86213e9
Compare
client/my-sites/plans-features-main/hooks/use-is-custom-domain-allowed-on-free-plan.ts
Show resolved
Hide resolved
client/my-sites/plans-features-main/hooks/use-is-custom-domain-allowed-on-free-plan.ts
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Thanks for answering all of my questions, @jdc91.
It looks like the loading placeholder in the modal is somehow broken in this PR, or has been broken at some points in the past 🤔 By clicking on either the Free plan button or the "start with a free plan" anchor with a paid domain picked, it will silently do nothing, until the experiment is loaded and another click on them: 2023-08-22.3.13.24.movFrom the modal code, the original idea should be that a loading placeholder is shown instead of nothing happening: https://github.com/Automattic/wp-calypso/blob/trunk/client/my-sites/plans-features-main/components/free-plan-paid-domain-dialog.tsx#L356 . I feel this is an important UX issue to fix before launching. @jdc91 could you look into it? |
Good catch James I will work on this! |
@jdc91 Sorry that my previous comment wasn't clear enough. The new change has added a loading placeholder to the "Start with a free plan" anchor-like button. However, it's also happening on 2023-08-23.10.53.37.movI actually think your solution is more fine-tuned. However, it's in the experimental stage so I'm thinking we can just show a loading placeholder inside the modal when the experiments hasn't been loaded yet. That should be applicable for both |
@jdc91 The unresponsive clicks on the free button issue has surely been resolved by 7bd5229. However, there are two things I'm not sure I understand:
Sorry if I review the changes too soon. Since our timezone is quite far apart now, I thought I'd just leave what's in my mind early :) |
@jdc91 I think you could avoid the timing issues w/ test assignment by assigning folks to both tests on the Domains step and have logic in the modal to check for which variant to show and fire the appropriate exposure event. That should eliminate the need for a placeholder and would probably let you simplify the conditionals in plans-features-main CC @aaronyan |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since @jeyip has already done a comprehensive test, I've mostly focused on reviewing and checking for edge conditions. It works and LGTM 🚢
@donlair Thanks for proposing the idea of preloading the experiments in the domain step, which surely will greatly help the user experience. I just wanted to point out that preloading or not, we will still need to implement the blocking logics, since that's for guaranteeing the logical correctness; preloading is only for a better user experience. e.g. In my ~10 times of testing this PR in thie round of review, I still did see the loading placeholder shown once, so chances are that people on a not-so-good connection will need this guarantee :)
text: TranslateResult; | ||
callback?: () => void; | ||
text?: TranslateResult; | ||
status?: 'blocked' | 'enabled'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: it looks like the only value in use is 'blocked'
, which means it's likely can be just isBusy
of boolean value, but I'm fine with leaving it this way :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I actually was struggling to find a proper term but I think I just got it. How about, 'disabled' | 'enabled' | 'busy' ?
This Pull Request is now available for translation here: https://translate.wordpress.com/deliverables/8804914 Thank you @jdc91 for including a screenshot in the description! This is really helpful for our translators. |
Translation for this Pull Request has now been finished. |
Related to
Proposed Changes
any custom paid domain
is selected.Typical Testing Path
/start
or/start/onboarding-pm
flow, and picka .blog domainANY PAID DOMAIN in the domain step.Comprehensive experiment testing plan including regression tests
Experiment
calypso_onboardingpm_plans_paid_domain_on_free_plan
Preconditions
onboarding-pm
flowEvent : Click on
Start with a free plan
link on the page subtitleExperiment
calypso_onboarding_plans_paid_domain_on_free_plan
Preconditions
onboarding
flowEvent : Click on the free plan button
Experiment
calypso_gf_signup_onboarding_pm_free_free_dont_miss_out_modal_v3
Preconditions
onboarding-pm
flowEvent : Click on
Start with a free plan
link on the page subtitleProceed to next step
Experiment
calypso_gf_signup_onboarding_free_free_dont_miss_out_modal_v3
Preconditions
onboarding
flowEvent : Click on the free plan button
Proceed to next step
Pre-merge Checklist