aboutsummaryrefslogtreecommitdiffstats
path: root/src/components
diff options
context:
space:
mode:
authorLibravatar haraldox <hnaumann+github@gmail.com>2018-02-13 11:02:28 +0100
committerLibravatar haraldox <hnaumann+github@gmail.com>2018-02-13 11:02:28 +0100
commit4284b88f44caa9b7adb180a1e07bdd834f5b7ad6 (patch)
tree619e5a42fb9100c4b7982a6ecf55d28fe276e546 /src/components
parentMerge pull request #654 from meetfranz/feature/invite-button (diff)
downloadferdium-app-4284b88f44caa9b7adb180a1e07bdd834f5b7ad6.tar.gz
ferdium-app-4284b88f44caa9b7adb180a1e07bdd834f5b7ad6.tar.zst
ferdium-app-4284b88f44caa9b7adb180a1e07bdd834f5b7ad6.zip
feat(App) Feature Added enterprise UI
##Account Dashboard: - CHANGE account type to 'Enterprise Account' (green badge) - REMOVE button 'Edit Account' if SSO login is used - ADD company name and contact information - REMOVE premium account plans section - REMOVE account deletion ##Settings Navigation - REMOVE available services if user not allowed to manage services ##Edit Service - REMOVE delete button if user not allowed to manage services - CHANGE disable team / custom URL if user not allowed to manage services ##Edit User - REMOVE account type ##User.js - ADD mock enterprise properties ##Input.js - FIX disabled passthrough
Diffstat (limited to 'src/components')
-rw-r--r--src/components/settings/account/AccountDashboard.js86
-rw-r--r--src/components/settings/navigation/SettingsNavigation.js28
-rw-r--r--src/components/settings/services/EditServiceForm.js2
-rw-r--r--src/components/settings/user/EditUserForm.js8
-rw-r--r--src/components/ui/Input.js1
5 files changed, 90 insertions, 35 deletions
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 4992f0913..e6ccdaac7 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',
@@ -167,17 +171,21 @@ export default class AccountDashboard extends Component {
167 </h2> 171 </h2>
168 {user.organization && `${user.organization}, `} 172 {user.organization && `${user.organization}, `}
169 {user.email}<br /> 173 {user.email}<br />
170 {!user.isPremium && ( 174 {!user.isEnterprise && !user.isPremium && (
171 <span className="badge badge">{intl.formatMessage(messages.accountTypeBasic)}</span> 175 <span className="badge badge">{intl.formatMessage(messages.accountTypeBasic)}</span>
172 )} 176 )}
173 {user.isPremium && ( 177 {user.isPremium && (
174 <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> 178 <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span>
175 )} 179 )}
180 {user.isEnterprise && (
181 <span className="badge badge--success">{intl.formatMessage(messages.accountTypeEnterprise)}</span>
182 )}
176 </div> 183 </div>
177 <Link to="/settings/user/edit" className="button"> 184 {!user.isSSO && (
178 {intl.formatMessage(messages.accountEditButton)} 185 <Link to="/settings/user/edit" className="button">
179 </Link> 186 {intl.formatMessage(messages.accountEditButton)}
180 187 </Link>
188 )}
181 {user.emailValidated} 189 {user.emailValidated}
182 </div> 190 </div>
183 </div> 191 </div>
@@ -230,6 +238,33 @@ export default class AccountDashboard extends Component {
230 ) 238 )
231 )} 239 )}
232 240
241 {user.isEnterprise && (
242 <div className="account">
243 <div className="account__box">
244 <h2>{user.company.name}</h2>
245 <p>
246 Technical contact:&nbsp;
247 <Link
248 className="link"
249 target="_blank"
250 to={`mailto:${user.company.contact.technical}?subject=Franz`}
251 >
252 {user.company.contact.technical}
253 </Link>
254 <br />
255 General contact:&nbsp;
256 <Link
257 className="link"
258 target="_blank"
259 to={`mailto:${user.company.contact.default}?subject=Franz`}
260 >
261 {user.company.contact.default}
262 </Link>
263 </p>
264 </div>
265 </div>
266 )}
267
233 {user.isMiner && ( 268 {user.isMiner && (
234 <div className="account franz-form"> 269 <div className="account franz-form">
235 <div className="account__box account__box"> 270 <div className="account__box account__box">
@@ -244,7 +279,7 @@ export default class AccountDashboard extends Component {
244 </div> 279 </div>
245 )} 280 )}
246 281
247 {!user.isPremium && ( 282 {!user.isEnterprise && !user.isPremium && (
248 isLoadingPlans ? ( 283 isLoadingPlans ? (
249 <Loader /> 284 <Loader />
250 ) : ( 285 ) : (
@@ -259,28 +294,29 @@ export default class AccountDashboard extends Component {
259 ) 294 )
260 )} 295 )}
261 296
262 <div className="account franz-form"> 297 {!user.isEnterprise && (
263 <div className="account__box"> 298 <div className="account franz-form">
264 <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2> 299 <div className="account__box">
265 {!isDeleteAccountSuccessful && ( 300 <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2>
266 <div className="account__subscription"> 301 {!isDeleteAccountSuccessful && (
267 <p>{intl.formatMessage(messages.deleteInfo)}</p> 302 <div className="account__subscription">
268 <Button 303 <p>{intl.formatMessage(messages.deleteInfo)}</p>
269 label={intl.formatMessage(messages.deleteAccount)} 304 <Button
270 buttonType="danger" 305 label={intl.formatMessage(messages.deleteAccount)}
271 onClick={() => deleteAccount()} 306 buttonType="danger"
272 loaded={!isLoadingDeleteAccount} 307 onClick={() => deleteAccount()}
273 /> 308 loaded={!isLoadingDeleteAccount}
274 </div> 309 />
275 )} 310 </div>
276 {isDeleteAccountSuccessful && ( 311 )}
277 <p>{intl.formatMessage(messages.deleteEmailSent)}</p> 312 {isDeleteAccountSuccessful && (
278 )} 313 <p>{intl.formatMessage(messages.deleteEmailSent)}</p>
314 )}
315 </div>
279 </div> 316 </div>
280 </div> 317 )}
281 </div> 318 </div>
282 )} 319 )}
283
284 </div> 320 </div>
285 <ReactTooltip place="right" type="dark" effect="solid" /> 321 <ReactTooltip place="right" type="dark" effect="solid" />
286 </div> 322 </div>
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js
index 66539f324..620f09189 100644
--- a/src/components/settings/navigation/SettingsNavigation.js
+++ b/src/components/settings/navigation/SettingsNavigation.js
@@ -1,6 +1,7 @@
1import React, { Component } from 'react'; 1import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
3import { defineMessages, intlShape } from 'react-intl'; 3import { defineMessages, intlShape } from 'react-intl';
4import { inject, observer } from 'mobx-react';
4 5
5import Link from '../../ui/Link'; 6import Link from '../../ui/Link';
6 7
@@ -31,6 +32,7 @@ const messages = defineMessages({
31 }, 32 },
32}); 33});
33 34
35@inject('stores') @observer
34export default class SettingsNavigation extends Component { 36export 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 { data: user } = this.props.stores.user;
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 {user.clientSettings && user.clientSettings.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
101SettingsNavigation.wrappedComponent.propTypes = {
102 stores: PropTypes.shape({
103 user: PropTypes.shape({
104 data: 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 f6f2df2f3..e23dfa9f6 100644
--- a/src/components/settings/services/EditServiceForm.js
+++ b/src/components/settings/services/EditServiceForm.js
@@ -324,7 +324,7 @@ export default class EditServiceForm extends Component {
324 </div> 324 </div>
325 <div className="settings__controls"> 325 <div className="settings__controls">
326 {/* Delete Button */} 326 {/* Delete Button */}
327 {action === 'edit' && deleteButton} 327 {action === 'edit' && user.clientSettings.userCanManageServices && deleteButton}
328 328
329 {/* Save Button */} 329 {/* Save Button */}
330 {isSaving || isValidatingCustomUrl ? ( 330 {isSaving || isValidatingCustomUrl ? (
diff --git a/src/components/settings/user/EditUserForm.js b/src/components/settings/user/EditUserForm.js
index f36887fc2..1ac8be80f 100644
--- a/src/components/settings/user/EditUserForm.js
+++ b/src/components/settings/user/EditUserForm.js
@@ -46,6 +46,7 @@ export default class EditServiceForm extends Component {
46 form: PropTypes.instanceOf(Form).isRequired, 46 form: PropTypes.instanceOf(Form).isRequired,
47 onSubmit: PropTypes.func.isRequired, 47 onSubmit: PropTypes.func.isRequired,
48 isSaving: PropTypes.bool.isRequired, 48 isSaving: PropTypes.bool.isRequired,
49 isEnterprise: PropTypes.bool.isRequired,
49 }; 50 };
50 51
51 static defaultProps = { 52 static defaultProps = {
@@ -72,6 +73,7 @@ export default class EditServiceForm extends Component {
72 // user, 73 // user,
73 status, 74 status,
74 form, 75 form,
76 isEnterprise,
75 isSaving, 77 isSaving,
76 } = this.props; 78 } = this.props;
77 const { intl } = this.context; 79 const { intl } = this.context;
@@ -105,8 +107,10 @@ export default class EditServiceForm extends Component {
105 <Input field={form.$('lastname')} /> 107 <Input field={form.$('lastname')} />
106 </div> 108 </div>
107 <Input field={form.$('email')} /> 109 <Input field={form.$('email')} />
108 <Radio field={form.$('accountType')} /> 110 {!isEnterprise && (
109 {form.$('accountType').value === 'company' && ( 111 <Radio field={form.$('accountType')} />
112 )}
113 {!isEnterprise && form.$('accountType').value === 'company' && (
110 <Input field={form.$('organization')} /> 114 <Input field={form.$('organization')} />
111 )} 115 )}
112 <h2>{intl.formatMessage(messages.headlinePassword)}</h2> 116 <h2>{intl.formatMessage(messages.headlinePassword)}</h2>
diff --git a/src/components/ui/Input.js b/src/components/ui/Input.js
index 0bb9f23bf..69c95702b 100644
--- a/src/components/ui/Input.js
+++ b/src/components/ui/Input.js
@@ -97,6 +97,7 @@ export default class Input extends Component {
97 onBlur={field.onBlur} 97 onBlur={field.onBlur}
98 onFocus={field.onFocus} 98 onFocus={field.onFocus}
99 ref={(element) => { this.inputElement = element; }} 99 ref={(element) => { this.inputElement = element; }}
100 disabled={field.disabled}
100 /> 101 />
101 {suffix && ( 102 {suffix && (
102 <span className="franz-form__input-suffix">{suffix}</span> 103 <span className="franz-form__input-suffix">{suffix}</span>