UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

45 lines (44 loc) • 1.77 kB
import GroupLayer from '../../../models/layers/grouplayer.js'; import ThemeLayer from '../../../models/layers/themelayer.js'; import TreeViewElement from './treeviewelement.js'; export default class TreeViewGroupElement extends TreeViewElement { layer; constructor(layer, name) { super(layer, name); this.layer = layer; } shouldRenderChildren() { return this.layer.isExpanded && this.layer.isVisible; } sortedVisibleChildren() { // Return the list of sorted children only if the parent is expanded // Otherwise, children are rendered everytime, even if the parent is collapsed. // And this create performance issues if there are too many groups/layers in the treeview if (!this.shouldRenderChildren()) { return []; } return this.context.layerManager.getSortedLayers(this.layer.children).filter((child) => child.isVisible); } deactivateThemeOrGroup(layer) { layer.activeState = 'off'; if (layer instanceof ThemeLayer || layer instanceof GroupLayer) { for (const child of layer.children) { this.deactivateThemeOrGroup(child); } } } toggle() { this.context.stateManager.batchChanges(() => { this.context.layerManager.toggleGroupOrTheme(this.layer); this.toggleLayers(this.layer.children, this.layer.activeState); }); } toggleLayers(layers, activeState) { for (const layer of layers) { this.context.layerManager.toggle(layer, activeState); if (layer instanceof GroupLayer || layer instanceof ThemeLayer) { this.toggleLayers(layer.children, activeState); } } } }