Files
cnm/src/router/index.ts
2020-03-31 20:33:54 +02:00

259 lines
7.9 KiB
TypeScript
Executable File

import Vue from 'vue'
import VueRouter, { RouterMode } from 'vue-router'
import { PositionResult } from 'vue-router/types/router'
import { IMyRoute, IMyRouteRecord, cfgrouter } from './route-config'
import { ProgressBar } from '@src/store/Modules/Interface'
import { isEqual } from 'lodash'
import { GlobalStore, UserStore } from '@store'
import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { static_data } from '@src/db/static_data'
Vue.use(VueRouter)
/*
* If not building with SSR mode, you can
* directly export the Router instantiation
*/
let TIMER = null
let TIMER_RITORNA = ''
let TIMER_STATE = 0
let TIMER_RESTORE = ''
const Router = new VueRouter({
scrollBehavior: () => ({ x: 0, y: 0 } as PositionResult),
routes: cfgrouter.getmenu(),
// Leave these as is and change from quasar.conf.js instead!
// quasar.conf.js -> build -> vueRouterMode
mode: process.env.VUE_ROUTER_MODE as RouterMode,
base: process.env.VUE_ROUTER_BASE
})
function nextFactory(context, middleware, index) {
const subsequentMiddleware = middleware[index]
// If no subsequent Middleware exists,
// the default `next()` callback is returned.
if (!subsequentMiddleware) {
return context.next
}
return (...parameters) => {
// Run the default Vue Router `next()` callback first.
context.next(...parameters)
// Then run the subsequent Middleware with a new
// `nextMiddleware()` callback.
const nextMiddleware = nextFactory(context, middleware, index + 1)
subsequentMiddleware({ ...context, next: nextMiddleware })
}
}
Router.beforeEach(async (to: IMyRoute, from: IMyRoute, next) => {
try {
// Check session
// if (!LoginStore.state.sessionChecked) {
// await LoginStore.actions.checkUserSession();
// }
/*
if (!from || !to || from.matched.length <= 0) {
next()
return
}
*/
// console.log('LOAD from e to: ', from, to)
if (!!GlobalStore) {
if (!GlobalStore.state.finishLoading) {
let eseguicheck = true
// Controlla se c'è nella lista allora non eseguire il controllo:
for (const route of static_data.routes) {
if (route.path === to.path) {
eseguicheck = false
break
}
}
if (eseguicheck) {
if (!TIMER && to.path !== '/') {
// console.log('TIMER')
TIMER = setInterval(() => {
// console.log('SETINTERVAL')
if (GlobalStore.state.finishLoading) {
if (!!TIMER) {
// console.log('TIMER_STATE', TIMER_STATE, 'TIMER_RITORNA', TIMER_RITORNA)
if (TIMER_STATE === 2) {
clearInterval(TIMER)
TIMER = null
// console.log('TERMINA INTERVALLO')
// next('/prova')
// return
}
if (TIMER_RITORNA !== '') {
next(TIMER_RITORNA)
TIMER_STATE = 2
return
} else {
if (TIMER_STATE === 0) {
TIMER_RESTORE = to.path
next('/')
TIMER_STATE = 1
return
}
}
}
}
}, 200)
}
}
}
if (GlobalStore.state.finishLoading) {
if (!!TIMER) {
// console.log('TIMER_STATE', TIMER_STATE, 'to.path', to.path)
if (TIMER_RITORNA === '' && TIMER_RESTORE !== '') {
TIMER_RITORNA = TIMER_RESTORE
// onsole.log('TIMER_RITORNA', TIMER_RITORNA)
}
}
}
// await tools.aspettansec(4000)
}
if (from.name && from.matched[0].name === to.name && from.meta.isModal) {
next()
console.log('Route interceptor log: <1>')
return
}
else if (from.name === to.name && isEqual(from.params, to.params)) {
console.log('Route interceptor log: <2>')
console.log('from e to: ', from, to)
next()
} else {
if (!to.meta.transparent && !to.meta.isModal) {
// console.log('Route interceptor log: <4>')
ProgressBar.mutations.start()
}
else if (to.meta.transparent && !from.name) {
console.log('Route interceptor log: <5>')
ProgressBar.mutations.start()
}
else if (to.meta.transparent && !to.matched.some((m) => m.name === from.name)) {
console.log('Route interceptor log: <6>')
ProgressBar.mutations.start()
}
// If page is initialazed on child
/*
if (to.matched[0] && to.meta.isModal) {
console.log('Route interceptor log: <7>')
if (!from.nametranslate) {
getRouteData(to.matched[0])
GlobalStore.mutations.setPreviousModalRoute(to.matched[0].path)
} else {
GlobalStore.mutations.setPreviousModalRoute(from.fullPath)
}
}
*/
// Check requires auth
if (to.matched.some((m) => m.meta.requiresAuth)) {
// await LoginStore.actions.refreshUserInfos()
if (tools.isLoggedToSystem()) {
if (!!to.meta.asyncData) {
await getRouteData(to)
}
/*
if (to.matched.some((m) => !!m.meta.isAuthorized)) {
const results = await Promise.all([
...to.matched.filter((m) => !!m.meta.isAuthorized)
.map((m) => m.meta.isAuthorized(to))
])
if (!results.every((m) => m)) {
NotificationsStore.actions.addNotification({
type: 'warning',
message: `Vous n'avez pas accès à cette page`
})
ProgressBar.mutations.fail()
if (from.nametranslate) {
return
} else {
next('/')
}
}
}
*/
} else {
// LoginStore.mutations.showLoginRoute(to.fullPath)
if (from.name) {
ProgressBar.mutations.hide()
} else {
// next('/')
}
return Router.push({ name: 'pages.SignIn' })
}
} else if (to.matched.some((m) => m.meta.noAuth) && UserStore.state.isLogged) {
next('/')
} else {
if (!!to.meta.asyncData) {
await getRouteData(to)
}
}
}
// if (to.meta.middleware) {
// const middleware = Array.isArray(to.meta.middleware)
// ? to.meta.middleware
// : [to.meta.middleware]
//
// const context = {
// from,
// next,
// Router,
// to
// }
//
// const nextMiddleware = nextFactory(context, middleware, 1)
//
// return middleware[0]({ ...context, next: nextMiddleware })
// }
//
return next()
}
catch
(err) {
console.log('Route error:', err)
ProgressBar.mutations.fail()
}
}
)
const getRouteData = async (to: IMyRoute | IMyRouteRecord) => {
if (!to.meta.transparent) {
ProgressBar.mutations.start()
}
const titleToDisplay: any = await to.meta.asyncData(to)
// if (to.meta.contentProp) {
// document.title = `${titleToDisplay.title || to.meta.title} - MovingMate`
// }
}
Router.afterEach(async (from: IMyRoute, next) => {
ProgressBar.mutations.finish()
// AlertsStore.mutations.hideAlert()
// EventBus.$emit('closePopups')
})
export default Router