@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.73 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 s from"./TileKey.js";function e(s,e){const i=new Set;for(const t of s instanceof Set?s.values():s.keys())e.has(t)||i.add(t);return i}class i{constructor(s,e,i){const t=i?s.getTileCoverage(i,0,!0,"closest"):null,n=s.getTileCoverage(e,0,!0,"closest");if(this._tileKeys=new Map,t)for(const o of t.keys())this._tileKeys.set(o.id,o);if(n)for(const o of n.keys())this._tileKeys.set(o.id,o)}get coverageSet(){return new Set(this._tileKeys.keys())}keys(){return this._tileKeys.values()}}class t{constructor(s){this.version=s}}class n{constructor(s){this._subscriptions=new Map,this._visible=new Set,this._paused=new Set,this._version=0,this._config=s}destroy(){}get coverageSet(){return this._coverage?.coverageSet??new Set}get subscriptions(){return new Set(this._subscriptions.keys())}suspend(){this._suspendedOverage=this._coverage,this._coverage=null,this._updateSubscriptions()}resume(){null==this._coverage&&(this._coverage=this._suspendedOverage,this._suspendedOverage=null,this._updateSubscriptions())}update(s,e){return this._version=(this._version+1)%Number.MAX_SAFE_INTEGER,this._updateCoverage(s,e),this._updateSubscriptions(),new Set(this._visible)}updateVisibility(){const s=this._updateVisibility();return this._visible=s,this._visible}_updateCoverage(s,e){this._coverage=new i(this._config.tileInfoView,s,e)}_updateSubscriptions(){const s=this.coverageSet,i=this._updateVisibility(),n=e(i,s),o=e(this._subscriptions,i),r=e(s,this._subscriptions),a=e(o,s),u=e(n,a),c=e(u,this._paused);this._visible=i;for(const e of r.values())this._subscriptions.set(e,new t(this._version));for(const e of c.values())this._paused.add(e);for(const e of a.values())this._subscriptions.delete(e),this._paused.delete(e);(r.size||a.size||c.size)&&this._sendUpdateSubscriptions(r,a,c)}_sendUpdateSubscriptions(s,e,i){const t=Array.from(s.values()).map((s=>({tileId:s,version:this._subscriptions.get(s).version})));this._config.updateSubscriptions({subscribe:t,unsubscribe:Array.from(e.values()),pause:Array.from(i.values())})}_updateVisibility(){const s=new Set,e=new Set;if(!this._coverage)return s;for(const i of this._coverage.keys()){if(this._config.isDone(i)){s.add(i.id);continue}if(this._addVisibleParent(s,e,i))continue;this._addVisibleChildren(s,i)||s.add(i.id)}return s}_addVisibleParent(e,i,t){let n=!1;for(const o of this._visible.values()){new s(o).containsChild(t)&&(e.add(o),i.add(o),n=!0)}return n}_addVisibleChildren(e,i){let t=!1;for(const n of this._visible.values()){const o=new s(n);i.containsChild(o)&&(e.add(n),t=!0)}return t}}export{n as FeatureTileSubscriptionManager};