UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

57 lines (56 loc) 1.97 kB
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;