This repository has been archived on 2024-02-08. You can view files and clone it, but cannot push or open issues or pull requests.
frontend/src/App.vue

110 lines
3.4 KiB
Vue
Raw Permalink Normal View History

2018-08-28 20:50:22 +00:00
<template>
2024-02-07 11:18:19 +00:00
<Ready>
2022-01-01 12:43:24 +00:00
<template v-if="authUser">
2024-02-07 11:18:19 +00:00
<TheNavigation />
<ContentAuth />
2022-01-01 12:43:24 +00:00
</template>
2024-02-07 11:18:19 +00:00
<ContentLinkShare v-else-if="authLinkShare" />
<NoAuthWrapper v-else>
<router-view />
</NoAuthWrapper>
2023-02-03 16:04:00 +00:00
2024-02-07 11:18:19 +00:00
<KeyboardShortcuts v-if="keyboardShortcutsActive" />
2023-02-03 16:04:00 +00:00
<Teleport to="body">
2024-02-07 11:18:19 +00:00
<AddToHomeScreen />
<UpdateNotification />
<Notification />
<DemoMode />
2023-02-03 16:04:00 +00:00
</Teleport>
2024-02-07 11:18:19 +00:00
</Ready>
2018-08-28 20:50:22 +00:00
</template>
<script lang="ts" setup>
import {computed, watch} from 'vue'
import {useRoute, useRouter} from 'vue-router'
import {useI18n} from 'vue-i18n'
import isTouchDevice from 'is-touch-device'
import Notification from '@/components/misc/notification.vue'
2023-02-03 16:04:00 +00:00
import UpdateNotification from '@/components/home/UpdateNotification.vue'
import KeyboardShortcuts from '@/components/misc/keyboard-shortcuts/index.vue'
2023-02-03 16:04:00 +00:00
import TheNavigation from '@/components/home/TheNavigation.vue'
import ContentAuth from '@/components/home/contentAuth.vue'
import ContentLinkShare from '@/components/home/contentLinkShare.vue'
import NoAuthWrapper from '@/components/misc/no-auth-wrapper.vue'
import Ready from '@/components/misc/ready.vue'
2019-09-09 17:55:43 +00:00
import {setLanguage} from '@/i18n'
import {useAuthStore} from '@/stores/auth'
2022-09-24 13:20:40 +00:00
import {useBaseStore} from '@/stores/base'
import {useColorScheme} from '@/composables/useColorScheme'
2022-01-01 12:43:24 +00:00
import {useBodyClass} from '@/composables/useBodyClass'
import AddToHomeScreen from '@/components/home/AddToHomeScreen.vue'
import DemoMode from '@/components/home/DemoMode.vue'
const importAccountDeleteService = () => import('@/services/accountDelete')
const importMessage = () => import('@/message')
2022-09-24 13:20:40 +00:00
const baseStore = useBaseStore()
2022-09-21 01:37:39 +00:00
const authStore = useAuthStore()
const router = useRouter()
const route = useRoute()
useBodyClass('is-touch', isTouchDevice())
2022-09-24 13:20:40 +00:00
const keyboardShortcutsActive = computed(() => baseStore.keyboardShortcutsActive)
2022-09-21 01:37:39 +00:00
const authUser = computed(() => authStore.authUser)
const authLinkShare = computed(() => authStore.authLinkShare)
const {t} = useI18n({useScope: 'global'})
// setup account deletion verification
const accountDeletionConfirm = computed(() => route.query?.accountDeletionConfirm as (string | undefined))
watch(accountDeletionConfirm, async (accountDeletionConfirm) => {
if (accountDeletionConfirm === undefined) {
return
}
const messageP = importMessage()
const AccountDeleteService = (await importAccountDeleteService()).default
const accountDeletionService = new AccountDeleteService()
await accountDeletionService.confirm(accountDeletionConfirm)
const {success} = await messageP
success({message: t('user.deletion.confirmSuccess')})
2022-09-21 01:37:39 +00:00
authStore.refreshUserInfo()
}, { immediate: true })
// setup password reset redirect
const userPasswordReset = computed(() => route.query?.userPasswordReset as (string | undefined))
watch(userPasswordReset, (userPasswordReset) => {
if (userPasswordReset === undefined) {
return
}
localStorage.setItem('passwordResetToken', userPasswordReset)
router.push({name: 'user.password-reset.reset'})
}, { immediate: true })
// setup email verification redirect
const userEmailConfirm = computed(() => route.query?.userEmailConfirm as (string | undefined))
watch(userEmailConfirm, (userEmailConfirm) => {
if (userEmailConfirm === undefined) {
return
}
localStorage.setItem('emailConfirmToken', userEmailConfirm)
router.push({name: 'user.login'})
}, { immediate: true })
2023-06-12 16:01:56 +00:00
setLanguage(authStore.settings.language)
useColorScheme()
2018-08-28 20:50:22 +00:00
</script>
2021-10-18 12:17:34 +00:00
<style lang="scss">
@import '@/styles/global.scss';
</style>