aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2019-08-19 12:11:38 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2019-08-19 12:11:38 +0200
commit478b5fc6574765072eafd4fa074ae832e67627bf (patch)
tree07dba02a6746685b00106ae2f37b529573876852 /src
parentremove monthly & yearly names (diff)
downloadferdium-app-478b5fc6574765072eafd4fa074ae832e67627bf.tar.gz
ferdium-app-478b5fc6574765072eafd4fa074ae832e67627bf.tar.zst
ferdium-app-478b5fc6574765072eafd4fa074ae832e67627bf.zip
Add trial / subscription handling
Diffstat (limited to 'src')
-rw-r--r--src/components/settings/account/AccountDashboard.js12
-rw-r--r--src/components/settings/team/TeamDashboard.js10
-rw-r--r--src/components/subscription/SubscriptionForm.js52
-rw-r--r--src/components/subscription/SubscriptionPopup.js6
-rw-r--r--src/components/subscription/TrialForm.js99
-rw-r--r--src/containers/subscription/SubscriptionFormScreen.js83
-rw-r--r--src/containers/subscription/SubscriptionPopupScreen.js3
-rw-r--r--src/features/workspaces/store.js4
-rw-r--r--src/i18n/locales/defaultMessages.json332
-rw-r--r--src/i18n/locales/en-US.json26
-rw-r--r--src/i18n/messages/src/components/settings/account/AccountDashboard.json77
-rw-r--r--src/i18n/messages/src/components/subscription/SubscriptionForm.json51
-rw-r--r--src/i18n/messages/src/components/subscription/TrialForm.json80
-rw-r--r--src/stores/UserStore.js2
14 files changed, 423 insertions, 414 deletions
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 079d50380..6d10487e8 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -23,10 +23,6 @@ const messages = defineMessages({
23 id: 'settings.account.headlineSubscription', 23 id: 'settings.account.headlineSubscription',
24 defaultMessage: '!!!Your Subscription', 24 defaultMessage: '!!!Your Subscription',
25 }, 25 },
26 headlineUpgrade: {
27 id: 'settings.account.headlineTrialUpgrade',
28 defaultMessage: '!!!Get the free 14 day Franz Professional Trial',
29 },
30 headlineDangerZone: { 26 headlineDangerZone: {
31 id: 'settings.account.headlineDangerZone', 27 id: 'settings.account.headlineDangerZone',
32 defaultMessage: '!!Danger Zone', 28 defaultMessage: '!!Danger Zone',
@@ -97,10 +93,8 @@ export default @observer class AccountDashboard extends Component {
97 static propTypes = { 93 static propTypes = {
98 user: MobxPropTypes.observableObject.isRequired, 94 user: MobxPropTypes.observableObject.isRequired,
99 isLoading: PropTypes.bool.isRequired, 95 isLoading: PropTypes.bool.isRequired,
100 isLoadingPlans: PropTypes.bool.isRequired,
101 userInfoRequestFailed: PropTypes.bool.isRequired, 96 userInfoRequestFailed: PropTypes.bool.isRequired,
102 retryUserInfoRequest: PropTypes.func.isRequired, 97 retryUserInfoRequest: PropTypes.func.isRequired,
103 onCloseSubscriptionWindow: PropTypes.func.isRequired,
104 deleteAccount: PropTypes.func.isRequired, 98 deleteAccount: PropTypes.func.isRequired,
105 isLoadingDeleteAccount: PropTypes.bool.isRequired, 99 isLoadingDeleteAccount: PropTypes.bool.isRequired,
106 isDeleteAccountSuccessful: PropTypes.bool.isRequired, 100 isDeleteAccountSuccessful: PropTypes.bool.isRequired,
@@ -117,10 +111,8 @@ export default @observer class AccountDashboard extends Component {
117 const { 111 const {
118 user, 112 user,
119 isLoading, 113 isLoading,
120 isLoadingPlans,
121 userInfoRequestFailed, 114 userInfoRequestFailed,
122 retryUserInfoRequest, 115 retryUserInfoRequest,
123 onCloseSubscriptionWindow,
124 deleteAccount, 116 deleteAccount,
125 isLoadingDeleteAccount, 117 isLoadingDeleteAccount,
126 isDeleteAccountSuccessful, 118 isDeleteAccountSuccessful,
@@ -134,7 +126,6 @@ export default @observer class AccountDashboard extends Component {
134 126
135 if (user.team && user.team.plan) { 127 if (user.team && user.team.plan) {
136 planName = i18nPlanName(user.team.plan, intl); 128 planName = i18nPlanName(user.team.plan, intl);
137 console.log(planName);
138 } 129 }
139 130
140 return ( 131 return (
@@ -221,7 +212,7 @@ export default @observer class AccountDashboard extends Component {
221 )} 212 )}
222 </div> 213 </div>
223 </div> 214 </div>
224 {user.isSubscriptionOwner && ( 215 {user.isPremium && user.isSubscriptionOwner && (
225 <div className="account"> 216 <div className="account">
226 <div className="account__box"> 217 <div className="account__box">
227 <H2> 218 <H2>
@@ -268,7 +259,6 @@ export default @observer class AccountDashboard extends Component {
268 {!user.isPremium && ( 259 {!user.isPremium && (
269 <div className="account franz-form"> 260 <div className="account franz-form">
270 <div className="account__box"> 261 <div className="account__box">
271 <H2>{intl.formatMessage(messages.headlineUpgrade)}</H2>
272 <SubscriptionForm /> 262 <SubscriptionForm />
273 </div> 263 </div>
274 </div> 264 </div>
diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js
index 82c517fcb..990ee52e7 100644
--- a/src/components/settings/team/TeamDashboard.js
+++ b/src/components/settings/team/TeamDashboard.js
@@ -133,13 +133,13 @@ export default @injectSheet(styles) @observer class TeamDashboard extends Compon
133 </div> 133 </div>
134 <img className={classes.image} src="https://cdn.franzinfra.com/announcements/assets/teams.png" alt="Franz for Teams" /> 134 <img className={classes.image} src="https://cdn.franzinfra.com/announcements/assets/teams.png" alt="Franz for Teams" />
135 </div> 135 </div>
136 <Button
137 label={intl.formatMessage(messages.manageButton)}
138 onClick={openTeamManagement}
139 className={classes.cta}
140 />
141 </> 136 </>
142 </PremiumFeatureContainer> 137 </PremiumFeatureContainer>
138 <Button
139 label={intl.formatMessage(messages.manageButton)}
140 onClick={openTeamManagement}
141 className={classes.cta}
142 />
143 </> 143 </>
144 )} 144 )}
145 </> 145 </>
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js
index 0c630f047..641368734 100644
--- a/src/components/subscription/SubscriptionForm.js
+++ b/src/components/subscription/SubscriptionForm.js
@@ -1,35 +1,30 @@
1import React, { Component } from 'react'; 1import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react'; 3import { observer } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape, IntlProvider } from 'react-intl';
5import injectSheet from 'react-jss'; 5import injectSheet from 'react-jss';
6 6
7import { H3 } from '@meetfranz/ui'; 7import { H3, H2 } from '@meetfranz/ui';
8 8
9import { Button } from '@meetfranz/forms'; 9import { Button } from '@meetfranz/forms';
10import { FeatureList } from '../ui/FeatureList'; 10import { FeatureList } from '../ui/FeatureList';
11import { FeatureItem } from '../ui/FeatureItem';
12 11
13const messages = defineMessages({ 12const messages = defineMessages({
14 submitButtonLabel: { 13 submitButtonLabel: {
15 id: 'subscription.cta.activateTrial', 14 id: 'subscription.cta.choosePlan',
16 defaultMessage: '!!!Yes, upgrade my account to Franz Professional', 15 defaultMessage: '!!!Choose your plan',
17 }, 16 },
18 includedFeatures: { 17 teaserHeadline: {
19 id: 'subscription.includedProFeatures', 18 id: 'settings.account.headlineUpgradeAccount',
20 defaultMessage: '!!!The Franz Professional Plan includes:', 19 defaultMessage: '!!!Upgrade your account and get the full Franz experience',
21 },
22 noStringsAttachedHeadline: {
23 id: 'pricing.trial.terms.headline',
24 defaultMessage: '!!!No strings attached',
25 }, 20 },
26 noCreditCard: { 21 teaserText: {
27 id: 'pricing.trial.terms.noCreditCard', 22 id: 'subscription.teaser.intro',
28 defaultMessage: '!!!No credit card required', 23 defaultMessage: '!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!',
29 }, 24 },
30 automaticTrialEnd: { 25 includedFeatures: {
31 id: 'pricing.trial.terms.automaticTrialEnd', 26 id: 'subscription.teaser.includedFeatures',
32 defaultMessage: '!!!Your free trial ends automatically after 14 days', 27 defaultMessage: '!!!Paid Franz Plans include:',
33 }, 28 },
34}); 29});
35 30
@@ -37,14 +32,11 @@ const styles = () => ({
37 activateTrialButton: { 32 activateTrialButton: {
38 margin: [40, 0, 50], 33 margin: [40, 0, 50],
39 }, 34 },
40 keyTerms: {
41 marginTop: 20,
42 },
43}); 35});
44 36
45export default @observer @injectSheet(styles) class SubscriptionForm extends Component { 37export default @observer @injectSheet(styles) class SubscriptionForm extends Component {
46 static propTypes = { 38 static propTypes = {
47 activateTrial: PropTypes.func.isRequired, 39 selectPlan: PropTypes.func.isRequired,
48 isActivatingTrial: PropTypes.bool.isRequired, 40 isActivatingTrial: PropTypes.bool.isRequired,
49 classes: PropTypes.object.isRequired, 41 classes: PropTypes.object.isRequired,
50 }; 42 };
@@ -56,28 +48,20 @@ export default @observer @injectSheet(styles) class SubscriptionForm extends Com
56 render() { 48 render() {
57 const { 49 const {
58 isActivatingTrial, 50 isActivatingTrial,
59 activateTrial, 51 selectPlan,
60 classes, 52 classes,
61 } = this.props; 53 } = this.props;
62 const { intl } = this.context; 54 const { intl } = this.context;
63 55
64 console.log('isActivatingTrial', isActivatingTrial);
65
66 return ( 56 return (
67 <> 57 <>
68 <H3 className={classes.keyTerms}> 58 <H2>{intl.formatMessage(messages.teaserHeadline)}</H2>
69 {intl.formatMessage(messages.noStringsAttachedHeadline)} 59 <p>{intl.formatMessage(messages.teaserText)}</p>
70 </H3>
71 <ul>
72 <FeatureItem icon="👉" name={intl.formatMessage(messages.noCreditCard)} />
73 <FeatureItem icon="👉" name={intl.formatMessage(messages.automaticTrialEnd)} />
74 </ul>
75
76 <Button 60 <Button
77 label={intl.formatMessage(messages.submitButtonLabel)} 61 label={intl.formatMessage(messages.submitButtonLabel)}
78 className={classes.activateTrialButton} 62 className={classes.activateTrialButton}
79 busy={isActivatingTrial} 63 busy={isActivatingTrial}
80 onClick={activateTrial} 64 onClick={selectPlan}
81 stretch 65 stretch
82 /> 66 />
83 <div className="subscription__premium-info"> 67 <div className="subscription__premium-info">
diff --git a/src/components/subscription/SubscriptionPopup.js b/src/components/subscription/SubscriptionPopup.js
index 0f6f0260f..9404e9c19 100644
--- a/src/components/subscription/SubscriptionPopup.js
+++ b/src/components/subscription/SubscriptionPopup.js
@@ -43,7 +43,7 @@ export default @observer class SubscriptionPopup extends Component {
43 43
44 setTimeout(() => { 44 setTimeout(() => {
45 this.props.closeWindow(); 45 this.props.closeWindow();
46 }, ms('4s')); 46 }, ms('1s'));
47 } 47 }
48 48
49 render() { 49 render() {
@@ -61,8 +61,8 @@ export default @observer class SubscriptionPopup extends Component {
61 autosize 61 autosize
62 src={encodeURI(url)} 62 src={encodeURI(url)}
63 onDidNavigate={completeCheck} 63 onDidNavigate={completeCheck}
64 // onNewWindow={(event, url, frameName, options) => 64 // webpreferences="allowpopups"
65 // openWindow({ event, url, frameName, options })} 65 // onNewWindow={(event, url, frameName, options) => console.log(event, url)}
66 /> 66 />
67 </div> 67 </div>
68 <div className="subscription-popup__toolbar franz-form"> 68 <div className="subscription-popup__toolbar franz-form">
diff --git a/src/components/subscription/TrialForm.js b/src/components/subscription/TrialForm.js
new file mode 100644
index 000000000..9c512b5f2
--- /dev/null
+++ b/src/components/subscription/TrialForm.js
@@ -0,0 +1,99 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl';
5import injectSheet from 'react-jss';
6
7import { H3, H2 } from '@meetfranz/ui';
8
9import { Button } from '@meetfranz/forms';
10import { FeatureList } from '../ui/FeatureList';
11import { FeatureItem } from '../ui/FeatureItem';
12
13const messages = defineMessages({
14 submitButtonLabel: {
15 id: 'subscription.cta.activateTrial',
16 defaultMessage: '!!!Yes, start the free Franz Professional trial',
17 },
18 teaserHeadline: {
19 id: 'settings.account.headlineTrialUpgrade',
20 defaultMessage: '!!!Get the free 14 day Franz Professional Trial',
21 },
22 includedFeatures: {
23 id: 'subscription.includedProFeatures',
24 defaultMessage: '!!!The Franz Professional Plan includes:',
25 },
26 noStringsAttachedHeadline: {
27 id: 'pricing.trial.terms.headline',
28 defaultMessage: '!!!No strings attached',
29 },
30 noCreditCard: {
31 id: 'pricing.trial.terms.noCreditCard',
32 defaultMessage: '!!!No credit card required',
33 },
34 automaticTrialEnd: {
35 id: 'pricing.trial.terms.automaticTrialEnd',
36 defaultMessage: '!!!Your free trial ends automatically after 14 days',
37 },
38});
39
40const styles = () => ({
41 activateTrialButton: {
42 margin: [40, 0, 50],
43 },
44 keyTerms: {
45 marginTop: 20,
46 },
47});
48
49export default @observer @injectSheet(styles) class TrialForm extends Component {
50 static propTypes = {
51 activateTrial: PropTypes.func.isRequired,
52 isActivatingTrial: PropTypes.bool.isRequired,
53 classes: PropTypes.object.isRequired,
54 };
55
56 static contextTypes = {
57 intl: intlShape,
58 };
59
60 render() {
61 const {
62 isActivatingTrial,
63 activateTrial,
64 classes,
65 } = this.props;
66 const { intl } = this.context;
67
68 console.log('isActivatingTrial', isActivatingTrial);
69
70 return (
71 <>
72 <H2>{intl.formatMessage(messages.teaserHeadline)}</H2>
73 <H3 className={classes.keyTerms}>
74 {intl.formatMessage(messages.noStringsAttachedHeadline)}
75 </H3>
76 <ul>
77 <FeatureItem icon="👉" name={intl.formatMessage(messages.noCreditCard)} />
78 <FeatureItem icon="👉" name={intl.formatMessage(messages.automaticTrialEnd)} />
79 </ul>
80
81 <Button
82 label={intl.formatMessage(messages.submitButtonLabel)}
83 className={classes.activateTrialButton}
84 busy={isActivatingTrial}
85 onClick={activateTrial}
86 stretch
87 />
88 <div className="subscription__premium-info">
89 <H3>
90 {intl.formatMessage(messages.includedFeatures)}
91 </H3>
92 <div className="subscription">
93 <FeatureList />
94 </div>
95 </div>
96 </>
97 );
98 }
99}
diff --git a/src/containers/subscription/SubscriptionFormScreen.js b/src/containers/subscription/SubscriptionFormScreen.js
index 7486cc498..587889e7f 100644
--- a/src/containers/subscription/SubscriptionFormScreen.js
+++ b/src/containers/subscription/SubscriptionFormScreen.js
@@ -1,4 +1,3 @@
1import { remote } from 'electron';
2import React, { Component } from 'react'; 1import React, { Component } from 'react';
3import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
4import { inject, observer } from 'mobx-react'; 3import { inject, observer } from 'mobx-react';
@@ -6,70 +5,31 @@ import { inject, observer } from 'mobx-react';
6import PaymentStore from '../../stores/PaymentStore'; 5import PaymentStore from '../../stores/PaymentStore';
7 6
8import SubscriptionForm from '../../components/subscription/SubscriptionForm'; 7import SubscriptionForm from '../../components/subscription/SubscriptionForm';
9 8import TrialForm from '../../components/subscription/TrialForm';
10const { BrowserWindow } = remote;
11 9
12export default @inject('stores', 'actions') @observer class SubscriptionFormScreen extends Component { 10export default @inject('stores', 'actions') @observer class SubscriptionFormScreen extends Component {
13 static propTypes = { 11 async openBrowser() {
14 onCloseWindow: PropTypes.func,
15 content: PropTypes.node,
16 showSkipOption: PropTypes.bool,
17 skipAction: PropTypes.func,
18 skipButtonLabel: PropTypes.string,
19 hideInfo: PropTypes.bool,
20 }
21
22 static defaultProps = {
23 onCloseWindow: () => null,
24 content: '',
25 showSkipOption: false,
26 skipAction: () => null,
27 skipButtonLabel: '',
28 hideInfo: false,
29 }
30
31 async handlePayment(plan) {
32 const { 12 const {
33 actions, 13 actions,
34 stores, 14 stores,
35 onCloseWindow,
36 } = this.props; 15 } = this.props;
37 16
38 const interval = plan; 17 const {
18 user,
19 features,
20 } = stores;
21
22 let hostedPageURL = user.data.hadSubscription ? features.features.planSelectionURL : features.features.subscribeURL;
23 const url = new URL(hostedPageURL);
24 const params = new URLSearchParams(url.search.slice(1));
39 25
40 const { id } = stores.payment.plan[interval]; 26 params.append('authToken', user.authToken);
41 actions.payment.createHostedPage({
42 planId: id,
43 });
44 27
45 const hostedPage = await stores.payment.createHostedPageRequest; 28 hostedPageURL = `${url.origin}${url.pathname}?${params.toString()}`;
46 29
47 if (hostedPage.url) { 30 actions.app.openExternalUrl({ url: hostedPageURL });
48 if (hostedPage.legacyCheckoutFlow) {
49 const paymentWindow = new BrowserWindow({
50 parent: remote.getCurrentWindow(),
51 modal: true,
52 title: '🔒 Franz Supporter License',
53 width: 600,
54 height: window.innerHeight - 100,
55 maxWidth: 600,
56 minWidth: 600,
57 webPreferences: {
58 nodeIntegration: true,
59 webviewTag: true,
60 },
61 });
62 paymentWindow.loadURL(`file://${__dirname}/../../index.html#/payment/${encodeURIComponent(hostedPage.url)}`);
63 31
64 paymentWindow.on('closed', () => { 32 console.log('hostedPage', hostedPageURL);
65 onCloseWindow();
66 });
67 } else {
68 actions.app.openExternalUrl({
69 url: hostedPage.url,
70 });
71 }
72 }
73 } 33 }
74 34
75 render() { 35 render() {
@@ -77,8 +37,21 @@ export default @inject('stores', 'actions') @observer class SubscriptionFormScre
77 actions, 37 actions,
78 stores, 38 stores,
79 } = this.props; 39 } = this.props;
40
41 const { data: user } = stores.user;
42
43 if (user.hadSubscription) {
44 return (
45 <SubscriptionForm
46 plan={stores.payment.plan}
47 selectPlan={() => this.openBrowser()}
48 isActivatingTrial={stores.user.activateTrialRequest.isExecuting || stores.user.getUserInfoRequest.isExecuting}
49 />
50 );
51 }
52
80 return ( 53 return (
81 <SubscriptionForm 54 <TrialForm
82 plan={stores.payment.plan} 55 plan={stores.payment.plan}
83 activateTrial={() => actions.user.activateTrial({ planId: stores.features.features.defaultTrialPlan })} 56 activateTrial={() => actions.user.activateTrial({ planId: stores.features.features.defaultTrialPlan })}
84 isActivatingTrial={stores.user.activateTrialRequest.isExecuting || stores.user.getUserInfoRequest.isExecuting} 57 isActivatingTrial={stores.user.activateTrialRequest.isExecuting || stores.user.getUserInfoRequest.isExecuting}
diff --git a/src/containers/subscription/SubscriptionPopupScreen.js b/src/containers/subscription/SubscriptionPopupScreen.js
index f76d6c5a6..0de5a87c4 100644
--- a/src/containers/subscription/SubscriptionPopupScreen.js
+++ b/src/containers/subscription/SubscriptionPopupScreen.js
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
3import { inject, observer } from 'mobx-react'; 3import { inject, observer } from 'mobx-react';
4 4
5import SubscriptionPopup from '../../components/subscription/SubscriptionPopup'; 5import SubscriptionPopup from '../../components/subscription/SubscriptionPopup';
6import { isDevMode } from '../../environment';
6 7
7 8
8export default @inject('stores', 'actions') @observer class SubscriptionPopupScreen extends Component { 9export default @inject('stores', 'actions') @observer class SubscriptionPopupScreen extends Component {
@@ -13,7 +14,7 @@ export default @inject('stores', 'actions') @observer class SubscriptionPopupScr
13 completeCheck(event) { 14 completeCheck(event) {
14 const { url } = event; 15 const { url } = event;
15 16
16 if ((url.includes('recurly') && url.includes('confirmation')) || (url.includes('meetfranz') && url.includes('success'))) { 17 if ((url.includes('recurly') && url.includes('confirmation')) || ((url.includes('meetfranz') || isDevMode) && url.includes('success'))) {
17 this.setState({ 18 this.setState({
18 complete: true, 19 complete: true,
19 }); 20 });
diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js
index caa73619e..e44569be9 100644
--- a/src/features/workspaces/store.js
+++ b/src/features/workspaces/store.js
@@ -256,8 +256,8 @@ export default class WorkspacesStore extends FeatureStore {
256 const { features, user } = this.stores; 256 const { features, user } = this.stores;
257 const { isPremium } = user.data; 257 const { isPremium } = user.data;
258 const { isWorkspaceIncludedInCurrentPlan } = features.features; 258 const { isWorkspaceIncludedInCurrentPlan } = features.features;
259 this.isPremiumFeature = isWorkspaceIncludedInCurrentPlan; 259 this.isPremiumFeature = !isWorkspaceIncludedInCurrentPlan;
260 this.isPremiumUpgradeRequired = isWorkspaceIncludedInCurrentPlan && !isPremium; 260 this.isPremiumUpgradeRequired = !isWorkspaceIncludedInCurrentPlan && !isPremium;
261 }; 261 };
262 262
263 _setWorkspaceBeingEditedReaction = () => { 263 _setWorkspaceBeingEditedReaction = () => {
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index bdb1def11..e3c50f259 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -1242,247 +1242,234 @@
1242 "defaultMessage": "!!!Account", 1242 "defaultMessage": "!!!Account",
1243 "end": { 1243 "end": {
1244 "column": 3, 1244 "column": 3,
1245 "line": 19 1245 "line": 21
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": 16 1251 "line": 18
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": 23 1258 "line": 25
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": 20 1264 "line": 22
1265 }
1266 },
1267 {
1268 "defaultMessage": "!!!Upgrade your Account",
1269 "end": {
1270 "column": 3,
1271 "line": 27
1272 },
1273 "file": "src/components/settings/account/AccountDashboard.js",
1274 "id": "settings.account.headlineUpgrade",
1275 "start": {
1276 "column": 19,
1277 "line": 24
1278 } 1265 }
1279 }, 1266 },
1280 { 1267 {
1281 "defaultMessage": "!!Danger Zone", 1268 "defaultMessage": "!!Danger Zone",
1282 "end": { 1269 "end": {
1283 "column": 3, 1270 "column": 3,
1284 "line": 31 1271 "line": 29
1285 }, 1272 },
1286 "file": "src/components/settings/account/AccountDashboard.js", 1273 "file": "src/components/settings/account/AccountDashboard.js",
1287 "id": "settings.account.headlineDangerZone", 1274 "id": "settings.account.headlineDangerZone",
1288 "start": { 1275 "start": {
1289 "column": 22, 1276 "column": 22,
1290 "line": 28 1277 "line": 26
1291 } 1278 }
1292 }, 1279 },
1293 { 1280 {
1294 "defaultMessage": "!!!Manage your subscription", 1281 "defaultMessage": "!!!Manage your subscription",
1295 "end": { 1282 "end": {
1296 "column": 3, 1283 "column": 3,
1297 "line": 35 1284 "line": 33
1298 }, 1285 },
1299 "file": "src/components/settings/account/AccountDashboard.js", 1286 "file": "src/components/settings/account/AccountDashboard.js",
1300 "id": "settings.account.manageSubscription.label", 1287 "id": "settings.account.manageSubscription.label",
1301 "start": { 1288 "start": {
1302 "column": 33, 1289 "column": 33,
1303 "line": 32 1290 "line": 30
1304 } 1291 }
1305 }, 1292 },
1306 { 1293 {
1307 "defaultMessage": "!!!Basic Account", 1294 "defaultMessage": "!!!Basic Account",
1308 "end": { 1295 "end": {
1309 "column": 3, 1296 "column": 3,
1310 "line": 39 1297 "line": 37
1311 }, 1298 },
1312 "file": "src/components/settings/account/AccountDashboard.js", 1299 "file": "src/components/settings/account/AccountDashboard.js",
1313 "id": "settings.account.accountType.basic", 1300 "id": "settings.account.accountType.basic",
1314 "start": { 1301 "start": {
1315 "column": 20, 1302 "column": 20,
1316 "line": 36 1303 "line": 34
1317 } 1304 }
1318 }, 1305 },
1319 { 1306 {
1320 "defaultMessage": "!!!Premium Supporter Account", 1307 "defaultMessage": "!!!Premium Supporter Account",
1321 "end": { 1308 "end": {
1322 "column": 3, 1309 "column": 3,
1323 "line": 43 1310 "line": 41
1324 }, 1311 },
1325 "file": "src/components/settings/account/AccountDashboard.js", 1312 "file": "src/components/settings/account/AccountDashboard.js",
1326 "id": "settings.account.accountType.premium", 1313 "id": "settings.account.accountType.premium",
1327 "start": { 1314 "start": {
1328 "column": 22, 1315 "column": 22,
1329 "line": 40 1316 "line": 38
1330 } 1317 }
1331 }, 1318 },
1332 { 1319 {
1333 "defaultMessage": "!!!Edit Account", 1320 "defaultMessage": "!!!Edit Account",
1334 "end": { 1321 "end": {
1335 "column": 3, 1322 "column": 3,
1336 "line": 47 1323 "line": 45
1337 }, 1324 },
1338 "file": "src/components/settings/account/AccountDashboard.js", 1325 "file": "src/components/settings/account/AccountDashboard.js",
1339 "id": "settings.account.account.editButton", 1326 "id": "settings.account.account.editButton",
1340 "start": { 1327 "start": {
1341 "column": 21, 1328 "column": 21,
1342 "line": 44 1329 "line": 42
1343 } 1330 }
1344 }, 1331 },
1345 { 1332 {
1346 "defaultMessage": "!!Invoices", 1333 "defaultMessage": "!!Invoices",
1347 "end": { 1334 "end": {
1348 "column": 3, 1335 "column": 3,
1349 "line": 51 1336 "line": 49
1350 }, 1337 },
1351 "file": "src/components/settings/account/AccountDashboard.js", 1338 "file": "src/components/settings/account/AccountDashboard.js",
1352 "id": "settings.account.headlineInvoices", 1339 "id": "settings.account.headlineInvoices",
1353 "start": { 1340 "start": {
1354 "column": 18, 1341 "column": 18,
1355 "line": 48 1342 "line": 46
1356 } 1343 }
1357 }, 1344 },
1358 { 1345 {
1359 "defaultMessage": "!!!Download", 1346 "defaultMessage": "!!!Download",
1360 "end": { 1347 "end": {
1361 "column": 3, 1348 "column": 3,
1362 "line": 55 1349 "line": 53
1363 }, 1350 },
1364 "file": "src/components/settings/account/AccountDashboard.js", 1351 "file": "src/components/settings/account/AccountDashboard.js",
1365 "id": "settings.account.invoiceDownload", 1352 "id": "settings.account.invoiceDownload",
1366 "start": { 1353 "start": {
1367 "column": 19, 1354 "column": 19,
1368 "line": 52 1355 "line": 50
1369 } 1356 }
1370 }, 1357 },
1371 { 1358 {
1372 "defaultMessage": "!!!Could not load user information", 1359 "defaultMessage": "!!!Could not load user information",
1373 "end": { 1360 "end": {
1374 "column": 3, 1361 "column": 3,
1375 "line": 59 1362 "line": 57
1376 }, 1363 },
1377 "file": "src/components/settings/account/AccountDashboard.js", 1364 "file": "src/components/settings/account/AccountDashboard.js",
1378 "id": "settings.account.userInfoRequestFailed", 1365 "id": "settings.account.userInfoRequestFailed",
1379 "start": { 1366 "start": {
1380 "column": 25, 1367 "column": 25,
1381 "line": 56 1368 "line": 54
1382 } 1369 }
1383 }, 1370 },
1384 { 1371 {
1385 "defaultMessage": "!!!Try again", 1372 "defaultMessage": "!!!Try again",
1386 "end": { 1373 "end": {
1387 "column": 3, 1374 "column": 3,
1388 "line": 63 1375 "line": 61
1389 }, 1376 },
1390 "file": "src/components/settings/account/AccountDashboard.js", 1377 "file": "src/components/settings/account/AccountDashboard.js",
1391 "id": "settings.account.tryReloadUserInfoRequest", 1378 "id": "settings.account.tryReloadUserInfoRequest",
1392 "start": { 1379 "start": {
1393 "column": 28, 1380 "column": 28,
1394 "line": 60 1381 "line": 58
1395 } 1382 }
1396 }, 1383 },
1397 { 1384 {
1398 "defaultMessage": "!!!Delete account", 1385 "defaultMessage": "!!!Delete account",
1399 "end": { 1386 "end": {
1400 "column": 3, 1387 "column": 3,
1401 "line": 67 1388 "line": 65
1402 }, 1389 },
1403 "file": "src/components/settings/account/AccountDashboard.js", 1390 "file": "src/components/settings/account/AccountDashboard.js",
1404 "id": "settings.account.deleteAccount", 1391 "id": "settings.account.deleteAccount",
1405 "start": { 1392 "start": {
1406 "column": 17, 1393 "column": 17,
1407 "line": 64 1394 "line": 62
1408 } 1395 }
1409 }, 1396 },
1410 { 1397 {
1411 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", 1398 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.",
1412 "end": { 1399 "end": {
1413 "column": 3, 1400 "column": 3,
1414 "line": 71 1401 "line": 69
1415 }, 1402 },
1416 "file": "src/components/settings/account/AccountDashboard.js", 1403 "file": "src/components/settings/account/AccountDashboard.js",
1417 "id": "settings.account.deleteInfo", 1404 "id": "settings.account.deleteInfo",
1418 "start": { 1405 "start": {
1419 "column": 14, 1406 "column": 14,
1420 "line": 68 1407 "line": 66
1421 } 1408 }
1422 }, 1409 },
1423 { 1410 {
1424 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", 1411 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!",
1425 "end": { 1412 "end": {
1426 "column": 3, 1413 "column": 3,
1427 "line": 75 1414 "line": 73
1428 }, 1415 },
1429 "file": "src/components/settings/account/AccountDashboard.js", 1416 "file": "src/components/settings/account/AccountDashboard.js",
1430 "id": "settings.account.deleteEmailSent", 1417 "id": "settings.account.deleteEmailSent",
1431 "start": { 1418 "start": {
1432 "column": 19, 1419 "column": 19,
1433 "line": 72 1420 "line": 70
1434 } 1421 }
1435 }, 1422 },
1436 { 1423 {
1437 "defaultMessage": "!!!Free Trial", 1424 "defaultMessage": "!!!Free Trial",
1438 "end": { 1425 "end": {
1439 "column": 3, 1426 "column": 3,
1440 "line": 79 1427 "line": 77
1441 }, 1428 },
1442 "file": "src/components/settings/account/AccountDashboard.js", 1429 "file": "src/components/settings/account/AccountDashboard.js",
1443 "id": "settings.account.trial", 1430 "id": "settings.account.trial",
1444 "start": { 1431 "start": {
1445 "column": 9, 1432 "column": 9,
1446 "line": 76 1433 "line": 74
1447 } 1434 }
1448 }, 1435 },
1449 { 1436 {
1450 "defaultMessage": "!!!Your license:", 1437 "defaultMessage": "!!!Your license:",
1451 "end": { 1438 "end": {
1452 "column": 3, 1439 "column": 3,
1453 "line": 83 1440 "line": 81
1454 }, 1441 },
1455 "file": "src/components/settings/account/AccountDashboard.js", 1442 "file": "src/components/settings/account/AccountDashboard.js",
1456 "id": "settings.account.yourLicense", 1443 "id": "settings.account.yourLicense",
1457 "start": { 1444 "start": {
1458 "column": 15, 1445 "column": 15,
1459 "line": 80 1446 "line": 78
1460 } 1447 }
1461 }, 1448 },
1462 { 1449 {
1463 "defaultMessage": "!!!Your free trial ends in {duration}.", 1450 "defaultMessage": "!!!Your free trial ends in {duration}.",
1464 "end": { 1451 "end": {
1465 "column": 3, 1452 "column": 3,
1466 "line": 87 1453 "line": 85
1467 }, 1454 },
1468 "file": "src/components/settings/account/AccountDashboard.js", 1455 "file": "src/components/settings/account/AccountDashboard.js",
1469 "id": "settings.account.trialEndsIn", 1456 "id": "settings.account.trialEndsIn",
1470 "start": { 1457 "start": {
1471 "column": 15, 1458 "column": 15,
1472 "line": 84 1459 "line": 82
1473 } 1460 }
1474 }, 1461 },
1475 { 1462 {
1476 "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.", 1463 "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.",
1477 "end": { 1464 "end": {
1478 "column": 3, 1465 "column": 3,
1479 "line": 91 1466 "line": 89
1480 }, 1467 },
1481 "file": "src/components/settings/account/AccountDashboard.js", 1468 "file": "src/components/settings/account/AccountDashboard.js",
1482 "id": "settings.account.trialUpdateBillingInfo", 1469 "id": "settings.account.trialUpdateBillingInfo",
1483 "start": { 1470 "start": {
1484 "column": 33, 1471 "column": 33,
1485 "line": 88 1472 "line": 86
1486 } 1473 }
1487 } 1474 }
1488 ], 1475 ],
@@ -2706,220 +2693,173 @@
2706 { 2693 {
2707 "descriptors": [ 2694 "descriptors": [
2708 { 2695 {
2709 "defaultMessage": "!!!Support the development of Franz", 2696 "defaultMessage": "!!!Choose your plan",
2710 "end": { 2697 "end": {
2711 "column": 3, 2698 "column": 3,
2712 "line": 17 2699 "line": 16
2713 }, 2700 },
2714 "file": "src/components/subscription/SubscriptionForm.js", 2701 "file": "src/components/subscription/SubscriptionForm.js",
2715 "id": "subscription.submit.label", 2702 "id": "subscription.cta.choosePlan",
2716 "start": { 2703 "start": {
2717 "column": 21, 2704 "column": 21,
2718 "line": 14 2705 "line": 13
2719 }
2720 },
2721 {
2722 "defaultMessage": "!!!Could not initialize payment form",
2723 "end": {
2724 "column": 3,
2725 "line": 21
2726 },
2727 "file": "src/components/subscription/SubscriptionForm.js",
2728 "id": "subscription.paymentSessionError",
2729 "start": {
2730 "column": 23,
2731 "line": 18
2732 }
2733 },
2734 {
2735 "defaultMessage": "!!!free",
2736 "end": {
2737 "column": 3,
2738 "line": 25
2739 },
2740 "file": "src/components/subscription/SubscriptionForm.js",
2741 "id": "subscription.type.free",
2742 "start": {
2743 "column": 12,
2744 "line": 22
2745 } 2706 }
2746 }, 2707 },
2747 { 2708 {
2748 "defaultMessage": "!!!month", 2709 "defaultMessage": "!!!Upgrade your account and get the full Franz experience",
2749 "end": { 2710 "end": {
2750 "column": 3, 2711 "column": 3,
2751 "line": 29 2712 "line": 20
2752 }, 2713 },
2753 "file": "src/components/subscription/SubscriptionForm.js", 2714 "file": "src/components/subscription/SubscriptionForm.js",
2754 "id": "subscription.type.month", 2715 "id": "settings.account.headlineUpgradeAccount",
2755 "start": { 2716 "start": {
2756 "column": 15, 2717 "column": 18,
2757 "line": 26 2718 "line": 17
2758 } 2719 }
2759 }, 2720 },
2760 { 2721 {
2761 "defaultMessage": "!!!year", 2722 "defaultMessage": "!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!",
2762 "end": { 2723 "end": {
2763 "column": 3, 2724 "column": 3,
2764 "line": 33 2725 "line": 24
2765 }, 2726 },
2766 "file": "src/components/subscription/SubscriptionForm.js", 2727 "file": "src/components/subscription/SubscriptionForm.js",
2767 "id": "subscription.type.year", 2728 "id": "subscription.teaser.intro",
2768 "start": { 2729 "start": {
2769 "column": 14, 2730 "column": 14,
2770 "line": 30 2731 "line": 21
2771 } 2732 }
2772 }, 2733 },
2773 { 2734 {
2774 "defaultMessage": "!!!The Franz Premium Supporter Account includes", 2735 "defaultMessage": "!!!Paid Franz Plans include:",
2775 "end": { 2736 "end": {
2776 "column": 3, 2737 "column": 3,
2777 "line": 37 2738 "line": 28
2778 }, 2739 },
2779 "file": "src/components/subscription/SubscriptionForm.js", 2740 "file": "src/components/subscription/SubscriptionForm.js",
2780 "id": "subscription.includedFeatures", 2741 "id": "subscription.teaser.includedFeatures",
2781 "start": { 2742 "start": {
2782 "column": 20, 2743 "column": 20,
2783 "line": 34 2744 "line": 25
2784 }
2785 },
2786 {
2787 "defaultMessage": "!!!Add on-premise/hosted services like Mattermost",
2788 "end": {
2789 "column": 3,
2790 "line": 41
2791 },
2792 "file": "src/components/subscription/SubscriptionForm.js",
2793 "id": "subscription.features.onpremise.mattermost",
2794 "start": {
2795 "column": 13,
2796 "line": 38
2797 } 2745 }
2798 }, 2746 }
2747 ],
2748 "path": "src/components/subscription/SubscriptionForm.json"
2749 },
2750 {
2751 "descriptors": [
2799 { 2752 {
2800 "defaultMessage": "!!!No app delays & nagging to upgrade license", 2753 "defaultMessage": "!!!Cancel",
2801 "end": { 2754 "end": {
2802 "column": 3, 2755 "column": 3,
2803 "line": 45 2756 "line": 14
2804 }, 2757 },
2805 "file": "src/components/subscription/SubscriptionForm.js", 2758 "file": "src/components/subscription/SubscriptionPopup.js",
2806 "id": "subscription.features.noInterruptions", 2759 "id": "subscriptionPopup.buttonCancel",
2807 "start": { 2760 "start": {
2808 "column": 19, 2761 "column": 16,
2809 "line": 42 2762 "line": 11
2810 } 2763 }
2811 }, 2764 },
2812 { 2765 {
2813 "defaultMessage": "!!!Proxy support for services", 2766 "defaultMessage": "!!!Done",
2814 "end": { 2767 "end": {
2815 "column": 3, 2768 "column": 3,
2816 "line": 49 2769 "line": 18
2817 }, 2770 },
2818 "file": "src/components/subscription/SubscriptionForm.js", 2771 "file": "src/components/subscription/SubscriptionPopup.js",
2819 "id": "subscription.features.proxy", 2772 "id": "subscriptionPopup.buttonDone",
2820 "start": { 2773 "start": {
2821 "column": 9, 2774 "column": 14,
2822 "line": 46 2775 "line": 15
2823 } 2776 }
2824 }, 2777 }
2778 ],
2779 "path": "src/components/subscription/SubscriptionPopup.json"
2780 },
2781 {
2782 "descriptors": [
2825 { 2783 {
2826 "defaultMessage": "!!!Support for Spellchecker", 2784 "defaultMessage": "!!!Yes, start the free Franz Professional trial",
2827 "end": { 2785 "end": {
2828 "column": 3, 2786 "column": 3,
2829 "line": 53 2787 "line": 17
2830 }, 2788 },
2831 "file": "src/components/subscription/SubscriptionForm.js", 2789 "file": "src/components/subscription/TrialForm.js",
2832 "id": "subscription.features.spellchecker", 2790 "id": "subscription.cta.activateTrial",
2833 "start": { 2791 "start": {
2834 "column": 16, 2792 "column": 21,
2835 "line": 50 2793 "line": 14
2836 } 2794 }
2837 }, 2795 },
2838 { 2796 {
2839 "defaultMessage": "!!!Organize your services in workspaces", 2797 "defaultMessage": "!!!Get the free 14 day Franz Professional Trial",
2840 "end": { 2798 "end": {
2841 "column": 3, 2799 "column": 3,
2842 "line": 57 2800 "line": 21
2843 }, 2801 },
2844 "file": "src/components/subscription/SubscriptionForm.js", 2802 "file": "src/components/subscription/TrialForm.js",
2845 "id": "subscription.features.workspaces", 2803 "id": "settings.account.headlineTrialUpgrade",
2846 "start": { 2804 "start": {
2847 "column": 14, 2805 "column": 18,
2848 "line": 54 2806 "line": 18
2849 } 2807 }
2850 }, 2808 },
2851 { 2809 {
2852 "defaultMessage": "!!!No ads, ever!", 2810 "defaultMessage": "!!!The Franz Professional Plan includes:",
2853 "end": { 2811 "end": {
2854 "column": 3, 2812 "column": 3,
2855 "line": 61 2813 "line": 25
2856 }, 2814 },
2857 "file": "src/components/subscription/SubscriptionForm.js", 2815 "file": "src/components/subscription/TrialForm.js",
2858 "id": "subscription.features.ads", 2816 "id": "subscription.includedProFeatures",
2859 "start": { 2817 "start": {
2860 "column": 7, 2818 "column": 20,
2861 "line": 58 2819 "line": 22
2862 } 2820 }
2863 }, 2821 },
2864 { 2822 {
2865 "defaultMessage": "!!!coming soon", 2823 "defaultMessage": "!!!No strings attached",
2866 "end": { 2824 "end": {
2867 "column": 3, 2825 "column": 3,
2868 "line": 65 2826 "line": 29
2869 }, 2827 },
2870 "file": "src/components/subscription/SubscriptionForm.js", 2828 "file": "src/components/subscription/TrialForm.js",
2871 "id": "subscription.features.comingSoon", 2829 "id": "pricing.trial.terms.headline",
2872 "start": { 2830 "start": {
2873 "column": 14, 2831 "column": 29,
2874 "line": 62 2832 "line": 26
2875 } 2833 }
2876 }, 2834 },
2877 { 2835 {
2878 "defaultMessage": "!!!EU residents: local sales tax may apply", 2836 "defaultMessage": "!!!No credit card required",
2879 "end": {
2880 "column": 3,
2881 "line": 69
2882 },
2883 "file": "src/components/subscription/SubscriptionForm.js",
2884 "id": "subscription.euTaxInfo",
2885 "start": {
2886 "column": 13,
2887 "line": 66
2888 }
2889 }
2890 ],
2891 "path": "src/components/subscription/SubscriptionForm.json"
2892 },
2893 {
2894 "descriptors": [
2895 {
2896 "defaultMessage": "!!!Cancel",
2897 "end": { 2837 "end": {
2898 "column": 3, 2838 "column": 3,
2899 "line": 14 2839 "line": 33
2900 }, 2840 },
2901 "file": "src/components/subscription/SubscriptionPopup.js", 2841 "file": "src/components/subscription/TrialForm.js",
2902 "id": "subscriptionPopup.buttonCancel", 2842 "id": "pricing.trial.terms.noCreditCard",
2903 "start": { 2843 "start": {
2904 "column": 16, 2844 "column": 16,
2905 "line": 11 2845 "line": 30
2906 } 2846 }
2907 }, 2847 },
2908 { 2848 {
2909 "defaultMessage": "!!!Done", 2849 "defaultMessage": "!!!Your free trial ends automatically after 14 days",
2910 "end": { 2850 "end": {
2911 "column": 3, 2851 "column": 3,
2912 "line": 18 2852 "line": 37
2913 }, 2853 },
2914 "file": "src/components/subscription/SubscriptionPopup.js", 2854 "file": "src/components/subscription/TrialForm.js",
2915 "id": "subscriptionPopup.buttonDone", 2855 "id": "pricing.trial.terms.automaticTrialEnd",
2916 "start": { 2856 "start": {
2917 "column": 14, 2857 "column": 21,
2918 "line": 15 2858 "line": 34
2919 } 2859 }
2920 } 2860 }
2921 ], 2861 ],
2922 "path": "src/components/subscription/SubscriptionPopup.json" 2862 "path": "src/components/subscription/TrialForm.json"
2923 }, 2863 },
2924 { 2864 {
2925 "descriptors": [ 2865 "descriptors": [
@@ -4254,81 +4194,55 @@
4254 { 4194 {
4255 "descriptors": [ 4195 "descriptors": [
4256 { 4196 {
4257 "defaultMessage": "!!!Franz Professional Yearly", 4197 "defaultMessage": "!!!Franz Professional",
4258 "end": { 4198 "end": {
4259 "column": 3, 4199 "column": 3,
4260 "line": 8 4200 "line": 8
4261 }, 4201 },
4262 "file": "src/helpers/plan-helpers.js", 4202 "file": "src/helpers/plan-helpers.js",
4263 "id": "pricing.plan.pro-yearly", 4203 "id": "pricing.plan.pro",
4264 "start": { 4204 "start": {
4265 "column": 22, 4205 "column": 15,
4266 "line": 5 4206 "line": 5
4267 } 4207 }
4268 }, 4208 },
4269 { 4209 {
4270 "defaultMessage": "!!!Franz Professional Monthly", 4210 "defaultMessage": "!!!Franz Personal",
4271 "end": { 4211 "end": {
4272 "column": 3, 4212 "column": 3,
4273 "line": 12 4213 "line": 12
4274 }, 4214 },
4275 "file": "src/helpers/plan-helpers.js", 4215 "file": "src/helpers/plan-helpers.js",
4276 "id": "pricing.plan.pro-monthly", 4216 "id": "pricing.plan.personal",
4277 "start": { 4217 "start": {
4278 "column": 23, 4218 "column": 20,
4279 "line": 9 4219 "line": 9
4280 } 4220 }
4281 }, 4221 },
4282 { 4222 {
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", 4223 "defaultMessage": "!!!Franz Free",
4310 "end": { 4224 "end": {
4311 "column": 3, 4225 "column": 3,
4312 "line": 24 4226 "line": 16
4313 }, 4227 },
4314 "file": "src/helpers/plan-helpers.js", 4228 "file": "src/helpers/plan-helpers.js",
4315 "id": "pricing.plan.free", 4229 "id": "pricing.plan.free",
4316 "start": { 4230 "start": {
4317 "column": 16, 4231 "column": 16,
4318 "line": 21 4232 "line": 13
4319 } 4233 }
4320 }, 4234 },
4321 { 4235 {
4322 "defaultMessage": "!!!Franz Premium", 4236 "defaultMessage": "!!!Franz Premium",
4323 "end": { 4237 "end": {
4324 "column": 3, 4238 "column": 3,
4325 "line": 28 4239 "line": 20
4326 }, 4240 },
4327 "file": "src/helpers/plan-helpers.js", 4241 "file": "src/helpers/plan-helpers.js",
4328 "id": "pricing.plan.legacy", 4242 "id": "pricing.plan.legacy",
4329 "start": { 4243 "start": {
4330 "column": 18, 4244 "column": 18,
4331 "line": 25 4245 "line": 17
4332 } 4246 }
4333 } 4247 }
4334 ], 4248 ],
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index a4c828f92..57785b74a 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -123,7 +123,11 @@
123 "pricing.plan.free": "Franz Free", 123 "pricing.plan.free": "Franz Free",
124 "pricing.plan.legacy": "Franz Premium", 124 "pricing.plan.legacy": "Franz Premium",
125 "pricing.plan.personal": "Franz Personal", 125 "pricing.plan.personal": "Franz Personal",
126 "pricing.plan.personal-monthly": "Franz Personal Monthly",
127 "pricing.plan.personal-yearly": "Franz Personal Yearly",
126 "pricing.plan.pro": "Franz Professional", 128 "pricing.plan.pro": "Franz Professional",
129 "pricing.plan.pro-monthly": "Franz Professional Monthly",
130 "pricing.plan.pro-yearly": "Franz Professional Yearly",
127 "pricing.trial.cta.accept": "Yes, upgrade my account to Franz Professional", 131 "pricing.trial.cta.accept": "Yes, upgrade my account to Franz Professional",
128 "pricing.trial.cta.skip": "Continue to Franz", 132 "pricing.trial.cta.skip": "Continue to Franz",
129 "pricing.trial.error": "Sorry, we could not activate your trial!", 133 "pricing.trial.error": "Sorry, we could not activate your trial!",
@@ -166,7 +170,8 @@
166 "settings.account.headlinePassword": "Change password", 170 "settings.account.headlinePassword": "Change password",
167 "settings.account.headlineProfile": "Update profile", 171 "settings.account.headlineProfile": "Update profile",
168 "settings.account.headlineSubscription": "Your subscription", 172 "settings.account.headlineSubscription": "Your subscription",
169 "settings.account.headlineUpgrade": "Upgrade your account & support Franz", 173 "settings.account.headlineTrialUpgrade": "Get the free 14 day Franz Professional Trial",
174 "settings.account.headlineUpgradeAccount": "Upgrade your account & get the full Franz experience",
170 "settings.account.invoiceDownload": "Download", 175 "settings.account.invoiceDownload": "Download",
171 "settings.account.manageSubscription.label": "Manage your subscription", 176 "settings.account.manageSubscription.label": "Manage your subscription",
172 "settings.account.successInfo": "Your changes have been saved", 177 "settings.account.successInfo": "Your changes have been saved",
@@ -327,20 +332,11 @@
327 "signup.link.login": "Already have an account, sign in?", 332 "signup.link.login": "Already have an account, sign in?",
328 "signup.password.label": "Password", 333 "signup.password.label": "Password",
329 "signup.submit.label": "Create account", 334 "signup.submit.label": "Create account",
330 "subscription.euTaxInfo": "EU residents: local sales tax may apply", 335 "subscription.cta.activateTrial": "Yes, start the free Franz Professional trial",
331 "subscription.features.ads": "No ads, ever!", 336 "subscription.cta.choosePlan": "Choose your plan",
332 "subscription.features.comingSoon": "coming soon", 337 "subscription.includedProFeatures": "The Franz Professional Plan includes:",
333 "subscription.features.noInterruptions": "No app delays & nagging to upgrade license", 338 "subscription.teaser.includedFeatures": "Paid Franz Plans include:",
334 "subscription.features.onpremise.mattermost": "Add on-premise/hosted services like Mattermost", 339 "subscription.teaser.intro": "Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!",
335 "subscription.features.proxy": "Proxy support for services",
336 "subscription.features.spellchecker": "Support for spellchecker",
337 "subscription.features.workspaces": "Organize your services in workspaces",
338 "subscription.includedFeatures": "Paid Franz Premium Supporter Account includes",
339 "subscription.paymentSessionError": "Could not initialize payment form",
340 "subscription.submit.label": "I want to support the development of Franz",
341 "subscription.type.free": "free",
342 "subscription.type.month": "month",
343 "subscription.type.year": "year",
344 "subscriptionPopup.buttonCancel": "Cancel", 340 "subscriptionPopup.buttonCancel": "Cancel",
345 "subscriptionPopup.buttonDone": "Done", 341 "subscriptionPopup.buttonDone": "Done",
346 "tabs.item.deleteService": "Delete service", 342 "tabs.item.deleteService": "Delete service",
diff --git a/src/i18n/messages/src/components/settings/account/AccountDashboard.json b/src/i18n/messages/src/components/settings/account/AccountDashboard.json
index 1e21bad69..68d3e6dd1 100644
--- a/src/i18n/messages/src/components/settings/account/AccountDashboard.json
+++ b/src/i18n/messages/src/components/settings/account/AccountDashboard.json
@@ -26,28 +26,15 @@
26 } 26 }
27 }, 27 },
28 { 28 {
29 "id": "settings.account.headlineTrialUpgrade",
30 "defaultMessage": "!!!Get the free 14 day Franz Professional Trial",
31 "file": "src/components/settings/account/AccountDashboard.js",
32 "start": {
33 "line": 26,
34 "column": 19
35 },
36 "end": {
37 "line": 29,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.account.headlineDangerZone", 29 "id": "settings.account.headlineDangerZone",
43 "defaultMessage": "!!Danger Zone", 30 "defaultMessage": "!!Danger Zone",
44 "file": "src/components/settings/account/AccountDashboard.js", 31 "file": "src/components/settings/account/AccountDashboard.js",
45 "start": { 32 "start": {
46 "line": 30, 33 "line": 26,
47 "column": 22 34 "column": 22
48 }, 35 },
49 "end": { 36 "end": {
50 "line": 33, 37 "line": 29,
51 "column": 3 38 "column": 3
52 } 39 }
53 }, 40 },
@@ -56,11 +43,11 @@
56 "defaultMessage": "!!!Manage your subscription", 43 "defaultMessage": "!!!Manage your subscription",
57 "file": "src/components/settings/account/AccountDashboard.js", 44 "file": "src/components/settings/account/AccountDashboard.js",
58 "start": { 45 "start": {
59 "line": 34, 46 "line": 30,
60 "column": 33 47 "column": 33
61 }, 48 },
62 "end": { 49 "end": {
63 "line": 37, 50 "line": 33,
64 "column": 3 51 "column": 3
65 } 52 }
66 }, 53 },
@@ -69,11 +56,11 @@
69 "defaultMessage": "!!!Basic Account", 56 "defaultMessage": "!!!Basic Account",
70 "file": "src/components/settings/account/AccountDashboard.js", 57 "file": "src/components/settings/account/AccountDashboard.js",
71 "start": { 58 "start": {
72 "line": 38, 59 "line": 34,
73 "column": 20 60 "column": 20
74 }, 61 },
75 "end": { 62 "end": {
76 "line": 41, 63 "line": 37,
77 "column": 3 64 "column": 3
78 } 65 }
79 }, 66 },
@@ -82,11 +69,11 @@
82 "defaultMessage": "!!!Premium Supporter Account", 69 "defaultMessage": "!!!Premium Supporter Account",
83 "file": "src/components/settings/account/AccountDashboard.js", 70 "file": "src/components/settings/account/AccountDashboard.js",
84 "start": { 71 "start": {
85 "line": 42, 72 "line": 38,
86 "column": 22 73 "column": 22
87 }, 74 },
88 "end": { 75 "end": {
89 "line": 45, 76 "line": 41,
90 "column": 3 77 "column": 3
91 } 78 }
92 }, 79 },
@@ -95,11 +82,11 @@
95 "defaultMessage": "!!!Edit Account", 82 "defaultMessage": "!!!Edit Account",
96 "file": "src/components/settings/account/AccountDashboard.js", 83 "file": "src/components/settings/account/AccountDashboard.js",
97 "start": { 84 "start": {
98 "line": 46, 85 "line": 42,
99 "column": 21 86 "column": 21
100 }, 87 },
101 "end": { 88 "end": {
102 "line": 49, 89 "line": 45,
103 "column": 3 90 "column": 3
104 } 91 }
105 }, 92 },
@@ -108,11 +95,11 @@
108 "defaultMessage": "!!Invoices", 95 "defaultMessage": "!!Invoices",
109 "file": "src/components/settings/account/AccountDashboard.js", 96 "file": "src/components/settings/account/AccountDashboard.js",
110 "start": { 97 "start": {
111 "line": 50, 98 "line": 46,
112 "column": 18 99 "column": 18
113 }, 100 },
114 "end": { 101 "end": {
115 "line": 53, 102 "line": 49,
116 "column": 3 103 "column": 3
117 } 104 }
118 }, 105 },
@@ -121,11 +108,11 @@
121 "defaultMessage": "!!!Download", 108 "defaultMessage": "!!!Download",
122 "file": "src/components/settings/account/AccountDashboard.js", 109 "file": "src/components/settings/account/AccountDashboard.js",
123 "start": { 110 "start": {
124 "line": 54, 111 "line": 50,
125 "column": 19 112 "column": 19
126 }, 113 },
127 "end": { 114 "end": {
128 "line": 57, 115 "line": 53,
129 "column": 3 116 "column": 3
130 } 117 }
131 }, 118 },
@@ -134,11 +121,11 @@
134 "defaultMessage": "!!!Could not load user information", 121 "defaultMessage": "!!!Could not load user information",
135 "file": "src/components/settings/account/AccountDashboard.js", 122 "file": "src/components/settings/account/AccountDashboard.js",
136 "start": { 123 "start": {
137 "line": 58, 124 "line": 54,
138 "column": 25 125 "column": 25
139 }, 126 },
140 "end": { 127 "end": {
141 "line": 61, 128 "line": 57,
142 "column": 3 129 "column": 3
143 } 130 }
144 }, 131 },
@@ -147,11 +134,11 @@
147 "defaultMessage": "!!!Try again", 134 "defaultMessage": "!!!Try again",
148 "file": "src/components/settings/account/AccountDashboard.js", 135 "file": "src/components/settings/account/AccountDashboard.js",
149 "start": { 136 "start": {
150 "line": 62, 137 "line": 58,
151 "column": 28 138 "column": 28
152 }, 139 },
153 "end": { 140 "end": {
154 "line": 65, 141 "line": 61,
155 "column": 3 142 "column": 3
156 } 143 }
157 }, 144 },
@@ -160,11 +147,11 @@
160 "defaultMessage": "!!!Delete account", 147 "defaultMessage": "!!!Delete account",
161 "file": "src/components/settings/account/AccountDashboard.js", 148 "file": "src/components/settings/account/AccountDashboard.js",
162 "start": { 149 "start": {
163 "line": 66, 150 "line": 62,
164 "column": 17 151 "column": 17
165 }, 152 },
166 "end": { 153 "end": {
167 "line": 69, 154 "line": 65,
168 "column": 3 155 "column": 3
169 } 156 }
170 }, 157 },
@@ -173,11 +160,11 @@
173 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", 160 "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", 161 "file": "src/components/settings/account/AccountDashboard.js",
175 "start": { 162 "start": {
176 "line": 70, 163 "line": 66,
177 "column": 14 164 "column": 14
178 }, 165 },
179 "end": { 166 "end": {
180 "line": 73, 167 "line": 69,
181 "column": 3 168 "column": 3
182 } 169 }
183 }, 170 },
@@ -186,11 +173,11 @@
186 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", 173 "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", 174 "file": "src/components/settings/account/AccountDashboard.js",
188 "start": { 175 "start": {
189 "line": 74, 176 "line": 70,
190 "column": 19 177 "column": 19
191 }, 178 },
192 "end": { 179 "end": {
193 "line": 77, 180 "line": 73,
194 "column": 3 181 "column": 3
195 } 182 }
196 }, 183 },
@@ -199,11 +186,11 @@
199 "defaultMessage": "!!!Free Trial", 186 "defaultMessage": "!!!Free Trial",
200 "file": "src/components/settings/account/AccountDashboard.js", 187 "file": "src/components/settings/account/AccountDashboard.js",
201 "start": { 188 "start": {
202 "line": 78, 189 "line": 74,
203 "column": 9 190 "column": 9
204 }, 191 },
205 "end": { 192 "end": {
206 "line": 81, 193 "line": 77,
207 "column": 3 194 "column": 3
208 } 195 }
209 }, 196 },
@@ -212,11 +199,11 @@
212 "defaultMessage": "!!!Your license:", 199 "defaultMessage": "!!!Your license:",
213 "file": "src/components/settings/account/AccountDashboard.js", 200 "file": "src/components/settings/account/AccountDashboard.js",
214 "start": { 201 "start": {
215 "line": 82, 202 "line": 78,
216 "column": 15 203 "column": 15
217 }, 204 },
218 "end": { 205 "end": {
219 "line": 85, 206 "line": 81,
220 "column": 3 207 "column": 3
221 } 208 }
222 }, 209 },
@@ -225,11 +212,11 @@
225 "defaultMessage": "!!!Your free trial ends in {duration}.", 212 "defaultMessage": "!!!Your free trial ends in {duration}.",
226 "file": "src/components/settings/account/AccountDashboard.js", 213 "file": "src/components/settings/account/AccountDashboard.js",
227 "start": { 214 "start": {
228 "line": 86, 215 "line": 82,
229 "column": 15 216 "column": 15
230 }, 217 },
231 "end": { 218 "end": {
232 "line": 89, 219 "line": 85,
233 "column": 3 220 "column": 3
234 } 221 }
235 }, 222 },
@@ -238,11 +225,11 @@
238 "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.", 225 "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.",
239 "file": "src/components/settings/account/AccountDashboard.js", 226 "file": "src/components/settings/account/AccountDashboard.js",
240 "start": { 227 "start": {
241 "line": 90, 228 "line": 86,
242 "column": 33 229 "column": 33
243 }, 230 },
244 "end": { 231 "end": {
245 "line": 93, 232 "line": 89,
246 "column": 3 233 "column": 3
247 } 234 }
248 } 235 }
diff --git a/src/i18n/messages/src/components/subscription/SubscriptionForm.json b/src/i18n/messages/src/components/subscription/SubscriptionForm.json
index 224a78c4c..6d235254e 100644
--- a/src/i18n/messages/src/components/subscription/SubscriptionForm.json
+++ b/src/i18n/messages/src/components/subscription/SubscriptionForm.json
@@ -1,66 +1,53 @@
1[ 1[
2 { 2 {
3 "id": "subscription.cta.activateTrial", 3 "id": "subscription.cta.choosePlan",
4 "defaultMessage": "!!!Yes, upgrade my account to Franz Professional", 4 "defaultMessage": "!!!Choose your plan",
5 "file": "src/components/subscription/SubscriptionForm.js", 5 "file": "src/components/subscription/SubscriptionForm.js",
6 "start": { 6 "start": {
7 "line": 14, 7 "line": 13,
8 "column": 21 8 "column": 21
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 17, 11 "line": 16,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
15 { 15 {
16 "id": "subscription.includedProFeatures", 16 "id": "settings.account.headlineUpgradeAccount",
17 "defaultMessage": "!!!The Franz Professional Plan includes:", 17 "defaultMessage": "!!!Upgrade your account and get the full Franz experience",
18 "file": "src/components/subscription/SubscriptionForm.js", 18 "file": "src/components/subscription/SubscriptionForm.js",
19 "start": { 19 "start": {
20 "line": 18, 20 "line": 17,
21 "column": 20 21 "column": 18
22 },
23 "end": {
24 "line": 21,
25 "column": 3
26 }
27 },
28 {
29 "id": "pricing.trial.terms.headline",
30 "defaultMessage": "!!!No strings attached",
31 "file": "src/components/subscription/SubscriptionForm.js",
32 "start": {
33 "line": 22,
34 "column": 29
35 }, 22 },
36 "end": { 23 "end": {
37 "line": 25, 24 "line": 20,
38 "column": 3 25 "column": 3
39 } 26 }
40 }, 27 },
41 { 28 {
42 "id": "pricing.trial.terms.noCreditCard", 29 "id": "subscription.teaser.intro",
43 "defaultMessage": "!!!No credit card required", 30 "defaultMessage": "!!!Franz 5 comes with a wide range of new features to boost up your everyday communication - batteries included. Check out our new plans and find out which one suits you most!",
44 "file": "src/components/subscription/SubscriptionForm.js", 31 "file": "src/components/subscription/SubscriptionForm.js",
45 "start": { 32 "start": {
46 "line": 26, 33 "line": 21,
47 "column": 16 34 "column": 14
48 }, 35 },
49 "end": { 36 "end": {
50 "line": 29, 37 "line": 24,
51 "column": 3 38 "column": 3
52 } 39 }
53 }, 40 },
54 { 41 {
55 "id": "pricing.trial.terms.automaticTrialEnd", 42 "id": "subscription.teaser.includedFeatures",
56 "defaultMessage": "!!!Your free trial ends automatically after 14 days", 43 "defaultMessage": "!!!Paid Franz Plans include:",
57 "file": "src/components/subscription/SubscriptionForm.js", 44 "file": "src/components/subscription/SubscriptionForm.js",
58 "start": { 45 "start": {
59 "line": 30, 46 "line": 25,
60 "column": 21 47 "column": 20
61 }, 48 },
62 "end": { 49 "end": {
63 "line": 33, 50 "line": 28,
64 "column": 3 51 "column": 3
65 } 52 }
66 } 53 }
diff --git a/src/i18n/messages/src/components/subscription/TrialForm.json b/src/i18n/messages/src/components/subscription/TrialForm.json
new file mode 100644
index 000000000..da1f01518
--- /dev/null
+++ b/src/i18n/messages/src/components/subscription/TrialForm.json
@@ -0,0 +1,80 @@
1[
2 {
3 "id": "subscription.cta.activateTrial",
4 "defaultMessage": "!!!Yes, start the free Franz Professional trial",
5 "file": "src/components/subscription/TrialForm.js",
6 "start": {
7 "line": 14,
8 "column": 21
9 },
10 "end": {
11 "line": 17,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.account.headlineTrialUpgrade",
17 "defaultMessage": "!!!Get the free 14 day Franz Professional Trial",
18 "file": "src/components/subscription/TrialForm.js",
19 "start": {
20 "line": 18,
21 "column": 18
22 },
23 "end": {
24 "line": 21,
25 "column": 3
26 }
27 },
28 {
29 "id": "subscription.includedProFeatures",
30 "defaultMessage": "!!!The Franz Professional Plan includes:",
31 "file": "src/components/subscription/TrialForm.js",
32 "start": {
33 "line": 22,
34 "column": 20
35 },
36 "end": {
37 "line": 25,
38 "column": 3
39 }
40 },
41 {
42 "id": "pricing.trial.terms.headline",
43 "defaultMessage": "!!!No strings attached",
44 "file": "src/components/subscription/TrialForm.js",
45 "start": {
46 "line": 26,
47 "column": 29
48 },
49 "end": {
50 "line": 29,
51 "column": 3
52 }
53 },
54 {
55 "id": "pricing.trial.terms.noCreditCard",
56 "defaultMessage": "!!!No credit card required",
57 "file": "src/components/subscription/TrialForm.js",
58 "start": {
59 "line": 30,
60 "column": 16
61 },
62 "end": {
63 "line": 33,
64 "column": 3
65 }
66 },
67 {
68 "id": "pricing.trial.terms.automaticTrialEnd",
69 "defaultMessage": "!!!Your free trial ends automatically after 14 days",
70 "file": "src/components/subscription/TrialForm.js",
71 "start": {
72 "line": 34,
73 "column": 21
74 },
75 "end": {
76 "line": 37,
77 "column": 3
78 }
79 }
80] \ No newline at end of file
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js
index e7516e6e6..03679a163 100644
--- a/src/stores/UserStore.js
+++ b/src/stores/UserStore.js
@@ -350,8 +350,6 @@ export default class UserStore extends Store {
350 if (this.hasActivatedTrial) { 350 if (this.hasActivatedTrial) {
351 await sleep(ms('12s')); 351 await sleep(ms('12s'));
352 352
353 console.log('resetting this.hasActivatedTrial', this.hasActivatedTrial);
354
355 this.hasActivatedTrial = false; 353 this.hasActivatedTrial = false;
356 } 354 }
357 } 355 }