UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

84 lines (83 loc) 2.92 kB
import BaseLayer from './baselayer'; class ThemeLayer extends BaseLayer { constructor(id, name, order, icon, options) { super(id, name, order, options); /** * This class is a used in the state of the application, which will be accessed behind a javascript proxy. * This means that each modification made to its properties must come from outside, * because they have to be made through the proxy, so that the modification can be listen. * Therefore, this class must not contain any method which is updating a value directly * For example, any method doing <this.xxx = value> is forbidden here, because the modification be known from the proxy */ Object.defineProperty(this, "isExclusiveTheme", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "isExpanded", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "activeState", { enumerable: true, configurable: true, writable: true, value: 'off' }); Object.defineProperty(this, "icon", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "location", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "zoom", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "children", { enumerable: true, configurable: true, writable: true, value: [] }); this.isExpanded = options?.isDefaultExpanded || true; this.isExclusiveTheme = options?.isExclusiveTheme ?? false; this.icon = icon; } clone() { const options = { disclaimer: this.disclaimer, isDefaultExpanded: this.isExpanded }; const clonedObject = new ThemeLayer(this.id, this.name, this.order, this.icon, options); clonedObject.activeState = this.activeState; // Clone childs for (const child of this.children) { const clonedChild = child.clone(); clonedChild.parent = clonedObject; clonedObject.children.push(clonedChild); } return clonedObject; } get active() { return this.activeState === 'on'; } get inactive() { return this.activeState === 'off'; } get semiActive() { return this.activeState === 'semi'; } } export default ThemeLayer;