[Plugin] Notification, wenn Plugin im Backend nicht verfügbar.
Fixed Typo
This commit is contained in:
parent
fde2682681
commit
5f7c515228
|
@ -1,4 +1,4 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
singleQuote: true,
|
singleQuote: true,
|
||||||
semi: false
|
semi: true
|
||||||
}
|
};
|
||||||
|
|
|
@ -24,7 +24,7 @@ module.exports = configure(function(ctx) {
|
||||||
// app boot file (/src/boot)
|
// app boot file (/src/boot)
|
||||||
// --> boot files are part of "main.js"
|
// --> boot files are part of "main.js"
|
||||||
// https://quasar.dev/quasar-cli/boot-files
|
// https://quasar.dev/quasar-cli/boot-files
|
||||||
boot: ['composition-api', 'axios', 'filter', 'login', 'plugins', 'loading'],
|
boot: ['composition-api', 'axios', 'plugins', 'loading', 'filter', 'login'],
|
||||||
|
|
||||||
// https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css
|
// https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css
|
||||||
css: ['app.scss'],
|
css: ['app.scss'],
|
||||||
|
@ -89,7 +89,7 @@ module.exports = configure(function(ctx) {
|
||||||
iconSet: 'material-icons', // Quasar icon set
|
iconSet: 'material-icons', // Quasar icon set
|
||||||
lang: 'de', // Quasar language pack
|
lang: 'de', // Quasar language pack
|
||||||
config: {
|
config: {
|
||||||
dark: 'auto'
|
dark: 'auto'
|
||||||
},
|
},
|
||||||
|
|
||||||
// Possible values for "importStrategy":
|
// Possible values for "importStrategy":
|
||||||
|
@ -105,7 +105,7 @@ module.exports = configure(function(ctx) {
|
||||||
// directives: [],
|
// directives: [],
|
||||||
|
|
||||||
// Quasar plugins
|
// Quasar plugins
|
||||||
plugins: ['LocalStorage', 'SessionStorage', 'Loading']
|
plugins: ['LocalStorage', 'SessionStorage', 'Loading', 'Notify']
|
||||||
},
|
},
|
||||||
|
|
||||||
// animations: 'all', // --- includes all animations
|
// animations: 'all', // --- includes all animations
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
import { boot } from 'quasar/wrappers';
|
import {boot} from 'quasar/wrappers';
|
||||||
import { RouteConfig } from 'vue-router';
|
import {RouteConfig} from 'vue-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 {AxiosResponse} from 'axios';
|
||||||
|
import {Notify} from 'quasar';
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
// Do not change required Modules !!
|
// Do not change required Modules !!
|
||||||
|
@ -16,6 +19,22 @@ const config = {
|
||||||
|
|
||||||
// combine routes from source to target
|
// combine routes from source to target
|
||||||
|
|
||||||
|
interface BackendPlugin {
|
||||||
|
permissions: string[];
|
||||||
|
version: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface BackendPlugins {
|
||||||
|
[key: string]: BackendPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Backend {
|
||||||
|
plugins: [key: string];
|
||||||
|
version: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export {Backend}
|
||||||
|
|
||||||
function combineRoutes(
|
function combineRoutes(
|
||||||
target: RouteConfig[],
|
target: RouteConfig[],
|
||||||
source: FG_Plugin.PluginRouteConfig[],
|
source: FG_Plugin.PluginRouteConfig[],
|
||||||
|
@ -127,6 +146,7 @@ function loadShortCuts(
|
||||||
function loadPlugin(
|
function loadPlugin(
|
||||||
loadedPlugins: FG_Plugin.LoadedPlugins,
|
loadedPlugins: FG_Plugin.LoadedPlugins,
|
||||||
modules: string[],
|
modules: string[],
|
||||||
|
backendpromise: Promise<Backend | null>,
|
||||||
plugins: Plugin[],
|
plugins: Plugin[],
|
||||||
store: Store<any>
|
store: Store<any>
|
||||||
): FG_Plugin.LoadedPlugins {
|
): FG_Plugin.LoadedPlugins {
|
||||||
|
@ -135,6 +155,29 @@ function loadPlugin(
|
||||||
return plugin.name == requiredModule;
|
return plugin.name == requiredModule;
|
||||||
});
|
});
|
||||||
if (plugin) {
|
if (plugin) {
|
||||||
|
backendpromise.then((backend) => {
|
||||||
|
console.log(backend)
|
||||||
|
if (backend) {
|
||||||
|
const missedPlugins: string[] = []
|
||||||
|
plugin.requiredBackendModules.every(requiredBackendModule => {
|
||||||
|
if (!(requiredBackendModule in backend.plugins)) {
|
||||||
|
missedPlugins.push(requiredBackendModule)
|
||||||
|
console.error(`Plugin ${requiredBackendModule} not activated in backend.`)
|
||||||
|
Notify.create({
|
||||||
|
message: `Plugin ${requiredBackendModule} not activated in backend.`,
|
||||||
|
position: 'bottom',
|
||||||
|
timeout: 5000,
|
||||||
|
type: 'negative'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return requiredBackendModule in backend.plugins
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
console.error(e)
|
||||||
|
})
|
||||||
if (plugin.mainRoutes) {
|
if (plugin.mainRoutes) {
|
||||||
loadedPlugins.routes = combineRoutes(
|
loadedPlugins.routes = combineRoutes(
|
||||||
loadedPlugins.routes,
|
loadedPlugins.routes,
|
||||||
|
@ -184,10 +227,26 @@ function loadPlugin(
|
||||||
return loadedPlugins;
|
return loadedPlugins;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getBackend(): Promise<Backend | null> {
|
||||||
|
let backend: Backend | null = null;
|
||||||
|
try {
|
||||||
|
const response: AxiosResponse<Backend> = await axios.get('/');
|
||||||
|
backend = response.data;
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
return backend;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// "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: Plugin[] = [];
|
const plugins: Plugin[] = [];
|
||||||
|
|
||||||
|
const backendPromise = getBackend();
|
||||||
|
|
||||||
let loadedPlugins: FG_Plugin.LoadedPlugins = {
|
let loadedPlugins: FG_Plugin.LoadedPlugins = {
|
||||||
routes,
|
routes,
|
||||||
plugins: [],
|
plugins: [],
|
||||||
|
@ -208,10 +267,11 @@ export default boot<Store<StateInterface>>(({ Vue, router, store }) => {
|
||||||
loadedPlugins = loadPlugin(
|
loadedPlugins = loadPlugin(
|
||||||
loadedPlugins,
|
loadedPlugins,
|
||||||
config.requiredModules,
|
config.requiredModules,
|
||||||
|
backendPromise,
|
||||||
plugins,
|
plugins,
|
||||||
store
|
store
|
||||||
);
|
);
|
||||||
loadedPlugins = loadPlugin(loadedPlugins, config.loadModules, plugins, store);
|
loadedPlugins = loadPlugin(loadedPlugins, config.loadModules, backendPromise, plugins, store);
|
||||||
|
|
||||||
loadedPlugins.widgets.sort((a, b) => b.priority - a.priority);
|
loadedPlugins.widgets.sort((a, b) => b.priority - a.priority);
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ declare namespace FG_Plugin {
|
||||||
version: string;
|
version: string;
|
||||||
widgets: Widget[];
|
widgets: Widget[];
|
||||||
requiredModules: string[];
|
requiredModules: string[];
|
||||||
|
requiredBackendModules: string[];
|
||||||
mainRoutes?: PluginRouteConfig[];
|
mainRoutes?: PluginRouteConfig[];
|
||||||
outRoutes?: PluginRouteConfig[];
|
outRoutes?: PluginRouteConfig[];
|
||||||
store?: Map<string, Module<any, StateInterface>>;
|
store?: Map<string, Module<any, StateInterface>>;
|
||||||
|
|
|
@ -8,6 +8,7 @@ const plugin: FG_Plugin.Plugin = {
|
||||||
name: 'Balance',
|
name: 'Balance',
|
||||||
mainRoutes,
|
mainRoutes,
|
||||||
requiredModules: ['User'],
|
requiredModules: ['User'],
|
||||||
|
requiredBackendModules: ['balance'],
|
||||||
version: '0.0.1',
|
version: '0.0.1',
|
||||||
store: new Map<string, Module<BalanceInterface, StateInterface>>([
|
store: new Map<string, Module<BalanceInterface, StateInterface>>([
|
||||||
['balance', balance]
|
['balance', balance]
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { FG_Plugin } from 'src/plugins';
|
||||||
const plugin: FG_Plugin.Plugin = {
|
const plugin: FG_Plugin.Plugin = {
|
||||||
name: 'Schedule',
|
name: 'Schedule',
|
||||||
requiredModules: [],
|
requiredModules: [],
|
||||||
|
requiredBackendModules: ['schedule'],
|
||||||
version: '0.0.1',
|
version: '0.0.1',
|
||||||
widgets: [
|
widgets: [
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,6 +9,7 @@ const plugin: FG_Plugin.Plugin = {
|
||||||
name: 'User',
|
name: 'User',
|
||||||
mainRoutes: routes,
|
mainRoutes: routes,
|
||||||
requiredModules: [],
|
requiredModules: [],
|
||||||
|
requiredBackendModules: ['auth'],
|
||||||
version: '0.0.1',
|
version: '0.0.1',
|
||||||
store: new Map<string, Module<any, StateInterface>>([
|
store: new Map<string, Module<any, StateInterface>>([
|
||||||
['user', userStore],
|
['user', userStore],
|
||||||
|
|
|
@ -113,7 +113,7 @@ const actions: ActionTree<UserStateInterface, StateInterface> = {
|
||||||
setUser({ commit, state, dispatch }, data: FG.User) {
|
setUser({ commit, state, dispatch }, data: FG.User) {
|
||||||
commit('setLoading');
|
commit('setLoading');
|
||||||
axios
|
axios
|
||||||
.post(`users`, data)
|
.post('users', data)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
if (state.currentUser && state.currentUser.userid === data.userid)
|
if (state.currentUser && state.currentUser.userid === data.userid)
|
||||||
void dispatch('getCurrentUser');
|
void dispatch('getCurrentUser');
|
||||||
|
@ -138,7 +138,7 @@ const actions: ActionTree<UserStateInterface, StateInterface> = {
|
||||||
.finally(() => commit('setLoading', false));
|
.finally(() => commit('setLoading', false));
|
||||||
},
|
},
|
||||||
|
|
||||||
updateRole({ commit, state }, data: FG.Role) {
|
updateRole({ commit }, data: FG.Role) {
|
||||||
commit('setLoading');
|
commit('setLoading');
|
||||||
axios
|
axios
|
||||||
.put(`/roles/${data.id}`, data)
|
.put(`/roles/${data.id}`, data)
|
||||||
|
|
Loading…
Reference in New Issue