all repos — stealth-developers @ d4fc00da139af5e431f0e19a5ab5c9d073abcdc2

pkgs/frontend/src/router/index.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '@/views/HomeView.vue'
import { useStateStore } from '@/stores/state'

const router = createRouter({
	history: createWebHistory(import.meta.env.BASE_URL),
	routes: [
		{
			path: '/',
			name: 'Home',
			component: HomeView,
		},
		{
			path: '/tickets',
			name: 'Tickets',
			component: () => import('../views/TicketsView.vue'),
			meta: {
				requiresAuth: true,
			},
		},
		{
			path: '/tickets/:id',
			name: 'Ticket Details',
			component: () => import('../views/TicketDetailView.vue'),
			meta: {
				requiresAuth: true,
			},
		},
		{
			path: '/login',
			name: 'Login',
			component: () => import('../views/LoginView.vue'),
		},
		{
			path: '/tos',
			name: 'Terms of Service',
			component: () => import('../views/TermsOfService.vue'),
		},
		{
			path: '/privacy',
			name: 'Privacy',
			component: () => import('../views/PrivacyPolicy.vue'),
		},
	],
})

router.beforeEach(async (to) => {
	const stateStore = useStateStore()
	await stateStore.waitForAuth()
	const isAuthenticated = stateStore.isAuthenticated

	if (to.meta.requiresAuth && !isAuthenticated) return { name: 'Login' }
})

export default router