dashy/src/router.js

84 lines
1.9 KiB
JavaScript

import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/views/Home.vue';
import Login from '@/views/Login.vue';
import Workspace from '@/views/Workspace.vue';
import DownloadConfig from '@/views/DownloadConfig.vue';
import { isLoggedIn } from '@/utils/Auth';
import { config } from '@/utils/ConfigHelpers';
import { metaTagData } from '@/utils/defaults';
Vue.use(Router);
const isAuthenticated = () => {
const users = config.appConfig.auth;
return (!users || isLoggedIn(users));
};
const router = new Router({
routes: [
{
path: '/',
name: 'home',
component: Home,
props: config,
meta: {
title: config.pageInfo.title || 'Home Page',
metaTags: metaTagData,
},
},
{
path: '/workspace',
name: 'workspace',
component: Workspace,
props: config,
meta: {
title: config.pageInfo.title || 'Dashy Workspace',
metaTags: metaTagData,
},
},
{
path: '/login',
name: 'login',
component: Login,
props: {
appConfig: config.appConfig,
},
beforeEnter: (to, from, next) => {
if (isAuthenticated()) router.push({ path: '/' });
next();
},
},
{
path: '/about',
name: 'about',
component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
},
{
path: '/download',
name: 'download',
component: DownloadConfig,
props: config,
meta: {
title: config.pageInfo.title || 'Download Dashy Config',
metaTags: metaTagData,
},
},
],
});
router.beforeEach((to, from, next) => {
if (to.name !== 'login' && !isAuthenticated()) next({ name: 'login' });
else next();
});
const defaultTitle = 'Dashy';
router.afterEach((to) => {
Vue.nextTick(() => {
document.title = to.meta.title || defaultTitle;
});
});
export default router;