aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/subscription/TrialForm.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/subscription/TrialForm.js')
-rw-r--r--src/components/subscription/TrialForm.js115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/components/subscription/TrialForm.js b/src/components/subscription/TrialForm.js
new file mode 100644
index 000000000..9ed548f16
--- /dev/null
+++ b/src/components/subscription/TrialForm.js
@@ -0,0 +1,115 @@
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 allOptionsButton: {
19 id: 'subscription.cta.allOptions',
20 defaultMessage: '!!!See all options',
21 },
22 teaserHeadline: {
23 id: 'settings.account.headlineTrialUpgrade',
24 defaultMessage: '!!!Get the free 14 day Franz Professional Trial',
25 },
26 includedFeatures: {
27 id: 'subscription.includedProFeatures',
28 defaultMessage: '!!!The Franz Professional Plan includes:',
29 },
30 noStringsAttachedHeadline: {
31 id: 'pricing.trial.terms.headline',
32 defaultMessage: '!!!No strings attached',
33 },
34 noCreditCard: {
35 id: 'pricing.trial.terms.noCreditCard',
36 defaultMessage: '!!!No credit card required',
37 },
38 automaticTrialEnd: {
39 id: 'pricing.trial.terms.automaticTrialEnd',
40 defaultMessage: '!!!Your free trial ends automatically after 14 days',
41 },
42});
43
44const styles = theme => ({
45 activateTrialButton: {
46 margin: [40, 0, 10],
47 },
48 allOptionsButton: {
49 margin: [0, 0, 40],
50 background: 'none',
51 border: 'none',
52 color: theme.colorText,
53 },
54 keyTerms: {
55 marginTop: 20,
56 },
57});
58
59export default @observer @injectSheet(styles) class TrialForm extends Component {
60 static propTypes = {
61 activateTrial: PropTypes.func.isRequired,
62 isActivatingTrial: PropTypes.bool.isRequired,
63 showAllOptions: PropTypes.func.isRequired,
64 classes: PropTypes.object.isRequired,
65 };
66
67 static contextTypes = {
68 intl: intlShape,
69 };
70
71 render() {
72 const {
73 isActivatingTrial,
74 activateTrial,
75 showAllOptions,
76 classes,
77 } = this.props;
78 const { intl } = this.context;
79
80 return (
81 <>
82 <H2>{intl.formatMessage(messages.teaserHeadline)}</H2>
83 <H3 className={classes.keyTerms}>
84 {intl.formatMessage(messages.noStringsAttachedHeadline)}
85 </H3>
86 <ul>
87 <FeatureItem icon="👉" name={intl.formatMessage(messages.noCreditCard)} />
88 <FeatureItem icon="👉" name={intl.formatMessage(messages.automaticTrialEnd)} />
89 </ul>
90
91 <Button
92 label={intl.formatMessage(messages.submitButtonLabel)}
93 className={classes.activateTrialButton}
94 busy={isActivatingTrial}
95 onClick={activateTrial}
96 stretch
97 />
98 <Button
99 label={intl.formatMessage(messages.allOptionsButton)}
100 className={classes.allOptionsButton}
101 onClick={showAllOptions}
102 stretch
103 />
104 <div className="subscription__premium-info">
105 <H3>
106 {intl.formatMessage(messages.includedFeatures)}
107 </H3>
108 <div className="subscription">
109 <FeatureList />
110 </div>
111 </div>
112 </>
113 );
114 }
115}