@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
28 lines (27 loc) • 1.01 kB
JavaScript
import GirafeSingleton from '../../base/GirafeSingleton.js';
export default class ComponentManager extends GirafeSingleton {
components = {};
registeredCallbacks = [];
registeredCallbacksClasses = [];
registerComponent(component) {
this.components[component.name] ??= [];
this.components[component.name].push(component);
for (let i = 0; i < this.registeredCallbacksClasses.length; i++) {
if (component instanceof this.registeredCallbacksClasses[i]) {
this.registeredCallbacks[i].forEach((callback) => callback(component));
}
}
}
registerComponentCallback(component, callback) {
this.registeredCallbacksClasses.push(component);
this.registeredCallbacks.push([callback]);
}
getComponents(type) {
return Object.values(this.components)
.flat()
.filter((c) => c instanceof type);
}
getComponentsByName(name) {
return this.components[name];
}
}