From 6defc7fa607f0b9123055cc6c436cd9c6529252b Mon Sep 17 00:00:00 2001 From: Warinyourself Date: Sat, 5 Mar 2022 20:40:13 +0300 Subject: [PATCH] Refactor general settings tab --- src/components/base/LoginComponent.tsx | 6 +- src/components/base/settings/SettingsView.tsx | 2 +- .../settings/general/SettingsCheckboxes.tsx | 35 ++++++ .../base/settings/general/SettingsGeneral.tsx | 106 ++---------------- .../settings/general/SettingsSelectors.tsx | 75 +++++++++++++ .../base/settings/general/SettingsUsers.tsx | 31 +++++ src/locales/en.json | 11 ++ src/locales/ru.json | 11 ++ src/style/atom.styl | 6 + src/style/components/index.styl | 2 +- src/style/components/settings/hotkeys.styl | 20 ++++ .../{settings.styl => settings/index.styl} | 41 +------ src/style/components/settings/users.styl | 29 +++++ 13 files changed, 237 insertions(+), 138 deletions(-) create mode 100644 src/components/base/settings/general/SettingsCheckboxes.tsx create mode 100644 src/components/base/settings/general/SettingsSelectors.tsx create mode 100644 src/components/base/settings/general/SettingsUsers.tsx create mode 100644 src/style/components/settings/hotkeys.styl rename src/style/components/{settings.styl => settings/index.styl} (56%) create mode 100644 src/style/components/settings/users.styl diff --git a/src/components/base/LoginComponent.tsx b/src/components/base/LoginComponent.tsx index 3720867..1453bb3 100644 --- a/src/components/base/LoginComponent.tsx +++ b/src/components/base/LoginComponent.tsx @@ -7,7 +7,7 @@ import AppIcon from '@/components/app/AppIcon.vue' import UserAvatar from '@/components/base/UserAvatar' import UserInput from '@/components/base/UserInput' import SettingsView from '@/components/base/settings/SettingsView' -import { getDesktopIcon } from '@/utils/helper' +import { focusInputPassword, getDesktopIcon } from '@/utils/helper' @Component({ components: { @@ -55,6 +55,10 @@ export default class LoginComponent extends Vue { return tabs } + mounted() { + focusInputPassword() + } + activateTab(index: number) { PageModule.SET_STATE_PAGE({ key: 'mainTabIndex', value: index }) } diff --git a/src/components/base/settings/SettingsView.tsx b/src/components/base/settings/SettingsView.tsx index aa9e3cb..60eee3c 100644 --- a/src/components/base/settings/SettingsView.tsx +++ b/src/components/base/settings/SettingsView.tsx @@ -4,7 +4,7 @@ import { AppModule } from '@/store/app' import AppIcon from '@/components/app/AppIcon.vue' import SettingsThemes from '@/components/base/settings/SettingsThemes' import SettingsCustom from '@/components/base/settings/SettingsCustom' -import SettingsGeneral from '@/components/base/settings/SettingsGeneral' +import SettingsGeneral from '@/components/base/settings/general/SettingsGeneral' import { PageModule } from '@/store/page' @Component({ diff --git a/src/components/base/settings/general/SettingsCheckboxes.tsx b/src/components/base/settings/general/SettingsCheckboxes.tsx new file mode 100644 index 0000000..02f4440 --- /dev/null +++ b/src/components/base/settings/general/SettingsCheckboxes.tsx @@ -0,0 +1,35 @@ +import { Component, Vue } from 'vue-property-decorator' +import AppCheckbox from '@/components/app/AppCheckbox' +import { AppModule } from '@/store/app' + +@Component({ + components: { + AppCheckbox + } +}) +export default class SettingsCheckboxes extends Vue { + get bodyClass() { + return AppModule.bodyClass + } + + buildCheckbox(name: string) { + return { + AppModule.CHANGE_BODY_CLASS({ key: name, value }) + AppModule.syncStoreWithQuery() + }} + /> + } + + render() { + return
+

{ this.$t('settings.performance') }

+ { this.buildCheckbox('blur') } + { this.buildCheckbox('show-framerate') } + { this.buildCheckbox('no-transition') } + { this.buildCheckbox('only-ui') } +
+ } +} diff --git a/src/components/base/settings/general/SettingsGeneral.tsx b/src/components/base/settings/general/SettingsGeneral.tsx index b1a2ef1..59dc5ee 100644 --- a/src/components/base/settings/general/SettingsGeneral.tsx +++ b/src/components/base/settings/general/SettingsGeneral.tsx @@ -1,30 +1,23 @@ import { Component, Vue } from 'vue-property-decorator' -import AppSelector, { AppSelectorProps as SProps } from '@/components/app/AppSelector' -import AppCheckbox from '@/components/app/AppCheckbox' -import { PageModule } from '@/store/page' -import { LoginPosition } from '@/models/page' import { AppModule } from '@/store/app' import AppIcon from '@/components/app/AppIcon.vue' -import { generateDesktopIcons, languageMap } from '@/utils/helper' import AppButton from '@/components/app/AppButton' -import { osList } from '@/models/app' import SettingsUsers from './SettingsUsers' import SettingsHotkeys from './SettingsHotkeys' +import SettingsCheckboxes from './SettingsCheckboxes' +import SettingsSelectors from './SettingsSelectors' @Component({ components: { AppIcon, - AppSelector, SettingsUsers, - SettingsHotkeys + SettingsHotkeys, + SettingsSelectors, + SettingsCheckboxes } }) export default class SettingsGeneral extends Vue { - get bodyClass() { - return AppModule.bodyClass - } - get showFrameRate() { return AppModule.showFrameRate } @@ -33,68 +26,6 @@ export default class SettingsGeneral extends Vue { return AppModule.viewThemeOnly } - get languageList() { - return PageModule.languages.map((language) => ({ - text: languageMap[language], - value: language - })) - } - - get menuPositionItems() { - const positions = ['top', 'left', 'right', 'bottom', 'center'] - return positions.map(word => ({ - value: word, - text: this.$t(`settings.login-position.${word}`).toString() - })) - } - - get menuPositionValue() { - return { - value: PageModule.loginPosition, - text: this.$t(`settings.login-position.${PageModule.loginPosition}`).toString() - } - } - - changeLanguage(value: string) { - this.$i18n.locale = value - localStorage.setItem('language', value) - PageModule.SET_STATE_PAGE({ key: 'language', value }) - } - - changeLoginPosition(position: string) { - localStorage.setItem('loginPosition', position) - PageModule.SET_STATE_PAGE({ key: 'loginPosition', value: position as LoginPosition }) - } - - changeDesktop(value: string) { - AppModule.SAVE_STATE_APP({ key: 'desktop', value }) - } - - changeOs(value: string) { - AppModule.SAVE_STATE_APP({ key: 'currentOs', value }) - } - - buildCheckbox(name: string) { - return { - AppModule.CHANGE_BODY_CLASS({ key: name, value }) - AppModule.syncStoreWithQuery() - }} - /> - } - - buildSelector(labelI18n: SProps['label'], items: SProps['items'], value: SProps['value'], callback: (value: string) => void) { - const label = this.$t(`settings.${labelI18n}`) - return - } - resetSettings() { localStorage.clear() AppModule.setUpSettings() @@ -103,34 +34,13 @@ export default class SettingsGeneral extends Vue { if (hasQyery) { this.$router.replace({}) } } - buildSettingsSection() { - return
-

{ this.$t('settings.title') }

- { this.buildSelector('choice-language', this.languageList, PageModule.language, this.changeLanguage) } - { this.buildSelector('login-position.about', this.menuPositionItems, this.menuPositionValue, this.changeLoginPosition) } - { !this.isViewThemeOnly && this.buildSelector('choice-desktop', generateDesktopIcons(), AppModule.currentDesktop?.key, this.changeDesktop) } - { !this.isViewThemeOnly && this.buildSelector('choice-os', osList, AppModule.currentOs, this.changeOs) } -
- } - - buildCheckboxSection() { - return
-

{ this.$t('settings.performance') }

- { this.buildCheckbox('blur') } - { this.buildCheckbox('show-framerate') } - { this.buildCheckbox('no-transition') } - { this.buildCheckbox('only-ui') } -
- } - render() { return