// All material copyright ESRI, All Rights Reserved, unless otherwise specified.// See https://js.arcgis.com/4.6/esri/copyright.txt for details.//>>builtdefine("require exports ../core/tsSupport/declareExtendsHelper ../core/tsSupport/decorateHelper ../core/accessorSupport/decorators ../core/Accessor ../core/Error ../core/HandleRegistry ../core/Scheduler ../core/promiseUtils ../core/watchUtils ./LayerViewFactory".split(" "),function(v,w,m,h,f,n,k,p,q,r,t,u){returnfunction(l){functionb(){vara=l.call(this)||this;a._promisesMap=newMap;a._layerViewsMap=newMap;a._handles=newp;a.factory=newu;a.ready=!1;a.layersToLayerViews=function(){vara=newMap;a.set("view.map.basemap.baseLayers","view.basemapView.baseLayerViews");a.set("view.map.ground.layers","view.groundView.layerViews");a.set("view.map.layers","view.layerViews");a.set("view.map.basemap.referenceLayers","view.basemapView.referenceLayerViews");returna}();a._doWork=a._doWork.bind(a);a.refresh=a.refresh.bind(a);a._handles.add(t.init(a,"view.ready",function(c){returna.ready=c}));a._handles.add(a.watch(["view.map.basemap","view.map.ground","view.map.layers","ready"],a.refresh),"watcher");returna}m(b,l);b.prototype.destroy=function(){this._handles&&(this.empty(),this.view=null,this.factory.destroy(),this.factory=null,this._handles.destroy(),this._map=this._layerViewsMap=this._promisesMap=this._handles=null)};b.prototype.empty=function(){this._layerViewsMap.forEach(this._disposeLayerView,this);this._promisesMap.forEach(function(a){returna.cancel()});this._layerViewsMap.clear();this._promisesMap.clear();this._refreshCollections()};b.prototype.refresh=function(){vara=this._handles;a.remove("refresh");a.add(q.schedule(this._doWork),"refresh")};b.prototype.whenLayerView=function(a){this.refresh();this._doWork();returnthis._promisesMap.has(a)?this._promisesMap.get(a):r.reject(newk("view:no-layerview-for-layer","No layerview has been found for the layer",{layer:a}))};b.prototype._doWork=function(){vara=this,c=this._handles,b=this.get("view.map");this._map!==b&&(this.empty(),this._map=b);if(c.has("refresh")){c.remove("refresh");c.remove("collection-change");this.factory.paused=!this.ready;vard=this._map&&this._map.allLayers;d&&(d.forEach(this._createLayerView,this),this._refreshCollections(),this._promisesMap.forEach(function(c,b){d.includes(b)||a._disposeLayerView(a._layerViewsMap.get(b),b)}),c.add(d.on("change",this.refresh),"collection-change"))}};b.prototype._refreshCollections=function(){vara=this;this.layersToLayerViews.forEach(function(c,b){a._populateLayerViewsOwners(a.get(b),a.get(c),a.view)})};b.prototype._populateLayerViewsOwners=function(a,c,b){vard=this;if(a&&c){vare=0;a.forEach(function(a){varg=d._layerViewsMap.get(a);g&&(g.layer=a,g.parent=b,c.getItemAt(e)!==g&&c.splice(e,0,g),a.layers&&d._populateLayerViewsOwners(a.layers,g.layerViews,g),e+=1)});e<c.length&&c.splice(e,c.length)}elsec&&c.removeAll()};b.prototype._createLayerView=function(a){varc=this,b=this.view,d=this.factory,e=this._layerViewsMap,f=this._promisesMap;e.has(a)?a.load():f.has(a)||(d=d.create(b,a).then(function(d){if(!c._map||!c._map.allLayers.some(function(c){returna===c}))thrownewk("view:no-layerview-for-layer","The layer has been removed from the map",{layer:a});e.set(a,d);c._refreshCollections();a.emit("layerview-create",{view:b,layerView:d});b.emit("layerview-create",{layer:a,layerView:d});returnd.when()}),f.set(a,d),d.always(this.refresh))};b.prototype._disposeLayerView=function(a,c){if(this._promisesMap.has(c)&&(this._promisesMap.get(c).cancel(),this._promisesMap.delete(c),a)){c=a.layer;varb=a.view;this.factory.dispose(a);a.layer=a.parent=a.view=null;this._layerViewsMap.delete(c);c.emit("layerview-destroy",{view:b,layerView:a});b.emit("layerview-destroy",{layer:c,layerView:a})}};h([f.property()],b.prototype,"ready",void0);h([f.property()],b.prototype,"view",void0);returnb=h([f.subclass("esri.views.LayerViewManager")],b)}(f.declared(n))});