src/router.ts
import { createRouter, createWebHistory, NavigationGuard } from 'vue-router'
import { bootstrapDone } from '@/bootstrapDone'
import { analyticsService } from '@/srv/analytics.service'
import { useStore } from '@/store'
const loggedInGuard: NavigationGuard = (_to, _from, next) => {
const u = useStore().user
if (u.uid) return next()
console.log('GUARD: loggedInGuard')
next('/')
}
const guestOnlyGuard: NavigationGuard = (_to, _from, next) => {
const u = useStore().user
if (!u.uid) return next()
console.log('GUARD: guestOnlyGuard')
next('/releases')
}
export const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/',
component: () => import('./pages/HomePage.vue'),
beforeEnter: guestOnlyGuard,
},
{
path: '/releases',
component: () => import('./pages/ReleasesPage.vue'),
beforeEnter: loggedInGuard,
},
// {
// path: '/projects',
// component: () => import('./pages/ProjectsPage.vue'),
// beforeEnter: loggedInGuard,
// },
// {
// path: '/projects/:ownerName/:projectName',
// component: () => import('./pages/ProjectPage.vue'),
// beforeEnter: loggedInGuard,
// },
{
path: '/settings',
component: () => import('./pages/SettingsPage.vue'),
beforeEnter: loggedInGuard,
},
],
})
router.beforeEach(async (_to, _from, next) => {
// ensure Bootstrap is finished before rendering any route
await bootstrapDone
next()
})
router.afterEach(to => {
analyticsService.pageView(to.fullPath)
})