diff options
Diffstat (limited to 'src/components/settings')
4 files changed, 91 insertions, 35 deletions
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js index 2fcfdfc9a..ede519fd6 100644 --- a/src/components/settings/account/AccountDashboard.js +++ b/src/components/settings/account/AccountDashboard.js | |||
@@ -44,6 +44,10 @@ const messages = defineMessages({ | |||
44 | id: 'settings.account.accountType.premium', | 44 | id: 'settings.account.accountType.premium', |
45 | defaultMessage: '!!!Premium Supporter Account', | 45 | defaultMessage: '!!!Premium Supporter Account', |
46 | }, | 46 | }, |
47 | accountTypeEnterprise: { | ||
48 | id: 'settings.account.accountType.enterprise', | ||
49 | defaultMessage: '!!!Enterprise Account', | ||
50 | }, | ||
47 | accountEditButton: { | 51 | accountEditButton: { |
48 | id: 'settings.account.account.editButton', | 52 | id: 'settings.account.account.editButton', |
49 | defaultMessage: '!!!Edit Account', | 53 | defaultMessage: '!!!Edit Account', |
@@ -166,17 +170,21 @@ export default @observer class AccountDashboard extends Component { | |||
166 | </h2> | 170 | </h2> |
167 | {user.organization && `${user.organization}, `} | 171 | {user.organization && `${user.organization}, `} |
168 | {user.email}<br /> | 172 | {user.email}<br /> |
169 | {!user.isPremium && ( | 173 | {!user.isEnterprise && !user.isPremium && ( |
170 | <span className="badge badge">{intl.formatMessage(messages.accountTypeBasic)}</span> | 174 | <span className="badge badge">{intl.formatMessage(messages.accountTypeBasic)}</span> |
171 | )} | 175 | )} |
172 | {user.isPremium && ( | 176 | {user.isPremium && ( |
173 | <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> | 177 | <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> |
174 | )} | 178 | )} |
179 | {user.isEnterprise && ( | ||
180 | <span className="badge badge--success">{intl.formatMessage(messages.accountTypeEnterprise)}</span> | ||
181 | )} | ||
175 | </div> | 182 | </div> |
176 | <Link to="/settings/user/edit" className="button"> | 183 | {!user.isSSO && ( |
177 | {intl.formatMessage(messages.accountEditButton)} | 184 | <Link to="/settings/user/edit" className="button"> |
178 | </Link> | 185 | {intl.formatMessage(messages.accountEditButton)} |
179 | 186 | </Link> | |
187 | )} | ||
180 | {user.emailValidated} | 188 | {user.emailValidated} |
181 | </div> | 189 | </div> |
182 | </div> | 190 | </div> |
@@ -229,6 +237,33 @@ export default @observer class AccountDashboard extends Component { | |||
229 | ) | 237 | ) |
230 | )} | 238 | )} |
231 | 239 | ||
240 | {user.isEnterprise && ( | ||
241 | <div className="account"> | ||
242 | <div className="account__box"> | ||
243 | <h2>{user.company.name}</h2> | ||
244 | <p> | ||
245 | Technical contact: | ||
246 | <Link | ||
247 | className="link" | ||
248 | target="_blank" | ||
249 | to={`mailto:${user.company.contact.technical}?subject=Franz`} | ||
250 | > | ||
251 | {user.company.contact.technical} | ||
252 | </Link> | ||
253 | <br /> | ||
254 | General contact: | ||
255 | <Link | ||
256 | className="link" | ||
257 | target="_blank" | ||
258 | to={`mailto:${user.company.contact.default}?subject=Franz`} | ||
259 | > | ||
260 | {user.company.contact.default} | ||
261 | </Link> | ||
262 | </p> | ||
263 | </div> | ||
264 | </div> | ||
265 | )} | ||
266 | |||
232 | {user.isMiner && ( | 267 | {user.isMiner && ( |
233 | <div className="account franz-form"> | 268 | <div className="account franz-form"> |
234 | <div className="account__box account__box"> | 269 | <div className="account__box account__box"> |
@@ -243,7 +278,7 @@ export default @observer class AccountDashboard extends Component { | |||
243 | </div> | 278 | </div> |
244 | )} | 279 | )} |
245 | 280 | ||
246 | {!user.isPremium && ( | 281 | {!user.isEnterprise && !user.isPremium && ( |
247 | isLoadingPlans ? ( | 282 | isLoadingPlans ? ( |
248 | <Loader /> | 283 | <Loader /> |
249 | ) : ( | 284 | ) : ( |
@@ -258,28 +293,29 @@ export default @observer class AccountDashboard extends Component { | |||
258 | ) | 293 | ) |
259 | )} | 294 | )} |
260 | 295 | ||
261 | <div className="account franz-form"> | 296 | {!user.isEnterprise && ( |
262 | <div className="account__box"> | 297 | <div className="account franz-form"> |
263 | <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2> | 298 | <div className="account__box"> |
264 | {!isDeleteAccountSuccessful && ( | 299 | <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2> |
265 | <div className="account__subscription"> | 300 | {!isDeleteAccountSuccessful && ( |
266 | <p>{intl.formatMessage(messages.deleteInfo)}</p> | 301 | <div className="account__subscription"> |
267 | <Button | 302 | <p>{intl.formatMessage(messages.deleteInfo)}</p> |
268 | label={intl.formatMessage(messages.deleteAccount)} | 303 | <Button |
269 | buttonType="danger" | 304 | label={intl.formatMessage(messages.deleteAccount)} |
270 | onClick={() => deleteAccount()} | 305 | buttonType="danger" |
271 | loaded={!isLoadingDeleteAccount} | 306 | onClick={() => deleteAccount()} |
272 | /> | 307 | loaded={!isLoadingDeleteAccount} |
273 | </div> | 308 | /> |
274 | )} | 309 | </div> |
275 | {isDeleteAccountSuccessful && ( | 310 | )} |
276 | <p>{intl.formatMessage(messages.deleteEmailSent)}</p> | 311 | {isDeleteAccountSuccessful && ( |
277 | )} | 312 | <p>{intl.formatMessage(messages.deleteEmailSent)}</p> |
313 | )} | ||
314 | </div> | ||
278 | </div> | 315 | </div> |
279 | </div> | 316 | )} |
280 | </div> | 317 | </div> |
281 | )} | 318 | )} |
282 | |||
283 | </div> | 319 | </div> |
284 | <ReactTooltip place="right" type="dark" effect="solid" /> | 320 | <ReactTooltip place="right" type="dark" effect="solid" /> |
285 | </div> | 321 | </div> |
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js index 66539f324..46b2f82fc 100644 --- a/src/components/settings/navigation/SettingsNavigation.js +++ b/src/components/settings/navigation/SettingsNavigation.js | |||
@@ -1,6 +1,7 @@ | |||
1 | import React, { Component } from 'react'; | 1 | import React, { Component } from 'react'; |
2 | import PropTypes from 'prop-types'; | 2 | import PropTypes from 'prop-types'; |
3 | import { defineMessages, intlShape } from 'react-intl'; | 3 | import { defineMessages, intlShape } from 'react-intl'; |
4 | import { inject, observer } from 'mobx-react'; | ||
4 | 5 | ||
5 | import Link from '../../ui/Link'; | 6 | import Link from '../../ui/Link'; |
6 | 7 | ||
@@ -31,6 +32,7 @@ const messages = defineMessages({ | |||
31 | }, | 32 | }, |
32 | }); | 33 | }); |
33 | 34 | ||
35 | @inject('stores') @observer | ||
34 | export default class SettingsNavigation extends Component { | 36 | export default class SettingsNavigation extends Component { |
35 | static propTypes = { | 37 | static propTypes = { |
36 | serviceCount: PropTypes.number.isRequired, | 38 | serviceCount: PropTypes.number.isRequired, |
@@ -42,17 +44,20 @@ export default class SettingsNavigation extends Component { | |||
42 | 44 | ||
43 | render() { | 45 | render() { |
44 | const { serviceCount } = this.props; | 46 | const { serviceCount } = this.props; |
47 | const { features } = this.props.stores.features; | ||
45 | const { intl } = this.context; | 48 | const { intl } = this.context; |
46 | 49 | ||
47 | return ( | 50 | return ( |
48 | <div className="settings-navigation"> | 51 | <div className="settings-navigation"> |
49 | <Link | 52 | {features.userCanManageServices && ( |
50 | to="/settings/recipes" | 53 | <Link |
51 | className="settings-navigation__link" | 54 | to="/settings/recipes" |
52 | activeClassName="is-active" | 55 | className="settings-navigation__link" |
53 | > | 56 | activeClassName="is-active" |
54 | {intl.formatMessage(messages.availableServices)} | 57 | > |
55 | </Link> | 58 | {intl.formatMessage(messages.availableServices)} |
59 | </Link> | ||
60 | )} | ||
56 | <Link | 61 | <Link |
57 | to="/settings/services" | 62 | to="/settings/services" |
58 | className="settings-navigation__link" | 63 | className="settings-navigation__link" |
@@ -92,3 +97,12 @@ export default class SettingsNavigation extends Component { | |||
92 | ); | 97 | ); |
93 | } | 98 | } |
94 | } | 99 | } |
100 | |||
101 | SettingsNavigation.wrappedComponent.propTypes = { | ||
102 | stores: PropTypes.shape({ | ||
103 | features: PropTypes.shape({ | ||
104 | features: PropTypes.object.isRequired, | ||
105 | }).isRequired, | ||
106 | }).isRequired, | ||
107 | }; | ||
108 | |||
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js index f9afe4c8d..777a95fcf 100644 --- a/src/components/settings/services/EditServiceForm.js +++ b/src/components/settings/services/EditServiceForm.js | |||
@@ -106,6 +106,7 @@ export default @observer class EditServiceForm extends Component { | |||
106 | return null; | 106 | return null; |
107 | }, | 107 | }, |
108 | user: PropTypes.instanceOf(User).isRequired, | 108 | user: PropTypes.instanceOf(User).isRequired, |
109 | userCanManageServices: PropTypes.bool.isRequired, | ||
109 | action: PropTypes.string.isRequired, | 110 | action: PropTypes.string.isRequired, |
110 | form: PropTypes.instanceOf(Form).isRequired, | 111 | form: PropTypes.instanceOf(Form).isRequired, |
111 | onSubmit: PropTypes.func.isRequired, | 112 | onSubmit: PropTypes.func.isRequired, |
@@ -168,6 +169,7 @@ export default @observer class EditServiceForm extends Component { | |||
168 | service, | 169 | service, |
169 | action, | 170 | action, |
170 | user, | 171 | user, |
172 | userCanManageServices, | ||
171 | form, | 173 | form, |
172 | isSaving, | 174 | isSaving, |
173 | isDeleting, | 175 | isDeleting, |
@@ -326,7 +328,7 @@ export default @observer class EditServiceForm extends Component { | |||
326 | </div> | 328 | </div> |
327 | <div className="settings__controls"> | 329 | <div className="settings__controls"> |
328 | {/* Delete Button */} | 330 | {/* Delete Button */} |
329 | {action === 'edit' && deleteButton} | 331 | {action === 'edit' && userCanManageServices && deleteButton} |
330 | 332 | ||
331 | {/* Save Button */} | 333 | {/* Save Button */} |
332 | {isSaving || isValidatingCustomUrl ? ( | 334 | {isSaving || isValidatingCustomUrl ? ( |
diff --git a/src/components/settings/user/EditUserForm.js b/src/components/settings/user/EditUserForm.js index 6c0305089..b825f844a 100644 --- a/src/components/settings/user/EditUserForm.js +++ b/src/components/settings/user/EditUserForm.js | |||
@@ -45,6 +45,7 @@ export default @observer class EditServiceForm extends Component { | |||
45 | form: PropTypes.instanceOf(Form).isRequired, | 45 | form: PropTypes.instanceOf(Form).isRequired, |
46 | onSubmit: PropTypes.func.isRequired, | 46 | onSubmit: PropTypes.func.isRequired, |
47 | isSaving: PropTypes.bool.isRequired, | 47 | isSaving: PropTypes.bool.isRequired, |
48 | isEnterprise: PropTypes.bool.isRequired, | ||
48 | }; | 49 | }; |
49 | 50 | ||
50 | static defaultProps = { | 51 | static defaultProps = { |
@@ -71,6 +72,7 @@ export default @observer class EditServiceForm extends Component { | |||
71 | // user, | 72 | // user, |
72 | status, | 73 | status, |
73 | form, | 74 | form, |
75 | isEnterprise, | ||
74 | isSaving, | 76 | isSaving, |
75 | } = this.props; | 77 | } = this.props; |
76 | const { intl } = this.context; | 78 | const { intl } = this.context; |
@@ -104,8 +106,10 @@ export default @observer class EditServiceForm extends Component { | |||
104 | <Input field={form.$('lastname')} /> | 106 | <Input field={form.$('lastname')} /> |
105 | </div> | 107 | </div> |
106 | <Input field={form.$('email')} /> | 108 | <Input field={form.$('email')} /> |
107 | <Radio field={form.$('accountType')} /> | 109 | {!isEnterprise && ( |
108 | {form.$('accountType').value === 'company' && ( | 110 | <Radio field={form.$('accountType')} /> |
111 | )} | ||
112 | {!isEnterprise && form.$('accountType').value === 'company' && ( | ||
109 | <Input field={form.$('organization')} /> | 113 | <Input field={form.$('organization')} /> |
110 | )} | 114 | )} |
111 | <h2>{intl.formatMessage(messages.headlinePassword)}</h2> | 115 | <h2>{intl.formatMessage(messages.headlinePassword)}</h2> |