76 lines
1.8 KiB
TypeScript
76 lines
1.8 KiB
TypeScript
import Vue from 'vue';
|
|
import Router from 'vue-router';
|
|
import Home from './views/Home.vue';
|
|
import NotFound from './views/NotFound.vue';
|
|
import LoginPage from './views/LoginPage.vue';
|
|
|
|
|
|
import Survey from '@/components/Survey.vue';
|
|
import NewSurvey from '@/components/NewSurvey.vue';
|
|
import Login from '@/components/Login.vue';
|
|
import store from '@/store'
|
|
|
|
Vue.use(Router);
|
|
|
|
export const router = new Router({
|
|
// export default new Router({
|
|
mode: 'history',
|
|
base: process.env.BASE_URL,
|
|
routes: [
|
|
{
|
|
path: '/',
|
|
name: 'home',
|
|
component: Home,
|
|
},
|
|
{
|
|
path: '/login',
|
|
component: LoginPage,
|
|
},
|
|
{
|
|
path: '/about',
|
|
name: 'about',
|
|
// route level code-splitting
|
|
// this generates a separate chunk (about.[hash].js) for this route
|
|
// which is lazy-loaded when the route is visited.
|
|
component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
|
|
}, {
|
|
path: '/surveys/:id',
|
|
name: 'Survey',
|
|
component: Survey
|
|
}, {
|
|
path: '/surveys',
|
|
name: 'NewSurvey',
|
|
component: NewSurvey,
|
|
beforeEnter (to, from, next) {
|
|
if (!store.getters.isAuthenticated) {
|
|
next('/login')
|
|
} else {
|
|
next()
|
|
}
|
|
}
|
|
}, {
|
|
path: '/login',
|
|
name: 'Login',
|
|
component: Login
|
|
},
|
|
{
|
|
path: '*',
|
|
name: 'notFound',
|
|
component: NotFound,
|
|
},
|
|
],
|
|
});
|
|
|
|
router.beforeEach((to, from, next) => {
|
|
// redirect to login page if not logged in and trying to access a restricted page
|
|
const publicPages = ['/login', '/register'];
|
|
const authRequired = !publicPages.includes(to.path);
|
|
const loggedIn = localStorage.getItem('user');
|
|
|
|
if (authRequired && !loggedIn) {
|
|
return next('/login');
|
|
}
|
|
});
|
|
|
|
export default router;
|