@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 3.64 kB
JavaScript
import{_ as e}from"../../chunks/tslib.es6.js";import t from"../../core/Handles.js";import{IdentifiableMixin as s}from"../../core/Identifiable.js";import{watch as n,initial as r}from"../../core/reactiveUtils.js";import{property as i}from"../../core/accessorSupport/decorators/property.js";import"../../core/accessorSupport/ensureType.js";import"../../core/arrayUtils.js";import{subclass as o}from"../../core/accessorSupport/decorators/subclass.js";import l from"../Widget.js";import{getLegendLayerInfo as d}from"./support/layerListUtils.js";import{isWidget as a}from"../support/widget.js";import{tsx as c}from"../support/jsxFactory.js";const h="esri-layer-list-panel",g=`${h}__content`,p={base:h,content:g,contentLegend:`${g}--legend`,contentString:`${g}--string`,contentElement:`${g}--html-element`,contentWidget:`${g}--widget`},m="legends";let u=class extends(s(l)){constructor(e,s){super(e,s),this._legend=null,this._handles=new t,this.content=null,this.image=null,this.listItem=null,this.open=!1,this.visible=!0}initialize(){this.addHandles(n((()=>this.content),(e=>this._createLegend(e)),r))}destroy(){const{_legend:e}=this;e&&e.destroy(),this._legend=null}get className(){const{image:e}=this,t=this._getFirstWidget();return this._get("className")||!e&&t?t.iconClass:""}set className(e){this._override("className",e)}get disabled(){const{listItem:e,_legend:t,content:s}=this;return!e||!(Array.isArray(s)&&s.length>1)&&(!!t&&(!t.activeLayerInfos?.length||!e.visibleAtCurrentScale))}set disabled(e){this._overrideIfSome("disabled",e)}get title(){const e=this._getFirstWidget();return this._get("title")||e?e.label:""}set title(e){this._override("title",e)}render(){return c("div",{class:p.base},this._renderContents())}_renderContent(e){const{_legend:t,disabled:s}=this;return!e||s?null:"legend"===e&&t?c("div",{class:this.classes(p.content,p.contentLegend),key:t},t.render()):"string"==typeof e?c("div",{class:this.classes(p.content,p.contentString),key:e,innerHTML:e}):a(e)?c("div",{class:this.classes(p.content,p.contentWidget),key:e},e.render()):e instanceof HTMLElement?c("div",{class:this.classes(p.content,p.contentElement),key:e,bind:e,afterCreate:this._attachToNode}):null}_renderContents(){const{content:e}=this;return Array.isArray(e)?e.map((e=>this._renderContent(e))):this._renderContent(e)}_getLegendOptions(){const{listItem:e}=this;if(!e)return{};const{layer:t,view:s}=e;return t&&s?{view:s,layerInfos:[d(t)]}:{}}_createLegend(e){this._hasLegend(e)&&!this._legend&&import("../Legend.js").then((({default:e})=>{const{_handles:t,listItem:s}=this,i=new e(this._getLegendOptions());this._legend=i,this.notifyChange("className"),this.notifyChange("title");const o=n((()=>[s?.view,s?.layer,s?.layer?.source,s?.layer?.parent]),(()=>this._updateLegend(i)),r);t.add(o,m),this.scheduleRender()}))}_hasLegend(e){const t="legend";return e===t||!!Array.isArray(e)&&e.includes(t)}_attachToNode(e){e.appendChild(this)}_updateLegend(e){e.set(this._getLegendOptions()),this.scheduleRender()}_getWidget(e){return"legend"===e?this._legend:a(e)?e:null}_getFirstWidget(){const{content:e}=this;if(Array.isArray(e)){let t=null;return e.some((e=>{const s=this._getWidget(e);return s&&(t=s),!!s})),t}return this._getWidget(e)}};e([i()],u.prototype,"_legend",void 0),e([i()],u.prototype,"className",null),e([i()],u.prototype,"content",void 0),e([i()],u.prototype,"disabled",null),e([i()],u.prototype,"image",void 0),e([i()],u.prototype,"listItem",void 0),e([i()],u.prototype,"title",null),e([i()],u.prototype,"open",void 0),e([i()],u.prototype,"visible",void 0),u=e([o("esri.widgets.LayerList.ListItemPanel")],u);const _=u;export{_ as default};