Revert usage of flatRoutes, use an empty parent component instead
This commit is contained in:
parent
d4795a549f
commit
17e203b5c9
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue