Revert usage of flatRoutes, use an empty parent component instead

This commit is contained in:
Ferdinand Thiessen 2020-11-24 18:35:37 +01:00
parent d4795a549f
commit 17e203b5c9
4 changed files with 51 additions and 69 deletions

View File

@ -10,7 +10,6 @@
"test": "echo \"No test specified\" && exit 0"
},
"dependencies": {
"@dreamonkey/vue-routes-flattener": "^0.1.0",
"@quasar/extras": "^1.9.10",
"@vue/composition-api": "^0.6.4",
"axios": "^0.21.0",

View File

@ -7,7 +7,6 @@ import { FG_Plugin } from 'src/plugins';
import routes from 'src/router/routes';
import { axios } from 'boot/axios';
import { AxiosResponse } from 'axios';
import { flatRoutes } from '@dreamonkey/vue-routes-flattener';
const config = {
// Do not change required Modules !!
@ -44,21 +43,16 @@ function combineRoutes(
target.forEach(target => {
if (target.path === mainPath) {
source.forEach((sourceMainConfig: FG_Plugin.PluginRouteConfig) => {
const targetMainConfig = target.children?.find(
(targetMainConfig: RouteConfig) => {
return sourceMainConfig.path === targetMainConfig.path;
}
);
const targetMainConfig = target.children?.find((targetMainConfig: RouteConfig) => {
return sourceMainConfig.path === targetMainConfig.path;
});
if (targetMainConfig) {
const sourceChildren: RouteConfig[] = [];
sourceMainConfig.children?.forEach(child => {
sourceChildren.push(<RouteConfig>child);
});
if (targetMainConfig.children) {
targetMainConfig.children = Object.assign(
targetMainConfig.children,
sourceChildren
);
targetMainConfig.children = Object.assign(targetMainConfig.children, sourceChildren);
} else {
targetMainConfig.children = sourceChildren;
}
@ -66,6 +60,12 @@ function combineRoutes(
if (target.children === undefined) {
target.children = [];
}
if (
sourceMainConfig.children &&
sourceMainConfig.children.length > 0 &&
!sourceMainConfig.component
)
sourceMainConfig.component = () => import('src/components/navigation/EmptyParent.vue');
target.children.push(<RouteConfig>sourceMainConfig);
}
});
@ -79,26 +79,22 @@ function combineMainLinks(
target: FG_Plugin.PluginMainLink[],
source: FG_Plugin.PluginRouteConfig
): FG_Plugin.PluginMainLink[] {
const targetPluginMainLink:
| FG_Plugin.PluginMainLink
| undefined = target.find(
const targetPluginMainLink: FG_Plugin.PluginMainLink | undefined = target.find(
(targetPluginMainLink: FG_Plugin.PluginMainLink) => {
console.log(targetPluginMainLink.title, source.title);
return targetPluginMainLink.title == source.title;
}
);
if (targetPluginMainLink) {
source.children?.forEach(
(sourcePluginChildLink: FG_Plugin.PluginRouteConfig) => {
targetPluginMainLink.children.push(<FG_Plugin.PluginChildLink>{
title: sourcePluginChildLink.title,
icon: sourcePluginChildLink.icon,
link: sourcePluginChildLink.name,
name: sourcePluginChildLink.name,
permissions: sourcePluginChildLink.meta?.permissions
});
}
);
source.children?.forEach((sourcePluginChildLink: FG_Plugin.PluginRouteConfig) => {
targetPluginMainLink.children.push(<FG_Plugin.PluginChildLink>{
title: sourcePluginChildLink.title,
icon: sourcePluginChildLink.icon,
link: sourcePluginChildLink.name,
name: sourcePluginChildLink.name,
permissions: sourcePluginChildLink.meta?.permissions
});
});
} else {
const mainLink: FG_Plugin.PluginMainLink = <FG_Plugin.PluginMainLink>{
title: source.title,
@ -158,36 +154,18 @@ function loadPlugin(
});
if (plugin) {
if (plugin.mainRoutes) {
loadedPlugins.routes = combineRoutes(
loadedPlugins.routes,
plugin.mainRoutes,
'/main'
);
loadedPlugins.routes = combineRoutes(loadedPlugins.routes, plugin.mainRoutes, '/main');
plugin.mainRoutes.forEach(route => {
loadedPlugins.mainLinks = combineMainLinks(
loadedPlugins.mainLinks,
route
);
loadedPlugins.mainLinks = combineMainLinks(loadedPlugins.mainLinks, route);
});
loadedPlugins.shortcuts = loadShortCuts(
loadedPlugins.shortcuts,
plugin.mainRoutes
);
loadedPlugins.shortcuts = loadShortCuts(loadedPlugins.shortcuts, plugin.mainRoutes);
}
if (plugin.outRoutes) {
loadedPlugins.routes = combineRoutes(
loadedPlugins.routes,
plugin.outRoutes
);
loadedPlugins.shortcutsOut = loadShortCuts(
loadedPlugins.shortcutsOut,
plugin.outRoutes
);
loadedPlugins.routes = combineRoutes(loadedPlugins.routes, plugin.outRoutes);
loadedPlugins.shortcutsOut = loadShortCuts(loadedPlugins.shortcutsOut, plugin.outRoutes);
}
if (plugin.widgets.length > 0) {
plugin.widgets.forEach(
widget => (widget.name = plugin.name + '_' + widget.name)
);
plugin.widgets.forEach(widget => (widget.name = plugin.name + '_' + widget.name));
Array.prototype.push.apply(loadedPlugins.widgets, plugin.widgets);
}
if (plugin.store) {
@ -258,26 +236,22 @@ export default boot<Store<StateInterface>>(({ Vue, router, store }) => {
config.loadModules.includes(requiredModule)
)
) {
console.error(
`Plugin ${plugin.name} need Plugin ${requiredModule}`
);
console.error(`Plugin ${plugin.name} need Plugin ${requiredModule}`);
router.push({ name: 'error' }).catch(e => {
console.warn(e);
});
}
});
plugin.requiredBackendModules.forEach(
(requiredBackendModule: string) => {
if (!(requiredBackendModule in backend.plugins)) {
console.error(
`Plugin ${plugin.name} need Plugin ${requiredBackendModule} in backend.`
);
router.push({ name: 'error' }).catch(err => {
console.warn(err);
});
}
plugin.requiredBackendModules.forEach((requiredBackendModule: string) => {
if (!(requiredBackendModule in backend.plugins)) {
console.error(
`Plugin ${plugin.name} need Plugin ${requiredBackendModule} in backend.`
);
router.push({ name: 'error' }).catch(err => {
console.warn(err);
});
}
);
});
});
}
})
@ -306,7 +280,7 @@ export default boot<Store<StateInterface>>(({ Vue, router, store }) => {
loadedPlugins.widgets.sort((a, b) => b.priority - a.priority);
// add new routes for plugins, flatten them to allow empty parent routes
router.addRoutes(flatRoutes(loadedPlugins.routes));
router.addRoutes(loadedPlugins.routes);
// save plugins in VM-variable
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access

View File

@ -0,0 +1,14 @@
<template>
<router-view />
</template>
<script lang="ts">
import { defineComponent } from '@vue/composition-api';
export default defineComponent({
name: 'EmptyParent',
setup() {
return {};
},
});
</script>

View File

@ -879,11 +879,6 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@dreamonkey/vue-routes-flattener@^0.1.0":
version "0.1.0"
resolved "https://registry.yarnpkg.com/@dreamonkey/vue-routes-flattener/-/vue-routes-flattener-0.1.0.tgz#cae01481f5c5e34669f700adebb6c34f0e88b0ed"
integrity sha512-kYs2P17btcXTAV6hPgJeuj11H2Hy4kHKroamED87H4RRYjTiA/d7PGixqIFL6631KiaDhUkiNEMhmWcWot/1BA==
"@electron/get@^1.3.1":
version "1.12.2"
resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.2.tgz#6442066afb99be08cefb9a281e4b4692b33764f3"