From cf1d99a72e2e891e0d0cc7349bf66d25da2f3626 Mon Sep 17 00:00:00 2001 From: Saeid Date: Mon, 14 Dec 2020 16:09:01 +0330 Subject: [PATCH] feat: add global routes --- resources/js/Global/plugins/routes/index.js | 89 +++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 resources/js/Global/plugins/routes/index.js diff --git a/resources/js/Global/plugins/routes/index.js b/resources/js/Global/plugins/routes/index.js new file mode 100644 index 0000000..1cb214e --- /dev/null +++ b/resources/js/Global/plugins/routes/index.js @@ -0,0 +1,89 @@ +/** + * Vue Router + * + * @library + * + * https://router.vuejs.org/en/ + */ + +// Lib imports +import Vue from 'vue' +import Router from 'vue-router' +import Meta from 'vue-meta' + +Vue.use(Router); +Vue.use(Meta); + + +import { TokenService } from "@Global/services/storage.services"; +import commonRoute from "@Global/utils/common/routes"; + + +export default class { + + constructor(paths, callbackDynamicImport, redirect) { + this.create(paths, callbackDynamicImport, redirect); + this.beforeLoad(); + return this.router; + } + + route(options, callbackDynamicImport) { + let path = options.path; + let view = options.view; + let name = options.name; + let meta = (options.meta) ? options.meta : ''; + return { + name: name || view, + path, + meta, + component: callbackDynamicImport(view) + } + } + + create(paths, callbackDynamicImport, redirect) { + const self = this; + redirect = redirect ? redirect : paths[0].path; + this.router = new Router({ + mode: 'history', + routes: paths.map(path => self.route(path, callbackDynamicImport)).concat([ + { path: '*', redirect: redirect } + ]), + scrollBehavior(to, from, savedPosition) { + if (savedPosition) { + return savedPosition + } + if (to.hash) { + return { selector: to.hash } + } + return { x: 0, y: 0 } + } + }); + } + + beforeLoad() { + + this.router.beforeEach((to, from, next) => { + const isPublic = to.matched.some(record => record.meta.public); + const onlyWhenLoggedOut = to.matched.some( + record => record.meta.onlyWhenLoggedOut + ); + const roles = to.meta && to.meta.roles ? to.meta.roles : null; + const loggedIn = !!TokenService.getToken(); + + if (!isPublic && !loggedIn) { + return window.location.href = commonRoute.login() + '?redirect=' + to.fullPath; + } + + // Do not allow user to visit login page or register page if they are logged in + if (loggedIn && onlyWhenLoggedOut && policy) { + return window.location.href = commonRoute.main(); + } + + next(); + }); + + } + + +} +