Fixed interface for Backend, allow redirect mainLinks
* Fixed the Backend interface to match the returned data structure * Allow empty parents in RouteConfig, use flatRoutes
This commit is contained in:
parent
c05fc5d877
commit
d4795a549f
|
@ -1,12 +1,13 @@
|
||||||
import {boot} from 'quasar/wrappers';
|
import { boot } from 'quasar/wrappers';
|
||||||
import {RouteConfig} from 'vue-router';
|
import { RouteConfig } from 'vue-router';
|
||||||
import {VueRouter} from 'vue-router/types/router';
|
import { VueRouter } from 'vue-router/types/router';
|
||||||
import {Store} from 'vuex';
|
import { Store } from 'vuex';
|
||||||
import {StateInterface} from 'src/store';
|
import { StateInterface } from 'src/store';
|
||||||
import {FG_Plugin} from 'src/plugins';
|
import { FG_Plugin } from 'src/plugins';
|
||||||
import routes from 'src/router/routes';
|
import routes from 'src/router/routes';
|
||||||
import {axios} from 'boot/axios';
|
import { axios } from 'boot/axios';
|
||||||
import {AxiosResponse} from 'axios';
|
import { AxiosResponse } from 'axios';
|
||||||
|
import { flatRoutes } from '@dreamonkey/vue-routes-flattener';
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
// Do not change required Modules !!
|
// Do not change required Modules !!
|
||||||
|
@ -25,15 +26,15 @@ interface BackendPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface BackendPlugins {
|
interface BackendPlugins {
|
||||||
[key: string]: BackendPlugin
|
[key: string]: BackendPlugin | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Backend {
|
interface Backend {
|
||||||
plugins: [key: string];
|
plugins: BackendPlugins[];
|
||||||
version: string;
|
version: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export {Backend}
|
export { Backend };
|
||||||
|
|
||||||
function combineRoutes(
|
function combineRoutes(
|
||||||
target: RouteConfig[],
|
target: RouteConfig[],
|
||||||
|
@ -200,9 +201,9 @@ function loadPlugin(
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
console.exception(`Could not find required Plugin ${requiredModule}`);
|
console.exception(`Could not find required Plugin ${requiredModule}`);
|
||||||
router.push({name: 'error'}).catch((e) => {
|
router.push({ name: 'error' }).catch(e => {
|
||||||
console.warn(e)
|
console.warn(e);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return loadedPlugins;
|
return loadedPlugins;
|
||||||
|
@ -223,7 +224,7 @@ async function getBackend(): Promise<Backend | null> {
|
||||||
|
|
||||||
// "async" is optional;
|
// "async" is optional;
|
||||||
// more info on params: https://quasar.dev/quasar-cli/cli-documentation/boot-files#Anatomy-of-a-boot-file
|
// more info on params: https://quasar.dev/quasar-cli/cli-documentation/boot-files#Anatomy-of-a-boot-file
|
||||||
export default boot<Store<StateInterface>>(({Vue, router, store}) => {
|
export default boot<Store<StateInterface>>(({ Vue, router, store }) => {
|
||||||
const plugins: FG_Plugin.Plugin[] = [];
|
const plugins: FG_Plugin.Plugin[] = [];
|
||||||
|
|
||||||
const backendPromise = getBackend();
|
const backendPromise = getBackend();
|
||||||
|
@ -245,33 +246,44 @@ export default boot<Store<StateInterface>>(({Vue, router, store}) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// check dependencies
|
// check dependencies
|
||||||
backendPromise.then((backend) => {
|
backendPromise
|
||||||
console.log(backend)
|
.then(backend => {
|
||||||
|
console.log(backend);
|
||||||
if (backend) {
|
if (backend) {
|
||||||
plugins.forEach((plugin: FG_Plugin.Plugin) => {
|
plugins.forEach((plugin: FG_Plugin.Plugin) => {
|
||||||
plugin.requiredModules.forEach((requiredModule: string) => {
|
plugin.requiredModules.forEach((requiredModule: string) => {
|
||||||
if (!(config.requiredModules.includes(requiredModule) || config.loadModules.includes(requiredModule))) {
|
if (
|
||||||
console.error(`Plugin ${plugin.name} need Plugin ${requiredModule}`)
|
!(
|
||||||
router.push({name: 'error'}).catch((e) => {
|
config.requiredModules.includes(requiredModule) ||
|
||||||
console.warn(e)
|
config.loadModules.includes(requiredModule)
|
||||||
})
|
)
|
||||||
|
) {
|
||||||
|
console.error(
|
||||||
|
`Plugin ${plugin.name} need Plugin ${requiredModule}`
|
||||||
|
);
|
||||||
|
router.push({ name: 'error' }).catch(e => {
|
||||||
|
console.warn(e);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
plugin.requiredBackendModules.forEach((requiredBackendModule: string) => {
|
plugin.requiredBackendModules.forEach(
|
||||||
|
(requiredBackendModule: string) => {
|
||||||
if (!(requiredBackendModule in backend.plugins)) {
|
if (!(requiredBackendModule in backend.plugins)) {
|
||||||
console.error(`Plugin ${plugin.name} need Plugin ${requiredBackendModule} in backend.`)
|
console.error(
|
||||||
router.push({name: 'error'}).catch(err => {
|
`Plugin ${plugin.name} need Plugin ${requiredBackendModule} in backend.`
|
||||||
console.warn(err)
|
);
|
||||||
})
|
router.push({ name: 'error' }).catch(err => {
|
||||||
|
console.warn(err);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
})
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(e => {
|
.catch(e => {
|
||||||
console.error(e)
|
console.error(e);
|
||||||
})
|
});
|
||||||
|
|
||||||
|
|
||||||
// load plugins
|
// load plugins
|
||||||
loadedPlugins = loadPlugin(
|
loadedPlugins = loadPlugin(
|
||||||
|
@ -282,12 +294,19 @@ export default boot<Store<StateInterface>>(({Vue, router, store}) => {
|
||||||
store,
|
store,
|
||||||
router
|
router
|
||||||
);
|
);
|
||||||
loadedPlugins = loadPlugin(loadedPlugins, config.loadModules, backendPromise, plugins, store, router);
|
loadedPlugins = loadPlugin(
|
||||||
|
loadedPlugins,
|
||||||
|
config.loadModules,
|
||||||
|
backendPromise,
|
||||||
|
plugins,
|
||||||
|
store,
|
||||||
|
router
|
||||||
|
);
|
||||||
|
|
||||||
loadedPlugins.widgets.sort((a, b) => b.priority - a.priority);
|
loadedPlugins.widgets.sort((a, b) => b.priority - a.priority);
|
||||||
|
|
||||||
// add new routes for plugins
|
// add new routes for plugins, flatten them to allow empty parent routes
|
||||||
router.addRoutes(loadedPlugins.routes);
|
router.addRoutes(flatRoutes(loadedPlugins.routes));
|
||||||
|
|
||||||
// save plugins in VM-variable
|
// save plugins in VM-variable
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<q-input
|
<q-input
|
||||||
class="col-xs-12 col-sm-6 q-pa-sm"
|
|
||||||
filled
|
filled
|
||||||
:readonly="readonly"
|
:readonly="readonly"
|
||||||
:label="label"
|
:label="label"
|
||||||
|
|
Loading…
Reference in New Issue