@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.42 kB
JavaScript
import e from"../../../../../core/CircularArray.js";import has from"../../../../../core/has.js";import{isNone as t,isSome as s,unwrap as r}from"../../../../../core/maybe.js";import{FeatureSetReaderJSON as i}from"../support/FeatureSetReaderJSON.js";import{UpdateToken as d}from"../support/UpdateToken.js";class a{constructor(t,s){this.requests={done:new Array,stream:new e(10)},this._edits=null,this._abortController=new AbortController,this._version=0,this._done=!1,this.didSend=!1,this.tile=t,this._version=s}get signal(){return this._abortController.signal}get options(){return{signal:this._abortController.signal}}get empty(){return!this.requests.done.length&&t(this.edits)}get edits(){return this._edits}get done(){return this._done}end(){this._done=!0}clear(){this.requests.done=[]}applyUpdate(e){this.requests.done.forEach((t=>t.message.status.unset(e))),this._version=e.version,s(this._edits)&&this._edits.status.unset(e)}add(e){e.message.status=e.message.status??d.empty(),e.message.status.version=this._version,has("esri-2d-update-debug")&&console.debug(this.tile.id,"DataTileSubscription:add",this._version),e.message.end&&this.requests.done.forEach((e=>{s(e.message)&&e.message.end&&(e.message.end=!1)})),this.requests.done.push(e)}edit(e,a){const o=e.getQuantizationTransform(),n=e.fullSchema(),h=Array.from(e.features()).filter(s),u=[...a,...h.map((e=>e.objectId))];if(this.removeIds(u),this._invalidate(),t(this._edits))return void(this._edits={type:"append",addOrUpdate:i.fromOptimizedFeatures(h,n,r(o)),id:this.tile.id,status:d.empty(),end:!0});this.requests.done.forEach((e=>e.message.end=!1));r(this._edits.addOrUpdate).append(e.features())}*readers(){for(const{message:e}of this.requests.done)s(e.addOrUpdate)&&(yield e.addOrUpdate);s(this._edits)&&s(this._edits.addOrUpdate)&&(yield this._edits.addOrUpdate)}_invalidate(){for(const e of this.requests.done)e.message.status=d.empty();s(this._edits)&&(this._edits.status=d.empty())}removeIds(e){this._invalidate();for(const{message:t}of this.requests.done){const r=t.addOrUpdate;s(r)&&(r.removeIds(e),r.isEmpty&&(has("esri-2d-update-debug")&&console.debug("Removing FeatureSetReader"),t.addOrUpdate=null))}s(this._edits)&&s(this._edits.addOrUpdate)&&this._edits.addOrUpdate.removeIds(e),this.requests.done=this.requests.done.filter((e=>e.message.addOrUpdate||e.message.end))}abort(){this._abortController.abort()}}export{a as DataTileSubscription};