skillbox/client/src/router/index.js

111 lines
3.1 KiB
JavaScript

import Vue from 'vue';
import topic from '@/pages/topic';
import article from '@/pages/article';
import instrument from '@/pages/instrument';
import instrumentOverview from '@/pages/instrumentOverview';
import p404 from '@/pages/p404';
import start from '@/pages/start';
import submission from '@/pages/studentSubmission';
import Router from 'vue-router';
import surveyPage from '@/pages/survey';
import styleGuidePage from '@/pages/styleguide';
import joinClass from '@/pages/joinClass';
import news from '@/pages/news';
import moduleRoutes from './module.routes';
import portfolioRoutes from './portfolio.routes';
import onboardingRoutes from './onboarding.routes';
import meRoutes from './me.routes';
import authRoutes from './auth.routes';
import roomRoutes from './room.routes';
import store from '@/store/index';
import {LAYOUT_SIMPLE} from '@/router/core.constants';
import {EMAIL_NOT_VERIFIED_STATE, NO_VALID_LICENSE_STATE, SUCCESS_STATE} from './oauth.names';
const postLoginRedirectUrlKey = 'postLoginRedirectionUrl';
const routes = [
{
path: '/',
name: 'home',
component: start
},
...moduleRoutes,
...authRoutes,
...roomRoutes,
...onboardingRoutes,
...portfolioRoutes,
...meRoutes,
{path: '/article/:slug', name: 'article', component: article, meta: {layout: LAYOUT_SIMPLE}},
{
path: '/instruments/',
name: 'instrument-overview',
component: instrumentOverview,
},
{path: '/instrument/:slug', name: 'instrument', component: instrument, meta: {layout: LAYOUT_SIMPLE}},
{path: '/submission/:id', name: 'submission', component: submission, meta: {layout: LAYOUT_SIMPLE}},
{path: '/topic/:topicSlug', name: 'topic', component: topic, alias: '/book/topic/:topicSlug'},
{path: '/join-class', name: 'join-class', component: joinClass, meta: {layout: LAYOUT_SIMPLE}},
{
path: '/survey/:id',
component: surveyPage,
name: 'survey',
props: true,
meta: {layout: LAYOUT_SIMPLE},
},
{
path: '/news',
component: news,
name: 'news',
},
{
path: '/oauth-redirect',
redirect: to => {
switch (to.query.state) {
case EMAIL_NOT_VERIFIED_STATE:
return '/verify-email';
case NO_VALID_LICENSE_STATE:
return '/license-activation';
case SUCCESS_STATE:
if (window.localStorage && localStorage.getItem(postLoginRedirectUrlKey)) {
const redirectUrl = localStorage.getItem(postLoginRedirectUrlKey);
localStorage.removeItem(postLoginRedirectUrlKey);
return redirectUrl;
}
return '/';
default:
return '/unknown-auth-error';
}
}
},
{path: '/styleguide', component: styleGuidePage},
{
path: '*',
component: p404,
meta: {
layout: 'blank',
},
},
];
Vue.use(Router);
const router = new Router({
routes,
mode: 'history',
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
return savedPosition;
}
return {x: 0, y: 0};
},
});
router.afterEach((to, from) => {
store.commit('setEditModule', false);
store.dispatch('showMobileNavigation', false);
});
export {router, postLoginRedirectUrlKey};