From 268db27162e8d2cd0252b1be9bf69006cf6323ca Mon Sep 17 00:00:00 2001 From: Stefan Malzner Date: Thu, 4 Jul 2019 15:54:27 +0200 Subject: Add trial onboarding during signup --- src/containers/auth/PricingScreen.js | 40 +++++++++++++++++++++-------- src/containers/layout/AppLayoutContainer.js | 4 +++ 2 files changed, 33 insertions(+), 11 deletions(-) (limited to 'src/containers') diff --git a/src/containers/auth/PricingScreen.js b/src/containers/auth/PricingScreen.js index 8d179a170..af1651931 100644 --- a/src/containers/auth/PricingScreen.js +++ b/src/containers/auth/PricingScreen.js @@ -5,7 +5,6 @@ import { RouterStore } from 'mobx-react-router'; import Pricing from '../../components/auth/Pricing'; import UserStore from '../../stores/UserStore'; -import PaymentStore from '../../stores/PaymentStore'; import { globalError as globalErrorPropType } from '../../prop-types'; @@ -14,20 +13,40 @@ export default @inject('stores', 'actions') @observer class PricingScreen extend error: globalErrorPropType.isRequired, }; + async submit() { + const { + actions, + stores, + } = this.props; + + const { activateTrialRequest } = stores.user; + const { defaultTrialPlan } = stores.features.features; + + actions.user.activateTrial({ planId: defaultTrialPlan }); + await activateTrialRequest._promise; + + if (!activateTrialRequest.isError) { + stores.router.push('/'); + stores.user.hasCompletedSignup = true; + } + } + render() { - const { actions, stores, error } = this.props; + const { + error, + stores, + } = this.props; - const nextStepRoute = stores.user.legacyServices.length ? stores.user.importRoute : stores.user.inviteRoute; + const { getUserInfoRequest, activateTrialRequest } = stores.user; + const { featuresRequest } = stores.features; return ( this.props.stores.router.push(nextStepRoute)} - isLoading={stores.payment.plansRequest.isExecuting} - isLoadingUser={stores.user.getUserInfoRequest.isExecuting} + onSubmit={this.submit.bind(this)} + isLoadingRequiredData={(getUserInfoRequest.isExecuting || !getUserInfoRequest.wasExecuted) || (featuresRequest.isExecuting || !featuresRequest.wasExecuted)} + isActivatingTrial={activateTrialRequest.isExecuting} + trialActivationError={activateTrialRequest.isError} error={error} - skipAction={() => this.props.stores.router.push(nextStepRoute)} /> ); } @@ -36,12 +55,11 @@ export default @inject('stores', 'actions') @observer class PricingScreen extend PricingScreen.wrappedComponent.propTypes = { actions: PropTypes.shape({ user: PropTypes.shape({ - signup: PropTypes.func.isRequired, + activateTrial: PropTypes.func.isRequired, }).isRequired, }).isRequired, stores: PropTypes.shape({ user: PropTypes.instanceOf(UserStore).isRequired, - payment: PropTypes.instanceOf(PaymentStore).isRequired, router: PropTypes.instanceOf(RouterStore).isRequired, }).isRequired, }; diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js index cf3da71e8..b4e32cffa 100644 --- a/src/containers/layout/AppLayoutContainer.js +++ b/src/containers/layout/AppLayoutContainer.js @@ -10,6 +10,7 @@ import FeaturesStore from '../../stores/FeaturesStore'; import UIStore from '../../stores/UIStore'; import NewsStore from '../../stores/NewsStore'; import SettingsStore from '../../stores/SettingsStore'; +import UserStore from '../../stores/UserStore'; import RequestStore from '../../stores/RequestStore'; import GlobalErrorStore from '../../stores/GlobalErrorStore'; @@ -39,6 +40,7 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e settings, globalError, requests, + user, } = this.props.stores; const { @@ -125,6 +127,7 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e reload={reload} openSettings={openSettings} update={updateService} + userHasCompletedSignup={user.hasCompletedSignup} /> ); @@ -166,6 +169,7 @@ AppLayoutContainer.wrappedComponent.propTypes = { ui: PropTypes.instanceOf(UIStore).isRequired, news: PropTypes.instanceOf(NewsStore).isRequired, settings: PropTypes.instanceOf(SettingsStore).isRequired, + user: PropTypes.instanceOf(UserStore).isRequired, requests: PropTypes.instanceOf(RequestStore).isRequired, globalError: PropTypes.instanceOf(GlobalErrorStore).isRequired, }).isRequired, -- cgit v1.2.3-70-g09d2