diff options
author | Stefan Malzner <stefan@adlk.io> | 2018-12-02 15:08:07 +0100 |
---|---|---|
committer | Stefan Malzner <stefan@adlk.io> | 2018-12-02 15:08:07 +0100 |
commit | a5aa5e1380a0847eb33be3315d164fb9e0e23255 (patch) | |
tree | a1ea4b0f635cabb54d9cf028809d2f079727b9a1 /src/containers/settings | |
parent | Add instruction to install Franz with homebrew (#1134) (diff) | |
parent | Merge branch 'develop' into release/5.0.0-beta.19 (diff) | |
download | ferdium-app-a5aa5e1380a0847eb33be3315d164fb9e0e23255.tar.gz ferdium-app-a5aa5e1380a0847eb33be3315d164fb9e0e23255.tar.zst ferdium-app-a5aa5e1380a0847eb33be3315d164fb9e0e23255.zip |
Merge branch 'release/5.0.0-beta.19'
Diffstat (limited to 'src/containers/settings')
-rw-r--r-- | src/containers/settings/AccountScreen.js | 3 | ||||
-rw-r--r-- | src/containers/settings/EditServiceScreen.js | 77 | ||||
-rw-r--r-- | src/containers/settings/EditSettingsScreen.js | 40 | ||||
-rw-r--r-- | src/containers/settings/EditUserScreen.js | 4 | ||||
-rw-r--r-- | src/containers/settings/InviteScreen.js | 3 | ||||
-rw-r--r-- | src/containers/settings/RecipesScreen.js | 3 | ||||
-rw-r--r-- | src/containers/settings/ServicesScreen.js | 3 | ||||
-rw-r--r-- | src/containers/settings/SettingsWindow.js | 3 |
8 files changed, 113 insertions, 23 deletions
diff --git a/src/containers/settings/AccountScreen.js b/src/containers/settings/AccountScreen.js index c5c2982b0..5818af0b1 100644 --- a/src/containers/settings/AccountScreen.js +++ b/src/containers/settings/AccountScreen.js | |||
@@ -12,8 +12,7 @@ import AccountDashboard from '../../components/settings/account/AccountDashboard | |||
12 | 12 | ||
13 | const { BrowserWindow } = remote; | 13 | const { BrowserWindow } = remote; |
14 | 14 | ||
15 | @inject('stores', 'actions') @observer | 15 | export default @inject('stores', 'actions') @observer class AccountScreen extends Component { |
16 | export default class AccountScreen extends Component { | ||
17 | componentDidMount() { | 16 | componentDidMount() { |
18 | gaPage('Settings/Account Dashboard'); | 17 | gaPage('Settings/Account Dashboard'); |
19 | } | 18 | } |
diff --git a/src/containers/settings/EditServiceScreen.js b/src/containers/settings/EditServiceScreen.js index 67c2731fc..639e8b070 100644 --- a/src/containers/settings/EditServiceScreen.js +++ b/src/containers/settings/EditServiceScreen.js | |||
@@ -6,6 +6,8 @@ import { defineMessages, intlShape } from 'react-intl'; | |||
6 | import UserStore from '../../stores/UserStore'; | 6 | import UserStore from '../../stores/UserStore'; |
7 | import RecipesStore from '../../stores/RecipesStore'; | 7 | import RecipesStore from '../../stores/RecipesStore'; |
8 | import ServicesStore from '../../stores/ServicesStore'; | 8 | import ServicesStore from '../../stores/ServicesStore'; |
9 | import SettingsStore from '../../stores/SettingsStore'; | ||
10 | import FeaturesStore from '../../stores/FeaturesStore'; | ||
9 | import Form from '../../lib/Form'; | 11 | import Form from '../../lib/Form'; |
10 | import { gaPage } from '../../lib/analytics'; | 12 | import { gaPage } from '../../lib/analytics'; |
11 | 13 | ||
@@ -13,6 +15,8 @@ import ServiceError from '../../components/settings/services/ServiceError'; | |||
13 | import EditServiceForm from '../../components/settings/services/EditServiceForm'; | 15 | import EditServiceForm from '../../components/settings/services/EditServiceForm'; |
14 | import { required, url, oneRequired } from '../../helpers/validation-helpers'; | 16 | import { required, url, oneRequired } from '../../helpers/validation-helpers'; |
15 | 17 | ||
18 | import { config as proxyFeature } from '../../features/serviceProxy'; | ||
19 | |||
16 | const messages = defineMessages({ | 20 | const messages = defineMessages({ |
17 | name: { | 21 | name: { |
18 | id: 'settings.service.form.name', | 22 | id: 'settings.service.form.name', |
@@ -50,10 +54,29 @@ const messages = defineMessages({ | |||
50 | id: 'settings.service.form.icon', | 54 | id: 'settings.service.form.icon', |
51 | defaultMessage: '!!!Custom icon', | 55 | defaultMessage: '!!!Custom icon', |
52 | }, | 56 | }, |
57 | enableDarkMode: { | ||
58 | id: 'settings.service.form.enableDarkMode', | ||
59 | defaultMessage: '!!!Enable Dark Mode', | ||
60 | }, | ||
61 | enableProxy: { | ||
62 | id: 'settings.service.form.proxy.isEnabled', | ||
63 | defaultMessage: '!!!Use Proxy', | ||
64 | }, | ||
65 | proxyHost: { | ||
66 | id: 'settings.service.form.proxy.host', | ||
67 | defaultMessage: '!!!Proxy Host/IP', | ||
68 | }, | ||
69 | proxyUser: { | ||
70 | id: 'settings.service.form.proxy.user', | ||
71 | defaultMessage: '!!!User', | ||
72 | }, | ||
73 | proxyPassword: { | ||
74 | id: 'settings.service.form.proxy.password', | ||
75 | defaultMessage: '!!!Password', | ||
76 | }, | ||
53 | }); | 77 | }); |
54 | 78 | ||
55 | @inject('stores', 'actions') @observer | 79 | export default @inject('stores', 'actions') @observer class EditServiceScreen extends Component { |
56 | export default class EditServiceScreen extends Component { | ||
57 | static contextTypes = { | 80 | static contextTypes = { |
58 | intl: intlShape, | 81 | intl: intlShape, |
59 | }; | 82 | }; |
@@ -77,7 +100,7 @@ export default class EditServiceScreen extends Component { | |||
77 | } | 100 | } |
78 | } | 101 | } |
79 | 102 | ||
80 | prepareForm(recipe, service) { | 103 | prepareForm(recipe, service, proxy) { |
81 | const { intl } = this.context; | 104 | const { intl } = this.context; |
82 | const config = { | 105 | const config = { |
83 | fields: { | 106 | fields: { |
@@ -112,6 +135,11 @@ export default class EditServiceScreen extends Component { | |||
112 | default: null, | 135 | default: null, |
113 | type: 'file', | 136 | type: 'file', |
114 | }, | 137 | }, |
138 | isDarkModeEnabled: { | ||
139 | label: intl.formatMessage(messages.enableDarkMode), | ||
140 | value: service.isDarkModeEnabled, | ||
141 | default: this.props.stores.settings.all.app.darkMode, | ||
142 | }, | ||
115 | }, | 143 | }, |
116 | }; | 144 | }; |
117 | 145 | ||
@@ -163,6 +191,40 @@ export default class EditServiceScreen extends Component { | |||
163 | }); | 191 | }); |
164 | } | 192 | } |
165 | 193 | ||
194 | if (proxy.isEnabled) { | ||
195 | const serviceProxyConfig = this.props.stores.settings.proxy[service.id] || {}; | ||
196 | |||
197 | Object.assign(config.fields, { | ||
198 | proxy: { | ||
199 | name: 'proxy', | ||
200 | label: 'proxy', | ||
201 | fields: { | ||
202 | isEnabled: { | ||
203 | label: intl.formatMessage(messages.enableProxy), | ||
204 | value: serviceProxyConfig.isEnabled, | ||
205 | default: false, | ||
206 | }, | ||
207 | host: { | ||
208 | label: intl.formatMessage(messages.proxyHost), | ||
209 | value: serviceProxyConfig.host, | ||
210 | default: '', | ||
211 | }, | ||
212 | user: { | ||
213 | label: intl.formatMessage(messages.proxyUser), | ||
214 | value: serviceProxyConfig.user, | ||
215 | default: '', | ||
216 | }, | ||
217 | password: { | ||
218 | label: intl.formatMessage(messages.proxyPassword), | ||
219 | value: serviceProxyConfig.password, | ||
220 | default: '', | ||
221 | type: 'password', | ||
222 | }, | ||
223 | }, | ||
224 | }, | ||
225 | }); | ||
226 | } | ||
227 | |||
166 | return new Form(config); | 228 | return new Form(config); |
167 | } | 229 | } |
168 | 230 | ||
@@ -215,7 +277,7 @@ export default class EditServiceScreen extends Component { | |||
215 | ); | 277 | ); |
216 | } | 278 | } |
217 | 279 | ||
218 | const form = this.prepareForm(recipe, service); | 280 | const form = this.prepareForm(recipe, service, proxyFeature); |
219 | 281 | ||
220 | return ( | 282 | return ( |
221 | <EditServiceForm | 283 | <EditServiceForm |
@@ -229,6 +291,8 @@ export default class EditServiceScreen extends Component { | |||
229 | isDeleting={services.deleteServiceRequest.isExecuting} | 291 | isDeleting={services.deleteServiceRequest.isExecuting} |
230 | onSubmit={d => this.onSubmit(d)} | 292 | onSubmit={d => this.onSubmit(d)} |
231 | onDelete={() => this.deleteService()} | 293 | onDelete={() => this.deleteService()} |
294 | isProxyFeatureEnabled={proxyFeature.isEnabled} | ||
295 | isProxyFeaturePremiumFeature={proxyFeature.isPremium} | ||
232 | /> | 296 | /> |
233 | ); | 297 | ); |
234 | } | 298 | } |
@@ -239,6 +303,8 @@ EditServiceScreen.wrappedComponent.propTypes = { | |||
239 | user: PropTypes.instanceOf(UserStore).isRequired, | 303 | user: PropTypes.instanceOf(UserStore).isRequired, |
240 | recipes: PropTypes.instanceOf(RecipesStore).isRequired, | 304 | recipes: PropTypes.instanceOf(RecipesStore).isRequired, |
241 | services: PropTypes.instanceOf(ServicesStore).isRequired, | 305 | services: PropTypes.instanceOf(ServicesStore).isRequired, |
306 | settings: PropTypes.instanceOf(SettingsStore).isRequired, | ||
307 | features: PropTypes.instanceOf(FeaturesStore).isRequired, | ||
242 | }).isRequired, | 308 | }).isRequired, |
243 | router: PropTypes.shape({ | 309 | router: PropTypes.shape({ |
244 | params: PropTypes.shape({ | 310 | params: PropTypes.shape({ |
@@ -251,5 +317,8 @@ EditServiceScreen.wrappedComponent.propTypes = { | |||
251 | updateService: PropTypes.func.isRequired, | 317 | updateService: PropTypes.func.isRequired, |
252 | deleteService: PropTypes.func.isRequired, | 318 | deleteService: PropTypes.func.isRequired, |
253 | }).isRequired, | 319 | }).isRequired, |
320 | // settings: PropTypes.shape({ | ||
321 | // update: PropTypes.func.isRequred, | ||
322 | // }).isRequired, | ||
254 | }).isRequired, | 323 | }).isRequired, |
255 | }; | 324 | }; |
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js index 018ce663f..ea1d319d9 100644 --- a/src/containers/settings/EditSettingsScreen.js +++ b/src/containers/settings/EditSettingsScreen.js | |||
@@ -7,9 +7,10 @@ import AppStore from '../../stores/AppStore'; | |||
7 | import SettingsStore from '../../stores/SettingsStore'; | 7 | import SettingsStore from '../../stores/SettingsStore'; |
8 | import UserStore from '../../stores/UserStore'; | 8 | import UserStore from '../../stores/UserStore'; |
9 | import Form from '../../lib/Form'; | 9 | import Form from '../../lib/Form'; |
10 | import { APP_LOCALES } from '../../i18n/languages'; | 10 | import { APP_LOCALES, SPELLCHECKER_LOCALES } from '../../i18n/languages'; |
11 | import { gaPage } from '../../lib/analytics'; | 11 | import { gaPage } from '../../lib/analytics'; |
12 | import { DEFAULT_APP_SETTINGS } from '../../config'; | 12 | import { DEFAULT_APP_SETTINGS } from '../../config'; |
13 | import { config as spellcheckerConfig } from '../../features/spellchecker'; | ||
13 | 14 | ||
14 | 15 | ||
15 | import EditSettingsForm from '../../components/settings/settings/EditSettingsForm'; | 16 | import EditSettingsForm from '../../components/settings/settings/EditSettingsForm'; |
@@ -39,6 +40,10 @@ const messages = defineMessages({ | |||
39 | id: 'settings.app.form.language', | 40 | id: 'settings.app.form.language', |
40 | defaultMessage: '!!!Language', | 41 | defaultMessage: '!!!Language', |
41 | }, | 42 | }, |
43 | darkMode: { | ||
44 | id: 'settings.app.form.darkMode', | ||
45 | defaultMessage: '!!!Dark Mode', | ||
46 | }, | ||
42 | showDisabledServices: { | 47 | showDisabledServices: { |
43 | id: 'settings.app.form.showDisabledServices', | 48 | id: 'settings.app.form.showDisabledServices', |
44 | defaultMessage: '!!!Display disabled services tabs', | 49 | defaultMessage: '!!!Display disabled services tabs', |
@@ -55,8 +60,8 @@ const messages = defineMessages({ | |||
55 | id: 'settings.app.form.enableGPUAcceleration', | 60 | id: 'settings.app.form.enableGPUAcceleration', |
56 | defaultMessage: '!!!Enable GPU Acceleration', | 61 | defaultMessage: '!!!Enable GPU Acceleration', |
57 | }, | 62 | }, |
58 | spellcheckingLanguage: { | 63 | spellcheckerLanguage: { |
59 | id: 'settings.app.form.spellcheckingLanguage', | 64 | id: 'settings.app.form.spellcheckerLanguage', |
60 | defaultMessage: '!!!Language for spell checking', | 65 | defaultMessage: '!!!Language for spell checking', |
61 | }, | 66 | }, |
62 | beta: { | 67 | beta: { |
@@ -65,8 +70,7 @@ const messages = defineMessages({ | |||
65 | }, | 70 | }, |
66 | }); | 71 | }); |
67 | 72 | ||
68 | @inject('stores', 'actions') @observer | 73 | export default @inject('stores', 'actions') @observer class EditSettingsScreen extends Component { |
69 | export default class EditSettingsScreen extends Component { | ||
70 | static contextTypes = { | 74 | static contextTypes = { |
71 | intl: intlShape, | 75 | intl: intlShape, |
72 | }; | 76 | }; |
@@ -91,8 +95,10 @@ export default class EditSettingsScreen extends Component { | |||
91 | minimizeToSystemTray: settingsData.minimizeToSystemTray, | 95 | minimizeToSystemTray: settingsData.minimizeToSystemTray, |
92 | enableGPUAcceleration: settingsData.enableGPUAcceleration, | 96 | enableGPUAcceleration: settingsData.enableGPUAcceleration, |
93 | showDisabledServices: settingsData.showDisabledServices, | 97 | showDisabledServices: settingsData.showDisabledServices, |
98 | darkMode: settingsData.darkMode, | ||
94 | showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted, | 99 | showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted, |
95 | enableSpellchecking: settingsData.enableSpellchecking, | 100 | enableSpellchecking: settingsData.enableSpellchecking, |
101 | spellcheckerLanguage: settingsData.spellcheckerLanguage, | ||
96 | beta: settingsData.beta, // we need this info in the main process as well | 102 | beta: settingsData.beta, // we need this info in the main process as well |
97 | locale: settingsData.locale, // we need this info in the main process as well | 103 | locale: settingsData.locale, // we need this info in the main process as well |
98 | }, | 104 | }, |
@@ -118,6 +124,14 @@ export default class EditSettingsScreen extends Component { | |||
118 | }); | 124 | }); |
119 | }); | 125 | }); |
120 | 126 | ||
127 | const spellcheckingLanguages = []; | ||
128 | Object.keys(SPELLCHECKER_LOCALES).sort(Intl.Collator().compare).forEach((key) => { | ||
129 | spellcheckingLanguages.push({ | ||
130 | value: key, | ||
131 | label: SPELLCHECKER_LOCALES[key], | ||
132 | }); | ||
133 | }); | ||
134 | |||
121 | const config = { | 135 | const config = { |
122 | fields: { | 136 | fields: { |
123 | autoLaunchOnStart: { | 137 | autoLaunchOnStart: { |
@@ -157,8 +171,19 @@ export default class EditSettingsScreen extends Component { | |||
157 | }, | 171 | }, |
158 | enableSpellchecking: { | 172 | enableSpellchecking: { |
159 | label: intl.formatMessage(messages.enableSpellchecking), | 173 | label: intl.formatMessage(messages.enableSpellchecking), |
160 | value: settings.all.app.enableSpellchecking, | 174 | value: !this.props.stores.user.data.isPremium && spellcheckerConfig.isPremiumFeature ? false : settings.all.app.enableSpellchecking, |
161 | default: DEFAULT_APP_SETTINGS.enableSpellchecking, | 175 | default: !this.props.stores.user.data.isPremium && spellcheckerConfig.isPremiumFeature ? false : DEFAULT_APP_SETTINGS.enableSpellchecking, |
176 | }, | ||
177 | spellcheckerLanguage: { | ||
178 | label: intl.formatMessage(messages.spellcheckerLanguage), | ||
179 | value: settings.all.app.spellcheckerLanguage, | ||
180 | options: spellcheckingLanguages, | ||
181 | default: DEFAULT_APP_SETTINGS.spellcheckerLanguage, | ||
182 | }, | ||
183 | darkMode: { | ||
184 | label: intl.formatMessage(messages.darkMode), | ||
185 | value: settings.all.app.darkMode, | ||
186 | default: DEFAULT_APP_SETTINGS.darkMode, | ||
162 | }, | 187 | }, |
163 | enableGPUAcceleration: { | 188 | enableGPUAcceleration: { |
164 | label: intl.formatMessage(messages.enableGPUAcceleration), | 189 | label: intl.formatMessage(messages.enableGPUAcceleration), |
@@ -209,6 +234,7 @@ export default class EditSettingsScreen extends Component { | |||
209 | cacheSize={cacheSize} | 234 | cacheSize={cacheSize} |
210 | isClearingAllCache={isClearingAllCache} | 235 | isClearingAllCache={isClearingAllCache} |
211 | onClearAllCache={clearAllCache} | 236 | onClearAllCache={clearAllCache} |
237 | isSpellcheckerPremiumFeature={spellcheckerConfig.isPremiumFeature} | ||
212 | /> | 238 | /> |
213 | ); | 239 | ); |
214 | } | 240 | } |
diff --git a/src/containers/settings/EditUserScreen.js b/src/containers/settings/EditUserScreen.js index dda8ce513..3da3e8d2c 100644 --- a/src/containers/settings/EditUserScreen.js +++ b/src/containers/settings/EditUserScreen.js | |||
@@ -50,8 +50,7 @@ const messages = defineMessages({ | |||
50 | }, | 50 | }, |
51 | }); | 51 | }); |
52 | 52 | ||
53 | @inject('stores', 'actions') @observer | 53 | export default @inject('stores', 'actions') @observer class EditUserScreen extends Component { |
54 | export default class EditUserScreen extends Component { | ||
55 | static contextTypes = { | 54 | static contextTypes = { |
56 | intl: intlShape, | 55 | intl: intlShape, |
57 | }; | 56 | }; |
@@ -145,6 +144,7 @@ export default class EditUserScreen extends Component { | |||
145 | // user={user.data} | 144 | // user={user.data} |
146 | status={user.actionStatus} | 145 | status={user.actionStatus} |
147 | form={form} | 146 | form={form} |
147 | isEnterprise={user.data.isEnterprise} | ||
148 | isSaving={user.updateUserInfoRequest.isExecuting} | 148 | isSaving={user.updateUserInfoRequest.isExecuting} |
149 | onSubmit={d => this.onSubmit(d)} | 149 | onSubmit={d => this.onSubmit(d)} |
150 | /> | 150 | /> |
diff --git a/src/containers/settings/InviteScreen.js b/src/containers/settings/InviteScreen.js index 5f341b1b3..38ca6ec74 100644 --- a/src/containers/settings/InviteScreen.js +++ b/src/containers/settings/InviteScreen.js | |||
@@ -5,8 +5,7 @@ import { inject, observer } from 'mobx-react'; | |||
5 | import Invite from '../../components/auth/Invite'; | 5 | import Invite from '../../components/auth/Invite'; |
6 | import { gaPage } from '../../lib/analytics'; | 6 | import { gaPage } from '../../lib/analytics'; |
7 | 7 | ||
8 | @inject('stores', 'actions') @observer | 8 | export default @inject('stores', 'actions') @observer class InviteScreen extends Component { |
9 | export default class InviteScreen extends Component { | ||
10 | componentDidMount() { | 9 | componentDidMount() { |
11 | gaPage('Settings/Invite'); | 10 | gaPage('Settings/Invite'); |
12 | } | 11 | } |
diff --git a/src/containers/settings/RecipesScreen.js b/src/containers/settings/RecipesScreen.js index 65341e9e3..4efe81505 100644 --- a/src/containers/settings/RecipesScreen.js +++ b/src/containers/settings/RecipesScreen.js | |||
@@ -11,8 +11,7 @@ import { gaPage } from '../../lib/analytics'; | |||
11 | 11 | ||
12 | import RecipesDashboard from '../../components/settings/recipes/RecipesDashboard'; | 12 | import RecipesDashboard from '../../components/settings/recipes/RecipesDashboard'; |
13 | 13 | ||
14 | @inject('stores', 'actions') @observer | 14 | export default @inject('stores', 'actions') @observer class RecipesScreen extends Component { |
15 | export default class RecipesScreen extends Component { | ||
16 | static propTypes = { | 15 | static propTypes = { |
17 | params: PropTypes.shape({ | 16 | params: PropTypes.shape({ |
18 | filter: PropTypes.string, | 17 | filter: PropTypes.string, |
diff --git a/src/containers/settings/ServicesScreen.js b/src/containers/settings/ServicesScreen.js index 12db1bcd3..c1a133ef7 100644 --- a/src/containers/settings/ServicesScreen.js +++ b/src/containers/settings/ServicesScreen.js | |||
@@ -10,8 +10,7 @@ import { gaPage } from '../../lib/analytics'; | |||
10 | 10 | ||
11 | import ServicesDashboard from '../../components/settings/services/ServicesDashboard'; | 11 | import ServicesDashboard from '../../components/settings/services/ServicesDashboard'; |
12 | 12 | ||
13 | @inject('stores', 'actions') @observer | 13 | export default @inject('stores', 'actions') @observer class ServicesScreen extends Component { |
14 | export default class ServicesScreen extends Component { | ||
15 | componentDidMount() { | 14 | componentDidMount() { |
16 | gaPage('Settings/Service Dashboard'); | 15 | gaPage('Settings/Service Dashboard'); |
17 | } | 16 | } |
diff --git a/src/containers/settings/SettingsWindow.js b/src/containers/settings/SettingsWindow.js index 13ca96f72..55589d0be 100644 --- a/src/containers/settings/SettingsWindow.js +++ b/src/containers/settings/SettingsWindow.js | |||
@@ -7,8 +7,7 @@ import ServicesStore from '../../stores/ServicesStore'; | |||
7 | import Layout from '../../components/settings/SettingsLayout'; | 7 | import Layout from '../../components/settings/SettingsLayout'; |
8 | import Navigation from '../../components/settings/navigation/SettingsNavigation'; | 8 | import Navigation from '../../components/settings/navigation/SettingsNavigation'; |
9 | 9 | ||
10 | @inject('stores', 'actions') @observer | 10 | export default @inject('stores', 'actions') @observer class SettingsContainer extends Component { |
11 | export default class SettingsContainer extends Component { | ||
12 | render() { | 11 | render() { |
13 | const { children, stores } = this.props; | 12 | const { children, stores } = this.props; |
14 | const { closeSettings } = this.props.actions.ui; | 13 | const { closeSettings } = this.props.actions.ui; |