aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2019-10-17 14:16:12 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2019-10-17 14:16:12 +0200
commit33e4a10c6edc76708682f022585423b0af4c28bf (patch)
treee0f1bc3e11c40708df6e66340c39a7ea7625f9dd /src
parentAutomatic i18n update (i18n.meetfranz.com) (diff)
parentupdate strings (diff)
downloadferdium-app-33e4a10c6edc76708682f022585423b0af4c28bf.tar.gz
ferdium-app-33e4a10c6edc76708682f022585423b0af4c28bf.tar.zst
ferdium-app-33e4a10c6edc76708682f022585423b0af4c28bf.zip
Merge branch 'release/5.4.0-beta.3' into i18n
Diffstat (limited to 'src')
-rw-r--r--src/actions/user.js4
-rw-r--r--src/api/server/ServerApi.js2
-rw-r--r--src/components/auth/Pricing.js92
-rw-r--r--src/components/settings/account/AccountDashboard.js9
-rw-r--r--src/containers/auth/PricingScreen.js17
-rw-r--r--src/containers/auth/SignupScreen.js22
-rw-r--r--src/containers/settings/AccountScreen.js12
-rw-r--r--src/features/delayApp/Component.js2
-rw-r--r--src/features/planSelection/components/PlanSelection.js4
-rw-r--r--src/features/trialStatusBar/containers/TrialStatusBarScreen.js2
-rw-r--r--src/i18n/locales/defaultMessages.json85
-rw-r--r--src/i18n/locales/en-US.json17
-rw-r--r--src/i18n/messages/src/components/auth/Pricing.json81
-rw-r--r--src/i18n/messages/src/features/delayApp/Component.json2
-rw-r--r--src/i18n/messages/src/features/planSelection/components/PlanSelection.json2
-rw-r--r--src/stores/AppStore.js3
-rw-r--r--src/stores/FeaturesStore.js1
-rw-r--r--src/stores/UserStore.js4
-rw-r--r--src/styles/settings.scss2
19 files changed, 263 insertions, 100 deletions
diff --git a/src/actions/user.js b/src/actions/user.js
index 5d7d9a899..7061a367a 100644
--- a/src/actions/user.js
+++ b/src/actions/user.js
@@ -11,8 +11,10 @@ export default {
11 lastname: PropTypes.string.isRequired, 11 lastname: PropTypes.string.isRequired,
12 email: PropTypes.string.isRequired, 12 email: PropTypes.string.isRequired,
13 password: PropTypes.string.isRequired, 13 password: PropTypes.string.isRequired,
14 accountType: PropTypes.string.isRequired, 14 accountType: PropTypes.string,
15 company: PropTypes.string, 15 company: PropTypes.string,
16 plan: PropTypes.string,
17 currency: PropTypes.string,
16 }, 18 },
17 retrievePassword: { 19 retrievePassword: {
18 email: PropTypes.string.isRequired, 20 email: PropTypes.string.isRequired,
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js
index f56c7b6e4..1f538368d 100644
--- a/src/api/server/ServerApi.js
+++ b/src/api/server/ServerApi.js
@@ -87,7 +87,7 @@ export default class ServerApi {
87 } 87 }
88 const trial = await request.json(); 88 const trial = await request.json();
89 89
90 debug('ServerApi::signup resolves', trial); 90 debug('ServerApi::activateTrial resolves', trial);
91 return true; 91 return true;
92 } 92 }
93 93
diff --git a/src/components/auth/Pricing.js b/src/components/auth/Pricing.js
index 67af04470..86b6a4263 100644
--- a/src/components/auth/Pricing.js
+++ b/src/components/auth/Pricing.js
@@ -13,12 +13,20 @@ import { FeatureList } from '../ui/FeatureList';
13 13
14const messages = defineMessages({ 14const messages = defineMessages({
15 headline: { 15 headline: {
16 id: 'pricing.trial.headline', 16 id: 'pricing.trial.headline.pro',
17 defaultMessage: '!!!Franz Professional', 17 defaultMessage: '!!!Hi {name}, welcome to Franz',
18 }, 18 },
19 personalOffer: { 19 specialTreat: {
20 id: 'pricing.trial.subheadline', 20 id: 'pricing.trial.intro.specialTreat',
21 defaultMessage: '!!!Here\'s a special welcome for you:', 21 defaultMessage: '!!!We have a special treat for you.',
22 },
23 tryPro: {
24 id: 'pricing.trial.intro.tryPro',
25 defaultMessage: '!!!Enjoy the full Franz Professional experience completely free for 14 days.',
26 },
27 happyMessaging: {
28 id: 'pricing.trial.intro.happyMessaging',
29 defaultMessage: '!!!Happy messaging,',
22 }, 30 },
23 noStringsAttachedHeadline: { 31 noStringsAttachedHeadline: {
24 id: 'pricing.trial.terms.headline', 32 id: 'pricing.trial.terms.headline',
@@ -44,6 +52,10 @@ const messages = defineMessages({
44 id: 'pricing.trial.cta.accept', 52 id: 'pricing.trial.cta.accept',
45 defaultMessage: '!!!Start my 14-day Franz Professional Trial ', 53 defaultMessage: '!!!Start my 14-day Franz Professional Trial ',
46 }, 54 },
55 ctaStart: {
56 id: 'pricing.trial.cta.start',
57 defaultMessage: '!!!Start using Franz',
58 },
47 ctaSkip: { 59 ctaSkip: {
48 id: 'pricing.trial.cta.skip', 60 id: 'pricing.trial.cta.skip',
49 defaultMessage: '!!!Continue to Franz', 61 defaultMessage: '!!!Continue to Franz',
@@ -98,6 +110,34 @@ const styles = theme => ({
98 margin: [20, 0, 0], 110 margin: [20, 0, 0],
99 color: theme.styleTypes.danger.accent, 111 color: theme.styleTypes.danger.accent,
100 }, 112 },
113 priceContainer: {
114 display: 'flex',
115 justifyContent: 'space-evenly',
116 margin: [10, 0, 15],
117 },
118 price: {
119 '& sup': {
120 verticalAlign: 14,
121 fontSize: 20,
122 },
123 },
124 figure: {
125 fontSize: 40,
126 },
127 regularPrice: {
128 position: 'relative',
129
130 '&:before': {
131 content: '" "',
132 position: 'absolute',
133 width: '130%',
134 height: 1,
135 top: 14,
136 left: -12,
137 borderBottom: [3, 'solid', 'red'],
138 transform: 'rotateZ(-20deg)',
139 },
140 },
101}); 141});
102 142
103export default @observer @injectSheet(styles) class Signup extends Component { 143export default @observer @injectSheet(styles) class Signup extends Component {
@@ -129,6 +169,8 @@ export default @observer @injectSheet(styles) class Signup extends Component {
129 } = this.props; 169 } = this.props;
130 const { intl } = this.context; 170 const { intl } = this.context;
131 171
172 const [intPart, fractionPart] = (price).toString().split('.');
173
132 return ( 174 return (
133 <div className={classnames('auth__scroll-container', classes.container)}> 175 <div className={classnames('auth__scroll-container', classes.container)}>
134 <div className={classnames('auth__container', 'auth__container--signup', classes.content)}> 176 <div className={classnames('auth__container', 'auth__container--signup', classes.content)}>
@@ -140,25 +182,39 @@ export default @observer @injectSheet(styles) class Signup extends Component {
140 alt="" 182 alt=""
141 /> 183 />
142 )} 184 )}
143 <p className={classes.welcomeOffer}>{intl.formatMessage(messages.personalOffer)}</p> 185 <h1>{intl.formatMessage(messages.headline, { name: 'Stefan' })}</h1>
144 <h1>{intl.formatMessage(messages.headline)}</h1>
145 <div className="auth__letter"> 186 <div className="auth__letter">
146 <p> 187 <p>
147 We built Franz with a lot of effort, manpower and love, 188 {intl.formatMessage(messages.specialTreat)}
148 to boost up your messaging experience.
149 <br /> 189 <br />
150 </p> 190 </p>
151 <p> 191 <p>
152 For the next 14 days, we are going to give you the full Franz Professional experience so you can watch your communication evolve! 192 {intl.formatMessage(messages.tryPro)}
153 <br /> 193 <br />
154 </p> 194 </p>
155 <p> 195 <p>
156 Thanks for being a hero. 196 {intl.formatMessage(messages.happyMessaging)}
157 </p> 197 </p>
158 <p> 198 <p>
159 <strong>Stefan Malzner</strong> 199 <strong>Stefan Malzner</strong>
160 </p> 200 </p>
161 </div> 201 </div>
202 <div className={classes.priceContainer}>
203 <p className={classnames(classes.price, classes.regularPrice)}>
204 <span className={classes.figure}>
205 {currency}
206 {intPart}
207 </span>
208 <sup>{fractionPart}</sup>
209 </p>
210 <p className={classnames(classes.price, classes.trialPrice)}>
211 <span className={classes.figure}>
212 {currency}
213 0
214 </span>
215 <sup>00</sup>
216 </p>
217 </div>
162 <div className={classes.keyTerms}> 218 <div className={classes.keyTerms}>
163 <H2> 219 <H2>
164 {intl.formatMessage(messages.noStringsAttachedHeadline)} 220 {intl.formatMessage(messages.noStringsAttachedHeadline)}
@@ -179,7 +235,7 @@ export default @observer @injectSheet(styles) class Signup extends Component {
179 <p className={classes.error}>{intl.formatMessage(messages.activationError)}</p> 235 <p className={classes.error}>{intl.formatMessage(messages.activationError)}</p>
180 )} 236 )}
181 <Button 237 <Button
182 label={intl.formatMessage(messages.ctaAccept)} 238 label={intl.formatMessage(!canSkipTrial ? messages.ctaStart : messages.ctaAccept)}
183 className={classes.cta} 239 className={classes.cta}
184 onClick={onSubmit} 240 onClick={onSubmit}
185 busy={isActivatingTrial} 241 busy={isActivatingTrial}
@@ -196,18 +252,6 @@ export default @observer @injectSheet(styles) class Signup extends Component {
196 <H2> 252 <H2>
197 {intl.formatMessage(messages.featuresHeadline)} 253 {intl.formatMessage(messages.featuresHeadline)}
198 </H2> 254 </H2>
199 {/* <ul className={classes.features}>
200 <FeatureItem name="Add unlimited services" className={classes.featureItem} />
201 <FeatureItem name="Spellchecker support" className={classes.featureItem} />
202 <FeatureItem name="Workspaces" className={classes.featureItem} />
203 <FeatureItem name="Add Custom Websites" className={classes.featureItem} />
204 <FeatureItem name="On-premise & other Hosted Services" className={classes.featureItem} />
205 <FeatureItem name="Install 3rd party services" className={classes.featureItem} />
206 <FeatureItem name="Service Proxies" className={classes.featureItem} />
207 <FeatureItem name="Team Management" className={classes.featureItem} />
208 <FeatureItem name="No Waiting Screens" className={classes.featureItem} />
209 <FeatureItem name="Forever ad-free" className={classes.featureItem} />
210 </ul> */}
211 <FeatureList /> 255 <FeatureList />
212 </div> 256 </div>
213 </div> 257 </div>
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 9a1b31d0f..b4ff072ab 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -218,6 +218,7 @@ class AccountDashboard extends Component {
218 </H2> 218 </H2>
219 <p> 219 <p>
220 Franz 220 Franz
221 {' '}
221 {isPremiumOverrideUser ? 'Premium' : planName} 222 {isPremiumOverrideUser ? 'Premium' : planName}
222 {user.team.isTrial && ( 223 {user.team.isTrial && (
223 <> 224 <>
@@ -241,14 +242,16 @@ class AccountDashboard extends Component {
241 </p> 242 </p>
242 </> 243 </>
243 )} 244 )}
244 <div className="manage-user-links"> 245 {!isProUser && (
245 {!isProUser && ( 246 <div className="manage-user-links">
246 <Button 247 <Button
247 label={intl.formatMessage(messages.upgradeAccountToPro)} 248 label={intl.formatMessage(messages.upgradeAccountToPro)}
248 className="franz-form__button--primary" 249 className="franz-form__button--primary"
249 onClick={upgradeToPro} 250 onClick={upgradeToPro}
250 /> 251 />
251 )} 252 </div>
253 )}
254 <div className="manage-user-links">
252 <Button 255 <Button
253 label={intl.formatMessage(messages.manageSubscriptionButtonLabel)} 256 label={intl.formatMessage(messages.manageSubscriptionButtonLabel)}
254 className="franz-form__button--inverted" 257 className="franz-form__button--inverted"
diff --git a/src/containers/auth/PricingScreen.js b/src/containers/auth/PricingScreen.js
index ff378bd8b..55811ed23 100644
--- a/src/containers/auth/PricingScreen.js
+++ b/src/containers/auth/PricingScreen.js
@@ -20,14 +20,19 @@ export default @inject('stores', 'actions') @observer class PricingScreen extend
20 } = this.props; 20 } = this.props;
21 21
22 const { activateTrialRequest } = stores.user; 22 const { activateTrialRequest } = stores.user;
23 const { defaultTrialPlan } = stores.features.features; 23 const { defaultTrialPlan, canSkipTrial } = stores.features.anonymousFeatures;
24 24
25 actions.user.activateTrial({ planId: defaultTrialPlan }); 25 if (!canSkipTrial) {
26 await activateTrialRequest._promise;
27
28 if (!activateTrialRequest.isError) {
29 stores.router.push('/'); 26 stores.router.push('/');
30 stores.user.hasCompletedSignup = true; 27 stores.user.hasCompletedSignup = true;
28 } else {
29 actions.user.activateTrial({ planId: defaultTrialPlan });
30 await activateTrialRequest._promise;
31
32 if (!activateTrialRequest.isError) {
33 stores.router.push('/');
34 stores.user.hasCompletedSignup = true;
35 }
31 } 36 }
32 } 37 }
33 38
@@ -43,7 +48,7 @@ export default @inject('stores', 'actions') @observer class PricingScreen extend
43 const { pricingConfig } = features; 48 const { pricingConfig } = features;
44 49
45 let currency = '$'; 50 let currency = '$';
46 let price = '5.99'; 51 let price = 5.99;
47 if (pricingConfig) { 52 if (pricingConfig) {
48 ({ currency } = pricingConfig); 53 ({ currency } = pricingConfig);
49 ({ price } = pricingConfig.plans.pro.yearly); 54 ({ price } = pricingConfig.plans.pro.yearly);
diff --git a/src/containers/auth/SignupScreen.js b/src/containers/auth/SignupScreen.js
index efc7ea4c1..f93498be2 100644
--- a/src/containers/auth/SignupScreen.js
+++ b/src/containers/auth/SignupScreen.js
@@ -4,6 +4,7 @@ import { inject, observer } from 'mobx-react';
4 4
5import Signup from '../../components/auth/Signup'; 5import Signup from '../../components/auth/Signup';
6import UserStore from '../../stores/UserStore'; 6import UserStore from '../../stores/UserStore';
7import FeaturesStore from '../../stores/FeaturesStore';
7 8
8import { globalError as globalErrorPropType } from '../../prop-types'; 9import { globalError as globalErrorPropType } from '../../prop-types';
9 10
@@ -12,11 +13,27 @@ export default @inject('stores', 'actions') @observer class SignupScreen extends
12 error: globalErrorPropType.isRequired, 13 error: globalErrorPropType.isRequired,
13 }; 14 };
14 15
16 onSignup(values) {
17 const { actions, stores } = this.props;
18
19 const { canSkipTrial, defaultTrialPlan, pricingConfig } = stores.features.anonymousFeatures;
20
21 if (!canSkipTrial) {
22 Object.assign(values, {
23 plan: defaultTrialPlan,
24 currency: pricingConfig.currencyID,
25 });
26 }
27
28 actions.user.signup(values);
29 }
30
15 render() { 31 render() {
16 const { actions, stores, error } = this.props; 32 const { stores, error } = this.props;
33
17 return ( 34 return (
18 <Signup 35 <Signup
19 onSubmit={actions.user.signup} 36 onSubmit={values => this.onSignup(values)}
20 isSubmitting={stores.user.signupRequest.isExecuting} 37 isSubmitting={stores.user.signupRequest.isExecuting}
21 loginRoute={stores.user.loginRoute} 38 loginRoute={stores.user.loginRoute}
22 error={error} 39 error={error}
@@ -33,5 +50,6 @@ SignupScreen.wrappedComponent.propTypes = {
33 }).isRequired, 50 }).isRequired,
34 stores: PropTypes.shape({ 51 stores: PropTypes.shape({
35 user: PropTypes.instanceOf(UserStore).isRequired, 52 user: PropTypes.instanceOf(UserStore).isRequired,
53 features: PropTypes.instanceOf(FeaturesStore).isRequired,
36 }).isRequired, 54 }).isRequired,
37}; 55};
diff --git a/src/containers/settings/AccountScreen.js b/src/containers/settings/AccountScreen.js
index b0354c86b..88ecd55d5 100644
--- a/src/containers/settings/AccountScreen.js
+++ b/src/containers/settings/AccountScreen.js
@@ -34,12 +34,17 @@ export default @inject('stores', 'actions') @observer class AccountScreen extend
34 } 34 }
35 35
36 render() { 36 render() {
37 const { user, payment } = this.props.stores; 37 const { user, payment, features } = this.props.stores;
38 const { user: userActions } = this.props.actions; 38 const {
39 user: userActions,
40 payment: paymentActions,
41 } = this.props.actions;
39 42
40 const isLoadingUserInfo = user.getUserInfoRequest.isExecuting; 43 const isLoadingUserInfo = user.getUserInfoRequest.isExecuting;
41 const isLoadingPlans = payment.plansRequest.isExecuting; 44 const isLoadingPlans = payment.plansRequest.isExecuting;
42 45
46 const { upgradeAccount } = paymentActions;
47
43 return ( 48 return (
44 <ErrorBoundary> 49 <ErrorBoundary>
45 <AccountDashboard 50 <AccountDashboard
@@ -55,7 +60,7 @@ export default @inject('stores', 'actions') @observer class AccountScreen extend
55 isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting} 60 isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting}
56 isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError} 61 isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError}
57 openEditAccount={() => this.handleWebsiteLink('/user/profile')} 62 openEditAccount={() => this.handleWebsiteLink('/user/profile')}
58 upgradeToPro={() => this.handleWebsiteLink('/inapp/user/licenses')} 63 upgradeToPro={() => upgradeAccount({ planId: features.features.pricingConfig.plans.pro.yearly.id })}
59 openBilling={() => this.handleWebsiteLink('/user/billing')} 64 openBilling={() => this.handleWebsiteLink('/user/billing')}
60 openInvoices={() => this.handleWebsiteLink('/user/invoices')} 65 openInvoices={() => this.handleWebsiteLink('/user/invoices')}
61 /> 66 />
@@ -74,6 +79,7 @@ AccountScreen.wrappedComponent.propTypes = {
74 actions: PropTypes.shape({ 79 actions: PropTypes.shape({
75 payment: PropTypes.shape({ 80 payment: PropTypes.shape({
76 createDashboardUrl: PropTypes.func.isRequired, 81 createDashboardUrl: PropTypes.func.isRequired,
82 upgradeAccount: PropTypes.func.isRequired,
77 }).isRequired, 83 }).isRequired,
78 app: PropTypes.shape({ 84 app: PropTypes.shape({
79 openExternalUrl: PropTypes.func.isRequired, 85 openExternalUrl: PropTypes.func.isRequired,
diff --git a/src/features/delayApp/Component.js b/src/features/delayApp/Component.js
index 6344edb89..fcc27c75c 100644
--- a/src/features/delayApp/Component.js
+++ b/src/features/delayApp/Component.js
@@ -24,7 +24,7 @@ const messages = defineMessages({
24 }, 24 },
25 action: { 25 action: {
26 id: 'feature.delayApp.upgrade.action', 26 id: 'feature.delayApp.upgrade.action',
27 defaultMessage: '!!!Get a Franz Supporter License', 27 defaultMessage: '!!!Upgrade Franz',
28 }, 28 },
29 actionTrial: { 29 actionTrial: {
30 id: 'feature.delayApp.trial.action', 30 id: 'feature.delayApp.trial.action',
diff --git a/src/features/planSelection/components/PlanSelection.js b/src/features/planSelection/components/PlanSelection.js
index cf4474114..9407f6dd3 100644
--- a/src/features/planSelection/components/PlanSelection.js
+++ b/src/features/planSelection/components/PlanSelection.js
@@ -16,7 +16,7 @@ import Appear from '../../../components/ui/effects/Appear';
16const messages = defineMessages({ 16const messages = defineMessages({
17 welcome: { 17 welcome: {
18 id: 'feature.planSelection.fullscreen.welcome', 18 id: 'feature.planSelection.fullscreen.welcome',
19 defaultMessage: '!!!Welcome back, {name}', 19 defaultMessage: '!!!Are you ready to choose, {name}',
20 }, 20 },
21 subheadline: { 21 subheadline: {
22 id: 'feature.planSelection.fullscreen.subheadline', 22 id: 'feature.planSelection.fullscreen.subheadline',
@@ -83,6 +83,7 @@ const styles = theme => ({
83 83
84 '& h1, & h2': { 84 '& h1, & h2': {
85 textAlign: 'center', 85 textAlign: 'center',
86 color: theme.styleTypes.primary.contrast,
86 }, 87 },
87 }, 88 },
88 plans: { 89 plans: {
@@ -111,6 +112,7 @@ const styles = theme => ({
111 '& svg': { 112 '& svg': {
112 width: '80px !important', 113 width: '80px !important',
113 filter: 'drop-shadow( 0px 2px 3px rgba(0, 0, 0, 0.3))', 114 filter: 'drop-shadow( 0px 2px 3px rgba(0, 0, 0, 0.3))',
115 fill: theme.styleTypes.danger.contrast,
114 }, 116 },
115 }, 117 },
116 headline: { 118 headline: {
diff --git a/src/features/trialStatusBar/containers/TrialStatusBarScreen.js b/src/features/trialStatusBar/containers/TrialStatusBarScreen.js
index eb0aafaea..15201496b 100644
--- a/src/features/trialStatusBar/containers/TrialStatusBarScreen.js
+++ b/src/features/trialStatusBar/containers/TrialStatusBarScreen.js
@@ -67,8 +67,6 @@ class TrialStatusBarScreen extends Component {
67 const { user } = this.props.stores; 67 const { user } = this.props.stores;
68 const { upgradeAccount } = this.props.actions.payment; 68 const { upgradeAccount } = this.props.actions.payment;
69 69
70 console.log('hasEnded', hasEnded);
71
72 return ( 70 return (
73 <ErrorBoundary> 71 <ErrorBoundary>
74 <TrialStatusBar 72 <TrialStatusBar
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 98f37cf8a..e283614d2 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -417,133 +417,172 @@
417 { 417 {
418 "descriptors": [ 418 "descriptors": [
419 { 419 {
420 "defaultMessage": "!!!Franz Professional", 420 "defaultMessage": "!!!Hi {name}, welcome to Franz",
421 "end": { 421 "end": {
422 "column": 3, 422 "column": 3,
423 "line": 18 423 "line": 18
424 }, 424 },
425 "file": "src/components/auth/Pricing.js", 425 "file": "src/components/auth/Pricing.js",
426 "id": "pricing.trial.headline", 426 "id": "pricing.trial.headline.pro",
427 "start": { 427 "start": {
428 "column": 12, 428 "column": 12,
429 "line": 15 429 "line": 15
430 } 430 }
431 }, 431 },
432 { 432 {
433 "defaultMessage": "!!!Here's a special welcome for you:", 433 "defaultMessage": "!!!We have a special treat for you.",
434 "end": { 434 "end": {
435 "column": 3, 435 "column": 3,
436 "line": 22 436 "line": 22
437 }, 437 },
438 "file": "src/components/auth/Pricing.js", 438 "file": "src/components/auth/Pricing.js",
439 "id": "pricing.trial.subheadline", 439 "id": "pricing.trial.intro.specialTreat",
440 "start": { 440 "start": {
441 "column": 17, 441 "column": 16,
442 "line": 19 442 "line": 19
443 } 443 }
444 }, 444 },
445 { 445 {
446 "defaultMessage": "!!!No strings attached", 446 "defaultMessage": "!!!Enjoy the full Franz Professional experience completely free for 14 days.",
447 "end": { 447 "end": {
448 "column": 3, 448 "column": 3,
449 "line": 26 449 "line": 26
450 }, 450 },
451 "file": "src/components/auth/Pricing.js", 451 "file": "src/components/auth/Pricing.js",
452 "id": "pricing.trial.intro.tryPro",
453 "start": {
454 "column": 10,
455 "line": 23
456 }
457 },
458 {
459 "defaultMessage": "!!!Happy messaging,",
460 "end": {
461 "column": 3,
462 "line": 30
463 },
464 "file": "src/components/auth/Pricing.js",
465 "id": "pricing.trial.intro.happyMessaging",
466 "start": {
467 "column": 18,
468 "line": 27
469 }
470 },
471 {
472 "defaultMessage": "!!!No strings attached",
473 "end": {
474 "column": 3,
475 "line": 34
476 },
477 "file": "src/components/auth/Pricing.js",
452 "id": "pricing.trial.terms.headline", 478 "id": "pricing.trial.terms.headline",
453 "start": { 479 "start": {
454 "column": 29, 480 "column": 29,
455 "line": 23 481 "line": 31
456 } 482 }
457 }, 483 },
458 { 484 {
459 "defaultMessage": "!!!No credit card required", 485 "defaultMessage": "!!!No credit card required",
460 "end": { 486 "end": {
461 "column": 3, 487 "column": 3,
462 "line": 30 488 "line": 38
463 }, 489 },
464 "file": "src/components/auth/Pricing.js", 490 "file": "src/components/auth/Pricing.js",
465 "id": "pricing.trial.terms.noCreditCard", 491 "id": "pricing.trial.terms.noCreditCard",
466 "start": { 492 "start": {
467 "column": 16, 493 "column": 16,
468 "line": 27 494 "line": 35
469 } 495 }
470 }, 496 },
471 { 497 {
472 "defaultMessage": "!!!Your free trial ends automatically after 14 days", 498 "defaultMessage": "!!!Your free trial ends automatically after 14 days",
473 "end": { 499 "end": {
474 "column": 3, 500 "column": 3,
475 "line": 34 501 "line": 42
476 }, 502 },
477 "file": "src/components/auth/Pricing.js", 503 "file": "src/components/auth/Pricing.js",
478 "id": "pricing.trial.terms.automaticTrialEnd", 504 "id": "pricing.trial.terms.automaticTrialEnd",
479 "start": { 505 "start": {
480 "column": 21, 506 "column": 21,
481 "line": 31 507 "line": 39
482 } 508 }
483 }, 509 },
484 { 510 {
485 "defaultMessage": "!!!Free trial (normally {currency}{price} per month)", 511 "defaultMessage": "!!!Free trial (normally {currency}{price} per month)",
486 "end": { 512 "end": {
487 "column": 3, 513 "column": 3,
488 "line": 38 514 "line": 46
489 }, 515 },
490 "file": "src/components/auth/Pricing.js", 516 "file": "src/components/auth/Pricing.js",
491 "id": "pricing.trial.terms.trialWorth", 517 "id": "pricing.trial.terms.trialWorth",
492 "start": { 518 "start": {
493 "column": 14, 519 "column": 14,
494 "line": 35 520 "line": 43
495 } 521 }
496 }, 522 },
497 { 523 {
498 "defaultMessage": "!!!Sorry, we could not activate your trial!", 524 "defaultMessage": "!!!Sorry, we could not activate your trial!",
499 "end": { 525 "end": {
500 "column": 3, 526 "column": 3,
501 "line": 42 527 "line": 50
502 }, 528 },
503 "file": "src/components/auth/Pricing.js", 529 "file": "src/components/auth/Pricing.js",
504 "id": "pricing.trial.error", 530 "id": "pricing.trial.error",
505 "start": { 531 "start": {
506 "column": 19, 532 "column": 19,
507 "line": 39 533 "line": 47
508 } 534 }
509 }, 535 },
510 { 536 {
511 "defaultMessage": "!!!Start my 14-day Franz Professional Trial", 537 "defaultMessage": "!!!Start my 14-day Franz Professional Trial",
512 "end": { 538 "end": {
513 "column": 3, 539 "column": 3,
514 "line": 46 540 "line": 54
515 }, 541 },
516 "file": "src/components/auth/Pricing.js", 542 "file": "src/components/auth/Pricing.js",
517 "id": "pricing.trial.cta.accept", 543 "id": "pricing.trial.cta.accept",
518 "start": { 544 "start": {
519 "column": 13, 545 "column": 13,
520 "line": 43 546 "line": 51
547 }
548 },
549 {
550 "defaultMessage": "!!!Start using Franz",
551 "end": {
552 "column": 3,
553 "line": 58
554 },
555 "file": "src/components/auth/Pricing.js",
556 "id": "pricing.trial.cta.start",
557 "start": {
558 "column": 12,
559 "line": 55
521 } 560 }
522 }, 561 },
523 { 562 {
524 "defaultMessage": "!!!Continue to Franz", 563 "defaultMessage": "!!!Continue to Franz",
525 "end": { 564 "end": {
526 "column": 3, 565 "column": 3,
527 "line": 50 566 "line": 62
528 }, 567 },
529 "file": "src/components/auth/Pricing.js", 568 "file": "src/components/auth/Pricing.js",
530 "id": "pricing.trial.cta.skip", 569 "id": "pricing.trial.cta.skip",
531 "start": { 570 "start": {
532 "column": 11, 571 "column": 11,
533 "line": 47 572 "line": 59
534 } 573 }
535 }, 574 },
536 { 575 {
537 "defaultMessage": "!!!Franz Professional includes:", 576 "defaultMessage": "!!!Franz Professional includes:",
538 "end": { 577 "end": {
539 "column": 3, 578 "column": 3,
540 "line": 54 579 "line": 66
541 }, 580 },
542 "file": "src/components/auth/Pricing.js", 581 "file": "src/components/auth/Pricing.js",
543 "id": "pricing.trial.features.headline", 582 "id": "pricing.trial.features.headline",
544 "start": { 583 "start": {
545 "column": 20, 584 "column": 20,
546 "line": 51 585 "line": 63
547 } 586 }
548 } 587 }
549 ], 588 ],
@@ -3868,7 +3907,7 @@
3868 } 3907 }
3869 }, 3908 },
3870 { 3909 {
3871 "defaultMessage": "!!!Get a Franz Supporter License", 3910 "defaultMessage": "!!!Upgrade Franz",
3872 "end": { 3911 "end": {
3873 "column": 3, 3912 "column": 3,
3874 "line": 28 3913 "line": 28
@@ -3956,7 +3995,7 @@
3956 { 3995 {
3957 "descriptors": [ 3996 "descriptors": [
3958 { 3997 {
3959 "defaultMessage": "!!!Welcome back, {name}", 3998 "defaultMessage": "!!!Are you ready to choose, {name}",
3960 "end": { 3999 "end": {
3961 "column": 3, 4000 "column": 3,
3962 "line": 20 4001 "line": 20
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 1ba91bdfa..8bef09d4d 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -2,12 +2,12 @@
2 "app.errorHandler.action": "Reload", 2 "app.errorHandler.action": "Reload",
3 "app.errorHandler.headline": "Something went wrong", 3 "app.errorHandler.headline": "Something went wrong",
4 "feature.announcements.changelog.headline": "Changes in Franz {version}", 4 "feature.announcements.changelog.headline": "Changes in Franz {version}",
5 "feature.delayApp.headline": "Please purchase a Franz Supporter License to skip waiting", 5 "feature.delayApp.headline": "Upgrade your Franz plan to skip the wait",
6 "feature.delayApp.text": "Franz will continue in {seconds} seconds.", 6 "feature.delayApp.text": "Franz will continue in {seconds} seconds.",
7 "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Franz Professional", 7 "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Franz Professional",
8 "feature.delayApp.trial.actionShort": "Activate the free Franz Professional trial", 8 "feature.delayApp.trial.actionShort": "Activate the free Franz Professional trial",
9 "feature.delayApp.trial.headline": "Get the free Franz Professional 14 day trial and skip the line", 9 "feature.delayApp.trial.headline": "Get the free Franz Professional 14-days trial and skip the wait",
10 "feature.delayApp.upgrade.action": "Get a Franz Supporter License", 10 "feature.delayApp.upgrade.action": "Upgrade Franz",
11 "feature.delayApp.upgrade.actionShort": "Upgrade account", 11 "feature.delayApp.upgrade.actionShort": "Upgrade account",
12 "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", 12 "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free",
13 "feature.planSelection.cta.stayOnFree": "Stay on Free", 13 "feature.planSelection.cta.stayOnFree": "Stay on Free",
@@ -21,7 +21,7 @@
21 "feature.planSelection.fullscreen.dialog.message": "You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.", 21 "feature.planSelection.fullscreen.dialog.message": "You're about to downgrade to our Free account. Are you sure? Click here instead to get more services and functionality for just {currency}{price} a month.",
22 "feature.planSelection.fullscreen.dialog.title": "Downgrade your Franz Plan", 22 "feature.planSelection.fullscreen.dialog.title": "Downgrade your Franz Plan",
23 "feature.planSelection.fullscreen.subheadline": "It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.", 23 "feature.planSelection.fullscreen.subheadline": "It's time to make a choice. Franz works best on our Personal and Professional plans. Please have a look and choose the best one for you.",
24 "feature.planSelection.fullscreen.welcome": "Welcome back, {name}", 24 "feature.planSelection.fullscreen.welcome": "Are you ready to choose, {name}?",
25 "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.", 25 "feature.planSelection.personal.text": "More services, no waiting - ideal for personal use.",
26 "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.", 26 "feature.planSelection.pro.text": "Unlimited services and professional features for you - and your team.",
27 "feature.serviceLimit.limitReached": "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", 27 "feature.serviceLimit.limitReached": "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.",
@@ -170,10 +170,13 @@
170 "pricing.plan.pro-yearly": "Professional Yearly", 170 "pricing.plan.pro-yearly": "Professional Yearly",
171 "pricing.trial.cta.accept": "Start my 14-day Franz Professional Trial ", 171 "pricing.trial.cta.accept": "Start my 14-day Franz Professional Trial ",
172 "pricing.trial.cta.skip": "Continue to Franz", 172 "pricing.trial.cta.skip": "Continue to Franz",
173 "pricing.trial.cta.start": "Start using Franz",
173 "pricing.trial.error": "Sorry, we could not activate your trial!", 174 "pricing.trial.error": "Sorry, we could not activate your trial!",
174 "pricing.trial.features.headline": "Franz Professional includes:", 175 "pricing.trial.features.headline": "Franz Professional includes:",
175 "pricing.trial.headline": "Franz Professional", 176 "pricing.trial.headline.pro": "Hi {name}, welcome to Franz",
176 "pricing.trial.subheadline": "Here's a special welcome for you:", 177 "pricing.trial.intro.happyMessaging": "Happy messaging,",
178 "pricing.trial.intro.specialTreat": "We have a special treat for you.",
179 "pricing.trial.intro.tryPro": "Enjoy the full Franz Professional experience completely free for 14 days.",
177 "pricing.trial.terms.automaticTrialEnd": "Your free trial ends automatically after 14 days", 180 "pricing.trial.terms.automaticTrialEnd": "Your free trial ends automatically after 14 days",
178 "pricing.trial.terms.headline": "No strings attached", 181 "pricing.trial.terms.headline": "No strings attached",
179 "pricing.trial.terms.noCreditCard": "No credit card required", 182 "pricing.trial.terms.noCreditCard": "No credit card required",
@@ -422,4 +425,4 @@
422 "workspaceDrawer.workspaceFeatureInfo": "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>", 425 "workspaceDrawer.workspaceFeatureInfo": "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>",
423 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", 426 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings",
424 "workspaces.switchingIndicator.switchingTo": "Switching to" 427 "workspaces.switchingIndicator.switchingTo": "Switching to"
425} 428} \ No newline at end of file
diff --git a/src/i18n/messages/src/components/auth/Pricing.json b/src/i18n/messages/src/components/auth/Pricing.json
index 3f0cf4e86..6db39148c 100644
--- a/src/i18n/messages/src/components/auth/Pricing.json
+++ b/src/i18n/messages/src/components/auth/Pricing.json
@@ -1,7 +1,7 @@
1[ 1[
2 { 2 {
3 "id": "pricing.trial.headline", 3 "id": "pricing.trial.headline.pro",
4 "defaultMessage": "!!!Franz Professional", 4 "defaultMessage": "!!!Hi {name}, welcome to Franz",
5 "file": "src/components/auth/Pricing.js", 5 "file": "src/components/auth/Pricing.js",
6 "start": { 6 "start": {
7 "line": 15, 7 "line": 15,
@@ -13,12 +13,12 @@
13 } 13 }
14 }, 14 },
15 { 15 {
16 "id": "pricing.trial.subheadline", 16 "id": "pricing.trial.intro.specialTreat",
17 "defaultMessage": "!!!Here's a special welcome for you:", 17 "defaultMessage": "!!!We have a special treat for you.",
18 "file": "src/components/auth/Pricing.js", 18 "file": "src/components/auth/Pricing.js",
19 "start": { 19 "start": {
20 "line": 19, 20 "line": 19,
21 "column": 17 21 "column": 16
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 22, 24 "line": 22,
@@ -26,15 +26,41 @@
26 } 26 }
27 }, 27 },
28 { 28 {
29 "id": "pricing.trial.intro.tryPro",
30 "defaultMessage": "!!!Enjoy the full Franz Professional experience completely free for 14 days.",
31 "file": "src/components/auth/Pricing.js",
32 "start": {
33 "line": 23,
34 "column": 10
35 },
36 "end": {
37 "line": 26,
38 "column": 3
39 }
40 },
41 {
42 "id": "pricing.trial.intro.happyMessaging",
43 "defaultMessage": "!!!Happy messaging,",
44 "file": "src/components/auth/Pricing.js",
45 "start": {
46 "line": 27,
47 "column": 18
48 },
49 "end": {
50 "line": 30,
51 "column": 3
52 }
53 },
54 {
29 "id": "pricing.trial.terms.headline", 55 "id": "pricing.trial.terms.headline",
30 "defaultMessage": "!!!No strings attached", 56 "defaultMessage": "!!!No strings attached",
31 "file": "src/components/auth/Pricing.js", 57 "file": "src/components/auth/Pricing.js",
32 "start": { 58 "start": {
33 "line": 23, 59 "line": 31,
34 "column": 29 60 "column": 29
35 }, 61 },
36 "end": { 62 "end": {
37 "line": 26, 63 "line": 34,
38 "column": 3 64 "column": 3
39 } 65 }
40 }, 66 },
@@ -43,11 +69,11 @@
43 "defaultMessage": "!!!No credit card required", 69 "defaultMessage": "!!!No credit card required",
44 "file": "src/components/auth/Pricing.js", 70 "file": "src/components/auth/Pricing.js",
45 "start": { 71 "start": {
46 "line": 27, 72 "line": 35,
47 "column": 16 73 "column": 16
48 }, 74 },
49 "end": { 75 "end": {
50 "line": 30, 76 "line": 38,
51 "column": 3 77 "column": 3
52 } 78 }
53 }, 79 },
@@ -56,11 +82,11 @@
56 "defaultMessage": "!!!Your free trial ends automatically after 14 days", 82 "defaultMessage": "!!!Your free trial ends automatically after 14 days",
57 "file": "src/components/auth/Pricing.js", 83 "file": "src/components/auth/Pricing.js",
58 "start": { 84 "start": {
59 "line": 31, 85 "line": 39,
60 "column": 21 86 "column": 21
61 }, 87 },
62 "end": { 88 "end": {
63 "line": 34, 89 "line": 42,
64 "column": 3 90 "column": 3
65 } 91 }
66 }, 92 },
@@ -69,11 +95,11 @@
69 "defaultMessage": "!!!Free trial (normally {currency}{price} per month)", 95 "defaultMessage": "!!!Free trial (normally {currency}{price} per month)",
70 "file": "src/components/auth/Pricing.js", 96 "file": "src/components/auth/Pricing.js",
71 "start": { 97 "start": {
72 "line": 35, 98 "line": 43,
73 "column": 14 99 "column": 14
74 }, 100 },
75 "end": { 101 "end": {
76 "line": 38, 102 "line": 46,
77 "column": 3 103 "column": 3
78 } 104 }
79 }, 105 },
@@ -82,11 +108,11 @@
82 "defaultMessage": "!!!Sorry, we could not activate your trial!", 108 "defaultMessage": "!!!Sorry, we could not activate your trial!",
83 "file": "src/components/auth/Pricing.js", 109 "file": "src/components/auth/Pricing.js",
84 "start": { 110 "start": {
85 "line": 39, 111 "line": 47,
86 "column": 19 112 "column": 19
87 }, 113 },
88 "end": { 114 "end": {
89 "line": 42, 115 "line": 50,
90 "column": 3 116 "column": 3
91 } 117 }
92 }, 118 },
@@ -95,11 +121,24 @@
95 "defaultMessage": "!!!Start my 14-day Franz Professional Trial", 121 "defaultMessage": "!!!Start my 14-day Franz Professional Trial",
96 "file": "src/components/auth/Pricing.js", 122 "file": "src/components/auth/Pricing.js",
97 "start": { 123 "start": {
98 "line": 43, 124 "line": 51,
99 "column": 13 125 "column": 13
100 }, 126 },
101 "end": { 127 "end": {
102 "line": 46, 128 "line": 54,
129 "column": 3
130 }
131 },
132 {
133 "id": "pricing.trial.cta.start",
134 "defaultMessage": "!!!Start using Franz",
135 "file": "src/components/auth/Pricing.js",
136 "start": {
137 "line": 55,
138 "column": 12
139 },
140 "end": {
141 "line": 58,
103 "column": 3 142 "column": 3
104 } 143 }
105 }, 144 },
@@ -108,11 +147,11 @@
108 "defaultMessage": "!!!Continue to Franz", 147 "defaultMessage": "!!!Continue to Franz",
109 "file": "src/components/auth/Pricing.js", 148 "file": "src/components/auth/Pricing.js",
110 "start": { 149 "start": {
111 "line": 47, 150 "line": 59,
112 "column": 11 151 "column": 11
113 }, 152 },
114 "end": { 153 "end": {
115 "line": 50, 154 "line": 62,
116 "column": 3 155 "column": 3
117 } 156 }
118 }, 157 },
@@ -121,11 +160,11 @@
121 "defaultMessage": "!!!Franz Professional includes:", 160 "defaultMessage": "!!!Franz Professional includes:",
122 "file": "src/components/auth/Pricing.js", 161 "file": "src/components/auth/Pricing.js",
123 "start": { 162 "start": {
124 "line": 51, 163 "line": 63,
125 "column": 20 164 "column": 20
126 }, 165 },
127 "end": { 166 "end": {
128 "line": 54, 167 "line": 66,
129 "column": 3 168 "column": 3
130 } 169 }
131 } 170 }
diff --git a/src/i18n/messages/src/features/delayApp/Component.json b/src/i18n/messages/src/features/delayApp/Component.json
index 0d345a47b..f6bf9369a 100644
--- a/src/i18n/messages/src/features/delayApp/Component.json
+++ b/src/i18n/messages/src/features/delayApp/Component.json
@@ -27,7 +27,7 @@
27 }, 27 },
28 { 28 {
29 "id": "feature.delayApp.upgrade.action", 29 "id": "feature.delayApp.upgrade.action",
30 "defaultMessage": "!!!Get a Franz Supporter License", 30 "defaultMessage": "!!!Upgrade Franz",
31 "file": "src/features/delayApp/Component.js", 31 "file": "src/features/delayApp/Component.js",
32 "start": { 32 "start": {
33 "line": 25, 33 "line": 25,
diff --git a/src/i18n/messages/src/features/planSelection/components/PlanSelection.json b/src/i18n/messages/src/features/planSelection/components/PlanSelection.json
index 76f4ed50b..2e66c8dfe 100644
--- a/src/i18n/messages/src/features/planSelection/components/PlanSelection.json
+++ b/src/i18n/messages/src/features/planSelection/components/PlanSelection.json
@@ -1,7 +1,7 @@
1[ 1[
2 { 2 {
3 "id": "feature.planSelection.fullscreen.welcome", 3 "id": "feature.planSelection.fullscreen.welcome",
4 "defaultMessage": "!!!Welcome back, {name}", 4 "defaultMessage": "!!!Are you ready to choose, {name}",
5 "file": "src/features/planSelection/components/PlanSelection.js", 5 "file": "src/features/planSelection/components/PlanSelection.js",
6 "start": { 6 "start": {
7 "line": 17, 7 "line": 17,
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 329c43f32..ca5cad836 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -135,7 +135,8 @@ export default class AppStore extends Store {
135 this.fetchDataInterval = setInterval(() => { 135 this.fetchDataInterval = setInterval(() => {
136 this.stores.user.getUserInfoRequest.invalidate({ immediately: true }); 136 this.stores.user.getUserInfoRequest.invalidate({ immediately: true });
137 this.stores.features.featuresRequest.invalidate({ immediately: true }); 137 this.stores.features.featuresRequest.invalidate({ immediately: true });
138 }, ms('10s')); 138 this.stores.news.latestNewsRequest.invalidate({ immediately: true });
139 }, ms('10m'));
139 140
140 // Check for updates once every 4 hours 141 // Check for updates once every 4 hours
141 setInterval(() => this._checkForUpdates(), CHECK_INTERVAL); 142 setInterval(() => this._checkForUpdates(), CHECK_INTERVAL);
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js
index 5d379fd3e..adbd401b4 100644
--- a/src/stores/FeaturesStore.js
+++ b/src/stores/FeaturesStore.js
@@ -67,6 +67,7 @@ export default class FeaturesStore extends Store {
67 if (this.stores.user.isLoggedIn) { 67 if (this.stores.user.isLoggedIn) {
68 this.featuresRequest.invalidate({ immediately: true }); 68 this.featuresRequest.invalidate({ immediately: true });
69 } else { 69 } else {
70 this.defaultFeaturesRequest.execute();
70 this.defaultFeaturesRequest.invalidate({ immediately: true }); 71 this.defaultFeaturesRequest.invalidate({ immediately: true });
71 } 72 }
72 } 73 }
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js
index 735e8f886..297ea1121 100644
--- a/src/stores/UserStore.js
+++ b/src/stores/UserStore.js
@@ -205,7 +205,7 @@ export default class UserStore extends Store {
205 } 205 }
206 206
207 @action async _signup({ 207 @action async _signup({
208 firstname, lastname, email, password, accountType, company, 208 firstname, lastname, email, password, accountType, company, plan, currency,
209 }) { 209 }) {
210 const authToken = await this.signupRequest.execute({ 210 const authToken = await this.signupRequest.execute({
211 firstname, 211 firstname,
@@ -215,6 +215,8 @@ export default class UserStore extends Store {
215 accountType, 215 accountType,
216 company, 216 company,
217 locale: this.stores.app.locale, 217 locale: this.stores.app.locale,
218 plan,
219 currency,
218 }); 220 });
219 221
220 this.hasCompletedSignup = false; 222 this.hasCompletedSignup = false;
diff --git a/src/styles/settings.scss b/src/styles/settings.scss
index bb95ab5d2..150d58e76 100644
--- a/src/styles/settings.scss
+++ b/src/styles/settings.scss
@@ -366,7 +366,7 @@
366 .account__subscription-button { margin-left: auto; } 366 .account__subscription-button { margin-left: auto; }
367 .franz-form__button { white-space: nowrap; } 367 .franz-form__button { white-space: nowrap; }
368 div { height: auto; } 368 div { height: auto; }
369 [data-type="franz-button"] div { height: 100% } 369 [data-type="franz-button"] div { height: 20px }
370 370
371 .invoices { 371 .invoices {
372 width: 100%; 372 width: 100%;