aboutsummaryrefslogtreecommitdiffstats
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/settings/account/AccountDashboard.js8
-rw-r--r--src/components/settings/navigation/SettingsNavigation.js25
-rw-r--r--src/components/settings/services/EditServiceForm.js45
-rw-r--r--src/components/settings/settings/EditSettingsForm.js20
-rw-r--r--src/components/subscription/SubscriptionForm.js3
-rw-r--r--src/components/ui/PremiumFeatureContainer/index.js18
6 files changed, 75 insertions, 44 deletions
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index ede519fd6..06c7074dd 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -180,11 +180,9 @@ export default @observer class AccountDashboard extends Component {
180 <span className="badge badge--success">{intl.formatMessage(messages.accountTypeEnterprise)}</span> 180 <span className="badge badge--success">{intl.formatMessage(messages.accountTypeEnterprise)}</span>
181 )} 181 )}
182 </div> 182 </div>
183 {!user.isSSO && ( 183 <Link to="/settings/user/edit" className="button">
184 <Link to="/settings/user/edit" className="button"> 184 {intl.formatMessage(messages.accountEditButton)}
185 {intl.formatMessage(messages.accountEditButton)} 185 </Link>
186 </Link>
187 )}
188 {user.emailValidated} 186 {user.emailValidated}
189 </div> 187 </div>
190 </div> 188 </div>
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js
index d8b410aaf..b86d94ac7 100644
--- a/src/components/settings/navigation/SettingsNavigation.js
+++ b/src/components/settings/navigation/SettingsNavigation.js
@@ -43,20 +43,17 @@ export default @inject('stores') @observer class SettingsNavigation extends Comp
43 43
44 render() { 44 render() {
45 const { serviceCount } = this.props; 45 const { serviceCount } = this.props;
46 const { features } = this.props.stores.features;
47 const { intl } = this.context; 46 const { intl } = this.context;
48 47
49 return ( 48 return (
50 <div className="settings-navigation"> 49 <div className="settings-navigation">
51 {features.userCanManageServices && ( 50 <Link
52 <Link 51 to="/settings/recipes"
53 to="/settings/recipes" 52 className="settings-navigation__link"
54 className="settings-navigation__link" 53 activeClassName="is-active"
55 activeClassName="is-active" 54 >
56 > 55 {intl.formatMessage(messages.availableServices)}
57 {intl.formatMessage(messages.availableServices)} 56 </Link>
58 </Link>
59 )}
60 <Link 57 <Link
61 to="/settings/services" 58 to="/settings/services"
62 className="settings-navigation__link" 59 className="settings-navigation__link"
@@ -97,11 +94,3 @@ export default @inject('stores') @observer class SettingsNavigation extends Comp
97 } 94 }
98} 95}
99 96
100SettingsNavigation.wrappedComponent.propTypes = {
101 stores: PropTypes.shape({
102 features: PropTypes.shape({
103 features: PropTypes.object.isRequired,
104 }).isRequired,
105 }).isRequired,
106};
107
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js
index 777a95fcf..47772efae 100644
--- a/src/components/settings/services/EditServiceForm.js
+++ b/src/components/settings/services/EditServiceForm.js
@@ -15,6 +15,8 @@ import Toggle from '../../ui/Toggle';
15import Button from '../../ui/Button'; 15import Button from '../../ui/Button';
16import ImageUpload from '../../ui/ImageUpload'; 16import ImageUpload from '../../ui/ImageUpload';
17 17
18import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer';
19
18const messages = defineMessages({ 20const messages = defineMessages({
19 saveService: { 21 saveService: {
20 id: 'settings.service.form.saveButton', 22 id: 'settings.service.form.saveButton',
@@ -92,6 +94,14 @@ const messages = defineMessages({
92 id: 'settings.service.form.iconUpload', 94 id: 'settings.service.form.iconUpload',
93 defaultMessage: '!!!Drop your image, or click here', 95 defaultMessage: '!!!Drop your image, or click here',
94 }, 96 },
97 headlineProxy: {
98 id: 'settings.service.form.proxy.headline',
99 defaultMessage: '!!!Proxy Settings',
100 },
101 proxyInfo: {
102 id: 'settings.service.form.proxy.info',
103 defaultMessage: '!!!Proxy settings will not be synchronized with the Franz servers.',
104 },
95}); 105});
96 106
97export default @observer class EditServiceForm extends Component { 107export default @observer class EditServiceForm extends Component {
@@ -106,13 +116,14 @@ export default @observer class EditServiceForm extends Component {
106 return null; 116 return null;
107 }, 117 },
108 user: PropTypes.instanceOf(User).isRequired, 118 user: PropTypes.instanceOf(User).isRequired,
109 userCanManageServices: PropTypes.bool.isRequired,
110 action: PropTypes.string.isRequired, 119 action: PropTypes.string.isRequired,
111 form: PropTypes.instanceOf(Form).isRequired, 120 form: PropTypes.instanceOf(Form).isRequired,
112 onSubmit: PropTypes.func.isRequired, 121 onSubmit: PropTypes.func.isRequired,
113 onDelete: PropTypes.func.isRequired, 122 onDelete: PropTypes.func.isRequired,
114 isSaving: PropTypes.bool.isRequired, 123 isSaving: PropTypes.bool.isRequired,
115 isDeleting: PropTypes.bool.isRequired, 124 isDeleting: PropTypes.bool.isRequired,
125 isProxyFeatureEnabled: PropTypes.bool.isRequired,
126 isProxyFeaturePremiumFeature: PropTypes.bool.isRequired,
116 }; 127 };
117 128
118 static defaultProps = { 129 static defaultProps = {
@@ -169,11 +180,12 @@ export default @observer class EditServiceForm extends Component {
169 service, 180 service,
170 action, 181 action,
171 user, 182 user,
172 userCanManageServices,
173 form, 183 form,
174 isSaving, 184 isSaving,
175 isDeleting, 185 isDeleting,
176 onDelete, 186 onDelete,
187 isProxyFeatureEnabled,
188 isProxyFeaturePremiumFeature,
177 } = this.props; 189 } = this.props;
178 const { intl } = this.context; 190 const { intl } = this.context;
179 191
@@ -318,6 +330,33 @@ export default @observer class EditServiceForm extends Component {
318 /> 330 />
319 </div> 331 </div>
320 </div> 332 </div>
333
334 {isProxyFeatureEnabled && (
335 <PremiumFeatureContainer condition={isProxyFeaturePremiumFeature}>
336 <div className="settings__settings-group">
337 <h3>
338 {intl.formatMessage(messages.headlineProxy)}
339 <span className="badge badge--success">beta</span>
340 </h3>
341 <Toggle field={form.$('proxy.isEnabled')} />
342 {form.$('proxy.isEnabled').value && (
343 <div>
344 <Input field={form.$('proxy.host')} />
345 <Input field={form.$('proxy.user')} />
346 <Input
347 field={form.$('proxy.password')}
348 showPasswordToggle
349 />
350 <p>
351 <span className="mdi mdi-information" />
352 {intl.formatMessage(messages.proxyInfo)}
353 </p>
354 </div>
355 )}
356 </div>
357 </PremiumFeatureContainer>
358 )}
359
321 {recipe.message && ( 360 {recipe.message && (
322 <p className="settings__message"> 361 <p className="settings__message">
323 <span className="mdi mdi-information" /> 362 <span className="mdi mdi-information" />
@@ -328,7 +367,7 @@ export default @observer class EditServiceForm extends Component {
328 </div> 367 </div>
329 <div className="settings__controls"> 368 <div className="settings__controls">
330 {/* Delete Button */} 369 {/* Delete Button */}
331 {action === 'edit' && userCanManageServices && deleteButton} 370 {action === 'edit' && deleteButton}
332 371
333 {/* Save Button */} 372 {/* Save Button */}
334 {isSaving || isValidatingCustomUrl ? ( 373 {isSaving || isValidatingCustomUrl ? (
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index b87c11fc4..280449ead 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -96,7 +96,6 @@ export default @observer class EditSettingsForm extends Component {
96 isClearingAllCache: PropTypes.bool.isRequired, 96 isClearingAllCache: PropTypes.bool.isRequired,
97 onClearAllCache: PropTypes.func.isRequired, 97 onClearAllCache: PropTypes.func.isRequired,
98 cacheSize: PropTypes.string.isRequired, 98 cacheSize: PropTypes.string.isRequired,
99 isPremiumUser: PropTypes.bool.isRequired,
100 isSpellcheckerPremiumFeature: PropTypes.bool.isRequired, 99 isSpellcheckerPremiumFeature: PropTypes.bool.isRequired,
101 }; 100 };
102 101
@@ -127,7 +126,6 @@ export default @observer class EditSettingsForm extends Component {
127 isClearingAllCache, 126 isClearingAllCache,
128 onClearAllCache, 127 onClearAllCache,
129 cacheSize, 128 cacheSize,
130 isPremiumUser,
131 isSpellcheckerPremiumFeature, 129 isSpellcheckerPremiumFeature,
132 } = this.props; 130 } = this.props;
133 const { intl } = this.context; 131 const { intl } = this.context;
@@ -180,16 +178,14 @@ export default @observer class EditSettingsForm extends Component {
180 178
181 {/* Advanced */} 179 {/* Advanced */}
182 <h2 id="advanced">{intl.formatMessage(messages.headlineAdvanced)}</h2> 180 <h2 id="advanced">{intl.formatMessage(messages.headlineAdvanced)}</h2>
183 {!isPremiumUser && isSpellcheckerPremiumFeature ? ( 181 <PremiumFeatureContainer
184 <PremiumFeatureContainer> 182 condition={isSpellcheckerPremiumFeature}
185 <Toggle 183 >
186 field={form.$('enableSpellchecking')} 184 <Toggle
187 disabled 185 field={form.$('enableSpellchecking')}
188 /> 186 disabled
189 </PremiumFeatureContainer> 187 />
190 ) : ( 188 </PremiumFeatureContainer>
191 <Toggle field={form.$('enableSpellchecking')} />
192 )}
193 <Toggle field={form.$('enableGPUAcceleration')} /> 189 <Toggle field={form.$('enableGPUAcceleration')} />
194 <p className="settings__help">{intl.formatMessage(messages.enableGPUAccelerationInfo)}</p> 190 <p className="settings__help">{intl.formatMessage(messages.enableGPUAccelerationInfo)}</p>
195 {/* <Select field={form.$('spellcheckingLanguage')} /> */} 191 {/* <Select field={form.$('spellcheckingLanguage')} /> */}
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js
index 8b8fd4f18..12965e307 100644
--- a/src/components/subscription/SubscriptionForm.js
+++ b/src/components/subscription/SubscriptionForm.js
@@ -40,9 +40,6 @@ const messages = defineMessages({
40 id: 'subscription.features.onpremise.mattermost', 40 id: 'subscription.features.onpremise.mattermost',
41 defaultMessage: '!!!Add on-premise/hosted services like Mattermost', 41 defaultMessage: '!!!Add on-premise/hosted services like Mattermost',
42 }, 42 },
43 encryptedSync: {
44 id: 'subscription.features.encryptedSync',
45 defaultMessage: '!!!Encrypted session synchronization',
46 noInterruptions: { 43 noInterruptions: {
47 id: 'subscription.features.noInterruptions', 44 id: 'subscription.features.noInterruptions',
48 defaultMessage: '!!!No app delays & nagging to upgrade license', 45 defaultMessage: '!!!No app delays & nagging to upgrade license',
diff --git a/src/components/ui/PremiumFeatureContainer/index.js b/src/components/ui/PremiumFeatureContainer/index.js
index 113fe2221..73984be94 100644
--- a/src/components/ui/PremiumFeatureContainer/index.js
+++ b/src/components/ui/PremiumFeatureContainer/index.js
@@ -6,6 +6,8 @@ import injectSheet from 'react-jss';
6 6
7import { oneOrManyChildElements } from '../../../prop-types'; 7import { oneOrManyChildElements } from '../../../prop-types';
8 8
9import UserStore from '../../../stores/UserStore';
10
9import styles from './styles'; 11import styles from './styles';
10 12
11const messages = defineMessages({ 13const messages = defineMessages({
@@ -15,9 +17,14 @@ const messages = defineMessages({
15 }, 17 },
16}); 18});
17 19
18export default @inject('actions') @injectSheet(styles) @observer class PremiumFeatureContainer extends Component { 20export default @inject('stores', 'actions') @injectSheet(styles) @observer class PremiumFeatureContainer extends Component {
19 static propTypes = { 21 static propTypes = {
20 classes: PropTypes.object.isRequired, 22 classes: PropTypes.object.isRequired,
23 condition: PropTypes.bool,
24 };
25
26 static defaultProps = {
27 condition: true,
21 }; 28 };
22 29
23 static contextTypes = { 30 static contextTypes = {
@@ -29,11 +36,13 @@ export default @inject('actions') @injectSheet(styles) @observer class PremiumFe
29 classes, 36 classes,
30 children, 37 children,
31 actions, 38 actions,
39 condition,
40 stores,
32 } = this.props; 41 } = this.props;
33 42
34 const { intl } = this.context; 43 const { intl } = this.context;
35 44
36 return ( 45 return !stores.user.data.isPremium && !!condition ? (
37 <div className={classes.container}> 46 <div className={classes.container}>
38 <div className={classes.titleContainer}> 47 <div className={classes.titleContainer}>
39 <p className={classes.title}>Premium Feature</p> 48 <p className={classes.title}>Premium Feature</p>
@@ -49,12 +58,15 @@ export default @inject('actions') @injectSheet(styles) @observer class PremiumFe
49 {children} 58 {children}
50 </div> 59 </div>
51 </div> 60 </div>
52 ); 61 ) : children;
53 } 62 }
54} 63}
55 64
56PremiumFeatureContainer.wrappedComponent.propTypes = { 65PremiumFeatureContainer.wrappedComponent.propTypes = {
57 children: oneOrManyChildElements.isRequired, 66 children: oneOrManyChildElements.isRequired,
67 stores: PropTypes.shape({
68 user: PropTypes.instanceOf(UserStore).isRequired,
69 }).isRequired,
58 actions: PropTypes.shape({ 70 actions: PropTypes.shape({
59 ui: PropTypes.shape({ 71 ui: PropTypes.shape({
60 openSettings: PropTypes.func.isRequired, 72 openSettings: PropTypes.func.isRequired,