aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/settings/team
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/settings/team')
-rw-r--r--src/components/settings/team/TeamDashboard.js125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js
new file mode 100644
index 000000000..a29a262e9
--- /dev/null
+++ b/src/components/settings/team/TeamDashboard.js
@@ -0,0 +1,125 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer, PropTypes as MobxPropTypes } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl';
5import ReactTooltip from 'react-tooltip';
6import injectSheet from 'react-jss';
7
8import Loader from '../../ui/Loader';
9import Button from '../../ui/Button';
10import Infobox from '../../ui/Infobox';
11import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer';
12
13const messages = defineMessages({
14 headline: {
15 id: 'settings.team.headline',
16 defaultMessage: '!!!Team',
17 },
18 contentHeadline: {
19 id: 'settings.team.contentHeadline',
20 defaultMessage: '!!!Franz for Teams',
21 },
22 intro: {
23 id: 'settings.team.intro',
24 defaultMessage: '!!!You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.',
25 },
26 copy: {
27 id: 'settings.team.copy',
28 defaultMessage: '!!!Franz for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!',
29 },
30 manageButton: {
31 id: 'settings.team.manageAction',
32 defaultMessage: '!!!Manage your Team',
33 },
34 upgradeButton: {
35 id: 'settings.team.upgradeAction',
36 defaultMessage: '!!!Upgrade your Account',
37 },
38});
39
40const styles = theme => ({
41 cta: {
42 marginTop: 40,
43 },
44});
45
46
47export default @injectSheet(styles) @observer class TeamDashboard extends Component {
48 static propTypes = {
49 user: MobxPropTypes.observableObject.isRequired,
50 isLoading: PropTypes.bool.isRequired,
51 userInfoRequestFailed: PropTypes.bool.isRequired,
52 retryUserInfoRequest: PropTypes.func.isRequired,
53 openTeamManagement: PropTypes.func.isRequired,
54 upgradeAccount: PropTypes.func.isRequired,
55 classes: PropTypes.object.isRequired,
56 };
57
58 static contextTypes = {
59 intl: intlShape,
60 };
61
62 render() {
63 const {
64 user,
65 isLoading,
66 userInfoRequestFailed,
67 retryUserInfoRequest,
68 openTeamManagement,
69 upgradeAccount,
70 classes,
71 } = this.props;
72 const { intl } = this.context;
73
74 return (
75 <div className="settings__main">
76 <div className="settings__header">
77 <span className="settings__header-item">
78 {intl.formatMessage(messages.headline)}
79 </span>
80 </div>
81 <div className="settings__body">
82 {isLoading && (
83 <Loader />
84 )}
85
86 {!isLoading && userInfoRequestFailed && (
87 <Infobox
88 icon="alert"
89 type="danger"
90 ctaLabel={intl.formatMessage(messages.tryReloadUserInfoRequest)}
91 ctaLoading={isLoading}
92 ctaOnClick={retryUserInfoRequest}
93 >
94 {intl.formatMessage(messages.userInfoRequestFailed)}
95 </Infobox>
96 )}
97
98 {!userInfoRequestFailed && (
99 <>
100 {!isLoading && (
101 <>
102 <PremiumFeatureContainer>
103 <>
104 <h1>{intl.formatMessage(messages.contentHeadline)}</h1>
105 <p>{intl.formatMessage(messages.intro)}</p>
106 <p>{intl.formatMessage(messages.copy)}</p>
107 {user.isSubscriptionOwner && (
108 <Button
109 label={intl.formatMessage(messages.manageButton)}
110 onClick={openTeamManagement}
111 className={classes.cta}
112 />
113 )}
114 </>
115 </PremiumFeatureContainer>
116 </>
117 )}
118 </>
119 )}
120 </div>
121 <ReactTooltip place="right" type="dark" effect="solid" />
122 </div>
123 );
124 }
125}