resources/frontend/core/settings/index.js
import { store } from '@/store';
import { getModuleList, ModuleLoaderInterceptor } from '@/moduleLoader';
import { hasRole } from '@/utils/user';
/**
* Initialising setting parent route
* beforeEnter route we are check if any sections uploaded
* If not - initialize them and provide to store
*/
ModuleLoaderInterceptor.on('loaded', router => {
const modules = Object.values(getModuleList());
const settingsModules = modules.filter(m => m.moduleInstance.routerPrefix === 'settings');
function initSettingsSections(to, from, next) {
store.dispatch('settings/clearSections');
settingsModules.forEach(m => m.moduleInstance.initSettingsSections());
next();
}
function initCompanySections(to, from, next) {
store.dispatch('settings/clearSections');
settingsModules.forEach(m => m.moduleInstance.initCompanySections());
if (!Object.keys(store.getters['user/user']).length) {
store.watch(
() => store.getters['user/user'],
user => {
return hasRole(user, 'admin') ? next() : next({ name: 'forbidden' });
},
);
} else {
return hasRole(store.getters['user/user'], 'admin') ? next() : next({ name: 'forbidden' });
}
}
const settings = [
{
path: '/company',
redirect: { name: 'Settings.company.general' },
component: () => import(/* webpackChunkName: "company" */ '../views/Settings/CompanySettings.vue'),
meta: {
auth: true,
},
beforeEnter: initCompanySections,
children: settingsModules.reduce(
(total, m) => [...total, ...m.moduleInstance.getCompanySectionsRoutes()],
[],
),
},
{
path: '/settings',
redirect: { name: 'Users.settings.account' },
component: () => import(/* webpackChunkName: "settings" */ '../views/Settings/Settings.vue'),
meta: {
auth: true,
},
beforeEnter: initSettingsSections,
children: settingsModules.reduce(
(total, m) => [...total, ...m.moduleInstance.getSettingSectionsRoutes()],
[],
),
},
];
router.addRoutes(settings);
});