UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 3.74 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{__decorate as t}from"tslib";import e from"../../../../core/Accessor.js";import i from"../../../../core/Logger.js";import{deg2rad as o}from"../../../../core/mathUtils.js";import{isAbortError as r}from"../../../../core/promiseUtils.js";import{property as s,subclass as n}from"../../../../core/accessorSupport/decorators.js";import a from"../../../../geometry/Extent.js";import l from"../../../../geometry/Point.js";import{fadeToZero as m,animate as p}from"./animatedValues.js";import{FlowDisplayObject as u}from"./FlowDisplayObject.js";import{ProcessingTimeEstimate as c}from"./ProcessingTimeEstimate.js";import{longSafetyTime as d,shortMarginTime as h}from"./utils.js";const f=1.15,y=1;let g=class extends e{constructor(t){super(t),this._flowDisplayObject=new u,this._loading=null,this._processingTimeEstimate=new c}initialize(){this.flowContainer.addChild(this._flowDisplayObject)}destroy(){this._clear(),this.flowContainer.removeAllChildren()}get updating(){return null!=this._loading}update(t){const{flowStyle:e}=this.flowContainer;if(null==e)return void this._clear();const{extent:o,rotation:s,resolution:n,pixelRatio:a}=t.state,l=x(o,s);l.expand(f);const u=[Math.round((l.xmax-l.xmin)/n),Math.round((l.ymax-l.ymin)/n)],c=performance.now()/1e3,g={extent:l,size:u,pixelRatio:a,time:c+this._processingTimeEstimate.getSafeTime()},_=new AbortController,{items:w}=this._flowDisplayObject,b=w.at(-1);if(b&&this._fastUpdate(b.style,b.resources.query,e,g))return b.style=e,void(this._loading&&(this._loading.abortController.abort(),this._loading=null));if(this._loading&&this._fastUpdate(this._loading.flowStyle,this._loading.query,e,g))return void(this._loading.flowStyle=e);const{canContinue:C,previousItem:j}=this._previousItemPrevious(b,e,g),v=e.load(g,C?j.resources:null,_.signal).then(t=>{const i=performance.now()/1e3,o=i-c;if(this._processingTimeEstimate.addSample(o),C){for(const e of w)e.endTime=t.query.time;w.push({attached:!1,startTime:t.query.time,endTime:t.query.time+d,displayOpacity:1,resources:t,style:e})}else{for(const t of w)t.displayOpacity=m(t.displayOpacity,y,i);w.push({attached:!1,startTime:i-h,endTime:i+d,displayOpacity:p(i,0,i+y,1),resources:t,style:e})}this._flowDisplayObject.requestRender(),this._loading=null},t=>{r(t)||i.getLogger(this).error("A resource failed to load.",t)});this._loading?.abortController.abort(),this._loading={abortController:_,promise:v,query:g,flowStyle:e}}_fastUpdate(t,e,i,o){if(!t.isCompatible(i))return!1;return!(!e.extent.equals(o.extent)||e.size[0]!==o.size[0]||e.size[1]!==o.size[1]||e.pixelRatio!==o.pixelRatio)}_previousItemPrevious(t,e,i){if(!t)return{canContinue:!1,previousItem:t};if(!t.style.supportsContinuation)return{canContinue:!1,previousItem:t};if(!e.supportsContinuation)return{canContinue:!1,previousItem:t};const o=Math.abs(t.resources.query.extent.width-i.extent.width)/i.extent.width,r=Math.abs(t.resources.query.extent.height-i.extent.height)/i.extent.height;return o>.1||r>.1?{canContinue:!1,previousItem:t}:{canContinue:!0,previousItem:t}}_clear(){this._flowDisplayObject.clear(),null!=this._loading&&(this._loading.abortController.abort(),this._loading=null)}};function x(t,e){const i=new l({x:(t.xmax+t.xmin)/2,y:(t.ymax+t.ymin)/2,spatialReference:t.spatialReference}),r=t.xmax-t.xmin,s=t.ymax-t.ymin,n=Math.abs(Math.cos(o(e))),m=Math.abs(Math.sin(o(e))),p=n*r+m*s,u=m*r+n*s,c=new a({xmin:i.x-p/2,ymin:i.y-u/2,xmax:i.x+p/2,ymax:i.y+u/2,spatialReference:t.spatialReference});return c.centerAt(i),c}t([s()],g.prototype,"_loading",void 0),t([s()],g.prototype,"flowContainer",void 0),t([s()],g.prototype,"updating",null),g=t([n("esri.views.2d.engine.flow.FlowStrategy")],g);export{g as default};