diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/components/auth/Pricing.js | 2 | ||||
-rw-r--r-- | src/components/settings/account/AccountDashboard.js | 114 | ||||
-rw-r--r-- | src/components/subscription/SubscriptionForm.js | 238 | ||||
-rw-r--r-- | src/config.js | 24 | ||||
-rw-r--r-- | src/containers/subscription/SubscriptionFormScreen.js | 18 | ||||
-rw-r--r-- | src/helpers/plan-helpers.js | 43 | ||||
-rw-r--r-- | src/i18n/locales/defaultMessages.json | 328 | ||||
-rw-r--r-- | src/i18n/locales/en-US.json | 57 | ||||
-rw-r--r-- | src/i18n/messages/src/components/settings/account/AccountDashboard.json | 116 | ||||
-rw-r--r-- | src/i18n/messages/src/components/subscription/SubscriptionForm.json | 145 | ||||
-rw-r--r-- | src/i18n/messages/src/helpers/plan-helpers.json | 80 | ||||
-rw-r--r-- | src/i18n/messages/src/helpers/pricing-helpers.json | 80 | ||||
-rw-r--r-- | src/stores/AppStore.js | 2 | ||||
-rw-r--r-- | src/styles/settings.scss | 1 |
14 files changed, 780 insertions, 468 deletions
diff --git a/src/components/auth/Pricing.js b/src/components/auth/Pricing.js index d20779025..cbeaaa5d9 100644 --- a/src/components/auth/Pricing.js +++ b/src/components/auth/Pricing.js | |||
@@ -8,7 +8,7 @@ import classnames from 'classnames'; | |||
8 | 8 | ||
9 | import { Button } from '@meetfranz/forms'; | 9 | import { Button } from '@meetfranz/forms'; |
10 | import { FeatureItem } from '../ui/FeatureItem'; | 10 | import { FeatureItem } from '../ui/FeatureItem'; |
11 | import FeatureList from '../ui/FeatureList'; | 11 | import { FeatureList } from '../ui/FeatureList'; |
12 | 12 | ||
13 | 13 | ||
14 | const messages = defineMessages({ | 14 | const messages = defineMessages({ |
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index 0366dc1ee..079d50380 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js | |||
@@ -1,14 +1,18 @@ | |||
1 | import React, { Component, Fragment } from 'react'; | 1 | import React, { Component } from 'react'; |
2 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | 3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; |
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | import ReactTooltip from 'react-tooltip'; | 5 | import ReactTooltip from 'react-tooltip'; |
6 | import { ProBadge } from '@meetfranz/ui'; | 6 | import { |
7 | ProBadge, H2, H1, H3, | ||
8 | } from '@meetfranz/ui'; | ||
9 | import moment from 'moment'; | ||
7 | 10 | ||
8 | import Loader from '../../ui/Loader'; | 11 | import Loader from '../../ui/Loader'; |
9 | import Button from '../../ui/Button'; | 12 | import Button from '../../ui/Button'; |
10 | import Infobox from '../../ui/Infobox'; | 13 | import Infobox from '../../ui/Infobox'; |
11 | import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen'; | 14 | import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen'; |
15 | import { i18nPlanName } from '../../../helpers/plan-helpers'; | ||
12 | 16 | ||
13 | const messages = defineMessages({ | 17 | const messages = defineMessages({ |
14 | headline: { | 18 | headline: { |
@@ -20,8 +24,8 @@ const messages = defineMessages({ | |||
20 | defaultMessage: '!!!Your Subscription', | 24 | defaultMessage: '!!!Your Subscription', |
21 | }, | 25 | }, |
22 | headlineUpgrade: { | 26 | headlineUpgrade: { |
23 | id: 'settings.account.headlineUpgrade', | 27 | id: 'settings.account.headlineTrialUpgrade', |
24 | defaultMessage: '!!!Upgrade your Account', | 28 | defaultMessage: '!!!Get the free 14 day Franz Professional Trial', |
25 | }, | 29 | }, |
26 | headlineDangerZone: { | 30 | headlineDangerZone: { |
27 | id: 'settings.account.headlineDangerZone', | 31 | id: 'settings.account.headlineDangerZone', |
@@ -71,6 +75,22 @@ const messages = defineMessages({ | |||
71 | id: 'settings.account.deleteEmailSent', | 75 | id: 'settings.account.deleteEmailSent', |
72 | defaultMessage: '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!', | 76 | defaultMessage: '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!', |
73 | }, | 77 | }, |
78 | trial: { | ||
79 | id: 'settings.account.trial', | ||
80 | defaultMessage: '!!!Free Trial', | ||
81 | }, | ||
82 | yourLicense: { | ||
83 | id: 'settings.account.yourLicense', | ||
84 | defaultMessage: '!!!Your license:', | ||
85 | }, | ||
86 | trialEndsIn: { | ||
87 | id: 'settings.account.trialEndsIn', | ||
88 | defaultMessage: '!!!Your free trial ends in {duration}.', | ||
89 | }, | ||
90 | trialUpdateBillingInformation: { | ||
91 | id: 'settings.account.trialUpdateBillingInfo', | ||
92 | defaultMessage: '!!!Please update your billing info to continue using {license} after your trial period.', | ||
93 | }, | ||
74 | }); | 94 | }); |
75 | 95 | ||
76 | export default @observer class AccountDashboard extends Component { | 96 | export default @observer class AccountDashboard extends Component { |
@@ -110,6 +130,13 @@ export default @observer class AccountDashboard extends Component { | |||
110 | } = this.props; | 130 | } = this.props; |
111 | const { intl } = this.context; | 131 | const { intl } = this.context; |
112 | 132 | ||
133 | let planName = ''; | ||
134 | |||
135 | if (user.team && user.team.plan) { | ||
136 | planName = i18nPlanName(user.team.plan, intl); | ||
137 | console.log(planName); | ||
138 | } | ||
139 | |||
113 | return ( | 140 | return ( |
114 | <div className="settings__main"> | 141 | <div className="settings__main"> |
115 | <div className="settings__header"> | 142 | <div className="settings__header"> |
@@ -147,7 +174,7 @@ export default @observer class AccountDashboard extends Component { | |||
147 | /> | 174 | /> |
148 | </div> | 175 | </div> |
149 | <div className="account__info"> | 176 | <div className="account__info"> |
150 | <h2> | 177 | <H1> |
151 | <span className="username">{`${user.firstname} ${user.lastname}`}</span> | 178 | <span className="username">{`${user.firstname} ${user.lastname}`}</span> |
152 | {user.isPremium && ( | 179 | {user.isPremium && ( |
153 | <> | 180 | <> |
@@ -156,7 +183,7 @@ export default @observer class AccountDashboard extends Component { | |||
156 | {/* <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> */} | 183 | {/* <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> */} |
157 | </> | 184 | </> |
158 | )} | 185 | )} |
159 | </h2> | 186 | </H1> |
160 | <p> | 187 | <p> |
161 | {user.organization && `${user.organization}, `} | 188 | {user.organization && `${user.organization}, `} |
162 | {user.email} | 189 | {user.email} |
@@ -197,54 +224,61 @@ export default @observer class AccountDashboard extends Component { | |||
197 | {user.isSubscriptionOwner && ( | 224 | {user.isSubscriptionOwner && ( |
198 | <div className="account"> | 225 | <div className="account"> |
199 | <div className="account__box"> | 226 | <div className="account__box"> |
200 | <h2> | 227 | <H2> |
201 | Your license: {user.team.plan} | 228 | {intl.formatMessage(messages.yourLicense)} |
202 | </h2> | 229 | </H2> |
230 | <H3> | ||
231 | {planName} | ||
232 | {user.team.isTrial && ( | ||
233 | <> | ||
234 | {' – '} | ||
235 | {intl.formatMessage(messages.trial)} | ||
236 | </> | ||
237 | )} | ||
238 | </H3> | ||
203 | {user.team.isTrial && ( | 239 | {user.team.isTrial && ( |
204 | <> | 240 | <> |
205 | <p> | 241 | <p> |
206 | Trial ends in 14 days | 242 | {intl.formatMessage(messages.trialEndsIn, { |
243 | duration: moment.duration(moment().diff(user.team.trialEnd)).humanize(), | ||
244 | })} | ||
245 | </p> | ||
246 | <p> | ||
247 | {intl.formatMessage(messages.trialUpdateBillingInformation, { | ||
248 | license: planName, | ||
249 | })} | ||
207 | </p> | 250 | </p> |
208 | </> | 251 | </> |
209 | )} | 252 | )} |
210 | {user.isPremium && ( | 253 | <div className="manage-user-links"> |
211 | <div className="manage-user-links"> | 254 | <Button |
212 | <Button | 255 | label={intl.formatMessage(messages.manageSubscriptionButtonLabel)} |
213 | label={intl.formatMessage(messages.manageSubscriptionButtonLabel)} | 256 | className="franz-form__button--inverted" |
214 | className="franz-form__button--inverted" | 257 | onClick={openBilling} |
215 | onClick={openBilling} | 258 | /> |
216 | /> | 259 | <Button |
217 | <Button | 260 | label={intl.formatMessage(messages.invoicesButton)} |
218 | label={intl.formatMessage(messages.invoicesButton)} | 261 | className="franz-form__button--inverted" |
219 | className="franz-form__button--inverted" | 262 | onClick={openInvoices} |
220 | onClick={openInvoices} | 263 | /> |
221 | /> | 264 | </div> |
222 | </div> | ||
223 | )} | ||
224 | </div> | 265 | </div> |
225 | </div> | 266 | </div> |
226 | )} | 267 | )} |
227 | </> | 268 | {!user.isPremium && ( |
228 | )} | 269 | <div className="account franz-form"> |
229 | 270 | <div className="account__box"> | |
230 | {!user.isPremium && ( | 271 | <H2>{intl.formatMessage(messages.headlineUpgrade)}</H2> |
231 | isLoadingPlans ? ( | 272 | <SubscriptionForm /> |
232 | <Loader /> | 273 | </div> |
233 | ) : ( | ||
234 | <div className="account franz-form"> | ||
235 | <div className="account__box"> | ||
236 | <h2>{intl.formatMessage(messages.headlineUpgrade)}</h2> | ||
237 | <SubscriptionForm | ||
238 | onCloseWindow={onCloseSubscriptionWindow} | ||
239 | /> | ||
240 | </div> | 274 | </div> |
241 | </div> | 275 | )} |
242 | ) | 276 | </> |
243 | )} | 277 | )} |
244 | 278 | ||
245 | <div className="account franz-form"> | 279 | <div className="account franz-form"> |
246 | <div className="account__box"> | 280 | <div className="account__box"> |
247 | <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2> | 281 | <H2>{intl.formatMessage(messages.headlineDangerZone)}</H2> |
248 | {!isDeleteAccountSuccessful && ( | 282 | {!isDeleteAccountSuccessful && ( |
249 | <div className="account__subscription"> | 283 | <div className="account__subscription"> |
250 | <p>{intl.formatMessage(messages.deleteInfo)}</p> | 284 | <p>{intl.formatMessage(messages.deleteInfo)}</p> |
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js index 50f1e0522..0c630f047 100644 --- a/src/components/subscription/SubscriptionForm.js +++ b/src/components/subscription/SubscriptionForm.js | |||
@@ -1,214 +1,94 @@ | |||
1 | import React, { Component, Fragment } from 'react'; | 1 | import React, { Component } from 'react'; |
2 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | 3 | import { observer } from 'mobx-react'; |
4 | import { defineMessages, intlShape } from 'react-intl'; | 4 | import { defineMessages, intlShape } from 'react-intl'; |
5 | import injectSheet from 'react-jss'; | ||
5 | 6 | ||
6 | import Form from '../../lib/Form'; | 7 | import { H3 } from '@meetfranz/ui'; |
7 | import Radio from '../ui/Radio'; | ||
8 | import Button from '../ui/Button'; | ||
9 | import Loader from '../ui/Loader'; | ||
10 | 8 | ||
11 | import { required } from '../../helpers/validation-helpers'; | 9 | import { Button } from '@meetfranz/forms'; |
10 | import { FeatureList } from '../ui/FeatureList'; | ||
11 | import { FeatureItem } from '../ui/FeatureItem'; | ||
12 | 12 | ||
13 | const messages = defineMessages({ | 13 | const messages = defineMessages({ |
14 | submitButtonLabel: { | 14 | submitButtonLabel: { |
15 | id: 'subscription.submit.label', | 15 | id: 'subscription.cta.activateTrial', |
16 | defaultMessage: '!!!Support the development of Franz', | 16 | defaultMessage: '!!!Yes, upgrade my account to Franz Professional', |
17 | }, | ||
18 | paymentSessionError: { | ||
19 | id: 'subscription.paymentSessionError', | ||
20 | defaultMessage: '!!!Could not initialize payment form', | ||
21 | }, | ||
22 | typeFree: { | ||
23 | id: 'subscription.type.free', | ||
24 | defaultMessage: '!!!free', | ||
25 | }, | ||
26 | typeMonthly: { | ||
27 | id: 'subscription.type.month', | ||
28 | defaultMessage: '!!!month', | ||
29 | }, | ||
30 | typeYearly: { | ||
31 | id: 'subscription.type.year', | ||
32 | defaultMessage: '!!!year', | ||
33 | }, | 17 | }, |
34 | includedFeatures: { | 18 | includedFeatures: { |
35 | id: 'subscription.includedFeatures', | 19 | id: 'subscription.includedProFeatures', |
36 | defaultMessage: '!!!The Franz Premium Supporter Account includes', | 20 | defaultMessage: '!!!The Franz Professional Plan includes:', |
37 | }, | ||
38 | onpremise: { | ||
39 | id: 'subscription.features.onpremise.mattermost', | ||
40 | defaultMessage: '!!!Add on-premise/hosted services like Mattermost', | ||
41 | }, | ||
42 | noInterruptions: { | ||
43 | id: 'subscription.features.noInterruptions', | ||
44 | defaultMessage: '!!!No app delays & nagging to upgrade license', | ||
45 | }, | 21 | }, |
46 | proxy: { | 22 | noStringsAttachedHeadline: { |
47 | id: 'subscription.features.proxy', | 23 | id: 'pricing.trial.terms.headline', |
48 | defaultMessage: '!!!Proxy support for services', | 24 | defaultMessage: '!!!No strings attached', |
49 | }, | 25 | }, |
50 | spellchecker: { | 26 | noCreditCard: { |
51 | id: 'subscription.features.spellchecker', | 27 | id: 'pricing.trial.terms.noCreditCard', |
52 | defaultMessage: '!!!Support for Spellchecker', | 28 | defaultMessage: '!!!No credit card required', |
53 | }, | 29 | }, |
54 | workspaces: { | 30 | automaticTrialEnd: { |
55 | id: 'subscription.features.workspaces', | 31 | id: 'pricing.trial.terms.automaticTrialEnd', |
56 | defaultMessage: '!!!Organize your services in workspaces', | 32 | defaultMessage: '!!!Your free trial ends automatically after 14 days', |
57 | }, | 33 | }, |
58 | ads: { | 34 | }); |
59 | id: 'subscription.features.ads', | 35 | |
60 | defaultMessage: '!!!No ads, ever!', | 36 | const styles = () => ({ |
61 | }, | 37 | activateTrialButton: { |
62 | comingSoon: { | 38 | margin: [40, 0, 50], |
63 | id: 'subscription.features.comingSoon', | ||
64 | defaultMessage: '!!!coming soon', | ||
65 | }, | 39 | }, |
66 | euTaxInfo: { | 40 | keyTerms: { |
67 | id: 'subscription.euTaxInfo', | 41 | marginTop: 20, |
68 | defaultMessage: '!!!EU residents: local sales tax may apply', | ||
69 | }, | 42 | }, |
70 | }); | 43 | }); |
71 | 44 | ||
72 | export default @observer class SubscriptionForm extends Component { | 45 | export default @observer @injectSheet(styles) class SubscriptionForm extends Component { |
73 | static propTypes = { | 46 | static propTypes = { |
74 | plan: MobxPropTypes.objectOrObservableObject.isRequired, | 47 | activateTrial: PropTypes.func.isRequired, |
75 | isLoading: PropTypes.bool.isRequired, | 48 | isActivatingTrial: PropTypes.bool.isRequired, |
76 | handlePayment: PropTypes.func.isRequired, | 49 | classes: PropTypes.object.isRequired, |
77 | retryPlanRequest: PropTypes.func.isRequired, | ||
78 | isCreatingHostedPage: PropTypes.bool.isRequired, | ||
79 | error: PropTypes.bool.isRequired, | ||
80 | showSkipOption: PropTypes.bool, | ||
81 | skipAction: PropTypes.func, | ||
82 | skipButtonLabel: PropTypes.string, | ||
83 | hideInfo: PropTypes.bool.isRequired, | ||
84 | }; | ||
85 | |||
86 | static defaultProps = { | ||
87 | showSkipOption: false, | ||
88 | skipAction: () => null, | ||
89 | skipButtonLabel: '', | ||
90 | }; | 50 | }; |
91 | 51 | ||
92 | static contextTypes = { | 52 | static contextTypes = { |
93 | intl: intlShape, | 53 | intl: intlShape, |
94 | }; | 54 | }; |
95 | 55 | ||
96 | componentWillMount() { | ||
97 | this.form = this.prepareForm(); | ||
98 | } | ||
99 | |||
100 | prepareForm() { | ||
101 | const { intl } = this.context; | ||
102 | |||
103 | const form = { | ||
104 | fields: { | ||
105 | paymentTier: { | ||
106 | value: 'year', | ||
107 | validators: [required], | ||
108 | options: [{ | ||
109 | value: 'month', | ||
110 | label: `€ ${Object.hasOwnProperty.call(this.props.plan, 'month') | ||
111 | ? `${this.props.plan.month.price} / ${intl.formatMessage(messages.typeMonthly)}` | ||
112 | : 'monthly'}`, | ||
113 | }, { | ||
114 | value: 'year', | ||
115 | label: `€ ${Object.hasOwnProperty.call(this.props.plan, 'year') | ||
116 | ? `${this.props.plan.year.price} / ${intl.formatMessage(messages.typeYearly)}` | ||
117 | : 'yearly'}`, | ||
118 | }], | ||
119 | }, | ||
120 | }, | ||
121 | }; | ||
122 | |||
123 | if (this.props.showSkipOption) { | ||
124 | form.fields.paymentTier.options.unshift({ | ||
125 | value: 'skip', | ||
126 | label: `€ 0 / ${intl.formatMessage(messages.typeFree)}`, | ||
127 | }); | ||
128 | } | ||
129 | |||
130 | return new Form(form, this.context.intl); | ||
131 | } | ||
132 | |||
133 | render() { | 56 | render() { |
134 | const { | 57 | const { |
135 | isLoading, | 58 | isActivatingTrial, |
136 | isCreatingHostedPage, | 59 | activateTrial, |
137 | handlePayment, | 60 | classes, |
138 | retryPlanRequest, | ||
139 | error, | ||
140 | showSkipOption, | ||
141 | skipAction, | ||
142 | skipButtonLabel, | ||
143 | hideInfo, | ||
144 | } = this.props; | 61 | } = this.props; |
145 | const { intl } = this.context; | 62 | const { intl } = this.context; |
146 | 63 | ||
147 | if (error) { | 64 | console.log('isActivatingTrial', isActivatingTrial); |
148 | return ( | ||
149 | <Button | ||
150 | label="Reload" | ||
151 | onClick={retryPlanRequest} | ||
152 | isLoaded={!isLoading} | ||
153 | /> | ||
154 | ); | ||
155 | } | ||
156 | 65 | ||
157 | return ( | 66 | return ( |
158 | <Loader loaded={!isLoading}> | 67 | <> |
159 | <Radio field={this.form.$('paymentTier')} showLabel={false} className="paymentTiers" /> | 68 | <H3 className={classes.keyTerms}> |
160 | {!hideInfo && ( | 69 | {intl.formatMessage(messages.noStringsAttachedHeadline)} |
161 | <div className="subscription__premium-info"> | 70 | </H3> |
162 | <p> | 71 | <ul> |
163 | <strong>{intl.formatMessage(messages.includedFeatures)}</strong> | 72 | <FeatureItem icon="👉" name={intl.formatMessage(messages.noCreditCard)} /> |
164 | </p> | 73 | <FeatureItem icon="👉" name={intl.formatMessage(messages.automaticTrialEnd)} /> |
165 | <div className="subscription"> | 74 | </ul> |
166 | <ul className="subscription__premium-features"> | 75 | |
167 | <li>{intl.formatMessage(messages.onpremise)}</li> | 76 | <Button |
168 | <li> | 77 | label={intl.formatMessage(messages.submitButtonLabel)} |
169 | {intl.formatMessage(messages.noInterruptions)} | 78 | className={classes.activateTrialButton} |
170 | </li> | 79 | busy={isActivatingTrial} |
171 | <li> | 80 | onClick={activateTrial} |
172 | {intl.formatMessage(messages.spellchecker)} | 81 | stretch |
173 | </li> | 82 | /> |
174 | <li> | 83 | <div className="subscription__premium-info"> |
175 | {intl.formatMessage(messages.proxy)} | 84 | <H3> |
176 | </li> | 85 | {intl.formatMessage(messages.includedFeatures)} |
177 | <li> | 86 | </H3> |
178 | {intl.formatMessage(messages.workspaces)} | 87 | <div className="subscription"> |
179 | </li> | 88 | <FeatureList /> |
180 | <li> | ||
181 | {intl.formatMessage(messages.ads)} | ||
182 | </li> | ||
183 | </ul> | ||
184 | </div> | ||
185 | </div> | 89 | </div> |
186 | )} | 90 | </div> |
187 | <Fragment> | 91 | </> |
188 | {error.code === 'no-payment-session' && ( | ||
189 | <p className="error-message center">{intl.formatMessage(messages.paymentSessionError)}</p> | ||
190 | )} | ||
191 | </Fragment> | ||
192 | {showSkipOption && this.form.$('paymentTier').value === 'skip' ? ( | ||
193 | <Button | ||
194 | label={skipButtonLabel} | ||
195 | className="auth__button" | ||
196 | onClick={skipAction} | ||
197 | /> | ||
198 | ) : ( | ||
199 | <Button | ||
200 | label={intl.formatMessage(messages.submitButtonLabel)} | ||
201 | className="auth__button" | ||
202 | loaded={!isCreatingHostedPage} | ||
203 | onClick={() => handlePayment(this.form.$('paymentTier').value)} | ||
204 | /> | ||
205 | )} | ||
206 | {this.form.$('paymentTier').value !== 'skip' && ( | ||
207 | <p className="legal"> | ||
208 | {intl.formatMessage(messages.euTaxInfo)} | ||
209 | </p> | ||
210 | )} | ||
211 | </Loader> | ||
212 | ); | 92 | ); |
213 | } | 93 | } |
214 | } | 94 | } |
diff --git a/src/config.js b/src/config.js index 3c8b0f0d0..edcae9df1 100644 --- a/src/config.js +++ b/src/config.js | |||
@@ -84,3 +84,27 @@ export const ALLOWED_PROTOCOLS = [ | |||
84 | 'http:', | 84 | 'http:', |
85 | 'ftp:', | 85 | 'ftp:', |
86 | ]; | 86 | ]; |
87 | |||
88 | export const PLANS = { | ||
89 | PERSONAL_MONTHLY: 'PERSONAL_MONTHLY', | ||
90 | PERSONAL_YEARLY: 'PERSONAL_YEARLY', | ||
91 | PRO_MONTHLY: 'PRO_MONTHLY', | ||
92 | PRO_YEARLY: 'PRO_YEARLY', | ||
93 | LEGACY: 'LEGACY', | ||
94 | FREE: 'FREE', | ||
95 | }; | ||
96 | |||
97 | export const PLANS_MAPPING = { | ||
98 | 'franz-personal-monthly': PLANS.PERSONAL_MONTHLY, | ||
99 | 'franz-personal-yearly': PLANS.PERSONAL_YEARLY, | ||
100 | 'franz-pro-monthly': PLANS.PRO_MONTHLY, | ||
101 | 'franz-pro-yearly': PLANS.PRO_YEARLY, | ||
102 | 'franz-supporter-license': PLANS.LEGACY, | ||
103 | 'franz-supporter-license-x1': PLANS.LEGACY, | ||
104 | 'franz-supporter-license-x2': PLANS.LEGACY, | ||
105 | 'franz-supporter-license-year': PLANS.LEGACY, | ||
106 | 'franz-supporter-license-year-x1': PLANS.LEGACY, | ||
107 | 'franz-supporter-license-year-x2': PLANS.LEGACY, | ||
108 | 'franz-supporter-license-year-2019': PLANS.LEGACY, | ||
109 | free: PLANS.FREE, | ||
110 | }; | ||
diff --git a/src/containers/subscription/SubscriptionFormScreen.js b/src/containers/subscription/SubscriptionFormScreen.js index aa1166f5e..7486cc498 100644 --- a/src/containers/subscription/SubscriptionFormScreen.js +++ b/src/containers/subscription/SubscriptionFormScreen.js | |||
@@ -74,28 +74,14 @@ export default @inject('stores', 'actions') @observer class SubscriptionFormScre | |||
74 | 74 | ||
75 | render() { | 75 | render() { |
76 | const { | 76 | const { |
77 | content, | ||
78 | actions, | 77 | actions, |
79 | stores, | 78 | stores, |
80 | showSkipOption, | ||
81 | skipAction, | ||
82 | skipButtonLabel, | ||
83 | hideInfo, | ||
84 | } = this.props; | 79 | } = this.props; |
85 | return ( | 80 | return ( |
86 | <SubscriptionForm | 81 | <SubscriptionForm |
87 | plan={stores.payment.plan} | 82 | plan={stores.payment.plan} |
88 | isLoading={stores.payment.plansRequest.isExecuting} | 83 | activateTrial={() => actions.user.activateTrial({ planId: stores.features.features.defaultTrialPlan })} |
89 | retryPlanRequest={() => stores.payment.plansRequest.reload()} | 84 | isActivatingTrial={stores.user.activateTrialRequest.isExecuting || stores.user.getUserInfoRequest.isExecuting} |
90 | isCreatingHostedPage={stores.payment.createHostedPageRequest.isExecuting} | ||
91 | handlePayment={price => this.handlePayment(price)} | ||
92 | content={content} | ||
93 | error={stores.payment.plansRequest.isError} | ||
94 | showSkipOption={showSkipOption} | ||
95 | skipAction={skipAction} | ||
96 | skipButtonLabel={skipButtonLabel} | ||
97 | hideInfo={hideInfo} | ||
98 | openExternalUrl={actions.app.openExternalUrl} | ||
99 | /> | 85 | /> |
100 | ); | 86 | ); |
101 | } | 87 | } |
diff --git a/src/helpers/plan-helpers.js b/src/helpers/plan-helpers.js new file mode 100644 index 000000000..37a4457af --- /dev/null +++ b/src/helpers/plan-helpers.js | |||
@@ -0,0 +1,43 @@ | |||
1 | import { defineMessages } from 'react-intl'; | ||
2 | import { PLANS_MAPPING, PLANS } from '../config'; | ||
3 | |||
4 | const messages = defineMessages({ | ||
5 | [PLANS.PRO_YEARLY]: { | ||
6 | id: 'pricing.plan.pro-yearly', | ||
7 | defaultMessage: '!!!Franz Professional Yearly', | ||
8 | }, | ||
9 | [PLANS.PRO_MONTHLY]: { | ||
10 | id: 'pricing.plan.pro-monthly', | ||
11 | defaultMessage: '!!!Franz Professional Monthly', | ||
12 | }, | ||
13 | [PLANS.PERSONAL_YEARLY]: { | ||
14 | id: 'pricing.plan.personal-yearly', | ||
15 | defaultMessage: '!!!Franz Personal Yearly', | ||
16 | }, | ||
17 | [PLANS.PERSONAL_MONTHLY]: { | ||
18 | id: 'pricing.plan.personal-monthly', | ||
19 | defaultMessage: '!!!Franz Personal Monthly', | ||
20 | }, | ||
21 | [PLANS.FREE]: { | ||
22 | id: 'pricing.plan.free', | ||
23 | defaultMessage: '!!!Franz Free', | ||
24 | }, | ||
25 | [PLANS.LEGACY]: { | ||
26 | id: 'pricing.plan.legacy', | ||
27 | defaultMessage: '!!!Franz Premium', | ||
28 | }, | ||
29 | }); | ||
30 | |||
31 | export function i18nPlanName(planId, intl) { | ||
32 | if (!planId) { | ||
33 | throw new Error('planId is required'); | ||
34 | } | ||
35 | |||
36 | if (!intl) { | ||
37 | throw new Error('intl context is required'); | ||
38 | } | ||
39 | |||
40 | const plan = PLANS_MAPPING[planId]; | ||
41 | |||
42 | return intl.formatMessage(messages[plan]); | ||
43 | } | ||
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json index 930f6752e..836fe3b24 100644 --- a/src/i18n/locales/defaultMessages.json +++ b/src/i18n/locales/defaultMessages.json | |||
@@ -734,39 +734,39 @@ | |||
734 | "defaultMessage": "!!!Your services have been updated.", | 734 | "defaultMessage": "!!!Your services have been updated.", |
735 | "end": { | 735 | "end": { |
736 | "column": 3, | 736 | "column": 3, |
737 | "line": 29 | 737 | "line": 30 |
738 | }, | 738 | }, |
739 | "file": "src/components/layout/AppLayout.js", | 739 | "file": "src/components/layout/AppLayout.js", |
740 | "id": "infobar.servicesUpdated", | 740 | "id": "infobar.servicesUpdated", |
741 | "start": { | 741 | "start": { |
742 | "column": 19, | 742 | "column": 19, |
743 | "line": 26 | 743 | "line": 27 |
744 | } | 744 | } |
745 | }, | 745 | }, |
746 | { | 746 | { |
747 | "defaultMessage": "!!!Reload services", | 747 | "defaultMessage": "!!!Reload services", |
748 | "end": { | 748 | "end": { |
749 | "column": 3, | 749 | "column": 3, |
750 | "line": 33 | 750 | "line": 34 |
751 | }, | 751 | }, |
752 | "file": "src/components/layout/AppLayout.js", | 752 | "file": "src/components/layout/AppLayout.js", |
753 | "id": "infobar.buttonReloadServices", | 753 | "id": "infobar.buttonReloadServices", |
754 | "start": { | 754 | "start": { |
755 | "column": 24, | 755 | "column": 24, |
756 | "line": 30 | 756 | "line": 31 |
757 | } | 757 | } |
758 | }, | 758 | }, |
759 | { | 759 | { |
760 | "defaultMessage": "!!!Could not load services and user information", | 760 | "defaultMessage": "!!!Could not load services and user information", |
761 | "end": { | 761 | "end": { |
762 | "column": 3, | 762 | "column": 3, |
763 | "line": 37 | 763 | "line": 38 |
764 | }, | 764 | }, |
765 | "file": "src/components/layout/AppLayout.js", | 765 | "file": "src/components/layout/AppLayout.js", |
766 | "id": "infobar.requiredRequestsFailed", | 766 | "id": "infobar.requiredRequestsFailed", |
767 | "start": { | 767 | "start": { |
768 | "column": 26, | 768 | "column": 26, |
769 | "line": 34 | 769 | "line": 35 |
770 | } | 770 | } |
771 | } | 771 | } |
772 | ], | 772 | ], |
@@ -1242,195 +1242,247 @@ | |||
1242 | "defaultMessage": "!!!Account", | 1242 | "defaultMessage": "!!!Account", |
1243 | "end": { | 1243 | "end": { |
1244 | "column": 3, | 1244 | "column": 3, |
1245 | "line": 17 | 1245 | "line": 19 |
1246 | }, | 1246 | }, |
1247 | "file": "src/components/settings/account/AccountDashboard.js", | 1247 | "file": "src/components/settings/account/AccountDashboard.js", |
1248 | "id": "settings.account.headline", | 1248 | "id": "settings.account.headline", |
1249 | "start": { | 1249 | "start": { |
1250 | "column": 12, | 1250 | "column": 12, |
1251 | "line": 14 | 1251 | "line": 16 |
1252 | } | 1252 | } |
1253 | }, | 1253 | }, |
1254 | { | 1254 | { |
1255 | "defaultMessage": "!!!Your Subscription", | 1255 | "defaultMessage": "!!!Your Subscription", |
1256 | "end": { | 1256 | "end": { |
1257 | "column": 3, | 1257 | "column": 3, |
1258 | "line": 21 | 1258 | "line": 23 |
1259 | }, | 1259 | }, |
1260 | "file": "src/components/settings/account/AccountDashboard.js", | 1260 | "file": "src/components/settings/account/AccountDashboard.js", |
1261 | "id": "settings.account.headlineSubscription", | 1261 | "id": "settings.account.headlineSubscription", |
1262 | "start": { | 1262 | "start": { |
1263 | "column": 24, | 1263 | "column": 24, |
1264 | "line": 18 | 1264 | "line": 20 |
1265 | } | 1265 | } |
1266 | }, | 1266 | }, |
1267 | { | 1267 | { |
1268 | "defaultMessage": "!!!Upgrade your Account", | 1268 | "defaultMessage": "!!!Upgrade your Account", |
1269 | "end": { | 1269 | "end": { |
1270 | "column": 3, | 1270 | "column": 3, |
1271 | "line": 25 | 1271 | "line": 27 |
1272 | }, | 1272 | }, |
1273 | "file": "src/components/settings/account/AccountDashboard.js", | 1273 | "file": "src/components/settings/account/AccountDashboard.js", |
1274 | "id": "settings.account.headlineUpgrade", | 1274 | "id": "settings.account.headlineUpgrade", |
1275 | "start": { | 1275 | "start": { |
1276 | "column": 19, | 1276 | "column": 19, |
1277 | "line": 22 | 1277 | "line": 24 |
1278 | } | 1278 | } |
1279 | }, | 1279 | }, |
1280 | { | 1280 | { |
1281 | "defaultMessage": "!!Danger Zone", | 1281 | "defaultMessage": "!!Danger Zone", |
1282 | "end": { | 1282 | "end": { |
1283 | "column": 3, | 1283 | "column": 3, |
1284 | "line": 29 | 1284 | "line": 31 |
1285 | }, | 1285 | }, |
1286 | "file": "src/components/settings/account/AccountDashboard.js", | 1286 | "file": "src/components/settings/account/AccountDashboard.js", |
1287 | "id": "settings.account.headlineDangerZone", | 1287 | "id": "settings.account.headlineDangerZone", |
1288 | "start": { | 1288 | "start": { |
1289 | "column": 22, | 1289 | "column": 22, |
1290 | "line": 26 | 1290 | "line": 28 |
1291 | } | 1291 | } |
1292 | }, | 1292 | }, |
1293 | { | 1293 | { |
1294 | "defaultMessage": "!!!Manage your subscription", | 1294 | "defaultMessage": "!!!Manage your subscription", |
1295 | "end": { | 1295 | "end": { |
1296 | "column": 3, | 1296 | "column": 3, |
1297 | "line": 33 | 1297 | "line": 35 |
1298 | }, | 1298 | }, |
1299 | "file": "src/components/settings/account/AccountDashboard.js", | 1299 | "file": "src/components/settings/account/AccountDashboard.js", |
1300 | "id": "settings.account.manageSubscription.label", | 1300 | "id": "settings.account.manageSubscription.label", |
1301 | "start": { | 1301 | "start": { |
1302 | "column": 33, | 1302 | "column": 33, |
1303 | "line": 30 | 1303 | "line": 32 |
1304 | } | 1304 | } |
1305 | }, | 1305 | }, |
1306 | { | 1306 | { |
1307 | "defaultMessage": "!!!Basic Account", | 1307 | "defaultMessage": "!!!Basic Account", |
1308 | "end": { | 1308 | "end": { |
1309 | "column": 3, | 1309 | "column": 3, |
1310 | "line": 37 | 1310 | "line": 39 |
1311 | }, | 1311 | }, |
1312 | "file": "src/components/settings/account/AccountDashboard.js", | 1312 | "file": "src/components/settings/account/AccountDashboard.js", |
1313 | "id": "settings.account.accountType.basic", | 1313 | "id": "settings.account.accountType.basic", |
1314 | "start": { | 1314 | "start": { |
1315 | "column": 20, | 1315 | "column": 20, |
1316 | "line": 34 | 1316 | "line": 36 |
1317 | } | 1317 | } |
1318 | }, | 1318 | }, |
1319 | { | 1319 | { |
1320 | "defaultMessage": "!!!Premium Supporter Account", | 1320 | "defaultMessage": "!!!Premium Supporter Account", |
1321 | "end": { | 1321 | "end": { |
1322 | "column": 3, | 1322 | "column": 3, |
1323 | "line": 41 | 1323 | "line": 43 |
1324 | }, | 1324 | }, |
1325 | "file": "src/components/settings/account/AccountDashboard.js", | 1325 | "file": "src/components/settings/account/AccountDashboard.js", |
1326 | "id": "settings.account.accountType.premium", | 1326 | "id": "settings.account.accountType.premium", |
1327 | "start": { | 1327 | "start": { |
1328 | "column": 22, | 1328 | "column": 22, |
1329 | "line": 38 | 1329 | "line": 40 |
1330 | } | 1330 | } |
1331 | }, | 1331 | }, |
1332 | { | 1332 | { |
1333 | "defaultMessage": "!!!Edit Account", | 1333 | "defaultMessage": "!!!Edit Account", |
1334 | "end": { | 1334 | "end": { |
1335 | "column": 3, | 1335 | "column": 3, |
1336 | "line": 45 | 1336 | "line": 47 |
1337 | }, | 1337 | }, |
1338 | "file": "src/components/settings/account/AccountDashboard.js", | 1338 | "file": "src/components/settings/account/AccountDashboard.js", |
1339 | "id": "settings.account.account.editButton", | 1339 | "id": "settings.account.account.editButton", |
1340 | "start": { | 1340 | "start": { |
1341 | "column": 21, | 1341 | "column": 21, |
1342 | "line": 42 | 1342 | "line": 44 |
1343 | } | 1343 | } |
1344 | }, | 1344 | }, |
1345 | { | 1345 | { |
1346 | "defaultMessage": "!!Invoices", | 1346 | "defaultMessage": "!!Invoices", |
1347 | "end": { | 1347 | "end": { |
1348 | "column": 3, | 1348 | "column": 3, |
1349 | "line": 49 | 1349 | "line": 51 |
1350 | }, | 1350 | }, |
1351 | "file": "src/components/settings/account/AccountDashboard.js", | 1351 | "file": "src/components/settings/account/AccountDashboard.js", |
1352 | "id": "settings.account.headlineInvoices", | 1352 | "id": "settings.account.headlineInvoices", |
1353 | "start": { | 1353 | "start": { |
1354 | "column": 18, | 1354 | "column": 18, |
1355 | "line": 46 | 1355 | "line": 48 |
1356 | } | 1356 | } |
1357 | }, | 1357 | }, |
1358 | { | 1358 | { |
1359 | "defaultMessage": "!!!Download", | 1359 | "defaultMessage": "!!!Download", |
1360 | "end": { | 1360 | "end": { |
1361 | "column": 3, | 1361 | "column": 3, |
1362 | "line": 53 | 1362 | "line": 55 |
1363 | }, | 1363 | }, |
1364 | "file": "src/components/settings/account/AccountDashboard.js", | 1364 | "file": "src/components/settings/account/AccountDashboard.js", |
1365 | "id": "settings.account.invoiceDownload", | 1365 | "id": "settings.account.invoiceDownload", |
1366 | "start": { | 1366 | "start": { |
1367 | "column": 19, | 1367 | "column": 19, |
1368 | "line": 50 | 1368 | "line": 52 |
1369 | } | 1369 | } |
1370 | }, | 1370 | }, |
1371 | { | 1371 | { |
1372 | "defaultMessage": "!!!Could not load user information", | 1372 | "defaultMessage": "!!!Could not load user information", |
1373 | "end": { | 1373 | "end": { |
1374 | "column": 3, | 1374 | "column": 3, |
1375 | "line": 57 | 1375 | "line": 59 |
1376 | }, | 1376 | }, |
1377 | "file": "src/components/settings/account/AccountDashboard.js", | 1377 | "file": "src/components/settings/account/AccountDashboard.js", |
1378 | "id": "settings.account.userInfoRequestFailed", | 1378 | "id": "settings.account.userInfoRequestFailed", |
1379 | "start": { | 1379 | "start": { |
1380 | "column": 25, | 1380 | "column": 25, |
1381 | "line": 54 | 1381 | "line": 56 |
1382 | } | 1382 | } |
1383 | }, | 1383 | }, |
1384 | { | 1384 | { |
1385 | "defaultMessage": "!!!Try again", | 1385 | "defaultMessage": "!!!Try again", |
1386 | "end": { | 1386 | "end": { |
1387 | "column": 3, | 1387 | "column": 3, |
1388 | "line": 61 | 1388 | "line": 63 |
1389 | }, | 1389 | }, |
1390 | "file": "src/components/settings/account/AccountDashboard.js", | 1390 | "file": "src/components/settings/account/AccountDashboard.js", |
1391 | "id": "settings.account.tryReloadUserInfoRequest", | 1391 | "id": "settings.account.tryReloadUserInfoRequest", |
1392 | "start": { | 1392 | "start": { |
1393 | "column": 28, | 1393 | "column": 28, |
1394 | "line": 58 | 1394 | "line": 60 |
1395 | } | 1395 | } |
1396 | }, | 1396 | }, |
1397 | { | 1397 | { |
1398 | "defaultMessage": "!!!Delete account", | 1398 | "defaultMessage": "!!!Delete account", |
1399 | "end": { | 1399 | "end": { |
1400 | "column": 3, | 1400 | "column": 3, |
1401 | "line": 65 | 1401 | "line": 67 |
1402 | }, | 1402 | }, |
1403 | "file": "src/components/settings/account/AccountDashboard.js", | 1403 | "file": "src/components/settings/account/AccountDashboard.js", |
1404 | "id": "settings.account.deleteAccount", | 1404 | "id": "settings.account.deleteAccount", |
1405 | "start": { | 1405 | "start": { |
1406 | "column": 17, | 1406 | "column": 17, |
1407 | "line": 62 | 1407 | "line": 64 |
1408 | } | 1408 | } |
1409 | }, | 1409 | }, |
1410 | { | 1410 | { |
1411 | "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", | 1411 | "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", |
1412 | "end": { | 1412 | "end": { |
1413 | "column": 3, | 1413 | "column": 3, |
1414 | "line": 69 | 1414 | "line": 71 |
1415 | }, | 1415 | }, |
1416 | "file": "src/components/settings/account/AccountDashboard.js", | 1416 | "file": "src/components/settings/account/AccountDashboard.js", |
1417 | "id": "settings.account.deleteInfo", | 1417 | "id": "settings.account.deleteInfo", |
1418 | "start": { | 1418 | "start": { |
1419 | "column": 14, | 1419 | "column": 14, |
1420 | "line": 66 | 1420 | "line": 68 |
1421 | } | 1421 | } |
1422 | }, | 1422 | }, |
1423 | { | 1423 | { |
1424 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", | 1424 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", |
1425 | "end": { | 1425 | "end": { |
1426 | "column": 3, | 1426 | "column": 3, |
1427 | "line": 73 | 1427 | "line": 75 |
1428 | }, | 1428 | }, |
1429 | "file": "src/components/settings/account/AccountDashboard.js", | 1429 | "file": "src/components/settings/account/AccountDashboard.js", |
1430 | "id": "settings.account.deleteEmailSent", | 1430 | "id": "settings.account.deleteEmailSent", |
1431 | "start": { | 1431 | "start": { |
1432 | "column": 19, | 1432 | "column": 19, |
1433 | "line": 70 | 1433 | "line": 72 |
1434 | } | ||
1435 | }, | ||
1436 | { | ||
1437 | "defaultMessage": "!!!Free Trial", | ||
1438 | "end": { | ||
1439 | "column": 3, | ||
1440 | "line": 79 | ||
1441 | }, | ||
1442 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1443 | "id": "settings.account.trial", | ||
1444 | "start": { | ||
1445 | "column": 9, | ||
1446 | "line": 76 | ||
1447 | } | ||
1448 | }, | ||
1449 | { | ||
1450 | "defaultMessage": "!!!Your license:", | ||
1451 | "end": { | ||
1452 | "column": 3, | ||
1453 | "line": 83 | ||
1454 | }, | ||
1455 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1456 | "id": "settings.account.yourLicense", | ||
1457 | "start": { | ||
1458 | "column": 15, | ||
1459 | "line": 80 | ||
1460 | } | ||
1461 | }, | ||
1462 | { | ||
1463 | "defaultMessage": "!!!Your free trial ends in {duration}.", | ||
1464 | "end": { | ||
1465 | "column": 3, | ||
1466 | "line": 87 | ||
1467 | }, | ||
1468 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1469 | "id": "settings.account.trialEndsIn", | ||
1470 | "start": { | ||
1471 | "column": 15, | ||
1472 | "line": 84 | ||
1473 | } | ||
1474 | }, | ||
1475 | { | ||
1476 | "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.", | ||
1477 | "end": { | ||
1478 | "column": 3, | ||
1479 | "line": 91 | ||
1480 | }, | ||
1481 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1482 | "id": "settings.account.trialUpdateBillingInfo", | ||
1483 | "start": { | ||
1484 | "column": 33, | ||
1485 | "line": 88 | ||
1434 | } | 1486 | } |
1435 | } | 1487 | } |
1436 | ], | 1488 | ], |
@@ -2872,6 +2924,24 @@ | |||
2872 | { | 2924 | { |
2873 | "descriptors": [ | 2925 | "descriptors": [ |
2874 | { | 2926 | { |
2927 | "defaultMessage": "!!!Your trial was successfully activated. Happy messaging!", | ||
2928 | "end": { | ||
2929 | "column": 3, | ||
2930 | "line": 14 | ||
2931 | }, | ||
2932 | "file": "src/components/TrialActivationInfoBar.js", | ||
2933 | "id": "infobar.trialActivated", | ||
2934 | "start": { | ||
2935 | "column": 11, | ||
2936 | "line": 11 | ||
2937 | } | ||
2938 | } | ||
2939 | ], | ||
2940 | "path": "src/components/TrialActivationInfoBar.json" | ||
2941 | }, | ||
2942 | { | ||
2943 | "descriptors": [ | ||
2944 | { | ||
2875 | "defaultMessage": "!!!Add unlimited services", | 2945 | "defaultMessage": "!!!Add unlimited services", |
2876 | "end": { | 2946 | "end": { |
2877 | "column": 3, | 2947 | "column": 3, |
@@ -3578,65 +3648,65 @@ | |||
3578 | "defaultMessage": "!!!Please purchase license to skip waiting", | 3648 | "defaultMessage": "!!!Please purchase license to skip waiting", |
3579 | "end": { | 3649 | "end": { |
3580 | "column": 3, | 3650 | "column": 3, |
3581 | "line": 19 | 3651 | "line": 20 |
3582 | }, | 3652 | }, |
3583 | "file": "src/features/delayApp/Component.js", | 3653 | "file": "src/features/delayApp/Component.js", |
3584 | "id": "feature.delayApp.headline", | 3654 | "id": "feature.delayApp.headline", |
3585 | "start": { | 3655 | "start": { |
3586 | "column": 12, | 3656 | "column": 12, |
3587 | "line": 16 | 3657 | "line": 17 |
3588 | } | 3658 | } |
3589 | }, | 3659 | }, |
3590 | { | 3660 | { |
3591 | "defaultMessage": "!!!Get the free Franz Professional 14 day trial and skip the line", | 3661 | "defaultMessage": "!!!Get the free Franz Professional 14 day trial and skip the line", |
3592 | "end": { | 3662 | "end": { |
3593 | "column": 3, | 3663 | "column": 3, |
3594 | "line": 23 | 3664 | "line": 24 |
3595 | }, | 3665 | }, |
3596 | "file": "src/features/delayApp/Component.js", | 3666 | "file": "src/features/delayApp/Component.js", |
3597 | "id": "feature.delayApp.trial.headline", | 3667 | "id": "feature.delayApp.trial.headline", |
3598 | "start": { | 3668 | "start": { |
3599 | "column": 17, | 3669 | "column": 17, |
3600 | "line": 20 | 3670 | "line": 21 |
3601 | } | 3671 | } |
3602 | }, | 3672 | }, |
3603 | { | 3673 | { |
3604 | "defaultMessage": "!!!Get a Franz Supporter License", | 3674 | "defaultMessage": "!!!Get a Franz Supporter License", |
3605 | "end": { | 3675 | "end": { |
3606 | "column": 3, | 3676 | "column": 3, |
3607 | "line": 27 | 3677 | "line": 28 |
3608 | }, | 3678 | }, |
3609 | "file": "src/features/delayApp/Component.js", | 3679 | "file": "src/features/delayApp/Component.js", |
3610 | "id": "feature.delayApp.upgrade.action", | 3680 | "id": "feature.delayApp.upgrade.action", |
3611 | "start": { | 3681 | "start": { |
3612 | "column": 10, | 3682 | "column": 10, |
3613 | "line": 24 | 3683 | "line": 25 |
3614 | } | 3684 | } |
3615 | }, | 3685 | }, |
3616 | { | 3686 | { |
3617 | "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", | 3687 | "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", |
3618 | "end": { | 3688 | "end": { |
3619 | "column": 3, | 3689 | "column": 3, |
3620 | "line": 31 | 3690 | "line": 32 |
3621 | }, | 3691 | }, |
3622 | "file": "src/features/delayApp/Component.js", | 3692 | "file": "src/features/delayApp/Component.js", |
3623 | "id": "feature.delayApp.trial.action", | 3693 | "id": "feature.delayApp.trial.action", |
3624 | "start": { | 3694 | "start": { |
3625 | "column": 15, | 3695 | "column": 15, |
3626 | "line": 28 | 3696 | "line": 29 |
3627 | } | 3697 | } |
3628 | }, | 3698 | }, |
3629 | { | 3699 | { |
3630 | "defaultMessage": "!!!Franz will continue in {seconds} seconds.", | 3700 | "defaultMessage": "!!!Franz will continue in {seconds} seconds.", |
3631 | "end": { | 3701 | "end": { |
3632 | "column": 3, | 3702 | "column": 3, |
3633 | "line": 35 | 3703 | "line": 36 |
3634 | }, | 3704 | }, |
3635 | "file": "src/features/delayApp/Component.js", | 3705 | "file": "src/features/delayApp/Component.js", |
3636 | "id": "feature.delayApp.text", | 3706 | "id": "feature.delayApp.text", |
3637 | "start": { | 3707 | "start": { |
3638 | "column": 8, | 3708 | "column": 8, |
3639 | "line": 32 | 3709 | "line": 33 |
3640 | } | 3710 | } |
3641 | } | 3711 | } |
3642 | ], | 3712 | ], |
@@ -4184,6 +4254,172 @@ | |||
4184 | { | 4254 | { |
4185 | "descriptors": [ | 4255 | "descriptors": [ |
4186 | { | 4256 | { |
4257 | "defaultMessage": "!!!Franz Professional Yearly", | ||
4258 | "end": { | ||
4259 | "column": 3, | ||
4260 | "line": 8 | ||
4261 | }, | ||
4262 | "file": "src/helpers/plan-helpers.js", | ||
4263 | "id": "pricing.plan.pro-yearly", | ||
4264 | "start": { | ||
4265 | "column": 22, | ||
4266 | "line": 5 | ||
4267 | } | ||
4268 | }, | ||
4269 | { | ||
4270 | "defaultMessage": "!!!Franz Professional Monthly", | ||
4271 | "end": { | ||
4272 | "column": 3, | ||
4273 | "line": 12 | ||
4274 | }, | ||
4275 | "file": "src/helpers/plan-helpers.js", | ||
4276 | "id": "pricing.plan.pro-monthly", | ||
4277 | "start": { | ||
4278 | "column": 23, | ||
4279 | "line": 9 | ||
4280 | } | ||
4281 | }, | ||
4282 | { | ||
4283 | "defaultMessage": "!!!Franz Personal Yearly", | ||
4284 | "end": { | ||
4285 | "column": 3, | ||
4286 | "line": 16 | ||
4287 | }, | ||
4288 | "file": "src/helpers/plan-helpers.js", | ||
4289 | "id": "pricing.plan.personal-yearly", | ||
4290 | "start": { | ||
4291 | "column": 27, | ||
4292 | "line": 13 | ||
4293 | } | ||
4294 | }, | ||
4295 | { | ||
4296 | "defaultMessage": "!!!Franz Personal Monthly", | ||
4297 | "end": { | ||
4298 | "column": 3, | ||
4299 | "line": 20 | ||
4300 | }, | ||
4301 | "file": "src/helpers/plan-helpers.js", | ||
4302 | "id": "pricing.plan.personal-monthly", | ||
4303 | "start": { | ||
4304 | "column": 28, | ||
4305 | "line": 17 | ||
4306 | } | ||
4307 | }, | ||
4308 | { | ||
4309 | "defaultMessage": "!!!Franz Free", | ||
4310 | "end": { | ||
4311 | "column": 3, | ||
4312 | "line": 24 | ||
4313 | }, | ||
4314 | "file": "src/helpers/plan-helpers.js", | ||
4315 | "id": "pricing.plan.free", | ||
4316 | "start": { | ||
4317 | "column": 16, | ||
4318 | "line": 21 | ||
4319 | } | ||
4320 | }, | ||
4321 | { | ||
4322 | "defaultMessage": "!!!Franz Premium", | ||
4323 | "end": { | ||
4324 | "column": 3, | ||
4325 | "line": 28 | ||
4326 | }, | ||
4327 | "file": "src/helpers/plan-helpers.js", | ||
4328 | "id": "pricing.plan.legacy", | ||
4329 | "start": { | ||
4330 | "column": 18, | ||
4331 | "line": 25 | ||
4332 | } | ||
4333 | } | ||
4334 | ], | ||
4335 | "path": "src/helpers/plan-helpers.json" | ||
4336 | }, | ||
4337 | { | ||
4338 | "descriptors": [ | ||
4339 | { | ||
4340 | "defaultMessage": "!!!Franz Professional Yearly", | ||
4341 | "end": { | ||
4342 | "column": 3, | ||
4343 | "line": 8 | ||
4344 | }, | ||
4345 | "file": "src/helpers/pricing-helpers.js", | ||
4346 | "id": "pricing.plan.pro-yearly", | ||
4347 | "start": { | ||
4348 | "column": 22, | ||
4349 | "line": 5 | ||
4350 | } | ||
4351 | }, | ||
4352 | { | ||
4353 | "defaultMessage": "!!!Franz Professional Monthly", | ||
4354 | "end": { | ||
4355 | "column": 3, | ||
4356 | "line": 12 | ||
4357 | }, | ||
4358 | "file": "src/helpers/pricing-helpers.js", | ||
4359 | "id": "pricing.plan.pro-monthly", | ||
4360 | "start": { | ||
4361 | "column": 23, | ||
4362 | "line": 9 | ||
4363 | } | ||
4364 | }, | ||
4365 | { | ||
4366 | "defaultMessage": "!!!Franz Personal Yearly", | ||
4367 | "end": { | ||
4368 | "column": 3, | ||
4369 | "line": 16 | ||
4370 | }, | ||
4371 | "file": "src/helpers/pricing-helpers.js", | ||
4372 | "id": "pricing.plan.personal-yearly", | ||
4373 | "start": { | ||
4374 | "column": 27, | ||
4375 | "line": 13 | ||
4376 | } | ||
4377 | }, | ||
4378 | { | ||
4379 | "defaultMessage": "!!!Franz Personal Monthly", | ||
4380 | "end": { | ||
4381 | "column": 3, | ||
4382 | "line": 20 | ||
4383 | }, | ||
4384 | "file": "src/helpers/pricing-helpers.js", | ||
4385 | "id": "pricing.plan.personal-monthly", | ||
4386 | "start": { | ||
4387 | "column": 28, | ||
4388 | "line": 17 | ||
4389 | } | ||
4390 | }, | ||
4391 | { | ||
4392 | "defaultMessage": "!!!Franz Free", | ||
4393 | "end": { | ||
4394 | "column": 3, | ||
4395 | "line": 24 | ||
4396 | }, | ||
4397 | "file": "src/helpers/pricing-helpers.js", | ||
4398 | "id": "pricing.plan.free", | ||
4399 | "start": { | ||
4400 | "column": 16, | ||
4401 | "line": 21 | ||
4402 | } | ||
4403 | }, | ||
4404 | { | ||
4405 | "defaultMessage": "!!!Franz Premium", | ||
4406 | "end": { | ||
4407 | "column": 3, | ||
4408 | "line": 28 | ||
4409 | }, | ||
4410 | "file": "src/helpers/pricing-helpers.js", | ||
4411 | "id": "pricing.plan.legacy", | ||
4412 | "start": { | ||
4413 | "column": 18, | ||
4414 | "line": 25 | ||
4415 | } | ||
4416 | } | ||
4417 | ], | ||
4418 | "path": "src/helpers/pricing-helpers.json" | ||
4419 | }, | ||
4420 | { | ||
4421 | "descriptors": [ | ||
4422 | { | ||
4187 | "defaultMessage": "!!!Field is required", | 4423 | "defaultMessage": "!!!Field is required", |
4188 | "end": { | 4424 | "end": { |
4189 | "column": 3, | 4425 | "column": 3, |
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 4049e9400..eb0027424 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json | |||
@@ -4,9 +4,9 @@ | |||
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": "Please purchase a Franz Supporter License to skip waiting", |
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.headline": "!!!Get the free Franz Professional 14 day trial and skip the line", | 8 | "feature.delayApp.trial.headline": "Get the free Franz Professional 14 day trial and skip the line", |
9 | "feature.delayApp.upgrade.action": "!!!Get a Franz Supporter License", | 9 | "feature.delayApp.upgrade.action": "Get a Franz Supporter License", |
10 | "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.", | 10 | "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.", |
11 | "feature.shareFranz.action.email": "Send as email", | 11 | "feature.shareFranz.action.email": "Send as email", |
12 | "feature.shareFranz.action.facebook": "Share on Facebook", | 12 | "feature.shareFranz.action.facebook": "Share on Facebook", |
@@ -30,6 +30,7 @@ | |||
30 | "infobar.buttonReloadServices": "Reload services", | 30 | "infobar.buttonReloadServices": "Reload services", |
31 | "infobar.requiredRequestsFailed": "Could not load services and user information", | 31 | "infobar.requiredRequestsFailed": "Could not load services and user information", |
32 | "infobar.servicesUpdated": "Your services have been updated.", | 32 | "infobar.servicesUpdated": "Your services have been updated.", |
33 | "infobar.trialActivated": "Your trial was successfully activated. Happy messaging!", | ||
33 | "infobar.updateAvailable": "A new update for Franz is available.", | 34 | "infobar.updateAvailable": "A new update for Franz is available.", |
34 | "invite.email.label": "Email address", | 35 | "invite.email.label": "Email address", |
35 | "invite.headline.friends": "Invite 3 of your friends or colleagues", | 36 | "invite.headline.friends": "Invite 3 of your friends or colleagues", |
@@ -106,25 +107,31 @@ | |||
106 | "password.submit.label": "Submit", | 107 | "password.submit.label": "Submit", |
107 | "password.successInfo": "Please check your email", | 108 | "password.successInfo": "Please check your email", |
108 | "premiumFeature.button.upgradeAccount": "Upgrade account", | 109 | "premiumFeature.button.upgradeAccount": "Upgrade account", |
109 | "pricing.features.adFree": "!!!Forever ad-free", | 110 | "pricing.features.adFree": "Forever ad-free", |
110 | "pricing.features.appDelays": "!!!No Waiting Screens", | 111 | "pricing.features.appDelays": "No Waiting Screens", |
111 | "pricing.features.customWebsites": "!!!Add Custom Websites", | 112 | "pricing.features.customWebsites": "Add Custom Websites", |
112 | "pricing.features.onPremise": "!!!On-premise & other Hosted Services", | 113 | "pricing.features.onPremise": "On-premise & other Hosted Services", |
113 | "pricing.features.serviceProxies": "!!!Service Proxies", | 114 | "pricing.features.serviceProxies": "Service Proxies", |
114 | "pricing.features.spellchecker": "!!!Spellchecker support", | 115 | "pricing.features.spellchecker": "Spellchecker support", |
115 | "pricing.features.teamManagement": "!!!Team Management", | 116 | "pricing.features.teamManagement": "Team Management", |
116 | "pricing.features.thirdPartyServices": "!!!Install 3rd party services", | 117 | "pricing.features.thirdPartyServices": "Install 3rd party services", |
117 | "pricing.features.unlimitedServices": "!!!Add unlimited services", | 118 | "pricing.features.unlimitedServices": "Add unlimited services", |
118 | "pricing.features.workspaces": "!!!Workspaces", | 119 | "pricing.features.workspaces": "Workspaces", |
119 | "pricing.trial.cta.accept": "!!!Yes, upgrade my account to Franz Professional", | 120 | "pricing.plan.free": "Franz Free", |
120 | "pricing.trial.cta.skip": "!!!Continue to Franz", | 121 | "pricing.plan.legacy": "Franz Premium", |
121 | "pricing.trial.error": "!!!Sorry, we could not activate your trial!", | 122 | "pricing.plan.personal-monthly": "Franz Personal Monthly", |
122 | "pricing.trial.features.headline": "!!!Franz Professional includes:", | 123 | "pricing.plan.personal-yearly": "Franz Personal Yearly", |
123 | "pricing.trial.headline": "!!!Franz Professional", | 124 | "pricing.plan.pro-monthly": "Franz Professional Monthly", |
124 | "pricing.trial.subheadline": "!!!Your personal welcome offer:", | 125 | "pricing.plan.pro-yearly": "Franz Professional Yearly", |
125 | "pricing.trial.terms.automaticTrialEnd": "!!!Your free trial ends automatically after 14 days", | 126 | "pricing.trial.cta.accept": "Yes, upgrade my account to Franz Professional", |
126 | "pricing.trial.terms.headline": "!!!No strings attached", | 127 | "pricing.trial.cta.skip": "Continue to Franz", |
127 | "pricing.trial.terms.noCreditCard": "!!!No credit card required", | 128 | "pricing.trial.error": "Sorry, we could not activate your trial!", |
129 | "pricing.trial.features.headline": "Franz Professional includes:", | ||
130 | "pricing.trial.headline": "Franz Professional", | ||
131 | "pricing.trial.subheadline": "Your personal welcome offer:", | ||
132 | "pricing.trial.terms.automaticTrialEnd": "Your free trial ends automatically after 14 days", | ||
133 | "pricing.trial.terms.headline": "No strings attached", | ||
134 | "pricing.trial.terms.noCreditCard": "No credit card required", | ||
128 | "service.crashHandler.action": "Reload {name}", | 135 | "service.crashHandler.action": "Reload {name}", |
129 | "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", | 136 | "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", |
130 | "service.crashHandler.headline": "Oh no!", | 137 | "service.crashHandler.headline": "Oh no!", |
@@ -162,9 +169,13 @@ | |||
162 | "settings.account.invoiceDownload": "Download", | 169 | "settings.account.invoiceDownload": "Download", |
163 | "settings.account.manageSubscription.label": "Manage your subscription", | 170 | "settings.account.manageSubscription.label": "Manage your subscription", |
164 | "settings.account.successInfo": "Your changes have been saved", | 171 | "settings.account.successInfo": "Your changes have been saved", |
172 | "settings.account.trial": "Free Trial", | ||
173 | "settings.account.trialEndsIn": "Your free trial ends in {duration}.", | ||
174 | "settings.account.trialUpdateBillingInfo": "Please update your billing info to continue using {license} after your trial period.", | ||
165 | "settings.account.tryReloadServices": "Try again", | 175 | "settings.account.tryReloadServices": "Try again", |
166 | "settings.account.tryReloadUserInfoRequest": "Try again", | 176 | "settings.account.tryReloadUserInfoRequest": "Try again", |
167 | "settings.account.userInfoRequestFailed": "Could not load user information", | 177 | "settings.account.userInfoRequestFailed": "Could not load user information", |
178 | "settings.account.yourLicense": "Your license:", | ||
168 | "settings.app.buttonClearAllCache": "Clear cache", | 179 | "settings.app.buttonClearAllCache": "Clear cache", |
169 | "settings.app.buttonInstallUpdate": "Restart & install update", | 180 | "settings.app.buttonInstallUpdate": "Restart & install update", |
170 | "settings.app.buttonSearchForUpdate": "Check for updates", | 181 | "settings.app.buttonSearchForUpdate": "Check for updates", |
@@ -358,4 +369,4 @@ | |||
358 | "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>", | 369 | "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>", |
359 | "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", | 370 | "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", |
360 | "workspaces.switchingIndicator.switchingTo": "Switching to" | 371 | "workspaces.switchingIndicator.switchingTo": "Switching to" |
361 | } \ No newline at end of file | 372 | } |
diff --git a/src/i18n/messages/src/components/settings/account/AccountDashboard.json b/src/i18n/messages/src/components/settings/account/AccountDashboard.json index 4969db910..1e21bad69 100644 --- a/src/i18n/messages/src/components/settings/account/AccountDashboard.json +++ b/src/i18n/messages/src/components/settings/account/AccountDashboard.json | |||
@@ -4,11 +4,11 @@ | |||
4 | "defaultMessage": "!!!Account", | 4 | "defaultMessage": "!!!Account", |
5 | "file": "src/components/settings/account/AccountDashboard.js", | 5 | "file": "src/components/settings/account/AccountDashboard.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 14, | 7 | "line": 18, |
8 | "column": 12 | 8 | "column": 12 |
9 | }, | 9 | }, |
10 | "end": { | 10 | "end": { |
11 | "line": 17, | 11 | "line": 21, |
12 | "column": 3 | 12 | "column": 3 |
13 | } | 13 | } |
14 | }, | 14 | }, |
@@ -17,24 +17,24 @@ | |||
17 | "defaultMessage": "!!!Your Subscription", | 17 | "defaultMessage": "!!!Your Subscription", |
18 | "file": "src/components/settings/account/AccountDashboard.js", | 18 | "file": "src/components/settings/account/AccountDashboard.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 18, | 20 | "line": 22, |
21 | "column": 24 | 21 | "column": 24 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 21, | 24 | "line": 25, |
25 | "column": 3 | 25 | "column": 3 |
26 | } | 26 | } |
27 | }, | 27 | }, |
28 | { | 28 | { |
29 | "id": "settings.account.headlineUpgrade", | 29 | "id": "settings.account.headlineTrialUpgrade", |
30 | "defaultMessage": "!!!Upgrade your Account", | 30 | "defaultMessage": "!!!Get the free 14 day Franz Professional Trial", |
31 | "file": "src/components/settings/account/AccountDashboard.js", | 31 | "file": "src/components/settings/account/AccountDashboard.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 22, | 33 | "line": 26, |
34 | "column": 19 | 34 | "column": 19 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 25, | 37 | "line": 29, |
38 | "column": 3 | 38 | "column": 3 |
39 | } | 39 | } |
40 | }, | 40 | }, |
@@ -43,11 +43,11 @@ | |||
43 | "defaultMessage": "!!Danger Zone", | 43 | "defaultMessage": "!!Danger Zone", |
44 | "file": "src/components/settings/account/AccountDashboard.js", | 44 | "file": "src/components/settings/account/AccountDashboard.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 26, | 46 | "line": 30, |
47 | "column": 22 | 47 | "column": 22 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 29, | 50 | "line": 33, |
51 | "column": 3 | 51 | "column": 3 |
52 | } | 52 | } |
53 | }, | 53 | }, |
@@ -56,11 +56,11 @@ | |||
56 | "defaultMessage": "!!!Manage your subscription", | 56 | "defaultMessage": "!!!Manage your subscription", |
57 | "file": "src/components/settings/account/AccountDashboard.js", | 57 | "file": "src/components/settings/account/AccountDashboard.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 30, | 59 | "line": 34, |
60 | "column": 33 | 60 | "column": 33 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 33, | 63 | "line": 37, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | 66 | }, |
@@ -69,11 +69,11 @@ | |||
69 | "defaultMessage": "!!!Basic Account", | 69 | "defaultMessage": "!!!Basic Account", |
70 | "file": "src/components/settings/account/AccountDashboard.js", | 70 | "file": "src/components/settings/account/AccountDashboard.js", |
71 | "start": { | 71 | "start": { |
72 | "line": 34, | 72 | "line": 38, |
73 | "column": 20 | 73 | "column": 20 |
74 | }, | 74 | }, |
75 | "end": { | 75 | "end": { |
76 | "line": 37, | 76 | "line": 41, |
77 | "column": 3 | 77 | "column": 3 |
78 | } | 78 | } |
79 | }, | 79 | }, |
@@ -82,11 +82,11 @@ | |||
82 | "defaultMessage": "!!!Premium Supporter Account", | 82 | "defaultMessage": "!!!Premium Supporter Account", |
83 | "file": "src/components/settings/account/AccountDashboard.js", | 83 | "file": "src/components/settings/account/AccountDashboard.js", |
84 | "start": { | 84 | "start": { |
85 | "line": 38, | 85 | "line": 42, |
86 | "column": 22 | 86 | "column": 22 |
87 | }, | 87 | }, |
88 | "end": { | 88 | "end": { |
89 | "line": 41, | 89 | "line": 45, |
90 | "column": 3 | 90 | "column": 3 |
91 | } | 91 | } |
92 | }, | 92 | }, |
@@ -95,11 +95,11 @@ | |||
95 | "defaultMessage": "!!!Edit Account", | 95 | "defaultMessage": "!!!Edit Account", |
96 | "file": "src/components/settings/account/AccountDashboard.js", | 96 | "file": "src/components/settings/account/AccountDashboard.js", |
97 | "start": { | 97 | "start": { |
98 | "line": 42, | 98 | "line": 46, |
99 | "column": 21 | 99 | "column": 21 |
100 | }, | 100 | }, |
101 | "end": { | 101 | "end": { |
102 | "line": 45, | 102 | "line": 49, |
103 | "column": 3 | 103 | "column": 3 |
104 | } | 104 | } |
105 | }, | 105 | }, |
@@ -108,11 +108,11 @@ | |||
108 | "defaultMessage": "!!Invoices", | 108 | "defaultMessage": "!!Invoices", |
109 | "file": "src/components/settings/account/AccountDashboard.js", | 109 | "file": "src/components/settings/account/AccountDashboard.js", |
110 | "start": { | 110 | "start": { |
111 | "line": 46, | 111 | "line": 50, |
112 | "column": 18 | 112 | "column": 18 |
113 | }, | 113 | }, |
114 | "end": { | 114 | "end": { |
115 | "line": 49, | 115 | "line": 53, |
116 | "column": 3 | 116 | "column": 3 |
117 | } | 117 | } |
118 | }, | 118 | }, |
@@ -121,11 +121,11 @@ | |||
121 | "defaultMessage": "!!!Download", | 121 | "defaultMessage": "!!!Download", |
122 | "file": "src/components/settings/account/AccountDashboard.js", | 122 | "file": "src/components/settings/account/AccountDashboard.js", |
123 | "start": { | 123 | "start": { |
124 | "line": 50, | 124 | "line": 54, |
125 | "column": 19 | 125 | "column": 19 |
126 | }, | 126 | }, |
127 | "end": { | 127 | "end": { |
128 | "line": 53, | 128 | "line": 57, |
129 | "column": 3 | 129 | "column": 3 |
130 | } | 130 | } |
131 | }, | 131 | }, |
@@ -134,11 +134,11 @@ | |||
134 | "defaultMessage": "!!!Could not load user information", | 134 | "defaultMessage": "!!!Could not load user information", |
135 | "file": "src/components/settings/account/AccountDashboard.js", | 135 | "file": "src/components/settings/account/AccountDashboard.js", |
136 | "start": { | 136 | "start": { |
137 | "line": 54, | 137 | "line": 58, |
138 | "column": 25 | 138 | "column": 25 |
139 | }, | 139 | }, |
140 | "end": { | 140 | "end": { |
141 | "line": 57, | 141 | "line": 61, |
142 | "column": 3 | 142 | "column": 3 |
143 | } | 143 | } |
144 | }, | 144 | }, |
@@ -147,11 +147,11 @@ | |||
147 | "defaultMessage": "!!!Try again", | 147 | "defaultMessage": "!!!Try again", |
148 | "file": "src/components/settings/account/AccountDashboard.js", | 148 | "file": "src/components/settings/account/AccountDashboard.js", |
149 | "start": { | 149 | "start": { |
150 | "line": 58, | 150 | "line": 62, |
151 | "column": 28 | 151 | "column": 28 |
152 | }, | 152 | }, |
153 | "end": { | 153 | "end": { |
154 | "line": 61, | 154 | "line": 65, |
155 | "column": 3 | 155 | "column": 3 |
156 | } | 156 | } |
157 | }, | 157 | }, |
@@ -160,11 +160,11 @@ | |||
160 | "defaultMessage": "!!!Delete account", | 160 | "defaultMessage": "!!!Delete account", |
161 | "file": "src/components/settings/account/AccountDashboard.js", | 161 | "file": "src/components/settings/account/AccountDashboard.js", |
162 | "start": { | 162 | "start": { |
163 | "line": 62, | 163 | "line": 66, |
164 | "column": 17 | 164 | "column": 17 |
165 | }, | 165 | }, |
166 | "end": { | 166 | "end": { |
167 | "line": 65, | 167 | "line": 69, |
168 | "column": 3 | 168 | "column": 3 |
169 | } | 169 | } |
170 | }, | 170 | }, |
@@ -173,11 +173,11 @@ | |||
173 | "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", | 173 | "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", |
174 | "file": "src/components/settings/account/AccountDashboard.js", | 174 | "file": "src/components/settings/account/AccountDashboard.js", |
175 | "start": { | 175 | "start": { |
176 | "line": 66, | 176 | "line": 70, |
177 | "column": 14 | 177 | "column": 14 |
178 | }, | 178 | }, |
179 | "end": { | 179 | "end": { |
180 | "line": 69, | 180 | "line": 73, |
181 | "column": 3 | 181 | "column": 3 |
182 | } | 182 | } |
183 | }, | 183 | }, |
@@ -186,11 +186,63 @@ | |||
186 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", | 186 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", |
187 | "file": "src/components/settings/account/AccountDashboard.js", | 187 | "file": "src/components/settings/account/AccountDashboard.js", |
188 | "start": { | 188 | "start": { |
189 | "line": 70, | 189 | "line": 74, |
190 | "column": 19 | 190 | "column": 19 |
191 | }, | 191 | }, |
192 | "end": { | 192 | "end": { |
193 | "line": 73, | 193 | "line": 77, |
194 | "column": 3 | ||
195 | } | ||
196 | }, | ||
197 | { | ||
198 | "id": "settings.account.trial", | ||
199 | "defaultMessage": "!!!Free Trial", | ||
200 | "file": "src/components/settings/account/AccountDashboard.js", | ||
201 | "start": { | ||
202 | "line": 78, | ||
203 | "column": 9 | ||
204 | }, | ||
205 | "end": { | ||
206 | "line": 81, | ||
207 | "column": 3 | ||
208 | } | ||
209 | }, | ||
210 | { | ||
211 | "id": "settings.account.yourLicense", | ||
212 | "defaultMessage": "!!!Your license:", | ||
213 | "file": "src/components/settings/account/AccountDashboard.js", | ||
214 | "start": { | ||
215 | "line": 82, | ||
216 | "column": 15 | ||
217 | }, | ||
218 | "end": { | ||
219 | "line": 85, | ||
220 | "column": 3 | ||
221 | } | ||
222 | }, | ||
223 | { | ||
224 | "id": "settings.account.trialEndsIn", | ||
225 | "defaultMessage": "!!!Your free trial ends in {duration}.", | ||
226 | "file": "src/components/settings/account/AccountDashboard.js", | ||
227 | "start": { | ||
228 | "line": 86, | ||
229 | "column": 15 | ||
230 | }, | ||
231 | "end": { | ||
232 | "line": 89, | ||
233 | "column": 3 | ||
234 | } | ||
235 | }, | ||
236 | { | ||
237 | "id": "settings.account.trialUpdateBillingInfo", | ||
238 | "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.", | ||
239 | "file": "src/components/settings/account/AccountDashboard.js", | ||
240 | "start": { | ||
241 | "line": 90, | ||
242 | "column": 33 | ||
243 | }, | ||
244 | "end": { | ||
245 | "line": 93, | ||
194 | "column": 3 | 246 | "column": 3 |
195 | } | 247 | } |
196 | } | 248 | } |
diff --git a/src/i18n/messages/src/components/subscription/SubscriptionForm.json b/src/i18n/messages/src/components/subscription/SubscriptionForm.json index f98eb986f..224a78c4c 100644 --- a/src/i18n/messages/src/components/subscription/SubscriptionForm.json +++ b/src/i18n/messages/src/components/subscription/SubscriptionForm.json | |||
@@ -1,7 +1,7 @@ | |||
1 | [ | 1 | [ |
2 | { | 2 | { |
3 | "id": "subscription.submit.label", | 3 | "id": "subscription.cta.activateTrial", |
4 | "defaultMessage": "!!!Support the development of Franz", | 4 | "defaultMessage": "!!!Yes, upgrade my account to Franz Professional", |
5 | "file": "src/components/subscription/SubscriptionForm.js", | 5 | "file": "src/components/subscription/SubscriptionForm.js", |
6 | "start": { | 6 | "start": { |
7 | "line": 14, | 7 | "line": 14, |
@@ -13,12 +13,12 @@ | |||
13 | } | 13 | } |
14 | }, | 14 | }, |
15 | { | 15 | { |
16 | "id": "subscription.paymentSessionError", | 16 | "id": "subscription.includedProFeatures", |
17 | "defaultMessage": "!!!Could not initialize payment form", | 17 | "defaultMessage": "!!!The Franz Professional Plan includes:", |
18 | "file": "src/components/subscription/SubscriptionForm.js", | 18 | "file": "src/components/subscription/SubscriptionForm.js", |
19 | "start": { | 19 | "start": { |
20 | "line": 18, | 20 | "line": 18, |
21 | "column": 23 | 21 | "column": 20 |
22 | }, | 22 | }, |
23 | "end": { | 23 | "end": { |
24 | "line": 21, | 24 | "line": 21, |
@@ -26,12 +26,12 @@ | |||
26 | } | 26 | } |
27 | }, | 27 | }, |
28 | { | 28 | { |
29 | "id": "subscription.type.free", | 29 | "id": "pricing.trial.terms.headline", |
30 | "defaultMessage": "!!!free", | 30 | "defaultMessage": "!!!No strings attached", |
31 | "file": "src/components/subscription/SubscriptionForm.js", | 31 | "file": "src/components/subscription/SubscriptionForm.js", |
32 | "start": { | 32 | "start": { |
33 | "line": 22, | 33 | "line": 22, |
34 | "column": 12 | 34 | "column": 29 |
35 | }, | 35 | }, |
36 | "end": { | 36 | "end": { |
37 | "line": 25, | 37 | "line": 25, |
@@ -39,12 +39,12 @@ | |||
39 | } | 39 | } |
40 | }, | 40 | }, |
41 | { | 41 | { |
42 | "id": "subscription.type.month", | 42 | "id": "pricing.trial.terms.noCreditCard", |
43 | "defaultMessage": "!!!month", | 43 | "defaultMessage": "!!!No credit card required", |
44 | "file": "src/components/subscription/SubscriptionForm.js", | 44 | "file": "src/components/subscription/SubscriptionForm.js", |
45 | "start": { | 45 | "start": { |
46 | "line": 26, | 46 | "line": 26, |
47 | "column": 15 | 47 | "column": 16 |
48 | }, | 48 | }, |
49 | "end": { | 49 | "end": { |
50 | "line": 29, | 50 | "line": 29, |
@@ -52,133 +52,16 @@ | |||
52 | } | 52 | } |
53 | }, | 53 | }, |
54 | { | 54 | { |
55 | "id": "subscription.type.year", | 55 | "id": "pricing.trial.terms.automaticTrialEnd", |
56 | "defaultMessage": "!!!year", | 56 | "defaultMessage": "!!!Your free trial ends automatically after 14 days", |
57 | "file": "src/components/subscription/SubscriptionForm.js", | 57 | "file": "src/components/subscription/SubscriptionForm.js", |
58 | "start": { | 58 | "start": { |
59 | "line": 30, | 59 | "line": 30, |
60 | "column": 14 | 60 | "column": 21 |
61 | }, | 61 | }, |
62 | "end": { | 62 | "end": { |
63 | "line": 33, | 63 | "line": 33, |
64 | "column": 3 | 64 | "column": 3 |
65 | } | 65 | } |
66 | }, | ||
67 | { | ||
68 | "id": "subscription.includedFeatures", | ||
69 | "defaultMessage": "!!!The Franz Premium Supporter Account includes", | ||
70 | "file": "src/components/subscription/SubscriptionForm.js", | ||
71 | "start": { | ||
72 | "line": 34, | ||
73 | "column": 20 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 37, | ||
77 | "column": 3 | ||
78 | } | ||
79 | }, | ||
80 | { | ||
81 | "id": "subscription.features.onpremise.mattermost", | ||
82 | "defaultMessage": "!!!Add on-premise/hosted services like Mattermost", | ||
83 | "file": "src/components/subscription/SubscriptionForm.js", | ||
84 | "start": { | ||
85 | "line": 38, | ||
86 | "column": 13 | ||
87 | }, | ||
88 | "end": { | ||
89 | "line": 41, | ||
90 | "column": 3 | ||
91 | } | ||
92 | }, | ||
93 | { | ||
94 | "id": "subscription.features.noInterruptions", | ||
95 | "defaultMessage": "!!!No app delays & nagging to upgrade license", | ||
96 | "file": "src/components/subscription/SubscriptionForm.js", | ||
97 | "start": { | ||
98 | "line": 42, | ||
99 | "column": 19 | ||
100 | }, | ||
101 | "end": { | ||
102 | "line": 45, | ||
103 | "column": 3 | ||
104 | } | ||
105 | }, | ||
106 | { | ||
107 | "id": "subscription.features.proxy", | ||
108 | "defaultMessage": "!!!Proxy support for services", | ||
109 | "file": "src/components/subscription/SubscriptionForm.js", | ||
110 | "start": { | ||
111 | "line": 46, | ||
112 | "column": 9 | ||
113 | }, | ||
114 | "end": { | ||
115 | "line": 49, | ||
116 | "column": 3 | ||
117 | } | ||
118 | }, | ||
119 | { | ||
120 | "id": "subscription.features.spellchecker", | ||
121 | "defaultMessage": "!!!Support for Spellchecker", | ||
122 | "file": "src/components/subscription/SubscriptionForm.js", | ||
123 | "start": { | ||
124 | "line": 50, | ||
125 | "column": 16 | ||
126 | }, | ||
127 | "end": { | ||
128 | "line": 53, | ||
129 | "column": 3 | ||
130 | } | ||
131 | }, | ||
132 | { | ||
133 | "id": "subscription.features.workspaces", | ||
134 | "defaultMessage": "!!!Organize your services in workspaces", | ||
135 | "file": "src/components/subscription/SubscriptionForm.js", | ||
136 | "start": { | ||
137 | "line": 54, | ||
138 | "column": 14 | ||
139 | }, | ||
140 | "end": { | ||
141 | "line": 57, | ||
142 | "column": 3 | ||
143 | } | ||
144 | }, | ||
145 | { | ||
146 | "id": "subscription.features.ads", | ||
147 | "defaultMessage": "!!!No ads, ever!", | ||
148 | "file": "src/components/subscription/SubscriptionForm.js", | ||
149 | "start": { | ||
150 | "line": 58, | ||
151 | "column": 7 | ||
152 | }, | ||
153 | "end": { | ||
154 | "line": 61, | ||
155 | "column": 3 | ||
156 | } | ||
157 | }, | ||
158 | { | ||
159 | "id": "subscription.features.comingSoon", | ||
160 | "defaultMessage": "!!!coming soon", | ||
161 | "file": "src/components/subscription/SubscriptionForm.js", | ||
162 | "start": { | ||
163 | "line": 62, | ||
164 | "column": 14 | ||
165 | }, | ||
166 | "end": { | ||
167 | "line": 65, | ||
168 | "column": 3 | ||
169 | } | ||
170 | }, | ||
171 | { | ||
172 | "id": "subscription.euTaxInfo", | ||
173 | "defaultMessage": "!!!EU residents: local sales tax may apply", | ||
174 | "file": "src/components/subscription/SubscriptionForm.js", | ||
175 | "start": { | ||
176 | "line": 66, | ||
177 | "column": 13 | ||
178 | }, | ||
179 | "end": { | ||
180 | "line": 69, | ||
181 | "column": 3 | ||
182 | } | ||
183 | } | 66 | } |
184 | ] \ No newline at end of file | 67 | ] \ No newline at end of file |
diff --git a/src/i18n/messages/src/helpers/plan-helpers.json b/src/i18n/messages/src/helpers/plan-helpers.json new file mode 100644 index 000000000..de27dfcfd --- /dev/null +++ b/src/i18n/messages/src/helpers/plan-helpers.json | |||
@@ -0,0 +1,80 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "pricing.plan.pro-yearly", | ||
4 | "defaultMessage": "!!!Franz Professional Yearly", | ||
5 | "file": "src/helpers/plan-helpers.js", | ||
6 | "start": { | ||
7 | "line": 5, | ||
8 | "column": 22 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 8, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "pricing.plan.pro-monthly", | ||
17 | "defaultMessage": "!!!Franz Professional Monthly", | ||
18 | "file": "src/helpers/plan-helpers.js", | ||
19 | "start": { | ||
20 | "line": 9, | ||
21 | "column": 23 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 12, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "pricing.plan.personal-yearly", | ||
30 | "defaultMessage": "!!!Franz Personal Yearly", | ||
31 | "file": "src/helpers/plan-helpers.js", | ||
32 | "start": { | ||
33 | "line": 13, | ||
34 | "column": 27 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 16, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "pricing.plan.personal-monthly", | ||
43 | "defaultMessage": "!!!Franz Personal Monthly", | ||
44 | "file": "src/helpers/plan-helpers.js", | ||
45 | "start": { | ||
46 | "line": 17, | ||
47 | "column": 28 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 20, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "pricing.plan.free", | ||
56 | "defaultMessage": "!!!Franz Free", | ||
57 | "file": "src/helpers/plan-helpers.js", | ||
58 | "start": { | ||
59 | "line": 21, | ||
60 | "column": 16 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 24, | ||
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "pricing.plan.legacy", | ||
69 | "defaultMessage": "!!!Franz Premium", | ||
70 | "file": "src/helpers/plan-helpers.js", | ||
71 | "start": { | ||
72 | "line": 25, | ||
73 | "column": 18 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 28, | ||
77 | "column": 3 | ||
78 | } | ||
79 | } | ||
80 | ] \ No newline at end of file | ||
diff --git a/src/i18n/messages/src/helpers/pricing-helpers.json b/src/i18n/messages/src/helpers/pricing-helpers.json new file mode 100644 index 000000000..4030a3e3b --- /dev/null +++ b/src/i18n/messages/src/helpers/pricing-helpers.json | |||
@@ -0,0 +1,80 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "pricing.plan.pro-yearly", | ||
4 | "defaultMessage": "!!!Franz Professional Yearly", | ||
5 | "file": "src/helpers/pricing-helpers.js", | ||
6 | "start": { | ||
7 | "line": 5, | ||
8 | "column": 22 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 8, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "pricing.plan.pro-monthly", | ||
17 | "defaultMessage": "!!!Franz Professional Monthly", | ||
18 | "file": "src/helpers/pricing-helpers.js", | ||
19 | "start": { | ||
20 | "line": 9, | ||
21 | "column": 23 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 12, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "pricing.plan.personal-yearly", | ||
30 | "defaultMessage": "!!!Franz Personal Yearly", | ||
31 | "file": "src/helpers/pricing-helpers.js", | ||
32 | "start": { | ||
33 | "line": 13, | ||
34 | "column": 27 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 16, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "pricing.plan.personal-monthly", | ||
43 | "defaultMessage": "!!!Franz Personal Monthly", | ||
44 | "file": "src/helpers/pricing-helpers.js", | ||
45 | "start": { | ||
46 | "line": 17, | ||
47 | "column": 28 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 20, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "pricing.plan.free", | ||
56 | "defaultMessage": "!!!Franz Free", | ||
57 | "file": "src/helpers/pricing-helpers.js", | ||
58 | "start": { | ||
59 | "line": 21, | ||
60 | "column": 16 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 24, | ||
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "pricing.plan.legacy", | ||
69 | "defaultMessage": "!!!Franz Premium", | ||
70 | "file": "src/helpers/pricing-helpers.js", | ||
71 | "start": { | ||
72 | "line": 25, | ||
73 | "column": 18 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 28, | ||
77 | "column": 3 | ||
78 | } | ||
79 | } | ||
80 | ] \ No newline at end of file | ||
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js index 72c4b4d0b..55ee52b18 100644 --- a/src/stores/AppStore.js +++ b/src/stores/AppStore.js | |||
@@ -334,6 +334,8 @@ export default class AppStore extends Store { | |||
334 | this.locale = this._getDefaultLocale(); | 334 | this.locale = this._getDefaultLocale(); |
335 | } | 335 | } |
336 | 336 | ||
337 | moment.locale(this.locale); | ||
338 | |||
337 | debug(`Set locale to "${this.locale}"`); | 339 | debug(`Set locale to "${this.locale}"`); |
338 | } | 340 | } |
339 | 341 | ||
diff --git a/src/styles/settings.scss b/src/styles/settings.scss index 1baff8b54..0955aaa0c 100644 --- a/src/styles/settings.scss +++ b/src/styles/settings.scss | |||
@@ -360,6 +360,7 @@ | |||
360 | .account__subscription-button { margin-left: auto; } | 360 | .account__subscription-button { margin-left: auto; } |
361 | .franz-form__button { white-space: nowrap; } | 361 | .franz-form__button { white-space: nowrap; } |
362 | div { height: auto; } | 362 | div { height: auto; } |
363 | [data-type="franz-button"] div { height: 100% } | ||
363 | 364 | ||
364 | .invoices { | 365 | .invoices { |
365 | width: 100%; | 366 | width: 100%; |