From f4d9c4e3285bc9782187e46ee0f39748925c3689 Mon Sep 17 00:00:00 2001 From: Romain <46404814+yourcontact@users.noreply.github.com> Date: Wed, 22 Apr 2020 17:48:49 +0200 Subject: Organize settings with horizontal tabs (#569) * Align settings section titles on same row * Add className to Settings Titles to copy tab layout from 'Available Services' * Add all Settings Titles to the horizontal tab layout at the top of the form * Add state for active settings taband onClick * Add condition for each Settings div to show when activeSetttingsTab plus fix typo 'appearance' * Add condition for each Settings div to show when activeSetttingsTab plus fix typo 'appearance' * Add margins in between setting tabs * Remove 50px of top margin to minimize blank space above tabs * Remove temporary    in between tabs now that CSS is in place * Apply code changes * Delete unused code const { activeSettingsTab } = this.state; Co-authored-by: Amine Mouafik --- .../settings/settings/EditSettingsForm.js | 582 ++++++++++++--------- 1 file changed, 321 insertions(+), 261 deletions(-) (limited to 'src/components/settings') diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index 6d86c09ec..787623298 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js @@ -173,10 +173,17 @@ export default @observer class EditSettingsForm extends Component { intl: intlShape, }; - state={ + state = { + activeSetttingsTab: 'general', clearCacheButtonClicked: false, } + setActiveSettingsTab(tab) { + this.setState({ + activeSetttingsTab: tab, + }); + } + onClearCacheClicked=() => { this.setState({ clearCacheButtonClicked: true }); } @@ -241,190 +248,203 @@ export default @observer class EditSettingsForm extends Component { onChange={e => this.submit(e)} id="form" > + {/* Titles */} +
+

{ this.setActiveSettingsTab('general'); }} + > + {intl.formatMessage(messages.headlineGeneral)} +

+

{ this.setActiveSettingsTab('appearance'); }} + > + {intl.formatMessage(messages.headlineAppearance)} +

+

{ this.setActiveSettingsTab('language'); }} + > + {intl.formatMessage(messages.headlineLanguage)} +

+

{ this.setActiveSettingsTab('advanced'); }} + > + {intl.formatMessage(messages.headlineAdvanced)} +

+

{ this.setActiveSettingsTab('updates'); }} + > + {intl.formatMessage(messages.headlineUpdates)} +

+
+ {/* General */} -

{intl.formatMessage(messages.headlineGeneral)}

- - - - - - {process.platform === 'win32' && ( - - )} - - -
+
- -

{intl.formatMessage(messages.sentryInfo)}

+ +

{intl.formatMessage(messages.sentryInfo)}

-
+
- - {hibernationEnabled && ( - <> - + + + )} +

+ + { intl.formatMessage(messages.hibernateInfo) } + +

-
+
- {isTodosEnabled && ( - <> - - {isTodosActivated && ( -
- this.submit(e)} - field={form.$('customTodoServer')} - /> -

- { intl.formatMessage(messages.todoServerInfo) } -

+ this.submit(e)} + field={form.$('customTodoServer')} + /> +

+ { intl.formatMessage(messages.todoServerInfo) } +

+
+ )} )} - + )} - - )} - -
+
- - {lockingFeatureEnabled && ( - <> - {systemPreferences.canPromptTouchID() && ( - - )} - - this.submit(e)} - field={form.$('lockedPassword')} - type="password" - scorePassword - showPasswordToggle - /> -

- { intl.formatMessage(messages.lockedPasswordInfo) } -

+ + {lockingFeatureEnabled && ( + <> + {systemPreferences.canPromptTouchID() && ( + + )} - this.submit(e)} - field={form.$('inactivityLock')} - autoFocus - /> -

- { intl.formatMessage(messages.inactivityLockInfo) } -

- - )} -

- - { intl.formatMessage(messages.lockInfo) } - -

