aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar Ricardo Cino <ricardo@cino.io>2022-11-28 16:53:04 +0100
committerLibravatar GitHub <noreply@github.com>2022-11-28 15:53:04 +0000
commitd5d685aaf4e796faf612c6d0fea0f0cc9ea49614 (patch)
tree72f027dc2d57f00c366d61570fd76ed6a0fcb27a /src
parent6.2.1-nightly.52 [skip ci] (diff)
downloadferdium-app-d5d685aaf4e796faf612c6d0fea0f0cc9ea49614.tar.gz
ferdium-app-d5d685aaf4e796faf612c6d0fea0f0cc9ea49614.tar.zst
ferdium-app-d5d685aaf4e796faf612c6d0fea0f0cc9ea49614.zip
fix: ensure default values are working for the all fields in all settings screens (#750)
Co-authored-by: Vijay A <vraravam@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/config.ts12
-rw-r--r--src/containers/settings/EditServiceScreen.tsx180
-rw-r--r--src/containers/settings/EditSettingsScreen.tsx368
-rw-r--r--src/features/todos/store.ts11
-rw-r--r--src/jsUtils.ts14
-rw-r--r--src/webview/recipe.ts4
6 files changed, 425 insertions, 164 deletions
diff --git a/src/config.ts b/src/config.ts
index b0063e342..ceadda645 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -338,12 +338,9 @@ export const SERVER_NOT_LOADED = 'Ferdium::SERVER_NOT_LOADED';
338 338
339export const ALLOWED_PROTOCOLS = ['https:', 'http:', 'ftp:', 'ferdium:']; 339export const ALLOWED_PROTOCOLS = ['https:', 'http:', 'ftp:', 'ferdium:'];
340 340
341export const DEFAULT_SETTING_KEEP_ALL_WORKSPACES_LOADED = false;
342
343export const DEFAULT_TODOS_WIDTH = 300; 341export const DEFAULT_TODOS_WIDTH = 300;
344export const TODOS_MIN_WIDTH = 200; 342export const TODOS_MIN_WIDTH = 200;
345export const DEFAULT_TODOS_VISIBLE = false; 343export const DEFAULT_TODOS_VISIBLE = false;
346export const DEFAULT_IS_FEATURE_ENABLED_BY_USER = true;
347export const DEFAULT_IS_TODO_FEATURE_ENABLED_BY_USER = false; 344export const DEFAULT_IS_TODO_FEATURE_ENABLED_BY_USER = false;
348export const TODOS_PARTITION_ID = 'persist:todos'; 345export const TODOS_PARTITION_ID = 'persist:todos';
349 346
@@ -431,9 +428,18 @@ export const DEFAULT_APP_SETTINGS = {
431 liftSingleInstanceLock: false, 428 liftSingleInstanceLock: false,
432 enableLongPressServiceHint: false, 429 enableLongPressServiceHint: false,
433 proxyFeatureEnabled: false, 430 proxyFeatureEnabled: false,
431 proxyHost: '',
432 proxyPort: 0,
433 proxyUser: '',
434 proxyPassword: '',
434 onlyShowFavoritesInUnreadCount: false, 435 onlyShowFavoritesInUnreadCount: false,
435 customTodoServer: '', 436 customTodoServer: '',
436 locale: 'en-US', 437 locale: 'en-US',
438 keepAllWorkspacesLoaded: false,
439 isFeatureEnabledByUser: true,
440 darkReaderBrightness: 100,
441 darkReaderContrast: 90,
442 darkReaderSepia: 10,
437}; 443};
438 444
439export const DEFAULT_SERVICE_SETTINGS = { 445export const DEFAULT_SERVICE_SETTINGS = {
diff --git a/src/containers/settings/EditServiceScreen.tsx b/src/containers/settings/EditServiceScreen.tsx
index 9e61cdd78..d02138fce 100644
--- a/src/containers/settings/EditServiceScreen.tsx
+++ b/src/containers/settings/EditServiceScreen.tsx
@@ -17,6 +17,7 @@ import { SPELLCHECKER_LOCALES } from '../../i18n/languages';
17import globalMessages from '../../i18n/globalMessages'; 17import globalMessages from '../../i18n/globalMessages';
18import { DEFAULT_APP_SETTINGS, DEFAULT_SERVICE_SETTINGS } from '../../config'; 18import { DEFAULT_APP_SETTINGS, DEFAULT_SERVICE_SETTINGS } from '../../config';
19import withParams from '../../components/util/WithParams'; 19import withParams from '../../components/util/WithParams';
20import { ifUndefined } from '../../jsUtils';
20 21
21const messages = defineMessages({ 22const messages = defineMessages({
22 name: { 23 name: {
@@ -188,61 +189,87 @@ class EditServiceScreen extends Component<IProps> {
188 }, 189 },
189 isEnabled: { 190 isEnabled: {
190 label: intl.formatMessage(messages.enableService), 191 label: intl.formatMessage(messages.enableService),
191 value: service?.isEnabled, 192 value: ifUndefined<boolean>(
193 service?.isEnabled,
194 DEFAULT_SERVICE_SETTINGS.isEnabled,
195 ),
192 default: DEFAULT_SERVICE_SETTINGS.isEnabled, 196 default: DEFAULT_SERVICE_SETTINGS.isEnabled,
193 type: 'checkbox', 197 type: 'checkbox',
194 }, 198 },
195 isHibernationEnabled: { 199 isHibernationEnabled: {
196 label: intl.formatMessage(messages.enableHibernation), 200 label: intl.formatMessage(messages.enableHibernation),
197 value: service?.isHibernationEnabled, 201 value: ifUndefined<boolean>(
202 service?.isHibernationEnabled,
203 DEFAULT_SERVICE_SETTINGS.isHibernationEnabled,
204 ),
198 default: DEFAULT_SERVICE_SETTINGS.isHibernationEnabled, 205 default: DEFAULT_SERVICE_SETTINGS.isHibernationEnabled,
199 type: 'checkbox', 206 type: 'checkbox',
200 }, 207 },
201 isWakeUpEnabled: { 208 isWakeUpEnabled: {
202 label: intl.formatMessage(messages.enableWakeUp), 209 label: intl.formatMessage(messages.enableWakeUp),
203 value: service?.isWakeUpEnabled, 210 value: ifUndefined<boolean>(
211 service?.isWakeUpEnabled,
212 DEFAULT_SERVICE_SETTINGS.isWakeUpEnabled,
213 ),
204 default: DEFAULT_SERVICE_SETTINGS.isWakeUpEnabled, 214 default: DEFAULT_SERVICE_SETTINGS.isWakeUpEnabled,
205 type: 'checkbox', 215 type: 'checkbox',
206 }, 216 },
207 isNotificationEnabled: { 217 isNotificationEnabled: {
208 label: intl.formatMessage(messages.enableNotification), 218 label: intl.formatMessage(messages.enableNotification),
209 value: service?.isNotificationEnabled, 219 value: ifUndefined<boolean>(
220 service?.isNotificationEnabled,
221 DEFAULT_SERVICE_SETTINGS.isNotificationEnabled,
222 ),
210 default: DEFAULT_SERVICE_SETTINGS.isNotificationEnabled, 223 default: DEFAULT_SERVICE_SETTINGS.isNotificationEnabled,
211 type: 'checkbox', 224 type: 'checkbox',
212 }, 225 },
213 isBadgeEnabled: { 226 isBadgeEnabled: {
214 label: intl.formatMessage(messages.enableBadge), 227 label: intl.formatMessage(messages.enableBadge),
215 value: service?.isBadgeEnabled, 228 value: ifUndefined<boolean>(
229 service?.isBadgeEnabled,
230 DEFAULT_SERVICE_SETTINGS.isBadgeEnabled,
231 ),
216 default: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled, 232 default: DEFAULT_SERVICE_SETTINGS.isBadgeEnabled,
217 type: 'checkbox', 233 type: 'checkbox',
218 }, 234 },
219 isMediaBadgeEnabled: { 235 isMediaBadgeEnabled: {
220 label: intl.formatMessage(messages.enableMediaBadge), 236 label: intl.formatMessage(messages.enableMediaBadge),
221 value: service?.isMediaBadgeEnabled, 237 value: ifUndefined<boolean>(
238 service?.isMediaBadgeEnabled,
239 DEFAULT_SERVICE_SETTINGS.isMediaBadgeEnabled,
240 ),
222 default: DEFAULT_SERVICE_SETTINGS.isMediaBadgeEnabled, 241 default: DEFAULT_SERVICE_SETTINGS.isMediaBadgeEnabled,
223 type: 'checkbox', 242 type: 'checkbox',
224 }, 243 },
225 trapLinkClicks: { 244 trapLinkClicks: {
226 label: intl.formatMessage(messages.trapLinkClicks), 245 label: intl.formatMessage(messages.trapLinkClicks),
227 value: service?.trapLinkClicks, 246 value: ifUndefined<boolean>(
247 service?.trapLinkClicks,
248 DEFAULT_SERVICE_SETTINGS.trapLinkClicks,
249 ),
228 default: DEFAULT_SERVICE_SETTINGS.trapLinkClicks, 250 default: DEFAULT_SERVICE_SETTINGS.trapLinkClicks,
229 type: 'checkbox', 251 type: 'checkbox',
230 }, 252 },
231 isMuted: { 253 isMuted: {
232 label: intl.formatMessage(messages.enableAudio), 254 label: intl.formatMessage(messages.enableAudio),
233 value: !service?.isMuted, 255 value: !ifUndefined<boolean>(
256 service?.isMuted,
257 DEFAULT_SERVICE_SETTINGS.isMuted,
258 ),
234 default: DEFAULT_SERVICE_SETTINGS.isMuted, 259 default: DEFAULT_SERVICE_SETTINGS.isMuted,
235 type: 'checkbox', 260 type: 'checkbox',
236 }, 261 },
237 customIcon: { 262 customIcon: {
238 label: intl.formatMessage(messages.icon), 263 label: intl.formatMessage(messages.icon),
239 value: service?.hasCustomUploadedIcon ? service?.icon : false, 264 value: service?.hasCustomUploadedIcon ? service?.icon : false,
240 default: null,
241 type: 'file', 265 type: 'file',
242 }, 266 },
243 isDarkModeEnabled: { 267 isDarkModeEnabled: {
244 label: intl.formatMessage(messages.enableDarkMode), 268 label: intl.formatMessage(messages.enableDarkMode),
245 value: service?.isDarkModeEnabled, 269 value: ifUndefined<boolean>(
270 service?.isDarkModeEnabled,
271 stores.settings.app.darkMode,
272 ),
246 default: stores.settings.app.darkMode, 273 default: stores.settings.app.darkMode,
247 type: 'checkbox', 274 type: 'checkbox',
248 }, 275 },
@@ -250,26 +277,29 @@ class EditServiceScreen extends Component<IProps> {
250 label: intl.formatMessage(messages.darkReaderBrightness), 277 label: intl.formatMessage(messages.darkReaderBrightness),
251 value: service?.darkReaderSettings 278 value: service?.darkReaderSettings
252 ? service?.darkReaderSettings.brightness 279 ? service?.darkReaderSettings.brightness
253 : undefined, 280 : DEFAULT_APP_SETTINGS.darkReaderBrightness,
254 default: 100, 281 default: DEFAULT_APP_SETTINGS.darkReaderBrightness,
255 }, 282 },
256 darkReaderContrast: { 283 darkReaderContrast: {
257 label: intl.formatMessage(messages.darkReaderContrast), 284 label: intl.formatMessage(messages.darkReaderContrast),
258 value: service?.darkReaderSettings 285 value: service?.darkReaderSettings
259 ? service?.darkReaderSettings.contrast 286 ? service?.darkReaderSettings.contrast
260 : undefined, 287 : DEFAULT_APP_SETTINGS.darkReaderContrast,
261 default: 90, 288 default: DEFAULT_APP_SETTINGS.darkReaderContrast,
262 }, 289 },
263 darkReaderSepia: { 290 darkReaderSepia: {
264 label: intl.formatMessage(messages.darkReaderSepia), 291 label: intl.formatMessage(messages.darkReaderSepia),
265 value: service?.darkReaderSettings 292 value: service?.darkReaderSettings
266 ? service?.darkReaderSettings.sepia 293 ? service?.darkReaderSettings.sepia
267 : undefined, 294 : DEFAULT_APP_SETTINGS.darkReaderSepia,
268 default: 10, 295 default: DEFAULT_APP_SETTINGS.darkReaderSepia,
269 }, 296 },
270 isProgressbarEnabled: { 297 isProgressbarEnabled: {
271 label: intl.formatMessage(messages.enableProgressbar), 298 label: intl.formatMessage(messages.enableProgressbar),
272 value: service?.isProgressbarEnabled, 299 value: ifUndefined<boolean>(
300 service?.isProgressbarEnabled,
301 DEFAULT_SERVICE_SETTINGS.isProgressbarEnabled,
302 ),
273 default: DEFAULT_SERVICE_SETTINGS.isProgressbarEnabled, 303 default: DEFAULT_SERVICE_SETTINGS.isProgressbarEnabled,
274 type: 'checkbox', 304 type: 'checkbox',
275 }, 305 },
@@ -282,7 +312,11 @@ class EditServiceScreen extends Component<IProps> {
282 userAgentPref: { 312 userAgentPref: {
283 label: intl.formatMessage(globalMessages.userAgentPref), 313 label: intl.formatMessage(globalMessages.userAgentPref),
284 placeholder: service?.defaultUserAgent, 314 placeholder: service?.defaultUserAgent,
285 value: service?.userAgentPref || '', 315 value: ifUndefined<string>(
316 service?.userAgentPref,
317 DEFAULT_APP_SETTINGS.userAgentPref,
318 ),
319 default: DEFAULT_APP_SETTINGS.userAgentPref,
286 }, 320 },
287 }, 321 },
288 }; 322 };
@@ -325,20 +359,32 @@ class EditServiceScreen extends Component<IProps> {
325 } 359 }
326 360
327 if (recipe.hasIndirectMessages) { 361 if (recipe.hasIndirectMessages) {
328 config.fields.isIndirectMessageBadgeEnabled = { 362 config.fields = {
329 label: intl.formatMessage(messages.indirectMessages), 363 ...config.fields,
330 value: service?.isIndirectMessageBadgeEnabled, 364 isIndirectMessageBadgeEnabled: {
331 default: DEFAULT_SERVICE_SETTINGS.hasIndirectMessages, 365 label: intl.formatMessage(messages.indirectMessages),
332 type: 'checkbox', 366 value: ifUndefined<boolean>(
367 service?.isIndirectMessageBadgeEnabled,
368 DEFAULT_SERVICE_SETTINGS.hasIndirectMessages,
369 ),
370 default: DEFAULT_SERVICE_SETTINGS.hasIndirectMessages,
371 type: 'checkbox',
372 },
333 }; 373 };
334 } 374 }
335 375
336 if (recipe.allowFavoritesDelineationInUnreadCount) { 376 if (recipe.allowFavoritesDelineationInUnreadCount) {
337 config.fields.onlyShowFavoritesInUnreadCount = { 377 config.fields = {
338 label: intl.formatMessage(messages.onlyShowFavoritesInUnreadCount), 378 ...config.fields,
339 value: service?.onlyShowFavoritesInUnreadCount, 379 onlyShowFavoritesInUnreadCount: {
340 default: DEFAULT_APP_SETTINGS.onlyShowFavoritesInUnreadCount, 380 label: intl.formatMessage(messages.onlyShowFavoritesInUnreadCount),
341 type: 'checkbox', 381 value: ifUndefined<boolean>(
382 service?.onlyShowFavoritesInUnreadCount,
383 DEFAULT_APP_SETTINGS.onlyShowFavoritesInUnreadCount,
384 ),
385 default: DEFAULT_APP_SETTINGS.onlyShowFavoritesInUnreadCount,
386 type: 'checkbox',
387 },
342 }; 388 };
343 } 389 }
344 390
@@ -353,36 +399,54 @@ class EditServiceScreen extends Component<IProps> {
353 stores.settings.proxy[service.id] || {} 399 stores.settings.proxy[service.id] || {}
354 : {}; 400 : {};
355 401
356 config.fields.proxy = { 402 config.fields = {
357 name: 'proxy', 403 ...config.fields,
358 label: 'proxy', 404 proxy: {
359 fields: { 405 name: 'proxy',
360 isEnabled: { 406 label: 'proxy',
361 label: intl.formatMessage(messages.enableProxy), 407 fields: {
362 value: serviceProxyConfig.isEnabled, 408 isEnabled: {
363 default: DEFAULT_APP_SETTINGS.proxyFeatureEnabled, 409 label: intl.formatMessage(messages.enableProxy),
364 type: 'checkbox', 410 value: ifUndefined<boolean>(
365 }, 411 serviceProxyConfig.isEnabled,
366 host: { 412 DEFAULT_APP_SETTINGS.proxyFeatureEnabled,
367 label: intl.formatMessage(messages.proxyHost), 413 ),
368 value: serviceProxyConfig.host, 414 default: DEFAULT_APP_SETTINGS.proxyFeatureEnabled,
369 default: '', 415 type: 'checkbox',
370 }, 416 },
371 port: { 417 host: {
372 label: intl.formatMessage(messages.proxyPort), 418 label: intl.formatMessage(messages.proxyHost),
373 value: serviceProxyConfig.port, 419 value: ifUndefined<string>(
374 default: '', 420 serviceProxyConfig.host,
375 }, 421 DEFAULT_APP_SETTINGS.proxyHost,
376 user: { 422 ),
377 label: intl.formatMessage(messages.proxyUser), 423 default: DEFAULT_APP_SETTINGS.proxyHost,
378 value: serviceProxyConfig.user, 424 },
379 default: '', 425 port: {
380 }, 426 label: intl.formatMessage(messages.proxyPort),
381 password: { 427 value: ifUndefined<number>(
382 label: intl.formatMessage(messages.proxyPassword), 428 serviceProxyConfig.port,
383 value: serviceProxyConfig.password, 429 DEFAULT_APP_SETTINGS.proxyPort,
384 default: '', 430 ),
385 type: 'password', 431 default: DEFAULT_APP_SETTINGS.proxyPort,
432 },
433 user: {
434 label: intl.formatMessage(messages.proxyUser),
435 value: ifUndefined<string>(
436 serviceProxyConfig.user,
437 DEFAULT_APP_SETTINGS.proxyUser,
438 ),
439 default: DEFAULT_APP_SETTINGS.proxyUser,
440 },
441 password: {
442 label: intl.formatMessage(messages.proxyPassword),
443 value: ifUndefined<string>(
444 serviceProxyConfig.password,
445 DEFAULT_APP_SETTINGS.proxyPassword,
446 ),
447 default: DEFAULT_APP_SETTINGS.proxyPassword,
448 type: 'password',
449 },
386 }, 450 },
387 }, 451 },
388 }; 452 };
diff --git a/src/containers/settings/EditSettingsScreen.tsx b/src/containers/settings/EditSettingsScreen.tsx
index 2dbd8d2be..5c82a7e34 100644
--- a/src/containers/settings/EditSettingsScreen.tsx
+++ b/src/containers/settings/EditSettingsScreen.tsx
@@ -20,8 +20,6 @@ import {
20 TRANSLATOR_ENGINE_GOOGLE, 20 TRANSLATOR_ENGINE_GOOGLE,
21 LIBRETRANSLATE_TRANSLATOR_LANGUAGES, 21 LIBRETRANSLATE_TRANSLATOR_LANGUAGES,
22 TODO_APPS, 22 TODO_APPS,
23 DEFAULT_SETTING_KEEP_ALL_WORKSPACES_LOADED,
24 DEFAULT_IS_FEATURE_ENABLED_BY_USER,
25 WAKE_UP_STRATEGIES, 23 WAKE_UP_STRATEGIES,
26 WAKE_UP_HIBERNATION_STRATEGIES, 24 WAKE_UP_HIBERNATION_STRATEGIES,
27 SPLIT_COLUMNS_MIN, 25 SPLIT_COLUMNS_MIN,
@@ -39,6 +37,7 @@ import ErrorBoundary from '../../components/util/ErrorBoundary';
39 37
40import globalMessages from '../../i18n/globalMessages'; 38import globalMessages from '../../i18n/globalMessages';
41import { importExportURL } from '../../api/apiBase'; 39import { importExportURL } from '../../api/apiBase';
40import { ifUndefined } from '../../jsUtils';
42 41
43const debug = require('../../preload-safe-debug')('Ferdium:EditSettingsScreen'); 42const debug = require('../../preload-safe-debug')('Ferdium:EditSettingsScreen');
44 43
@@ -542,31 +541,46 @@ class EditSettingsScreen extends Component<EditSettingsScreenProps> {
542 fields: { 541 fields: {
543 autoLaunchOnStart: { 542 autoLaunchOnStart: {
544 label: intl.formatMessage(messages.autoLaunchOnStart), 543 label: intl.formatMessage(messages.autoLaunchOnStart),
545 value: app.autoLaunchOnStart, 544 value: ifUndefined<boolean>(
545 app.autoLaunchOnStart,
546 DEFAULT_APP_SETTINGS.autoLaunchOnStart,
547 ),
546 default: DEFAULT_APP_SETTINGS.autoLaunchOnStart, 548 default: DEFAULT_APP_SETTINGS.autoLaunchOnStart,
547 type: 'checkbox', 549 type: 'checkbox',
548 }, 550 },
549 autoLaunchInBackground: { 551 autoLaunchInBackground: {
550 label: intl.formatMessage(messages.autoLaunchInBackground), 552 label: intl.formatMessage(messages.autoLaunchInBackground),
551 value: app.launchInBackground, 553 value: ifUndefined<boolean>(
554 app.launchInBackground,
555 DEFAULT_APP_SETTINGS.autoLaunchInBackground,
556 ),
552 default: DEFAULT_APP_SETTINGS.autoLaunchInBackground, 557 default: DEFAULT_APP_SETTINGS.autoLaunchInBackground,
553 type: 'checkbox', 558 type: 'checkbox',
554 }, 559 },
555 runInBackground: { 560 runInBackground: {
556 label: intl.formatMessage(messages.runInBackground), 561 label: intl.formatMessage(messages.runInBackground),
557 value: settings.all.app.runInBackground, 562 value: ifUndefined<boolean>(
563 settings.all.app.runInBackground,
564 DEFAULT_APP_SETTINGS.runInBackground,
565 ),
558 default: DEFAULT_APP_SETTINGS.runInBackground, 566 default: DEFAULT_APP_SETTINGS.runInBackground,
559 type: 'checkbox', 567 type: 'checkbox',
560 }, 568 },
561 startMinimized: { 569 startMinimized: {
562 label: intl.formatMessage(messages.startMinimized), 570 label: intl.formatMessage(messages.startMinimized),
563 value: settings.all.app.startMinimized, 571 value: ifUndefined<boolean>(
572 settings.all.app.startMinimized,
573 DEFAULT_APP_SETTINGS.startMinimized,
574 ),
564 default: DEFAULT_APP_SETTINGS.startMinimized, 575 default: DEFAULT_APP_SETTINGS.startMinimized,
565 type: 'checkbox', 576 type: 'checkbox',
566 }, 577 },
567 confirmOnQuit: { 578 confirmOnQuit: {
568 label: intl.formatMessage(messages.confirmOnQuit), 579 label: intl.formatMessage(messages.confirmOnQuit),
569 value: settings.all.app.confirmOnQuit, 580 value: ifUndefined<boolean>(
581 settings.all.app.confirmOnQuit,
582 DEFAULT_APP_SETTINGS.confirmOnQuit,
583 ),
570 default: DEFAULT_APP_SETTINGS.confirmOnQuit, 584 default: DEFAULT_APP_SETTINGS.confirmOnQuit,
571 type: 'checkbox', 585 type: 'checkbox',
572 }, 586 },
@@ -574,240 +588,359 @@ class EditSettingsScreen extends Component<EditSettingsScreenProps> {
574 label: intl.formatMessage( 588 label: intl.formatMessage(
575 isMac ? messages.enableMenuBar : messages.enableSystemTray, 589 isMac ? messages.enableMenuBar : messages.enableSystemTray,
576 ), 590 ),
577 value: settings.all.app.enableSystemTray, 591 value: ifUndefined<boolean>(
592 settings.all.app.enableSystemTray,
593 DEFAULT_APP_SETTINGS.enableSystemTray,
594 ),
578 default: DEFAULT_APP_SETTINGS.enableSystemTray, 595 default: DEFAULT_APP_SETTINGS.enableSystemTray,
579 type: 'checkbox', 596 type: 'checkbox',
580 }, 597 },
581 reloadAfterResume: { 598 reloadAfterResume: {
582 label: intl.formatMessage(messages.reloadAfterResume), 599 label: intl.formatMessage(messages.reloadAfterResume),
583 value: settings.all.app.reloadAfterResume, 600 value: ifUndefined<boolean>(
601 settings.all.app.reloadAfterResume,
602 DEFAULT_APP_SETTINGS.reloadAfterResume,
603 ),
584 default: DEFAULT_APP_SETTINGS.reloadAfterResume, 604 default: DEFAULT_APP_SETTINGS.reloadAfterResume,
585 type: 'checkbox', 605 type: 'checkbox',
586 }, 606 },
587 reloadAfterResumeTime: { 607 reloadAfterResumeTime: {
588 label: intl.formatMessage(messages.reloadAfterResumeTime), 608 label: intl.formatMessage(messages.reloadAfterResumeTime),
589 value: settings.all.app.reloadAfterResumeTime, 609 value: ifUndefined<number>(
610 settings.all.app.reloadAfterResumeTime,
611 DEFAULT_APP_SETTINGS.reloadAfterResumeTime,
612 ),
590 default: DEFAULT_APP_SETTINGS.reloadAfterResumeTime, 613 default: DEFAULT_APP_SETTINGS.reloadAfterResumeTime,
591 }, 614 },
592 minimizeToSystemTray: { 615 minimizeToSystemTray: {
593 label: intl.formatMessage(messages.minimizeToSystemTray), 616 label: intl.formatMessage(messages.minimizeToSystemTray),
594 value: settings.all.app.minimizeToSystemTray, 617 value: ifUndefined<boolean>(
618 settings.all.app.minimizeToSystemTray,
619 DEFAULT_APP_SETTINGS.minimizeToSystemTray,
620 ),
595 default: DEFAULT_APP_SETTINGS.minimizeToSystemTray, 621 default: DEFAULT_APP_SETTINGS.minimizeToSystemTray,
596 type: 'checkbox', 622 type: 'checkbox',
597 }, 623 },
598 closeToSystemTray: { 624 closeToSystemTray: {
599 label: intl.formatMessage(messages.closeToSystemTray), 625 label: intl.formatMessage(messages.closeToSystemTray),
600 value: settings.all.app.closeToSystemTray, 626 value: ifUndefined<boolean>(
627 settings.all.app.closeToSystemTray,
628 DEFAULT_APP_SETTINGS.closeToSystemTray,
629 ),
601 default: DEFAULT_APP_SETTINGS.closeToSystemTray, 630 default: DEFAULT_APP_SETTINGS.closeToSystemTray,
602 type: 'checkbox', 631 type: 'checkbox',
603 }, 632 },
604 privateNotifications: { 633 privateNotifications: {
605 label: intl.formatMessage(messages.privateNotifications), 634 label: intl.formatMessage(messages.privateNotifications),
606 value: settings.all.app.privateNotifications, 635 value: ifUndefined<boolean>(
636 settings.all.app.privateNotifications,
637 DEFAULT_APP_SETTINGS.privateNotifications,
638 ),
607 default: DEFAULT_APP_SETTINGS.privateNotifications, 639 default: DEFAULT_APP_SETTINGS.privateNotifications,
608 type: 'checkbox', 640 type: 'checkbox',
609 }, 641 },
610 clipboardNotifications: { 642 clipboardNotifications: {
611 label: intl.formatMessage(messages.clipboardNotifications), 643 label: intl.formatMessage(messages.clipboardNotifications),
612 value: settings.all.app.clipboardNotifications, 644 value: ifUndefined<boolean>(
645 settings.all.app.clipboardNotifications,
646 DEFAULT_APP_SETTINGS.clipboardNotifications,
647 ),
613 default: DEFAULT_APP_SETTINGS.clipboardNotifications, 648 default: DEFAULT_APP_SETTINGS.clipboardNotifications,
614 type: 'checkbox', 649 type: 'checkbox',
615 }, 650 },
616 notifyTaskBarOnMessage: { 651 notifyTaskBarOnMessage: {
617 label: intl.formatMessage(messages.notifyTaskBarOnMessage), 652 label: intl.formatMessage(messages.notifyTaskBarOnMessage),
618 value: settings.all.app.notifyTaskBarOnMessage, 653 value: ifUndefined<boolean>(
654 settings.all.app.notifyTaskBarOnMessage,
655 DEFAULT_APP_SETTINGS.notifyTaskBarOnMessage,
656 ),
619 default: DEFAULT_APP_SETTINGS.notifyTaskBarOnMessage, 657 default: DEFAULT_APP_SETTINGS.notifyTaskBarOnMessage,
620 type: 'checkbox', 658 type: 'checkbox',
621 }, 659 },
622 navigationBarBehaviour: { 660 navigationBarBehaviour: {
623 label: intl.formatMessage(messages.navigationBarBehaviour), 661 label: intl.formatMessage(messages.navigationBarBehaviour),
624 value: settings.all.app.navigationBarBehaviour, 662 value: ifUndefined<string>(
663 settings.all.app.navigationBarBehaviour,
664 DEFAULT_APP_SETTINGS.navigationBarBehaviour,
665 ),
625 default: DEFAULT_APP_SETTINGS.navigationBarBehaviour, 666 default: DEFAULT_APP_SETTINGS.navigationBarBehaviour,
626 options: navigationBarBehaviours, 667 options: navigationBarBehaviours,
627 }, 668 },
628 webRTCIPHandlingPolicy: { 669 webRTCIPHandlingPolicy: {
629 label: intl.formatMessage(messages.webRTCIPHandlingPolicy), 670 label: intl.formatMessage(messages.webRTCIPHandlingPolicy),
630 value: settings.all.app.webRTCIPHandlingPolicy, 671 value: ifUndefined<string>(
672 settings.all.app.webRTCIPHandlingPolicy,
673 DEFAULT_APP_SETTINGS.webRTCIPHandlingPolicy,
674 ),
631 default: DEFAULT_APP_SETTINGS.webRTCIPHandlingPolicy, 675 default: DEFAULT_APP_SETTINGS.webRTCIPHandlingPolicy,
632 options: webRTCIPHandlingPolicies, 676 options: webRTCIPHandlingPolicies,
633 type: 'checkbox', 677 type: 'checkbox',
634 }, 678 },
635 searchEngine: { 679 searchEngine: {
636 label: intl.formatMessage(messages.searchEngine), 680 label: intl.formatMessage(messages.searchEngine),
637 value: settings.all.app.searchEngine, 681 value: ifUndefined<string>(
682 settings.all.app.searchEngine,
683 DEFAULT_APP_SETTINGS.searchEngine,
684 ),
638 default: DEFAULT_APP_SETTINGS.searchEngine, 685 default: DEFAULT_APP_SETTINGS.searchEngine,
639 options: searchEngines, 686 options: searchEngines,
640 }, 687 },
641 translatorEngine: { 688 translatorEngine: {
642 label: intl.formatMessage(messages.translatorEngine), 689 label: intl.formatMessage(messages.translatorEngine),
643 value: settings.all.app.translatorEngine, 690 value: ifUndefined<string>(
691 settings.all.app.translatorEngine,
692 DEFAULT_APP_SETTINGS.translatorEngine,
693 ),
644 default: DEFAULT_APP_SETTINGS.translatorEngine, 694 default: DEFAULT_APP_SETTINGS.translatorEngine,
645 options: translatorEngines, 695 options: translatorEngines,
646 }, 696 },
647 translatorLanguage: { 697 translatorLanguage: {
648 label: intl.formatMessage(messages.translatorLanguage), 698 label: intl.formatMessage(messages.translatorLanguage),
649 value: settings.all.app.translatorLanguage, 699 value: ifUndefined<string>(
700 settings.all.app.translatorLanguage,
701 DEFAULT_APP_SETTINGS.translatorLanguage,
702 ),
650 default: DEFAULT_APP_SETTINGS.translatorLanguage, 703 default: DEFAULT_APP_SETTINGS.translatorLanguage,
651 options: translatorLanguages, 704 options: translatorLanguages,
652 }, 705 },
653 sentry: { 706 sentry: {
654 label: intl.formatMessage(messages.sentry), 707 label: intl.formatMessage(messages.sentry),
655 value: settings.all.app.sentry, 708 value: ifUndefined<boolean>(
709 settings.all.app.sentry,
710 DEFAULT_APP_SETTINGS.sentry,
711 ),
656 default: DEFAULT_APP_SETTINGS.sentry, 712 default: DEFAULT_APP_SETTINGS.sentry,
657 type: 'checkbox', 713 type: 'checkbox',
658 }, 714 },
659 hibernateOnStartup: { 715 hibernateOnStartup: {
660 label: intl.formatMessage(messages.hibernateOnStartup), 716 label: intl.formatMessage(messages.hibernateOnStartup),
661 value: settings.all.app.hibernateOnStartup, 717 value: ifUndefined<boolean>(
718 settings.all.app.hibernateOnStartup,
719 DEFAULT_APP_SETTINGS.hibernateOnStartup,
720 ),
662 default: DEFAULT_APP_SETTINGS.hibernateOnStartup, 721 default: DEFAULT_APP_SETTINGS.hibernateOnStartup,
663 type: 'checkbox', 722 type: 'checkbox',
664 }, 723 },
665 hibernationStrategy: { 724 hibernationStrategy: {
666 label: intl.formatMessage(messages.hibernationStrategy), 725 label: intl.formatMessage(messages.hibernationStrategy),
667 value: settings.all.app.hibernationStrategy, 726 value: ifUndefined<string>(
668 options: hibernationStrategies, 727 settings.all.app.hibernationStrategy,
728 DEFAULT_APP_SETTINGS.hibernationStrategy,
729 ),
669 default: DEFAULT_APP_SETTINGS.hibernationStrategy, 730 default: DEFAULT_APP_SETTINGS.hibernationStrategy,
731 options: hibernationStrategies,
670 }, 732 },
671 wakeUpStrategy: { 733 wakeUpStrategy: {
672 label: intl.formatMessage(messages.wakeUpStrategy), 734 label: intl.formatMessage(messages.wakeUpStrategy),
673 value: settings.all.app.wakeUpStrategy, 735 value: ifUndefined<string>(
674 options: wakeUpStrategies, 736 settings.all.app.wakeUpStrategy,
737 DEFAULT_APP_SETTINGS.wakeUpStrategy,
738 ),
675 default: DEFAULT_APP_SETTINGS.wakeUpStrategy, 739 default: DEFAULT_APP_SETTINGS.wakeUpStrategy,
740 options: wakeUpStrategies,
676 }, 741 },
677 wakeUpHibernationStrategy: { 742 wakeUpHibernationStrategy: {
678 label: intl.formatMessage(messages.wakeUpHibernationStrategy), 743 label: intl.formatMessage(messages.wakeUpHibernationStrategy),
679 value: settings.all.app.wakeUpHibernationStrategy, 744 value: ifUndefined<string>(
680 options: wakeUpHibernationStrategies, 745 settings.all.app.wakeUpHibernationStrategy,
746 DEFAULT_APP_SETTINGS.wakeUpHibernationStrategy,
747 ),
681 default: DEFAULT_APP_SETTINGS.wakeUpHibernationStrategy, 748 default: DEFAULT_APP_SETTINGS.wakeUpHibernationStrategy,
749 options: wakeUpHibernationStrategies,
682 }, 750 },
683 wakeUpHibernationSplay: { 751 wakeUpHibernationSplay: {
684 label: intl.formatMessage(messages.wakeUpHibernationSplay), 752 label: intl.formatMessage(messages.wakeUpHibernationSplay),
685 value: settings.all.app.wakeUpHibernationSplay, 753 value: ifUndefined<boolean>(
754 settings.all.app.wakeUpHibernationSplay,
755 DEFAULT_APP_SETTINGS.wakeUpHibernationSplay,
756 ),
686 default: DEFAULT_APP_SETTINGS.wakeUpHibernationSplay, 757 default: DEFAULT_APP_SETTINGS.wakeUpHibernationSplay,
687 type: 'checkbox', 758 type: 'checkbox',
688 }, 759 },
689 predefinedTodoServer: { 760 predefinedTodoServer: {
690 label: intl.formatMessage(messages.predefinedTodoServer), 761 label: intl.formatMessage(messages.predefinedTodoServer),
691 value: settings.all.app.predefinedTodoServer, 762 value: ifUndefined<string>(
763 settings.all.app.predefinedTodoServer,
764 DEFAULT_APP_SETTINGS.predefinedTodoServer,
765 ),
692 default: DEFAULT_APP_SETTINGS.predefinedTodoServer, 766 default: DEFAULT_APP_SETTINGS.predefinedTodoServer,
693 options: todoApp, 767 options: todoApp,
694 }, 768 },
695 customTodoServer: { 769 customTodoServer: {
696 label: intl.formatMessage(messages.customTodoServer), 770 label: intl.formatMessage(messages.customTodoServer),
697 value: settings.all.app.customTodoServer, 771 value: ifUndefined<string>(
772 settings.all.app.customTodoServer,
773 DEFAULT_APP_SETTINGS.customTodoServer,
774 ),
698 default: DEFAULT_APP_SETTINGS.customTodoServer, 775 default: DEFAULT_APP_SETTINGS.customTodoServer,
699 }, 776 },
700 lockingFeatureEnabled: { 777 lockingFeatureEnabled: {
701 label: intl.formatMessage(messages.enableLock), 778 label: intl.formatMessage(messages.enableLock),
702 value: settings.all.app.lockingFeatureEnabled || false, 779 value: ifUndefined<boolean>(
780 settings.all.app.lockingFeatureEnabled,
781 DEFAULT_APP_SETTINGS.lockingFeatureEnabled,
782 ),
703 default: DEFAULT_APP_SETTINGS.lockingFeatureEnabled, 783 default: DEFAULT_APP_SETTINGS.lockingFeatureEnabled,
704 type: 'checkbox', 784 type: 'checkbox',
705 }, 785 },
706 lockedPassword: { 786 lockedPassword: {
707 label: intl.formatMessage(messages.lockPassword), 787 label: intl.formatMessage(messages.lockPassword),
708 value: lockedPassword, 788 value: ifUndefined<string>(
709 default: '', 789 lockedPassword,
790 DEFAULT_APP_SETTINGS.lockedPassword,
791 ),
792 default: DEFAULT_APP_SETTINGS.lockedPassword,
710 type: 'password', 793 type: 'password',
711 }, 794 },
712 useTouchIdToUnlock: { 795 useTouchIdToUnlock: {
713 label: intl.formatMessage(messages.useTouchIdToUnlock), 796 label: intl.formatMessage(messages.useTouchIdToUnlock),
714 value: settings.all.app.useTouchIdToUnlock, 797 value: ifUndefined<boolean>(
798 settings.all.app.useTouchIdToUnlock,
799 DEFAULT_APP_SETTINGS.useTouchIdToUnlock,
800 ),
715 default: DEFAULT_APP_SETTINGS.useTouchIdToUnlock, 801 default: DEFAULT_APP_SETTINGS.useTouchIdToUnlock,
716 type: 'checkbox', 802 type: 'checkbox',
717 }, 803 },
718 inactivityLock: { 804 inactivityLock: {
719 label: intl.formatMessage(messages.inactivityLock), 805 label: intl.formatMessage(messages.inactivityLock),
720 value: settings.all.app.inactivityLock, 806 value: ifUndefined<number>(
721 default: 0, 807 settings.all.app.inactivityLock,
808 DEFAULT_APP_SETTINGS.inactivityLock,
809 ),
810 default: DEFAULT_APP_SETTINGS.inactivityLock,
722 type: 'number', 811 type: 'number',
723 }, 812 },
724 scheduledDNDEnabled: { 813 scheduledDNDEnabled: {
725 label: intl.formatMessage(messages.scheduledDNDEnabled), 814 label: intl.formatMessage(messages.scheduledDNDEnabled),
726 value: settings.all.app.scheduledDNDEnabled || false, 815 value: ifUndefined<boolean>(
816 settings.all.app.scheduledDNDEnabled,
817 DEFAULT_APP_SETTINGS.scheduledDNDEnabled,
818 ),
727 default: DEFAULT_APP_SETTINGS.scheduledDNDEnabled, 819 default: DEFAULT_APP_SETTINGS.scheduledDNDEnabled,
728 type: 'checkbox', 820 type: 'checkbox',
729 }, 821 },
730 scheduledDNDStart: { 822 scheduledDNDStart: {
731 label: intl.formatMessage(messages.scheduledDNDStart), 823 label: intl.formatMessage(messages.scheduledDNDStart),
732 value: settings.all.app.scheduledDNDStart, 824 value: ifUndefined<string>(
733 default: '17:00', 825 settings.all.app.scheduledDNDStart,
826 DEFAULT_APP_SETTINGS.scheduledDNDStart,
827 ),
828 default: DEFAULT_APP_SETTINGS.scheduledDNDStart,
734 type: 'time', 829 type: 'time',
735 }, 830 },
736 scheduledDNDEnd: { 831 scheduledDNDEnd: {
737 label: intl.formatMessage(messages.scheduledDNDEnd), 832 label: intl.formatMessage(messages.scheduledDNDEnd),
738 value: settings.all.app.scheduledDNDEnd, 833 value: ifUndefined<string>(
739 default: '09:00', 834 settings.all.app.scheduledDNDEnd,
835 DEFAULT_APP_SETTINGS.scheduledDNDEnd,
836 ),
837 default: DEFAULT_APP_SETTINGS.scheduledDNDEnd,
740 type: 'time', 838 type: 'time',
741 }, 839 },
742 showDisabledServices: { 840 showDisabledServices: {
743 label: intl.formatMessage(messages.showDisabledServices), 841 label: intl.formatMessage(messages.showDisabledServices),
744 value: settings.all.app.showDisabledServices, 842 value: ifUndefined<boolean>(
843 settings.all.app.showDisabledServices,
844 DEFAULT_APP_SETTINGS.showDisabledServices,
845 ),
745 default: DEFAULT_APP_SETTINGS.showDisabledServices, 846 default: DEFAULT_APP_SETTINGS.showDisabledServices,
746 type: 'checkbox', 847 type: 'checkbox',
747 }, 848 },
748 showServiceName: { 849 showServiceName: {
749 label: intl.formatMessage(messages.showServiceName), 850 label: intl.formatMessage(messages.showServiceName),
750 value: settings.all.app.showServiceName, 851 value: ifUndefined<boolean>(
852 settings.all.app.showServiceName,
853 DEFAULT_APP_SETTINGS.showServiceName,
854 ),
751 default: DEFAULT_APP_SETTINGS.showServiceName, 855 default: DEFAULT_APP_SETTINGS.showServiceName,
752 type: 'checkbox',
753 }, 856 },
754 showMessageBadgeWhenMuted: { 857 showMessageBadgeWhenMuted: {
755 label: intl.formatMessage(messages.showMessageBadgeWhenMuted), 858 label: intl.formatMessage(messages.showMessageBadgeWhenMuted),
756 value: settings.all.app.showMessageBadgeWhenMuted, 859 value: ifUndefined<boolean>(
860 settings.all.app.showMessageBadgeWhenMuted,
861 DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted,
862 ),
757 default: DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted, 863 default: DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted,
758 type: 'checkbox', 864 type: 'checkbox',
759 }, 865 },
760 showDragArea: { 866 showDragArea: {
761 label: intl.formatMessage(messages.showDragArea), 867 label: intl.formatMessage(messages.showDragArea),
762 value: settings.all.app.showDragArea, 868 value: ifUndefined<boolean>(
869 settings.all.app.showDragArea,
870 DEFAULT_APP_SETTINGS.showDragArea,
871 ),
763 default: DEFAULT_APP_SETTINGS.showDragArea, 872 default: DEFAULT_APP_SETTINGS.showDragArea,
764 type: 'checkbox', 873 type: 'checkbox',
765 }, 874 },
766 enableSpellchecking: { 875 enableSpellchecking: {
767 label: intl.formatMessage(messages.enableSpellchecking), 876 label: intl.formatMessage(messages.enableSpellchecking),
768 value: settings.all.app.enableSpellchecking, 877 value: ifUndefined<boolean>(
878 settings.all.app.enableSpellchecking,
879 DEFAULT_APP_SETTINGS.enableSpellchecking,
880 ),
769 default: DEFAULT_APP_SETTINGS.enableSpellchecking, 881 default: DEFAULT_APP_SETTINGS.enableSpellchecking,
770 type: 'checkbox', 882 type: 'checkbox',
771 }, 883 },
772 enableTranslator: { 884 enableTranslator: {
773 label: intl.formatMessage(messages.enableTranslator), 885 label: intl.formatMessage(messages.enableTranslator),
774 value: settings.all.app.enableTranslator, 886 value: ifUndefined<boolean>(
887 settings.all.app.enableTranslator,
888 DEFAULT_APP_SETTINGS.enableTranslator,
889 ),
775 default: DEFAULT_APP_SETTINGS.enableTranslator, 890 default: DEFAULT_APP_SETTINGS.enableTranslator,
776 type: 'checkbox', 891 type: 'checkbox',
777 }, 892 },
778 spellcheckerLanguage: { 893 spellcheckerLanguage: {
779 label: intl.formatMessage(globalMessages.spellcheckerLanguage), 894 label: intl.formatMessage(globalMessages.spellcheckerLanguage),
780 value: settings.all.app.spellcheckerLanguage, 895 value: ifUndefined<string>(
781 options: spellcheckingLanguages, 896 settings.all.app.spellcheckerLanguage,
897 DEFAULT_APP_SETTINGS.spellcheckerLanguage,
898 ),
782 default: DEFAULT_APP_SETTINGS.spellcheckerLanguage, 899 default: DEFAULT_APP_SETTINGS.spellcheckerLanguage,
900 options: spellcheckingLanguages,
783 }, 901 },
784 userAgentPref: { 902 userAgentPref: {
785 label: intl.formatMessage(globalMessages.userAgentPref), 903 label: intl.formatMessage(globalMessages.userAgentPref),
786 value: settings.all.app.userAgentPref, 904 value: ifUndefined<string>(
905 settings.all.app.userAgentPref,
906 DEFAULT_APP_SETTINGS.userAgentPref,
907 ),
787 default: DEFAULT_APP_SETTINGS.userAgentPref, 908 default: DEFAULT_APP_SETTINGS.userAgentPref,
788 placeholder: defaultUserAgent(), 909 placeholder: defaultUserAgent(),
789 }, 910 },
790 darkMode: { 911 darkMode: {
791 label: intl.formatMessage(messages.darkMode), 912 label: intl.formatMessage(messages.darkMode),
792 value: settings.all.app.darkMode, 913 value: ifUndefined<boolean>(
914 settings.all.app.darkMode,
915 DEFAULT_APP_SETTINGS.darkMode,
916 ),
793 default: DEFAULT_APP_SETTINGS.darkMode, 917 default: DEFAULT_APP_SETTINGS.darkMode,
794 type: 'checkbox', 918 type: 'checkbox',
795 }, 919 },
796 adaptableDarkMode: { 920 adaptableDarkMode: {
797 label: intl.formatMessage(messages.adaptableDarkMode), 921 label: intl.formatMessage(messages.adaptableDarkMode),
798 value: settings.all.app.adaptableDarkMode, 922 value: ifUndefined<boolean>(
923 settings.all.app.adaptableDarkMode,
924 DEFAULT_APP_SETTINGS.adaptableDarkMode,
925 ),
799 default: DEFAULT_APP_SETTINGS.adaptableDarkMode, 926 default: DEFAULT_APP_SETTINGS.adaptableDarkMode,
800 type: 'checkbox', 927 type: 'checkbox',
801 }, 928 },
802 universalDarkMode: { 929 universalDarkMode: {
803 label: intl.formatMessage(messages.universalDarkMode), 930 label: intl.formatMessage(messages.universalDarkMode),
804 value: settings.all.app.universalDarkMode, 931 value: ifUndefined<boolean>(
932 settings.all.app.universalDarkMode,
933 DEFAULT_APP_SETTINGS.universalDarkMode,
934 ),
805 default: DEFAULT_APP_SETTINGS.universalDarkMode, 935 default: DEFAULT_APP_SETTINGS.universalDarkMode,
806 type: 'checkbox', 936 type: 'checkbox',
807 }, 937 },
808 splitMode: { 938 splitMode: {
809 label: intl.formatMessage(messages.splitMode), 939 label: intl.formatMessage(messages.splitMode),
810 value: settings.all.app.splitMode, 940 value: ifUndefined<boolean>(
941 settings.all.app.splitMode,
942 DEFAULT_APP_SETTINGS.splitMode,
943 ),
811 default: DEFAULT_APP_SETTINGS.splitMode, 944 default: DEFAULT_APP_SETTINGS.splitMode,
812 type: 'checkbox', 945 type: 'checkbox',
813 }, 946 },
@@ -815,129 +948,192 @@ class EditSettingsScreen extends Component<EditSettingsScreenProps> {
815 label: `${intl.formatMessage( 948 label: `${intl.formatMessage(
816 messages.splitColumns, 949 messages.splitColumns,
817 )} (${SPLIT_COLUMNS_MIN}-${SPLIT_COLUMNS_MAX})`, 950 )} (${SPLIT_COLUMNS_MIN}-${SPLIT_COLUMNS_MAX})`,
818 value: settings.all.app.splitColumns, 951 value: ifUndefined<number>(
952 settings.all.app.splitColumns,
953 DEFAULT_APP_SETTINGS.splitColumns,
954 ),
819 default: DEFAULT_APP_SETTINGS.splitColumns, 955 default: DEFAULT_APP_SETTINGS.splitColumns,
820 }, 956 },
821 serviceRibbonWidth: { 957 serviceRibbonWidth: {
822 label: intl.formatMessage(messages.serviceRibbonWidth), 958 label: intl.formatMessage(messages.serviceRibbonWidth),
823 value: settings.all.app.serviceRibbonWidth, 959 value: ifUndefined<number>(
960 settings.all.app.serviceRibbonWidth,
961 DEFAULT_APP_SETTINGS.serviceRibbonWidth,
962 ),
824 default: DEFAULT_APP_SETTINGS.serviceRibbonWidth, 963 default: DEFAULT_APP_SETTINGS.serviceRibbonWidth,
825 options: sidebarWidth, 964 options: sidebarWidth,
826 }, 965 },
827 sidebarServicesLocation: { 966 sidebarServicesLocation: {
828 label: intl.formatMessage(messages.sidebarServicesLocation), 967 label: intl.formatMessage(messages.sidebarServicesLocation),
829 value: settings.all.app.sidebarServicesLocation, 968 value: ifUndefined<number>(
969 settings.all.app.sidebarServicesLocation,
970 DEFAULT_APP_SETTINGS.sidebarServicesLocation,
971 ),
830 default: DEFAULT_APP_SETTINGS.sidebarServicesLocation, 972 default: DEFAULT_APP_SETTINGS.sidebarServicesLocation,
831 options: sidebarServicesLocation, 973 options: sidebarServicesLocation,
832 }, 974 },
833 iconSize: { 975 iconSize: {
834 label: intl.formatMessage(messages.iconSize), 976 label: intl.formatMessage(messages.iconSize),
835 value: settings.all.app.iconSize, 977 value: ifUndefined<number>(
978 settings.all.app.iconSize,
979 DEFAULT_APP_SETTINGS.iconSize,
980 ),
836 default: DEFAULT_APP_SETTINGS.iconSize, 981 default: DEFAULT_APP_SETTINGS.iconSize,
837 options: iconSizes, 982 options: iconSizes,
838 }, 983 },
839 enableLongPressServiceHint: { 984 enableLongPressServiceHint: {
840 label: intl.formatMessage(messages.enableLongPressServiceHint), 985 label: intl.formatMessage(messages.enableLongPressServiceHint),
841 value: settings.all.app.enableLongPressServiceHint, 986 value: ifUndefined<boolean>(
987 settings.all.app.enableLongPressServiceHint,
988 DEFAULT_APP_SETTINGS.enableLongPressServiceHint,
989 ),
842 default: DEFAULT_APP_SETTINGS.enableLongPressServiceHint, 990 default: DEFAULT_APP_SETTINGS.enableLongPressServiceHint,
843 type: 'checkbox', 991 type: 'checkbox',
844 }, 992 },
845 useHorizontalStyle: { 993 useHorizontalStyle: {
846 label: intl.formatMessage(messages.useHorizontalStyle), 994 label: intl.formatMessage(messages.useHorizontalStyle),
847 value: settings.all.app.useHorizontalStyle, 995 value: ifUndefined<boolean>(
996 settings.all.app.useHorizontalStyle,
997 DEFAULT_APP_SETTINGS.useHorizontalStyle,
998 ),
848 default: DEFAULT_APP_SETTINGS.useHorizontalStyle, 999 default: DEFAULT_APP_SETTINGS.useHorizontalStyle,
849 type: 'checkbox', 1000 type: 'checkbox',
850 }, 1001 },
851 hideCollapseButton: { 1002 hideCollapseButton: {
852 label: intl.formatMessage(messages.hideCollapseButton), 1003 label: intl.formatMessage(messages.hideCollapseButton),
853 value: settings.all.app.hideCollapseButton, 1004 value: ifUndefined<boolean>(
1005 settings.all.app.hideCollapseButton,
1006 DEFAULT_APP_SETTINGS.hideCollapseButton,
1007 ),
854 default: DEFAULT_APP_SETTINGS.hideCollapseButton, 1008 default: DEFAULT_APP_SETTINGS.hideCollapseButton,
855 type: 'checkbox', 1009 type: 'checkbox',
856 }, 1010 },
857 hideRecipesButton: { 1011 hideRecipesButton: {
858 label: intl.formatMessage(messages.hideRecipesButton), 1012 label: intl.formatMessage(messages.hideRecipesButton),
859 value: settings.all.app.hideRecipesButton, 1013 value: ifUndefined<boolean>(
1014 settings.all.app.hideRecipesButton,
1015 DEFAULT_APP_SETTINGS.hideRecipesButton,
1016 ),
860 default: DEFAULT_APP_SETTINGS.hideRecipesButton, 1017 default: DEFAULT_APP_SETTINGS.hideRecipesButton,
861 type: 'checkbox', 1018 type: 'checkbox',
862 }, 1019 },
863 hideSplitModeButton: { 1020 hideSplitModeButton: {
864 label: intl.formatMessage(messages.hideSplitModeButton), 1021 label: intl.formatMessage(messages.hideSplitModeButton),
865 value: settings.all.app.hideSplitModeButton, 1022 value: ifUndefined<boolean>(
1023 settings.all.app.hideSplitModeButton,
1024 DEFAULT_APP_SETTINGS.hideSplitModeButton,
1025 ),
866 default: DEFAULT_APP_SETTINGS.hideSplitModeButton, 1026 default: DEFAULT_APP_SETTINGS.hideSplitModeButton,
867 type: 'checkbox', 1027 type: 'checkbox',
868 }, 1028 },
869 useGrayscaleServices: { 1029 useGrayscaleServices: {
870 label: intl.formatMessage(messages.useGrayscaleServices), 1030 label: intl.formatMessage(messages.useGrayscaleServices),
871 value: settings.all.app.useGrayscaleServices, 1031 value: ifUndefined<boolean>(
1032 settings.all.app.useGrayscaleServices,
1033 DEFAULT_APP_SETTINGS.useGrayscaleServices,
1034 ),
872 default: DEFAULT_APP_SETTINGS.useGrayscaleServices, 1035 default: DEFAULT_APP_SETTINGS.useGrayscaleServices,
873 type: 'checkbox', 1036 type: 'checkbox',
874 }, 1037 },
875 grayscaleServicesDim: { 1038 grayscaleServicesDim: {
876 label: intl.formatMessage(messages.grayscaleServicesDim), 1039 label: intl.formatMessage(messages.grayscaleServicesDim),
877 value: settings.all.app.grayscaleServicesDim, 1040 value: ifUndefined<number>(
1041 settings.all.app.grayscaleServicesDim,
1042 DEFAULT_APP_SETTINGS.grayscaleServicesDim,
1043 ),
878 default: DEFAULT_APP_SETTINGS.grayscaleServicesDim, 1044 default: DEFAULT_APP_SETTINGS.grayscaleServicesDim,
879 }, 1045 },
880 hideWorkspacesButton: { 1046 hideWorkspacesButton: {
881 label: intl.formatMessage(messages.hideWorkspacesButton), 1047 label: intl.formatMessage(messages.hideWorkspacesButton),
882 value: settings.all.app.hideWorkspacesButton, 1048 value: ifUndefined<boolean>(
1049 settings.all.app.hideWorkspacesButton,
1050 DEFAULT_APP_SETTINGS.hideWorkspacesButton,
1051 ),
883 default: DEFAULT_APP_SETTINGS.hideWorkspacesButton, 1052 default: DEFAULT_APP_SETTINGS.hideWorkspacesButton,
884 type: 'checkbox', 1053 type: 'checkbox',
885 }, 1054 },
886 hideNotificationsButton: { 1055 hideNotificationsButton: {
887 label: intl.formatMessage(messages.hideNotificationsButton), 1056 label: intl.formatMessage(messages.hideNotificationsButton),
888 value: settings.all.app.hideNotificationsButton, 1057 value: ifUndefined<boolean>(
1058 settings.all.app.hideNotificationsButton,
1059 DEFAULT_APP_SETTINGS.hideNotificationsButton,
1060 ),
889 default: DEFAULT_APP_SETTINGS.hideNotificationsButton, 1061 default: DEFAULT_APP_SETTINGS.hideNotificationsButton,
890 type: 'checkbox', 1062 type: 'checkbox',
891 }, 1063 },
892 hideSettingsButton: { 1064 hideSettingsButton: {
893 label: intl.formatMessage(messages.hideSettingsButton), 1065 label: intl.formatMessage(messages.hideSettingsButton),
894 value: settings.all.app.hideSettingsButton, 1066 value: ifUndefined<boolean>(
1067 settings.all.app.hideSettingsButton,
1068 DEFAULT_APP_SETTINGS.hideSettingsButton,
1069 ),
895 default: DEFAULT_APP_SETTINGS.hideSettingsButton, 1070 default: DEFAULT_APP_SETTINGS.hideSettingsButton,
896 type: 'checkbox', 1071 type: 'checkbox',
897 }, 1072 },
898 alwaysShowWorkspaces: { 1073 alwaysShowWorkspaces: {
899 label: intl.formatMessage(messages.alwaysShowWorkspaces), 1074 label: intl.formatMessage(messages.alwaysShowWorkspaces),
900 value: settings.all.app.alwaysShowWorkspaces, 1075 value: ifUndefined<boolean>(
1076 settings.all.app.alwaysShowWorkspaces,
1077 DEFAULT_APP_SETTINGS.alwaysShowWorkspaces,
1078 ),
901 default: DEFAULT_APP_SETTINGS.alwaysShowWorkspaces, 1079 default: DEFAULT_APP_SETTINGS.alwaysShowWorkspaces,
902 type: 'checkbox', 1080 type: 'checkbox',
903 }, 1081 },
904 accentColor: { 1082 accentColor: {
905 label: intl.formatMessage(messages.accentColor), 1083 label: intl.formatMessage(messages.accentColor),
906 value: settings.all.app.accentColor, 1084 value: ifUndefined<string>(
1085 settings.all.app.accentColor,
1086 DEFAULT_APP_SETTINGS.accentColor,
1087 ),
907 default: DEFAULT_APP_SETTINGS.accentColor, 1088 default: DEFAULT_APP_SETTINGS.accentColor,
908 }, 1089 },
909 progressbarAccentColor: { 1090 progressbarAccentColor: {
910 label: intl.formatMessage(messages.progressbarAccentColor), 1091 label: intl.formatMessage(messages.progressbarAccentColor),
911 value: settings.all.app.progressbarAccentColor, 1092 value: ifUndefined<string>(
1093 settings.all.app.progressbarAccentColor,
1094 DEFAULT_APP_SETTINGS.progressbarAccentColor,
1095 ),
912 default: DEFAULT_APP_SETTINGS.progressbarAccentColor, 1096 default: DEFAULT_APP_SETTINGS.progressbarAccentColor,
913 }, 1097 },
914 enableGPUAcceleration: { 1098 enableGPUAcceleration: {
915 label: intl.formatMessage(messages.enableGPUAcceleration), 1099 label: intl.formatMessage(messages.enableGPUAcceleration),
916 value: settings.all.app.enableGPUAcceleration, 1100 value: ifUndefined<boolean>(
1101 settings.all.app.enableGPUAcceleration,
1102 DEFAULT_APP_SETTINGS.enableGPUAcceleration,
1103 ),
917 default: DEFAULT_APP_SETTINGS.enableGPUAcceleration, 1104 default: DEFAULT_APP_SETTINGS.enableGPUAcceleration,
918 type: 'checkbox', 1105 type: 'checkbox',
919 }, 1106 },
920 enableGlobalHideShortcut: { 1107 enableGlobalHideShortcut: {
921 label: intl.formatMessage(messages.enableGlobalHideShortcut), 1108 label: intl.formatMessage(messages.enableGlobalHideShortcut),
922 value: settings.all.app.enableGlobalHideShortcut, 1109 value: ifUndefined<boolean>(
1110 settings.all.app.enableGlobalHideShortcut,
1111 DEFAULT_APP_SETTINGS.enableGlobalHideShortcut,
1112 ),
923 default: DEFAULT_APP_SETTINGS.enableGlobalHideShortcut, 1113 default: DEFAULT_APP_SETTINGS.enableGlobalHideShortcut,
924 type: 'checkbox', 1114 type: 'checkbox',
925 }, 1115 },
926 locale: { 1116 locale: {
927 label: intl.formatMessage(messages.language), 1117 label: intl.formatMessage(messages.language),
928 value: app.locale, 1118 value: ifUndefined<string>(app.locale, DEFAULT_APP_SETTINGS.locale),
929 options: locales,
930 default: DEFAULT_APP_SETTINGS.locale, 1119 default: DEFAULT_APP_SETTINGS.locale,
1120 options: locales,
931 }, 1121 },
932 beta: { 1122 beta: {
933 label: intl.formatMessage(messages.beta), 1123 label: intl.formatMessage(messages.beta),
934 value: user.data.beta, 1124 value: ifUndefined<boolean>(
1125 user.data.beta,
1126 DEFAULT_APP_SETTINGS.beta,
1127 ),
935 default: DEFAULT_APP_SETTINGS.beta, 1128 default: DEFAULT_APP_SETTINGS.beta,
936 type: 'checkbox', 1129 type: 'checkbox',
937 }, 1130 },
938 automaticUpdates: { 1131 automaticUpdates: {
939 label: intl.formatMessage(messages.automaticUpdates), 1132 label: intl.formatMessage(messages.automaticUpdates),
940 value: settings.app.automaticUpdates, 1133 value: ifUndefined<boolean>(
1134 settings.app.automaticUpdates,
1135 DEFAULT_APP_SETTINGS.automaticUpdates,
1136 ),
941 default: DEFAULT_APP_SETTINGS.automaticUpdates, 1137 default: DEFAULT_APP_SETTINGS.automaticUpdates,
942 type: 'checkbox', 1138 type: 'checkbox',
943 }, 1139 },
@@ -955,8 +1151,11 @@ class EditSettingsScreen extends Component<EditSettingsScreenProps> {
955 if (workspaces.isFeatureActive) { 1151 if (workspaces.isFeatureActive) {
956 config.fields.keepAllWorkspacesLoaded = { 1152 config.fields.keepAllWorkspacesLoaded = {
957 label: intl.formatMessage(messages.keepAllWorkspacesLoaded), 1153 label: intl.formatMessage(messages.keepAllWorkspacesLoaded),
958 value: workspaces.settings.keepAllWorkspacesLoaded, 1154 value: ifUndefined<boolean>(
959 default: DEFAULT_SETTING_KEEP_ALL_WORKSPACES_LOADED, 1155 workspaces.settings.keepAllWorkspacesLoaded,
1156 DEFAULT_APP_SETTINGS.keepAllWorkspacesLoaded,
1157 ),
1158 default: DEFAULT_APP_SETTINGS.keepAllWorkspacesLoaded,
960 type: 'checkbox', 1159 type: 'checkbox',
961 }; 1160 };
962 } 1161 }
@@ -964,8 +1163,11 @@ class EditSettingsScreen extends Component<EditSettingsScreenProps> {
964 if (todos.isFeatureActive) { 1163 if (todos.isFeatureActive) {
965 config.fields.enableTodos = { 1164 config.fields.enableTodos = {
966 label: intl.formatMessage(messages.enableTodos), 1165 label: intl.formatMessage(messages.enableTodos),
967 value: todos.settings.isFeatureEnabledByUser, 1166 value: ifUndefined<boolean>(
968 default: DEFAULT_IS_FEATURE_ENABLED_BY_USER, 1167 todos.settings.isFeatureEnabledByUser,
1168 DEFAULT_APP_SETTINGS.isFeatureEnabledByUser,
1169 ),
1170 default: DEFAULT_APP_SETTINGS.isFeatureEnabledByUser,
969 type: 'checkbox', 1171 type: 'checkbox',
970 }; 1172 };
971 } 1173 }
diff --git a/src/features/todos/store.ts b/src/features/todos/store.ts
index 5cf5e1d75..bff099eb1 100644
--- a/src/features/todos/store.ts
+++ b/src/features/todos/store.ts
@@ -19,6 +19,7 @@ import Reaction, { createReactions } from '../../stores/lib/Reaction';
19import { createActionBindings } from '../utils/ActionBinding'; 19import { createActionBindings } from '../utils/ActionBinding';
20import { IPC, TODOS_ROUTES } from './constants'; 20import { IPC, TODOS_ROUTES } from './constants';
21import UserAgent from '../../models/UserAgent'; 21import UserAgent from '../../models/UserAgent';
22import { ifUndefined } from '../../jsUtils';
22 23
23const debug = require('../../preload-safe-debug')( 24const debug = require('../../preload-safe-debug')(
24 'Ferdium:feature:todos:store', 25 'Ferdium:feature:todos:store',
@@ -46,7 +47,7 @@ export default class TodoStore extends FeatureStore {
46 } 47 }
47 48
48 @computed get width() { 49 @computed get width() {
49 const width = this.settings.width || DEFAULT_TODOS_WIDTH; 50 const width = ifUndefined<number>(this.settings.width, DEFAULT_TODOS_WIDTH);
50 51
51 return width < TODOS_MIN_WIDTH ? TODOS_MIN_WIDTH : width; 52 return width < TODOS_MIN_WIDTH ? TODOS_MIN_WIDTH : width;
52 } 53 }
@@ -56,10 +57,10 @@ export default class TodoStore extends FeatureStore {
56 } 57 }
57 58
58 @computed get isTodosPanelVisible() { 59 @computed get isTodosPanelVisible() {
59 if (this.settings.isTodosPanelVisible === undefined) { 60 return ifUndefined<boolean>(
60 return DEFAULT_TODOS_VISIBLE; 61 this.settings.isTodosPanelVisible,
61 } 62 DEFAULT_TODOS_VISIBLE,
62 return this.settings.isTodosPanelVisible; 63 );
63 } 64 }
64 65
65 @computed get isFeatureEnabledByUser() { 66 @computed get isFeatureEnabledByUser() {
diff --git a/src/jsUtils.ts b/src/jsUtils.ts
index ba7542eab..b93d6db5b 100644
--- a/src/jsUtils.ts
+++ b/src/jsUtils.ts
@@ -1,19 +1,7 @@
1// TODO: ifUndefinedString can be removed after ./src/webview/recipe.js is converted to typescript.
2export const ifUndefinedString = (
3 source: string | undefined | null,
4 defaultValue: string,
5): string => (source !== undefined && source !== null ? source : defaultValue);
6
7export const ifUndefined = <T>( 1export const ifUndefined = <T>(
8 source: undefined | null | T, 2 source: undefined | null | T,
9 defaultValue: T, 3 defaultValue: T,
10): T => { 4): T => (source !== undefined && source !== null ? source : defaultValue);
11 if (source !== undefined && source !== null) {
12 return source;
13 }
14
15 return defaultValue;
16};
17 5
18export const convertToJSON = (data: string | any | undefined | null) => 6export const convertToJSON = (data: string | any | undefined | null) =>
19 data && typeof data === 'string' && data.length > 0 ? JSON.parse(data) : data; 7 data && typeof data === 'string' && data.length > 0 ? JSON.parse(data) : data;
diff --git a/src/webview/recipe.ts b/src/webview/recipe.ts
index 9ce52d844..b3a4a6b56 100644
--- a/src/webview/recipe.ts
+++ b/src/webview/recipe.ts
@@ -44,7 +44,7 @@ import {
44} from './spellchecker'; 44} from './spellchecker';
45 45
46import { DEFAULT_APP_SETTINGS } from '../config'; 46import { DEFAULT_APP_SETTINGS } from '../config';
47import { ifUndefinedString } from '../jsUtils'; 47import { ifUndefined } from '../jsUtils';
48import { AppStore } from '../@types/stores.types'; 48import { AppStore } from '../@types/stores.types';
49import Service from '../models/Service'; 49import Service from '../models/Service';
50 50
@@ -170,7 +170,7 @@ class RecipeController {
170 } 170 }
171 171
172 @computed get spellcheckerLanguage() { 172 @computed get spellcheckerLanguage() {
173 return ifUndefinedString( 173 return ifUndefined<string>(
174 this.settings.service.spellcheckerLanguage, 174 this.settings.service.spellcheckerLanguage,
175 this.settings.app.spellcheckerLanguage, 175 this.settings.app.spellcheckerLanguage,
176 ); 176 );