kirillgroshkov/kg-releases

View on GitHub
src/router.ts

Summary

Maintainability
A
0 mins
Test Coverage
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)
})