UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 6.92 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{_ as t}from"../../../chunks/tslib.es6.js";import e from"../../../core/Collection.js";import{referenceSetter as i}from"../../../core/collectionUtils.js";import s from"../../../core/Error.js";import{watch as r,on as h,syncAndInitial as o}from"../../../core/reactiveUtils.js";import{property as a}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/has.js";import"../../../core/Logger.js";import"../../../core/RandomLCG.js";import{subclass as n}from"../../../core/accessorSupport/decorators/subclass.js";import{isLinkChartView as l}from"../../../linkChart/utils.js";import{Container as p}from"../engine/Container.js";import{HighlightCounter as c}from"./support/HighlightCounter.js";import{createOrReuseHighlightGradient as d}from"./support/util.js";import{getDefaultHighlightOptions as u,setDefaultHighlightOptions as g}from"../support/highlightOptionsUtils.js";import m from"../../layers/support/ClipRect.js";import f from"../../layers/support/Geometry.js";import y from"../../layers/support/Path.js";import v from"../../support/HighlightOptions.js";import{isInEffectiveScaleRange as w}from"../../support/layerViewUtils.js";const R=e.ofType({key:"type",base:null,typeMap:{rect:m,path:y,geometry:f}}),_=new(e.ofType(v)),S=m=>{let f=class extends m{constructor(){super(...arguments),this._highlightCounter=new c,this.attached=!1,this.clips=new R,this.highlights=null,this.lastUpdateId=-1,this.moving=!1,this.updateRequested=!1,this._visibleAtCurrentScale=!0}initialize(){const t=this.view?.spatialReferenceLocked??!0,e=this.view?.spatialReference;e&&t&&!this.spatialReferenceSupported?this.addResolvingPromise(Promise.reject(new s("layerview:spatial-reference-incompatible","The spatial reference of this layer does not meet the requirements of the view",{layer:this.layer}))):(this.container||(this.container=new p),this.container.fadeTransitionEnabled=!0,this.container.visible=!1,this.container.endTransitions(),this.addHandles([r((()=>this.suspended),(t=>{this.container&&(this.container.visible=!t)}),o),r((()=>this.updateSuspended),(t=>{this.view&&!t&&this.updateRequested&&this.view.requestUpdate()}),o),r((()=>this.layer?.opacity??1),(t=>{this.container&&(this.container.opacity=t)}),o),r((()=>this.layer&&"blendMode"in this.layer?this.layer.blendMode:"normal"),(t=>{this.container&&(this.container.blendMode=t)}),o),r((()=>this.layer&&"effect"in this.layer?this.layer.effect:null),(t=>{this.container&&(this.container.effect=t)}),o),r((()=>this._mergedHighlights.items.map((t=>({name:t.name,options:{fillColor:t.color,haloColor:t.haloColor,fillOpacity:t.fillOpacity,haloOpacity:t.haloOpacity,haloWidth:t.haloWidth,haloBlur:t.haloBlur}})))),(()=>{this.container.highlightGradient=d(this.container.highlightGradient,this._mergedHighlights.items)}),o),r((()=>this._mergedHighlights.items.map((t=>t.name))),(()=>{this._processHighlight()})),h((()=>this.clips),"change",(()=>{this.container&&(this.container.clips=this.clips)}),o),r((()=>({scale:this.view?.scale,scaleRange:this.layer&&"effectiveScaleRange"in this.layer?this.layer.effectiveScaleRange:null})),(({scale:t,scaleRange:e})=>{const i=w(e,t);i!==this._visibleAtCurrentScale&&(this._visibleAtCurrentScale=i)}),o)],"constructor"),this.view?.whenLayerView?this.view.whenLayerView(this.layer).then((t=>{t===this&&this.processAttach()}),(()=>{})):this.when().then((()=>{this.processAttach()}),(()=>{})))}destroy(){this.processDetach(),this.updateRequested=!1}get highlightOptions(){return u(this)}set highlightOptions(t){g(this,t)}get hasHighlight(){return this._highlightCounter.size>0}get _mergedHighlights(){if(!this.view)return _;if(!this.highlights)return this.view.highlights;const t=this.view.highlights.clone();for(const e of this.highlights){const i=t.find((t=>t.name===e.name));i&&i.assignFrom(e)}return t}get highlightIds(){return Array.from(this._highlightCounter.objectIds)}get scheduler(){return this.view.scheduler}get spatialReferenceSupported(){const t=this.view?.spatialReference;return null==t||this.supportsSpatialReference(t)}get updating(){return this.spatialReferenceSupported&&(!this.attached||!this.suspended&&(this.updateRequested||this.isUpdating())||!!this._updatingHandles?.updating||this.container.transitioning)}get visibleAtCurrentScale(){return this._visibleAtCurrentScale}processAttach(){this.isResolved()&&!this.attached&&!this.destroyed&&this.spatialReferenceSupported&&(this.attach(),this.attached=!0,this.requestUpdate())}processDetach(){this.attached&&(this.attached=!1,this.removeHandles("attach"),this.detach(),this.updateRequested=!1)}requestUpdate(){this.destroyed||this.updateRequested||(this.updateRequested=!0,this.updateSuspended||this.view.requestUpdate())}processUpdate(t){!this.isFulfilled()||this.isResolved()?(this._set("updateParameters",t),this.updateRequested&&!this.updateSuspended&&(this.updateRequested=!1,this.update(t))):this.updateRequested=!1}hitTest(t,e){return Promise.resolve(null)}supportsSpatialReference(t){return!0}canResume(){if(!this.spatialReferenceSupported)return!1;switch(this.layer?.type){case"link-chart":case"knowledge-graph-sublayer":case"graphics":break;default:if(l(this.view)&&!this.view.inGeographicLayout)return!1}return!!super.canResume()&&this.visibleAtCurrentScale}getSuspendInfo(){const t=super.getSuspendInfo(),e=!this.spatialReferenceSupported;return e&&(t.spatialReferenceNotSupported=e),t}addAttachHandles(t){this.addHandles(t,"attach")}_addHighlights(t,e){this._highlightCounter.add(t,e)&&this._processHighlight()}_removeHighlights(t,e){this._highlightCounter.delete(t,e)&&this._processHighlight()}_processHighlight(){}_getHighlights(){const t=[];for(const[e,i]of this._highlightCounter.highlightNamesByObjectId){const s=this._getHighlightBits(i);t.push({objectId:e,highlightFlags:s})}return t}_getHighlightBits(t){const e=new Set(t);let i=1,s=0;if(!this.view)return 0;const r=this._mergedHighlights;for(const{name:h}of r)e.delete(h)&&(s=i),i<<=1;return s}};return t([a()],f.prototype,"attached",void 0),t([a({type:R,set(t){const e=i(t,this._get("clips"),R);this._set("clips",e)}})],f.prototype,"clips",void 0),t([a()],f.prototype,"container",void 0),t([a({type:v})],f.prototype,"highlightOptions",null),t([a({type:e.ofType(v)})],f.prototype,"highlights",void 0),t([a()],f.prototype,"_mergedHighlights",null),t([a()],f.prototype,"moving",void 0),t([a({readOnly:!0})],f.prototype,"spatialReferenceSupported",null),t([a({readOnly:!0})],f.prototype,"updateParameters",void 0),t([a()],f.prototype,"updateRequested",void 0),t([a()],f.prototype,"updating",null),t([a()],f.prototype,"view",void 0),t([a()],f.prototype,"_visibleAtCurrentScale",void 0),t([a({readOnly:!0})],f.prototype,"visibleAtCurrentScale",null),f=t([n("esri.views.2d.layers.LayerView2D")],f),f};export{S as LayerView2DMixin};