2020-11-01 18:36:00 +01:00
|
|
|
<template>
|
|
|
|
<div>
|
|
|
|
<a @click="$store.commit('menuActive', false)" class="menu-hide-button" v-if="menuActive">
|
|
|
|
<icon icon="times"></icon>
|
|
|
|
</a>
|
|
|
|
<div
|
|
|
|
:class="{'has-background': background}"
|
2021-09-08 18:28:26 +02:00
|
|
|
:style="{'background-image': background && `url(${background})`}"
|
2020-11-01 18:36:00 +01:00
|
|
|
class="app-container"
|
|
|
|
>
|
|
|
|
<navigation/>
|
|
|
|
<div
|
|
|
|
:class="[
|
2021-09-08 11:59:46 +02:00
|
|
|
{ 'is-menu-enabled': menuActive },
|
2020-11-01 18:36:00 +01:00
|
|
|
$route.name,
|
|
|
|
]"
|
|
|
|
class="app-content"
|
|
|
|
>
|
|
|
|
<a @click="$store.commit('menuActive', false)" class="mobile-overlay" v-if="menuActive"></a>
|
2021-04-18 19:32:31 +02:00
|
|
|
|
2021-05-30 20:30:08 +02:00
|
|
|
<quick-actions/>
|
|
|
|
|
2021-01-20 22:11:05 +01:00
|
|
|
<router-view/>
|
2021-04-18 19:32:31 +02:00
|
|
|
|
2021-08-20 15:17:19 +02:00
|
|
|
<router-view name="popup" v-slot="{ Component }">
|
|
|
|
<transition name="modal">
|
|
|
|
<component :is="Component" />
|
|
|
|
</transition>
|
|
|
|
</router-view>
|
2021-04-18 19:32:31 +02:00
|
|
|
|
|
|
|
<a
|
|
|
|
class="keyboard-shortcuts-button"
|
|
|
|
@click="showKeyboardShortcuts()"
|
|
|
|
@shortkey="showKeyboardShortcuts()"
|
|
|
|
v-shortkey="['?']"
|
|
|
|
>
|
2020-11-01 18:36:00 +01:00
|
|
|
<icon icon="keyboard"/>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import {mapState} from 'vuex'
|
2021-04-18 19:32:31 +02:00
|
|
|
import {CURRENT_LIST, KEYBOARD_SHORTCUTS_ACTIVE, MENU_ACTIVE} from '@/store/mutation-types'
|
2021-07-25 15:27:15 +02:00
|
|
|
import Navigation from '@/components/home/navigation.vue'
|
|
|
|
import QuickActions from '@/components/quick-actions/quick-actions.vue'
|
2020-11-01 18:36:00 +01:00
|
|
|
|
|
|
|
export default {
|
|
|
|
name: 'contentAuth',
|
2021-05-30 20:30:08 +02:00
|
|
|
components: {QuickActions, Navigation},
|
2020-11-01 18:36:00 +01:00
|
|
|
watch: {
|
2021-09-08 11:59:38 +02:00
|
|
|
'$route': {
|
|
|
|
handler: 'doStuffAfterRoute',
|
|
|
|
deep: true,
|
|
|
|
},
|
2020-11-01 18:36:00 +01:00
|
|
|
},
|
|
|
|
created() {
|
|
|
|
this.renewTokenOnFocus()
|
2021-06-03 22:23:04 +02:00
|
|
|
this.loadLabels()
|
2020-11-01 18:36:00 +01:00
|
|
|
},
|
|
|
|
computed: mapState({
|
2021-09-08 18:28:26 +02:00
|
|
|
background: 'background',
|
2020-11-01 18:36:00 +01:00
|
|
|
menuActive: MENU_ACTIVE,
|
2020-11-10 21:54:04 +01:00
|
|
|
userInfo: state => state.auth.info,
|
2021-04-07 16:37:43 +02:00
|
|
|
authenticated: state => state.auth.authenticated,
|
2020-11-01 18:36:00 +01:00
|
|
|
}),
|
|
|
|
methods: {
|
|
|
|
doStuffAfterRoute() {
|
|
|
|
// this.setTitle('') // Reset the title if the page component does not set one itself
|
2020-11-21 22:31:34 +01:00
|
|
|
this.hideMenuOnMobile()
|
2020-11-01 18:36:00 +01:00
|
|
|
this.resetCurrentList()
|
|
|
|
},
|
|
|
|
resetCurrentList() {
|
|
|
|
// Reset the current list highlight in menu if the current list is not list related.
|
|
|
|
if (
|
|
|
|
this.$route.name === 'home' ||
|
|
|
|
this.$route.name === 'namespace.edit' ||
|
|
|
|
this.$route.name === 'teams.index' ||
|
|
|
|
this.$route.name === 'teams.edit' ||
|
|
|
|
this.$route.name === 'tasks.range' ||
|
|
|
|
this.$route.name === 'labels.index' ||
|
|
|
|
this.$route.name === 'migrate.start' ||
|
|
|
|
this.$route.name === 'migrate.wunderlist' ||
|
|
|
|
this.$route.name === 'user.settings' ||
|
|
|
|
this.$route.name === 'namespaces.index'
|
|
|
|
) {
|
2021-10-16 17:51:27 +02:00
|
|
|
return this.$store.dispatch(CURRENT_LIST, null)
|
2020-11-01 18:36:00 +01:00
|
|
|
}
|
|
|
|
},
|
|
|
|
renewTokenOnFocus() {
|
|
|
|
// Try renewing the token every time vikunja is loaded initially
|
|
|
|
// (When opening the browser the focus event is not fired)
|
|
|
|
this.$store.dispatch('auth/renewToken')
|
|
|
|
|
|
|
|
// Check if the token is still valid if the window gets focus again to maybe renew it
|
|
|
|
window.addEventListener('focus', () => {
|
|
|
|
|
2021-04-07 16:37:43 +02:00
|
|
|
if (!this.authenticated) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-04-07 16:35:14 +02:00
|
|
|
const expiresIn = (this.userInfo !== null ? this.userInfo.exp : 0) - +new Date() / 1000
|
2020-11-01 18:36:00 +01:00
|
|
|
|
|
|
|
// If the token expiry is negative, it is already expired and we have no choice but to redirect
|
|
|
|
// the user to the login page
|
|
|
|
if (expiresIn < 0) {
|
|
|
|
this.$store.dispatch('auth/checkAuth')
|
|
|
|
this.$router.push({name: 'user.login'})
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if the token is valid for less than 60 hours and renew if thats the case
|
|
|
|
if (expiresIn < 60 * 3600) {
|
|
|
|
this.$store.dispatch('auth/renewToken')
|
|
|
|
console.debug('renewed token')
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
2020-11-21 22:31:34 +01:00
|
|
|
hideMenuOnMobile() {
|
|
|
|
if (window.innerWidth < 769) {
|
|
|
|
this.$store.commit(MENU_ACTIVE, false)
|
|
|
|
}
|
|
|
|
},
|
2021-04-18 19:32:31 +02:00
|
|
|
showKeyboardShortcuts() {
|
|
|
|
this.$store.commit(KEYBOARD_SHORTCUTS_ACTIVE, true)
|
|
|
|
},
|
2021-06-03 22:23:04 +02:00
|
|
|
loadLabels() {
|
|
|
|
this.$store.dispatch('labels/loadAllLabels')
|
|
|
|
},
|
2020-11-01 18:36:00 +01:00
|
|
|
},
|
|
|
|
}
|
|
|
|
</script>
|