- -
- - - {scheduledDNDEnabled && ( - <> -
-
this.submit(e)} - field={form.$('scheduledDNDStart')} - type="time" + field={form.$('lockedPassword')} + type="password" + scorePassword + showPasswordToggle /> -
-
+

+ { intl.formatMessage(messages.lockedPasswordInfo) } +

+ this.submit(e)} - field={form.$('scheduledDNDEnd')} - type="time" + field={form.$('inactivityLock')} + autoFocus /> -
-
-

- { intl.formatMessage(messages.scheduledDNDTimeInfo) } +

+ { intl.formatMessage(messages.inactivityLockInfo) } +

+ + )} +

+ + { intl.formatMessage(messages.lockInfo) } +

- - )} -

- - { intl.formatMessage(messages.scheduledDNDInfo) } - -

- - - {/* Appearance */} -

{intl.formatMessage(messages.headlineAppearance)}

- - - {isMac && } - -
- - {(isMac || isWindows) && } - {!((isMac || isWindows) && isAdaptableDarkModeEnabled) && } - {(isDarkmodeEnabled || isAdaptableDarkModeEnabled) && ( - <> - +
+ + + {scheduledDNDEnabled && ( + <> +
+
+ this.submit(e)} + field={form.$('scheduledDNDStart')} + type="time" + /> +
+
+ this.submit(e)} + field={form.$('scheduledDNDEnd')} + type="time" + /> +
+
+

+ { intl.formatMessage(messages.scheduledDNDTimeInfo) } +

+ + )}

- { intl.formatMessage(messages.universalDarkModeInfo) } + { intl.formatMessage(messages.scheduledDNDInfo) }

- + )} -
+ {/* Appearance */} + { this.state.activeSetttingsTab === 'appearance' && ( +
+ + + + {isMac && } + +
+ + {(isMac || isWindows) && } + {!((isMac || isWindows) && isAdaptableDarkModeEnabled) && } + {(isDarkmodeEnabled || isAdaptableDarkModeEnabled) && ( + <> + +

+ + { intl.formatMessage(messages.universalDarkModeInfo) } + +

+ + )} - + - this.submit(e)} - field={form.$('accentColor')} - /> -

{intl.formatMessage(messages.accentColorInfo)}

+
- {/* Language */} -

{intl.formatMessage(messages.headlineLanguage)}

- - )} - - - - {intl.formatMessage(messages.translationHelp)} - {' '} - - +

{intl.formatMessage(messages.accentColorInfo)}

+
+ )} + + {/* Language */} + { this.state.activeSetttingsTab === 'language' && ( +
+ + )} + + + + {intl.formatMessage(messages.translationHelp)} + {' '} + + +
+ )} {/* Advanced */} -

{intl.formatMessage(messages.headlineAdvanced)}

- -

{intl.formatMessage(messages.enableGPUAccelerationInfo)}

-
-

- {intl.formatMessage(messages.subheadlineCache)} -

-

- {intl.formatMessage(messages.cacheInfo, { - size: cacheSize, - })} -

- {notCleared && ( -

- {intl.formatMessage(messages.cacheNotCleared) - } -

- )} -

-

+ - + )} {/* Updates */} -

{intl.formatMessage(messages.headlineUpdates)}

- - {automaticUpdates && ( + { this.state.activeSetttingsTab === 'updates' && ( +
+ + {automaticUpdates && (
{updateIsReadyToInstall ? ( @@ -544,37 +602,39 @@ export default @observer class EditSettingsForm extends Component { )}
- )} - {intl.formatMessage(messages.currentVersion)} - {' '} - {remote.app.getVersion()} - {noUpdateAvailable && ( + )} + {intl.formatMessage(messages.currentVersion)} + {' '} + {remote.app.getVersion()} + {noUpdateAvailable && ( <>

{intl.formatMessage(messages.updateStatusUpToDate)} - ) - } -

- - + ) + } +

+ + Ferdi is based on - {' '} - Franz + {' '} + Franz , a project published under the - {' '} - Apache-2.0 License - -
- - {intl.formatMessage(messages.languageDisclaimer)} -

+ {' '} + Apache-2.0 License + +
+ + {intl.formatMessage(messages.languageDisclaimer)} +

+
+ )} -- cgit v1.2.3-54-g00ecf