@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
57 lines (56 loc) • 1.97 kB
JavaScript
import StateManager from '../state/statemanager';
import GirafeSingleton from '../../base/GirafeSingleton';
import ConfigManager from '../configuration/configmanager';
class PluginManager extends GirafeSingleton {
constructor(type) {
super(type);
Object.defineProperty(this, "stateManager", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "configManager", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.stateManager = StateManager.getInstance();
this.configManager = ConfigManager.getInstance();
this.stateManager.subscribe('oauth.userInfo', () => this.filterPlugins(document));
this.filterPlugins(document);
}
filterPlugins(dom) {
const linkedToPlugin = dom.querySelectorAll('[plugin]');
linkedToPlugin.forEach((item) => {
const pluginName = item.getAttribute('plugin');
if (pluginName) {
if (pluginName.startsWith('config:')) {
this.filterPluginFromConfig(item, pluginName.split(':')[1]);
}
else {
this.filterPlugin(item, pluginName);
}
}
});
}
filterPluginFromConfig(item, configName) {
if (this.configManager.Config[configName]) {
item.classList.remove('hidden');
}
else {
item.classList.add('hidden');
}
}
filterPlugin(item, pluginName) {
if (!this.stateManager.state.oauth.userInfo?.functionalities?.authorized_plugins?.includes(pluginName)) {
// Plugin is not activated for the user
item.classList.add('hidden');
}
else {
item.classList.remove('hidden');
}
}
}
export default PluginManager;