src/router/index.js
import { route } from 'quasar/wrappers'
import { createRouter, createMemoryHistory, createWebHistory, createWebHashHistory } from 'vue-router'
import _ from 'lodash'
import routeConfig from './routes'
import { Store } from '@kalisio/kdk/core.client'
import utils from '../utils.js'
/*
* Helper function used to build the routes
*/
function buildRoutes (config) {
function buildRoutesRecursively (config, routes, parentRoute) {
_.forOwn(config, (value, key) => {
// The key is always the path for the route
const route = {
path: key,
name: key,
// "Inherit" meta data on nested routes
meta: (parentRoute ? Object.assign({}, parentRoute.meta) : {})
}
// If value is a simple string this is a shortcut:
// - name = path
// - component = value
// Otherwise we have an object similar to what expect vue-router,
// we simply return the async component loading function with the given component value
if (typeof value === 'string') {
route.component = () => import(`@components/${value}.vue`)
} else {
// Take care that path can be empty so we cannot just check with a if
if (_.has(value, 'path')) {
route.path = value.path
}
// Take care that name can be empty so we cannot just check with a if
if (_.has(value, 'name')) {
route.name = value.name
}
if (_.has(value, 'component')) {
route.component = () => import(`@components/${value.component}.vue`)
}
if (_.has(value, 'props')) {
route.props = value.props
}
if (_.has(value, 'meta')) {
// Override parent meta if child meta given
Object.assign(route.meta, value.meta)
}
if (_.has(value, 'redirect')) {
_.set(route, 'redirect', value.redirect)
}
}
// Check for any children to recurse
if (value.children) {
route.children = []
buildRoutesRecursively(value.children, route.children, route)
}
routes.push(route)
})
}
const routes = []
buildRoutesRecursively(config, routes)
return routes
}
/*
* If not building with SSR mode, you can
* directly export the Router instantiation;
*
* The function below can be async too; either use
* async/await or return a Promise which resolves
* with the Router instance.
*/
export default route(function (/* { store, ssrContext } */) {
const createHistory = process.env.SERVER
? createMemoryHistory
: (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory)
const Router = createRouter({
scrollBehavior: () => ({ left: 0, top: 0 }),
routes: buildRoutes(routeConfig),
// Leave this as is and make changes in quasar.conf.js instead!
// quasar.conf.js -> build -> vueRouterMode
// quasar.conf.js -> build -> publicPath
history: createHistory(process.env.MODE === 'ssr' ? undefined : process.env.VUE_ROUTER_BASE)
})
Store.set('tours', Object.assign({
current: {
name: '',
step: 0,
play: false
}
}, utils.buildTours(routeConfig)))
return Router
})