UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 1.14 kB
import has from"../../../../../core/has.js";import{throwIfAborted as e,isAbortError as t}from"../../../../../core/promiseUtils.js";import{BaseFeatureSource as r}from"./BaseFeatureSource.js";const s=has("esri-mobile"),i={maxDrillLevel:s?1:4,maxRecordCountFactor:s?1:3};class a extends r{constructor(e){super(e)}async _fetchDataTile(r){const s=this._serviceInfo.capabilities.query.supportsMaxRecordCountFactor,a=this._subscriptions.get(r.key.id),o=a.signal,n=r.getQuantizationParameters();let c=0;const d=async(u,l)=>{const p=this._queryInfo,m=this.createTileQuery(u,{maxRecordCountFactor:s?i.maxRecordCountFactor:void 0,returnExceededLimitFeatures:!1,quantizationParameters:n});c++;try{const t=await this._queue.push({tile:r,query:m,signal:o,depth:l});if(c--,e(o),!t)return;if(p!==this._queryInfo)return void d(u,l);if(t.exceededTransferLimit&&l<i.maxDrillLevel){for(const e of u.createChildTiles())d(e,l+1);return}const s={id:r.id,addOrUpdate:t,end:0===c,type:"append"};a.add({query:m,message:s}),this._onMessage(s)}catch(h){t(h)||this._onMessage({id:r.id,addOrUpdate:null,end:!0,type:"append"})}};d(r,0)}}export{a as DrillDownFeatureSource};