@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.72 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{_ as e}from"../../../chunks/tslib.es6.js";import i from"../../../core/Accessor.js";import t from"../../../core/Collection.js";import{watch as s,initial as l}from"../../../core/reactiveUtils.js";import{property as r}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/has.js";import"../../../core/Logger.js";import"../../../core/RandomLCG.js";import{subclass as o}from"../../../core/accessorSupport/decorators/subclass.js";let n=class extends i{constructor(e){super(e),this.id="root",this.parent=null,this.children=new t,this.layers=new t,this.level=0,this._childIds=new Set,this._layerUniqueIds=new Set}initialize(){this.addHandles([this.layers.on("before-add",(e=>{this._layerUniqueIds.has(e.item.uid)?e.preventDefault():this._layerUniqueIds.add(e.item.uid)})),this.layers.on("after-add",(({item:e})=>{this.addHandles([s((()=>e.visible),(()=>this.notifyChange("visible")),l),s((()=>e.title),(()=>this.notifyChange("title")),l)],e.uid)})),this.layers.on("before-remove",(({item:e})=>{this.removeHandles(e.uid),this.notifyChange("title"),this.notifyChange("visible")})),this.children.on("before-add",(e=>{this._childIds.has(e.item.id)?e.preventDefault():(e.item._set("parent",this),this._childIds.add(e.item.id))}))])}destroy(){this.children.forEach((e=>e.destroy()))}get hasChildren(){return this.children.length>0}get isDiscipline(){return 1===this.level}get visible(){return a(this.layers,(e=>e.visible))}get title(){return a(this.layers,(e=>e.title))||this.layers.items.map((e=>e.title)).join(", ")||null}toggleVisibility(e){const i=void 0===e?!this.visible:e;this.layers.forEach((e=>{e.visible=i})),i&&null!=this.parent&&this.parent.toggleVisibility(!0)}toggleAllSiblingsVisibility(e){const i=void 0===e?!this.visible:e;this.toggleVisibility(i),null!=this.parent&&(this.parent.toggleVisibility(i),this.parent.children.forEach((e=>e.toggleVisibility(i))))}};function a(e,i){let t=null;for(const s of e.items){const e=i(s);if(null!=t&&t!==e)return null;t=e}return t}e([r({nonNullable:!0})],n.prototype,"id",void 0),e([r()],n.prototype,"parent",void 0),e([r({nonNullable:!0,readOnly:!0})],n.prototype,"children",void 0),e([r({nonNullable:!0,readOnly:!0})],n.prototype,"layers",void 0),e([r({nonNullable:!0})],n.prototype,"level",void 0),e([r({readOnly:!0})],n.prototype,"hasChildren",null),e([r({readOnly:!0})],n.prototype,"isDiscipline",null),e([r({readOnly:!0})],n.prototype,"visible",null),e([r({readOnly:!0})],n.prototype,"title",null),n=e([o("esri.widgets.BuildingExplorer.support.LayerTreeNode")],n);export{n as LayerTreeNode};