feat: add setting for time zone to user settings

This commit is contained in:
kolaente 2022-01-14 22:02:45 +01:00 committed by Dominik Pschenitschni
parent 59da6686d0
commit a812793ead
Signed by untrusted user: dpschen
GPG Key ID: B257AC0149F43A77
3 changed files with 35 additions and 5 deletions

View File

@ -85,7 +85,8 @@
"weekStartSunday": "Sunday", "weekStartSunday": "Sunday",
"weekStartMonday": "Monday", "weekStartMonday": "Monday",
"language": "Language", "language": "Language",
"defaultList": "Default List" "defaultList": "Default List",
"timezone": "Time Zone"
}, },
"totp": { "totp": {
"title": "Two Factor Authentication", "title": "Two Factor Authentication",

View File

@ -11,6 +11,7 @@ export default class UserSettingsModel extends AbstractModel {
overdueTasksRemindersEnabled: true, overdueTasksRemindersEnabled: true,
defaultListId: undefined, defaultListId: undefined,
weekStart: 0, weekStart: 0,
timezone: '',
} }
} }
} }

View File

@ -92,9 +92,9 @@
</div> </div>
<div class="field"> <div class="field">
<label class="is-flex is-align-items-center"> <label class="is-flex is-align-items-center">
<span> <span>
{{ $t('user.settings.appearance.title') }} {{ $t('user.settings.appearance.title') }}
</span> </span>
<div class="select ml-2"> <div class="select ml-2">
<select v-model="activeColorSchemeSetting"> <select v-model="activeColorSchemeSetting">
<!-- TODO: use the Vikunja logo in color scheme as option buttons --> <!-- TODO: use the Vikunja logo in color scheme as option buttons -->
@ -105,6 +105,20 @@
</div> </div>
</label> </label>
</div> </div>
<div class="field">
<label class="is-flex is-align-items-center">
<span>
{{ $t('user.settings.general.timezone') }}
</span>
<div class="select ml-2">
<select v-model="settings.timezone">
<option v-for="tz in availableTimezones" :key="tz">
{{ tz }}
</option>
</select>
</div>
</label>
</div>
<x-button <x-button
:loading="loading" :loading="loading"
@ -118,7 +132,7 @@
</template> </template>
<script> <script>
import {computed, watch} from 'vue' import {computed, watch, ref} from 'vue'
import {useI18n} from 'vue-i18n' import {useI18n} from 'vue-i18n'
import {playSoundWhenDoneKey, playPop} from '@/helpers/playPop' import {playSoundWhenDoneKey, playPop} from '@/helpers/playPop'
@ -129,6 +143,7 @@ import ListSearch from '@/components/tasks/partials/listSearch'
import {createRandomID} from '@/helpers/randomId' import {createRandomID} from '@/helpers/randomId'
import {useColorScheme} from '@/composables/useColorScheme' import {useColorScheme} from '@/composables/useColorScheme'
import {success} from '@/message' import {success} from '@/message'
import {AuthenticatedHTTPFactory} from '@/http-common'
const DEFAULT_LIST_ID = 0 const DEFAULT_LIST_ID = 0
@ -155,6 +170,18 @@ function useColorSchemeSetting() {
} }
} }
function useAvailableTimezones() {
const availableTimezones = ref([])
const HTTP = AuthenticatedHTTPFactory()
HTTP.get('user/timezones')
.then(r => {
availableTimezones.value = r.data.sort()
})
return availableTimezones
}
function getPlaySoundWhenDoneSetting() { function getPlaySoundWhenDoneSetting() {
return localStorage.getItem(playSoundWhenDoneKey) === 'true' || localStorage.getItem(playSoundWhenDoneKey) === null return localStorage.getItem(playSoundWhenDoneKey) === 'true' || localStorage.getItem(playSoundWhenDoneKey) === null
} }
@ -193,6 +220,7 @@ export default {
setup() { setup() {
return { return {
...useColorSchemeSetting(), ...useColorSchemeSetting(),
availableTimezones: useAvailableTimezones(),
} }
}, },