diff options
author | 2019-04-08 15:57:32 +0200 | |
---|---|---|
committer | 2019-04-08 15:57:32 +0200 | |
commit | c41bf73d129d2fba3ec23c1b7b463aaf9dc80dc6 (patch) | |
tree | c24567a5a98c5f53c6ee4ab6230fe730b529c157 /src | |
parent | Update strings (diff) | |
download | ferdium-app-c41bf73d129d2fba3ec23c1b7b463aaf9dc80dc6.tar.gz ferdium-app-c41bf73d129d2fba3ec23c1b7b463aaf9dc80dc6.tar.zst ferdium-app-c41bf73d129d2fba3ec23c1b7b463aaf9dc80dc6.zip |
Add new Team page in settings
Diffstat (limited to 'src')
-rw-r--r-- | src/app.js | 2 | ||||
-rw-r--r-- | src/components/settings/navigation/SettingsNavigation.js | 11 | ||||
-rw-r--r-- | src/components/settings/team/TeamDashboard.js | 125 | ||||
-rw-r--r-- | src/components/ui/PremiumFeatureContainer/styles.js | 1 | ||||
-rw-r--r-- | src/containers/settings/TeamScreen.js | 63 | ||||
-rw-r--r-- | src/i18n/locales/defaultMessages.json | 192 | ||||
-rw-r--r-- | src/i18n/locales/en-US.json | 7 | ||||
-rw-r--r-- | src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json | 25 | ||||
-rw-r--r-- | src/i18n/messages/src/components/settings/team/TeamDashboard.json | 80 |
9 files changed, 452 insertions, 54 deletions
diff --git a/src/app.js b/src/app.js index 6660feb46..96454779e 100644 --- a/src/app.js +++ b/src/app.js | |||
@@ -27,6 +27,7 @@ import RecipesScreen from './containers/settings/RecipesScreen'; | |||
27 | import ServicesScreen from './containers/settings/ServicesScreen'; | 27 | import ServicesScreen from './containers/settings/ServicesScreen'; |
28 | import EditServiceScreen from './containers/settings/EditServiceScreen'; | 28 | import EditServiceScreen from './containers/settings/EditServiceScreen'; |
29 | import AccountScreen from './containers/settings/AccountScreen'; | 29 | import AccountScreen from './containers/settings/AccountScreen'; |
30 | import TeamScreen from './containers/settings/TeamScreen'; | ||
30 | import EditUserScreen from './containers/settings/EditUserScreen'; | 31 | import EditUserScreen from './containers/settings/EditUserScreen'; |
31 | import EditSettingsScreen from './containers/settings/EditSettingsScreen'; | 32 | import EditSettingsScreen from './containers/settings/EditSettingsScreen'; |
32 | import InviteSettingsScreen from './containers/settings/InviteScreen'; | 33 | import InviteSettingsScreen from './containers/settings/InviteScreen'; |
@@ -77,6 +78,7 @@ window.addEventListener('load', () => { | |||
77 | <Route path="/settings/services/:action/:id" component={EditServiceScreen} /> | 78 | <Route path="/settings/services/:action/:id" component={EditServiceScreen} /> |
78 | <Route path="/settings/user" component={AccountScreen} /> | 79 | <Route path="/settings/user" component={AccountScreen} /> |
79 | <Route path="/settings/user/edit" component={EditUserScreen} /> | 80 | <Route path="/settings/user/edit" component={EditUserScreen} /> |
81 | <Route path="/settings/team" component={TeamScreen} /> | ||
80 | <Route path="/settings/app" component={EditSettingsScreen} /> | 82 | <Route path="/settings/app" component={EditSettingsScreen} /> |
81 | <Route path="/settings/invite" component={InviteSettingsScreen} /> | 83 | <Route path="/settings/invite" component={InviteSettingsScreen} /> |
82 | </Route> | 84 | </Route> |
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js index 953f702f8..0be1a22ba 100644 --- a/src/components/settings/navigation/SettingsNavigation.js +++ b/src/components/settings/navigation/SettingsNavigation.js | |||
@@ -18,6 +18,10 @@ const messages = defineMessages({ | |||
18 | id: 'settings.navigation.account', | 18 | id: 'settings.navigation.account', |
19 | defaultMessage: '!!!Account', | 19 | defaultMessage: '!!!Account', |
20 | }, | 20 | }, |
21 | team: { | ||
22 | id: 'settings.navigation.team', | ||
23 | defaultMessage: '!!!Manage Team', | ||
24 | }, | ||
21 | settings: { | 25 | settings: { |
22 | id: 'settings.navigation.settings', | 26 | id: 'settings.navigation.settings', |
23 | defaultMessage: '!!!Settings', | 27 | defaultMessage: '!!!Settings', |
@@ -71,6 +75,13 @@ export default @inject('stores') @observer class SettingsNavigation extends Comp | |||
71 | {intl.formatMessage(messages.account)} | 75 | {intl.formatMessage(messages.account)} |
72 | </Link> | 76 | </Link> |
73 | <Link | 77 | <Link |
78 | to="/settings/team" | ||
79 | className="settings-navigation__link" | ||
80 | activeClassName="is-active" | ||
81 | > | ||
82 | {intl.formatMessage(messages.team)} | ||
83 | </Link> | ||
84 | <Link | ||
74 | to="/settings/app" | 85 | to="/settings/app" |
75 | className="settings-navigation__link" | 86 | className="settings-navigation__link" |
76 | activeClassName="is-active" | 87 | activeClassName="is-active" |
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 @@ | |||
1 | import React, { Component } from 'react'; | ||
2 | import PropTypes from 'prop-types'; | ||
3 | import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; | ||
4 | import { defineMessages, intlShape } from 'react-intl'; | ||
5 | import ReactTooltip from 'react-tooltip'; | ||
6 | import injectSheet from 'react-jss'; | ||
7 | |||
8 | import Loader from '../../ui/Loader'; | ||
9 | import Button from '../../ui/Button'; | ||
10 | import Infobox from '../../ui/Infobox'; | ||
11 | import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; | ||
12 | |||
13 | const 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 | |||
40 | const styles = theme => ({ | ||
41 | cta: { | ||
42 | marginTop: 40, | ||
43 | }, | ||
44 | }); | ||
45 | |||
46 | |||
47 | export 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 | } | ||
diff --git a/src/components/ui/PremiumFeatureContainer/styles.js b/src/components/ui/PremiumFeatureContainer/styles.js index 81d6666c6..11cbfbb90 100644 --- a/src/components/ui/PremiumFeatureContainer/styles.js +++ b/src/components/ui/PremiumFeatureContainer/styles.js | |||
@@ -6,6 +6,7 @@ export default theme => ({ | |||
6 | padding: 20, | 6 | padding: 20, |
7 | 'border-radius': theme.borderRadius, | 7 | 'border-radius': theme.borderRadius, |
8 | pointerEvents: 'none', | 8 | pointerEvents: 'none', |
9 | height: 'auto', | ||
9 | }, | 10 | }, |
10 | titleContainer: { | 11 | titleContainer: { |
11 | display: 'flex', | 12 | display: 'flex', |
diff --git a/src/containers/settings/TeamScreen.js b/src/containers/settings/TeamScreen.js new file mode 100644 index 000000000..3a4b7ef77 --- /dev/null +++ b/src/containers/settings/TeamScreen.js | |||
@@ -0,0 +1,63 @@ | |||
1 | import { remote } from 'electron'; | ||
2 | import React, { Component } from 'react'; | ||
3 | import PropTypes from 'prop-types'; | ||
4 | import { inject, observer } from 'mobx-react'; | ||
5 | |||
6 | import PaymentStore from '../../stores/PaymentStore'; | ||
7 | import UserStore from '../../stores/UserStore'; | ||
8 | import AppStore from '../../stores/AppStore'; | ||
9 | |||
10 | import TeamDashboard from '../../components/settings/team/TeamDashboard'; | ||
11 | import ErrorBoundary from '../../components/util/ErrorBoundary'; | ||
12 | import { WEBSITE } from '../../environment'; | ||
13 | |||
14 | const { BrowserWindow } = remote; | ||
15 | |||
16 | export default @inject('stores', 'actions') @observer class TeamScreen extends Component { | ||
17 | handleWebsiteLink(route) { | ||
18 | const { actions, stores } = this.props; | ||
19 | |||
20 | const url = `${WEBSITE}${route}?authToken=${stores.user.authToken}&utm_source=app&utm_medium=account_dashboard`; | ||
21 | console.log(url); | ||
22 | |||
23 | actions.app.openExternalUrl({ url }); | ||
24 | } | ||
25 | |||
26 | render() { | ||
27 | const { user } = this.props.stores; | ||
28 | |||
29 | const isLoadingUserInfo = user.getUserInfoRequest.isExecuting; | ||
30 | |||
31 | return ( | ||
32 | <ErrorBoundary> | ||
33 | <TeamDashboard | ||
34 | user={user.data} | ||
35 | isLoading={isLoadingUserInfo} | ||
36 | userInfoRequestFailed={user.getUserInfoRequest.wasExecuted && user.getUserInfoRequest.isError} | ||
37 | retryUserInfoRequest={() => this.reloadData()} | ||
38 | openTeamManagement={() => this.handleWebsiteLink('/user/team')} | ||
39 | /> | ||
40 | </ErrorBoundary> | ||
41 | ); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | TeamScreen.wrappedComponent.propTypes = { | ||
46 | stores: PropTypes.shape({ | ||
47 | user: PropTypes.instanceOf(UserStore).isRequired, | ||
48 | payment: PropTypes.instanceOf(PaymentStore).isRequired, | ||
49 | app: PropTypes.instanceOf(AppStore).isRequired, | ||
50 | }).isRequired, | ||
51 | actions: PropTypes.shape({ | ||
52 | payment: PropTypes.shape({ | ||
53 | createDashboardUrl: PropTypes.func.isRequired, | ||
54 | }).isRequired, | ||
55 | app: PropTypes.shape({ | ||
56 | openExternalUrl: PropTypes.func.isRequired, | ||
57 | }).isRequired, | ||
58 | user: PropTypes.shape({ | ||
59 | update: PropTypes.func.isRequired, | ||
60 | delete: PropTypes.func.isRequired, | ||
61 | }).isRequired, | ||
62 | }).isRequired, | ||
63 | }; | ||
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json index 0641c510c..3046f50ce 100644 --- a/src/i18n/locales/defaultMessages.json +++ b/src/i18n/locales/defaultMessages.json | |||
@@ -1076,195 +1076,195 @@ | |||
1076 | "defaultMessage": "!!!Account", | 1076 | "defaultMessage": "!!!Account", |
1077 | "end": { | 1077 | "end": { |
1078 | "column": 3, | 1078 | "column": 3, |
1079 | "line": 18 | 1079 | "line": 16 |
1080 | }, | 1080 | }, |
1081 | "file": "src/components/settings/account/AccountDashboard.js", | 1081 | "file": "src/components/settings/account/AccountDashboard.js", |
1082 | "id": "settings.account.headline", | 1082 | "id": "settings.account.headline", |
1083 | "start": { | 1083 | "start": { |
1084 | "column": 12, | 1084 | "column": 12, |
1085 | "line": 15 | 1085 | "line": 13 |
1086 | } | 1086 | } |
1087 | }, | 1087 | }, |
1088 | { | 1088 | { |
1089 | "defaultMessage": "!!!Your Subscription", | 1089 | "defaultMessage": "!!!Your Subscription", |
1090 | "end": { | 1090 | "end": { |
1091 | "column": 3, | 1091 | "column": 3, |
1092 | "line": 22 | 1092 | "line": 20 |
1093 | }, | 1093 | }, |
1094 | "file": "src/components/settings/account/AccountDashboard.js", | 1094 | "file": "src/components/settings/account/AccountDashboard.js", |
1095 | "id": "settings.account.headlineSubscription", | 1095 | "id": "settings.account.headlineSubscription", |
1096 | "start": { | 1096 | "start": { |
1097 | "column": 24, | 1097 | "column": 24, |
1098 | "line": 19 | 1098 | "line": 17 |
1099 | } | 1099 | } |
1100 | }, | 1100 | }, |
1101 | { | 1101 | { |
1102 | "defaultMessage": "!!!Upgrade your Account", | 1102 | "defaultMessage": "!!!Upgrade your Account", |
1103 | "end": { | 1103 | "end": { |
1104 | "column": 3, | 1104 | "column": 3, |
1105 | "line": 26 | 1105 | "line": 24 |
1106 | }, | 1106 | }, |
1107 | "file": "src/components/settings/account/AccountDashboard.js", | 1107 | "file": "src/components/settings/account/AccountDashboard.js", |
1108 | "id": "settings.account.headlineUpgrade", | 1108 | "id": "settings.account.headlineUpgrade", |
1109 | "start": { | 1109 | "start": { |
1110 | "column": 19, | 1110 | "column": 19, |
1111 | "line": 23 | 1111 | "line": 21 |
1112 | } | ||
1113 | }, | ||
1114 | { | ||
1115 | "defaultMessage": "!!Invoices", | ||
1116 | "end": { | ||
1117 | "column": 3, | ||
1118 | "line": 30 | ||
1119 | }, | ||
1120 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1121 | "id": "settings.account.headlineInvoices", | ||
1122 | "start": { | ||
1123 | "column": 20, | ||
1124 | "line": 27 | ||
1125 | } | 1112 | } |
1126 | }, | 1113 | }, |
1127 | { | 1114 | { |
1128 | "defaultMessage": "!!Danger Zone", | 1115 | "defaultMessage": "!!Danger Zone", |
1129 | "end": { | 1116 | "end": { |
1130 | "column": 3, | 1117 | "column": 3, |
1131 | "line": 34 | 1118 | "line": 28 |
1132 | }, | 1119 | }, |
1133 | "file": "src/components/settings/account/AccountDashboard.js", | 1120 | "file": "src/components/settings/account/AccountDashboard.js", |
1134 | "id": "settings.account.headlineDangerZone", | 1121 | "id": "settings.account.headlineDangerZone", |
1135 | "start": { | 1122 | "start": { |
1136 | "column": 22, | 1123 | "column": 22, |
1137 | "line": 31 | 1124 | "line": 25 |
1138 | } | 1125 | } |
1139 | }, | 1126 | }, |
1140 | { | 1127 | { |
1141 | "defaultMessage": "!!!Manage your subscription", | 1128 | "defaultMessage": "!!!Manage your subscription", |
1142 | "end": { | 1129 | "end": { |
1143 | "column": 3, | 1130 | "column": 3, |
1144 | "line": 38 | 1131 | "line": 32 |
1145 | }, | 1132 | }, |
1146 | "file": "src/components/settings/account/AccountDashboard.js", | 1133 | "file": "src/components/settings/account/AccountDashboard.js", |
1147 | "id": "settings.account.manageSubscription.label", | 1134 | "id": "settings.account.manageSubscription.label", |
1148 | "start": { | 1135 | "start": { |
1149 | "column": 33, | 1136 | "column": 33, |
1150 | "line": 35 | 1137 | "line": 29 |
1151 | } | 1138 | } |
1152 | }, | 1139 | }, |
1153 | { | 1140 | { |
1154 | "defaultMessage": "!!!Basic Account", | 1141 | "defaultMessage": "!!!Basic Account", |
1155 | "end": { | 1142 | "end": { |
1156 | "column": 3, | 1143 | "column": 3, |
1157 | "line": 42 | 1144 | "line": 36 |
1158 | }, | 1145 | }, |
1159 | "file": "src/components/settings/account/AccountDashboard.js", | 1146 | "file": "src/components/settings/account/AccountDashboard.js", |
1160 | "id": "settings.account.accountType.basic", | 1147 | "id": "settings.account.accountType.basic", |
1161 | "start": { | 1148 | "start": { |
1162 | "column": 20, | 1149 | "column": 20, |
1163 | "line": 39 | 1150 | "line": 33 |
1164 | } | 1151 | } |
1165 | }, | 1152 | }, |
1166 | { | 1153 | { |
1167 | "defaultMessage": "!!!Premium Supporter Account", | 1154 | "defaultMessage": "!!!Premium Supporter Account", |
1168 | "end": { | 1155 | "end": { |
1169 | "column": 3, | 1156 | "column": 3, |
1170 | "line": 46 | 1157 | "line": 40 |
1171 | }, | 1158 | }, |
1172 | "file": "src/components/settings/account/AccountDashboard.js", | 1159 | "file": "src/components/settings/account/AccountDashboard.js", |
1173 | "id": "settings.account.accountType.premium", | 1160 | "id": "settings.account.accountType.premium", |
1174 | "start": { | 1161 | "start": { |
1175 | "column": 22, | 1162 | "column": 22, |
1176 | "line": 43 | 1163 | "line": 37 |
1177 | } | 1164 | } |
1178 | }, | 1165 | }, |
1179 | { | 1166 | { |
1180 | "defaultMessage": "!!!Edit Account", | 1167 | "defaultMessage": "!!!Edit Account", |
1181 | "end": { | 1168 | "end": { |
1182 | "column": 3, | 1169 | "column": 3, |
1183 | "line": 50 | 1170 | "line": 44 |
1184 | }, | 1171 | }, |
1185 | "file": "src/components/settings/account/AccountDashboard.js", | 1172 | "file": "src/components/settings/account/AccountDashboard.js", |
1186 | "id": "settings.account.account.editButton", | 1173 | "id": "settings.account.account.editButton", |
1187 | "start": { | 1174 | "start": { |
1188 | "column": 21, | 1175 | "column": 21, |
1189 | "line": 47 | 1176 | "line": 41 |
1177 | } | ||
1178 | }, | ||
1179 | { | ||
1180 | "defaultMessage": "!!Invoices", | ||
1181 | "end": { | ||
1182 | "column": 3, | ||
1183 | "line": 48 | ||
1184 | }, | ||
1185 | "file": "src/components/settings/account/AccountDashboard.js", | ||
1186 | "id": "settings.account.headlineInvoices", | ||
1187 | "start": { | ||
1188 | "column": 18, | ||
1189 | "line": 45 | ||
1190 | } | 1190 | } |
1191 | }, | 1191 | }, |
1192 | { | 1192 | { |
1193 | "defaultMessage": "!!!Download", | 1193 | "defaultMessage": "!!!Download", |
1194 | "end": { | 1194 | "end": { |
1195 | "column": 3, | 1195 | "column": 3, |
1196 | "line": 54 | 1196 | "line": 52 |
1197 | }, | 1197 | }, |
1198 | "file": "src/components/settings/account/AccountDashboard.js", | 1198 | "file": "src/components/settings/account/AccountDashboard.js", |
1199 | "id": "settings.account.invoiceDownload", | 1199 | "id": "settings.account.invoiceDownload", |
1200 | "start": { | 1200 | "start": { |
1201 | "column": 19, | 1201 | "column": 19, |
1202 | "line": 51 | 1202 | "line": 49 |
1203 | } | 1203 | } |
1204 | }, | 1204 | }, |
1205 | { | 1205 | { |
1206 | "defaultMessage": "!!!Could not load user information", | 1206 | "defaultMessage": "!!!Could not load user information", |
1207 | "end": { | 1207 | "end": { |
1208 | "column": 3, | 1208 | "column": 3, |
1209 | "line": 58 | 1209 | "line": 56 |
1210 | }, | 1210 | }, |
1211 | "file": "src/components/settings/account/AccountDashboard.js", | 1211 | "file": "src/components/settings/account/AccountDashboard.js", |
1212 | "id": "settings.account.userInfoRequestFailed", | 1212 | "id": "settings.account.userInfoRequestFailed", |
1213 | "start": { | 1213 | "start": { |
1214 | "column": 25, | 1214 | "column": 25, |
1215 | "line": 55 | 1215 | "line": 53 |
1216 | } | 1216 | } |
1217 | }, | 1217 | }, |
1218 | { | 1218 | { |
1219 | "defaultMessage": "!!!Try again", | 1219 | "defaultMessage": "!!!Try again", |
1220 | "end": { | 1220 | "end": { |
1221 | "column": 3, | 1221 | "column": 3, |
1222 | "line": 62 | 1222 | "line": 60 |
1223 | }, | 1223 | }, |
1224 | "file": "src/components/settings/account/AccountDashboard.js", | 1224 | "file": "src/components/settings/account/AccountDashboard.js", |
1225 | "id": "settings.account.tryReloadUserInfoRequest", | 1225 | "id": "settings.account.tryReloadUserInfoRequest", |
1226 | "start": { | 1226 | "start": { |
1227 | "column": 28, | 1227 | "column": 28, |
1228 | "line": 59 | 1228 | "line": 57 |
1229 | } | 1229 | } |
1230 | }, | 1230 | }, |
1231 | { | 1231 | { |
1232 | "defaultMessage": "!!!Delete account", | 1232 | "defaultMessage": "!!!Delete account", |
1233 | "end": { | 1233 | "end": { |
1234 | "column": 3, | 1234 | "column": 3, |
1235 | "line": 66 | 1235 | "line": 64 |
1236 | }, | 1236 | }, |
1237 | "file": "src/components/settings/account/AccountDashboard.js", | 1237 | "file": "src/components/settings/account/AccountDashboard.js", |
1238 | "id": "settings.account.deleteAccount", | 1238 | "id": "settings.account.deleteAccount", |
1239 | "start": { | 1239 | "start": { |
1240 | "column": 17, | 1240 | "column": 17, |
1241 | "line": 63 | 1241 | "line": 61 |
1242 | } | 1242 | } |
1243 | }, | 1243 | }, |
1244 | { | 1244 | { |
1245 | "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", | 1245 | "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", |
1246 | "end": { | 1246 | "end": { |
1247 | "column": 3, | 1247 | "column": 3, |
1248 | "line": 70 | 1248 | "line": 68 |
1249 | }, | 1249 | }, |
1250 | "file": "src/components/settings/account/AccountDashboard.js", | 1250 | "file": "src/components/settings/account/AccountDashboard.js", |
1251 | "id": "settings.account.deleteInfo", | 1251 | "id": "settings.account.deleteInfo", |
1252 | "start": { | 1252 | "start": { |
1253 | "column": 14, | 1253 | "column": 14, |
1254 | "line": 67 | 1254 | "line": 65 |
1255 | } | 1255 | } |
1256 | }, | 1256 | }, |
1257 | { | 1257 | { |
1258 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", | 1258 | "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", |
1259 | "end": { | 1259 | "end": { |
1260 | "column": 3, | 1260 | "column": 3, |
1261 | "line": 74 | 1261 | "line": 72 |
1262 | }, | 1262 | }, |
1263 | "file": "src/components/settings/account/AccountDashboard.js", | 1263 | "file": "src/components/settings/account/AccountDashboard.js", |
1264 | "id": "settings.account.deleteEmailSent", | 1264 | "id": "settings.account.deleteEmailSent", |
1265 | "start": { | 1265 | "start": { |
1266 | "column": 19, | 1266 | "column": 19, |
1267 | "line": 71 | 1267 | "line": 69 |
1268 | } | 1268 | } |
1269 | } | 1269 | } |
1270 | ], | 1270 | ], |
@@ -1312,42 +1312,55 @@ | |||
1312 | } | 1312 | } |
1313 | }, | 1313 | }, |
1314 | { | 1314 | { |
1315 | "defaultMessage": "!!!Settings", | 1315 | "defaultMessage": "!!!Manage Team", |
1316 | "end": { | 1316 | "end": { |
1317 | "column": 3, | 1317 | "column": 3, |
1318 | "line": 24 | 1318 | "line": 24 |
1319 | }, | 1319 | }, |
1320 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1320 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1321 | "id": "settings.navigation.team", | ||
1322 | "start": { | ||
1323 | "column": 8, | ||
1324 | "line": 21 | ||
1325 | } | ||
1326 | }, | ||
1327 | { | ||
1328 | "defaultMessage": "!!!Settings", | ||
1329 | "end": { | ||
1330 | "column": 3, | ||
1331 | "line": 28 | ||
1332 | }, | ||
1333 | "file": "src/components/settings/navigation/SettingsNavigation.js", | ||
1321 | "id": "settings.navigation.settings", | 1334 | "id": "settings.navigation.settings", |
1322 | "start": { | 1335 | "start": { |
1323 | "column": 12, | 1336 | "column": 12, |
1324 | "line": 21 | 1337 | "line": 25 |
1325 | } | 1338 | } |
1326 | }, | 1339 | }, |
1327 | { | 1340 | { |
1328 | "defaultMessage": "!!!Invite Friends", | 1341 | "defaultMessage": "!!!Invite Friends", |
1329 | "end": { | 1342 | "end": { |
1330 | "column": 3, | 1343 | "column": 3, |
1331 | "line": 28 | 1344 | "line": 32 |
1332 | }, | 1345 | }, |
1333 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1346 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1334 | "id": "settings.navigation.inviteFriends", | 1347 | "id": "settings.navigation.inviteFriends", |
1335 | "start": { | 1348 | "start": { |
1336 | "column": 17, | 1349 | "column": 17, |
1337 | "line": 25 | 1350 | "line": 29 |
1338 | } | 1351 | } |
1339 | }, | 1352 | }, |
1340 | { | 1353 | { |
1341 | "defaultMessage": "!!!Logout", | 1354 | "defaultMessage": "!!!Logout", |
1342 | "end": { | 1355 | "end": { |
1343 | "column": 3, | 1356 | "column": 3, |
1344 | "line": 32 | 1357 | "line": 36 |
1345 | }, | 1358 | }, |
1346 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 1359 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
1347 | "id": "settings.navigation.logout", | 1360 | "id": "settings.navigation.logout", |
1348 | "start": { | 1361 | "start": { |
1349 | "column": 10, | 1362 | "column": 10, |
1350 | "line": 29 | 1363 | "line": 33 |
1351 | } | 1364 | } |
1352 | } | 1365 | } |
1353 | ], | 1366 | ], |
@@ -2205,6 +2218,89 @@ | |||
2205 | { | 2218 | { |
2206 | "descriptors": [ | 2219 | "descriptors": [ |
2207 | { | 2220 | { |
2221 | "defaultMessage": "!!!Team", | ||
2222 | "end": { | ||
2223 | "column": 3, | ||
2224 | "line": 16 | ||
2225 | }, | ||
2226 | "file": "src/components/settings/team/TeamDashboard.js", | ||
2227 | "id": "settings.team.headline", | ||
2228 | "start": { | ||
2229 | "column": 12, | ||
2230 | "line": 13 | ||
2231 | } | ||
2232 | }, | ||
2233 | { | ||
2234 | "defaultMessage": "!!!Franz for Teams", | ||
2235 | "end": { | ||
2236 | "column": 3, | ||
2237 | "line": 20 | ||
2238 | }, | ||
2239 | "file": "src/components/settings/team/TeamDashboard.js", | ||
2240 | "id": "settings.team.contentHeadline", | ||
2241 | "start": { | ||
2242 | "column": 19, | ||
2243 | "line": 17 | ||
2244 | } | ||
2245 | }, | ||
2246 | { | ||
2247 | "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.", | ||
2248 | "end": { | ||
2249 | "column": 3, | ||
2250 | "line": 24 | ||
2251 | }, | ||
2252 | "file": "src/components/settings/team/TeamDashboard.js", | ||
2253 | "id": "settings.team.intro", | ||
2254 | "start": { | ||
2255 | "column": 9, | ||
2256 | "line": 21 | ||
2257 | } | ||
2258 | }, | ||
2259 | { | ||
2260 | "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!", | ||
2261 | "end": { | ||
2262 | "column": 3, | ||
2263 | "line": 28 | ||
2264 | }, | ||
2265 | "file": "src/components/settings/team/TeamDashboard.js", | ||
2266 | "id": "settings.team.copy", | ||
2267 | "start": { | ||
2268 | "column": 8, | ||
2269 | "line": 25 | ||
2270 | } | ||
2271 | }, | ||
2272 | { | ||
2273 | "defaultMessage": "!!!Manage your Team", | ||
2274 | "end": { | ||
2275 | "column": 3, | ||
2276 | "line": 32 | ||
2277 | }, | ||
2278 | "file": "src/components/settings/team/TeamDashboard.js", | ||
2279 | "id": "settings.team.manageAction", | ||
2280 | "start": { | ||
2281 | "column": 16, | ||
2282 | "line": 29 | ||
2283 | } | ||
2284 | }, | ||
2285 | { | ||
2286 | "defaultMessage": "!!!Upgrade your Account", | ||
2287 | "end": { | ||
2288 | "column": 3, | ||
2289 | "line": 36 | ||
2290 | }, | ||
2291 | "file": "src/components/settings/team/TeamDashboard.js", | ||
2292 | "id": "settings.team.upgradeAction", | ||
2293 | "start": { | ||
2294 | "column": 17, | ||
2295 | "line": 33 | ||
2296 | } | ||
2297 | } | ||
2298 | ], | ||
2299 | "path": "src/components/settings/team/TeamDashboard.json" | ||
2300 | }, | ||
2301 | { | ||
2302 | "descriptors": [ | ||
2303 | { | ||
2208 | "defaultMessage": "!!!Account", | 2304 | "defaultMessage": "!!!Account", |
2209 | "end": { | 2305 | "end": { |
2210 | "column": 3, | 2306 | "column": 3, |
@@ -3147,7 +3243,7 @@ | |||
3147 | } | 3243 | } |
3148 | }, | 3244 | }, |
3149 | { | 3245 | { |
3150 | "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @MeetFranz", | 3246 | "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", |
3151 | "end": { | 3247 | "end": { |
3152 | "column": 3, | 3248 | "column": 3, |
3153 | "line": 42 | 3249 | "line": 42 |
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 06cda4aca..8d46f7e29 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json | |||
@@ -168,6 +168,7 @@ | |||
168 | "settings.navigation.inviteFriends": "Invite Friends", | 168 | "settings.navigation.inviteFriends": "Invite Friends", |
169 | "settings.navigation.logout": "Logout", | 169 | "settings.navigation.logout": "Logout", |
170 | "settings.navigation.settings": "Settings", | 170 | "settings.navigation.settings": "Settings", |
171 | "settings.navigation.team": "Manage Team", | ||
171 | "settings.navigation.yourServices": "Your services", | 172 | "settings.navigation.yourServices": "Your services", |
172 | "settings.recipes.all": "All services", | 173 | "settings.recipes.all": "All services", |
173 | "settings.recipes.dev": "Development", | 174 | "settings.recipes.dev": "Development", |
@@ -226,6 +227,12 @@ | |||
226 | "settings.services.tooltip.isMuted": "All sounds are muted", | 227 | "settings.services.tooltip.isMuted": "All sounds are muted", |
227 | "settings.services.tooltip.notificationsDisabled": "Notifications are disabled", | 228 | "settings.services.tooltip.notificationsDisabled": "Notifications are disabled", |
228 | "settings.services.updatedInfo": "Your changes have been saved", | 229 | "settings.services.updatedInfo": "Your changes have been saved", |
230 | "settings.team.contentHeadline": "Franz for Teams", | ||
231 | "settings.team.copy": "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!", | ||
232 | "settings.team.headline": "Team", | ||
233 | "settings.team.intro": "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.", | ||
234 | "settings.team.manageAction": "Manage your Team", | ||
235 | "settings.team.upgradeAction": "Upgrade your Account", | ||
229 | "settings.user.form.accountType.company": "Company", | 236 | "settings.user.form.accountType.company": "Company", |
230 | "settings.user.form.accountType.individual": "Individual", | 237 | "settings.user.form.accountType.individual": "Individual", |
231 | "settings.user.form.accountType.label": "Account type", | 238 | "settings.user.form.accountType.label": "Account type", |
diff --git a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json index 785ce9f29..5b854641a 100644 --- a/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json +++ b/src/i18n/messages/src/components/settings/navigation/SettingsNavigation.json | |||
@@ -39,15 +39,28 @@ | |||
39 | } | 39 | } |
40 | }, | 40 | }, |
41 | { | 41 | { |
42 | "id": "settings.navigation.team", | ||
43 | "defaultMessage": "!!!Manage Team", | ||
44 | "file": "src/components/settings/navigation/SettingsNavigation.js", | ||
45 | "start": { | ||
46 | "line": 21, | ||
47 | "column": 8 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 24, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
42 | "id": "settings.navigation.settings", | 55 | "id": "settings.navigation.settings", |
43 | "defaultMessage": "!!!Settings", | 56 | "defaultMessage": "!!!Settings", |
44 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 57 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
45 | "start": { | 58 | "start": { |
46 | "line": 21, | 59 | "line": 25, |
47 | "column": 12 | 60 | "column": 12 |
48 | }, | 61 | }, |
49 | "end": { | 62 | "end": { |
50 | "line": 24, | 63 | "line": 28, |
51 | "column": 3 | 64 | "column": 3 |
52 | } | 65 | } |
53 | }, | 66 | }, |
@@ -56,11 +69,11 @@ | |||
56 | "defaultMessage": "!!!Invite Friends", | 69 | "defaultMessage": "!!!Invite Friends", |
57 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 70 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
58 | "start": { | 71 | "start": { |
59 | "line": 25, | 72 | "line": 29, |
60 | "column": 17 | 73 | "column": 17 |
61 | }, | 74 | }, |
62 | "end": { | 75 | "end": { |
63 | "line": 28, | 76 | "line": 32, |
64 | "column": 3 | 77 | "column": 3 |
65 | } | 78 | } |
66 | }, | 79 | }, |
@@ -69,11 +82,11 @@ | |||
69 | "defaultMessage": "!!!Logout", | 82 | "defaultMessage": "!!!Logout", |
70 | "file": "src/components/settings/navigation/SettingsNavigation.js", | 83 | "file": "src/components/settings/navigation/SettingsNavigation.js", |
71 | "start": { | 84 | "start": { |
72 | "line": 29, | 85 | "line": 33, |
73 | "column": 10 | 86 | "column": 10 |
74 | }, | 87 | }, |
75 | "end": { | 88 | "end": { |
76 | "line": 32, | 89 | "line": 36, |
77 | "column": 3 | 90 | "column": 3 |
78 | } | 91 | } |
79 | } | 92 | } |
diff --git a/src/i18n/messages/src/components/settings/team/TeamDashboard.json b/src/i18n/messages/src/components/settings/team/TeamDashboard.json new file mode 100644 index 000000000..91b6754ea --- /dev/null +++ b/src/i18n/messages/src/components/settings/team/TeamDashboard.json | |||
@@ -0,0 +1,80 @@ | |||
1 | [ | ||
2 | { | ||
3 | "id": "settings.team.headline", | ||
4 | "defaultMessage": "!!!Team", | ||
5 | "file": "src/components/settings/team/TeamDashboard.js", | ||
6 | "start": { | ||
7 | "line": 14, | ||
8 | "column": 12 | ||
9 | }, | ||
10 | "end": { | ||
11 | "line": 17, | ||
12 | "column": 3 | ||
13 | } | ||
14 | }, | ||
15 | { | ||
16 | "id": "settings.team.contentHeadline", | ||
17 | "defaultMessage": "!!!Franz for Teams", | ||
18 | "file": "src/components/settings/team/TeamDashboard.js", | ||
19 | "start": { | ||
20 | "line": 18, | ||
21 | "column": 19 | ||
22 | }, | ||
23 | "end": { | ||
24 | "line": 21, | ||
25 | "column": 3 | ||
26 | } | ||
27 | }, | ||
28 | { | ||
29 | "id": "settings.team.intro", | ||
30 | "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.", | ||
31 | "file": "src/components/settings/team/TeamDashboard.js", | ||
32 | "start": { | ||
33 | "line": 22, | ||
34 | "column": 9 | ||
35 | }, | ||
36 | "end": { | ||
37 | "line": 25, | ||
38 | "column": 3 | ||
39 | } | ||
40 | }, | ||
41 | { | ||
42 | "id": "settings.team.copy", | ||
43 | "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!", | ||
44 | "file": "src/components/settings/team/TeamDashboard.js", | ||
45 | "start": { | ||
46 | "line": 26, | ||
47 | "column": 8 | ||
48 | }, | ||
49 | "end": { | ||
50 | "line": 29, | ||
51 | "column": 3 | ||
52 | } | ||
53 | }, | ||
54 | { | ||
55 | "id": "settings.team.manageAction", | ||
56 | "defaultMessage": "!!!Manage your Team", | ||
57 | "file": "src/components/settings/team/TeamDashboard.js", | ||
58 | "start": { | ||
59 | "line": 30, | ||
60 | "column": 16 | ||
61 | }, | ||
62 | "end": { | ||
63 | "line": 33, | ||
64 | "column": 3 | ||
65 | } | ||
66 | }, | ||
67 | { | ||
68 | "id": "settings.team.upgradeAction", | ||
69 | "defaultMessage": "!!!Upgrade your Account", | ||
70 | "file": "src/components/settings/team/TeamDashboard.js", | ||
71 | "start": { | ||
72 | "line": 34, | ||
73 | "column": 17 | ||
74 | }, | ||
75 | "end": { | ||
76 | "line": 37, | ||
77 | "column": 3 | ||
78 | } | ||
79 | } | ||
80 | ] \ No newline at end of file | ||