diff options
author | Stefan Malzner <stefan@adlk.io> | 2019-10-17 14:16:12 +0200 |
---|---|---|
committer | Stefan Malzner <stefan@adlk.io> | 2019-10-17 14:16:12 +0200 |
commit | 33e4a10c6edc76708682f022585423b0af4c28bf (patch) | |
tree | e0f1bc3e11c40708df6e66340c39a7ea7625f9dd | |
parent | Automatic i18n update (i18n.meetfranz.com) (diff) | |
parent | update strings (diff) | |
download | ferdium-app-33e4a10c6edc76708682f022585423b0af4c28bf.tar.gz ferdium-app-33e4a10c6edc76708682f022585423b0af4c28bf.tar.zst ferdium-app-33e4a10c6edc76708682f022585423b0af4c28bf.zip |
Merge branch 'release/5.4.0-beta.3' into i18n
20 files changed, 268 insertions, 104 deletions
diff --git a/packages/theme/src/themes/default/index.ts b/packages/theme/src/themes/default/index.ts index b484d9972..3decec88f 100644 --- a/packages/theme/src/themes/default/index.ts +++ b/packages/theme/src/themes/default/index.ts | |||
@@ -1,6 +1,7 @@ | |||
1 | import color from 'color'; | 1 | import color from 'color'; |
2 | import { cloneDeep } from 'lodash'; | 2 | import { cloneDeep } from 'lodash'; |
3 | 3 | ||
4 | import { darkgreen } from 'color-name'; | ||
4 | import * as legacyStyles from '../legacy'; | 5 | import * as legacyStyles from '../legacy'; |
5 | 6 | ||
6 | export interface IStyleTypes { | 7 | export interface IStyleTypes { |
@@ -224,7 +225,7 @@ export const signup = { | |||
224 | // Todos | 225 | // Todos |
225 | export const todos = { | 226 | export const todos = { |
226 | todosLayer: { | 227 | todosLayer: { |
227 | borderLeftColor: legacyStyles.themeGrayLighter, | 228 | borderLeftColor: color(legacyStyles.themeGrayLighter).darken(0.1).hex(), |
228 | }, | 229 | }, |
229 | toggleButton: { | 230 | toggleButton: { |
230 | background: styleTypes.primary.accent, | 231 | background: styleTypes.primary.accent, |
@@ -242,10 +243,10 @@ export const todos = { | |||
242 | // TrialStatusBar | 243 | // TrialStatusBar |
243 | export const trialStatusBar = { | 244 | export const trialStatusBar = { |
244 | bar: { | 245 | bar: { |
245 | background: legacyStyles.themeGray, | 246 | background: legacyStyles.themeGrayLightest, |
246 | }, | 247 | }, |
247 | progressBar: { | 248 | progressBar: { |
248 | background: legacyStyles.themeGrayLight, | 249 | background: color(legacyStyles.themeGrayLighter).darken(0.1).hex(), |
249 | progressIndicator: legacyStyles.themeGrayLighter, | 250 | progressIndicator: legacyStyles.themeGrayLight, |
250 | }, | 251 | }, |
251 | }; | 252 | }; |
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 | ||
14 | const messages = defineMessages({ | 14 | const 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 | ||
103 | export default @observer @injectSheet(styles) class Signup extends Component { | 143 | export 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 | ||
5 | import Signup from '../../components/auth/Signup'; | 5 | import Signup from '../../components/auth/Signup'; |
6 | import UserStore from '../../stores/UserStore'; | 6 | import UserStore from '../../stores/UserStore'; |
7 | import FeaturesStore from '../../stores/FeaturesStore'; | ||
7 | 8 | ||
8 | import { globalError as globalErrorPropType } from '../../prop-types'; | 9 | import { 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'; | |||
16 | const messages = defineMessages({ | 16 | const 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%; |