@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 10.2 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{_ as e}from"../../chunks/tslib.es6.js";import"../../core/has.js";import t from"../../core/Logger.js";import{throwIfAborted as r}from"../../core/promiseUtils.js";import{watch as i,on as l,syncAndInitial as s}from"../../core/reactiveUtils.js";import{sqlAnd as o}from"../../core/sql.js";import{property as n}from"../../core/accessorSupport/decorators/property.js";import"../../core/RandomLCG.js";import{subclass as a}from"../../core/accessorSupport/decorators/subclass.js";import{getFeatureIdInfoFieldNames as u}from"../../layers/graphics/data/FeatureIdInfo.js";import{systemIsSpatialFieldName as d}from"../../layers/knowledgeGraph/constants.js";import{getEffectiveDisplayFilter as p}from"../../layers/support/displayFilterUtils.js";import f from"../../layers/support/FeatureEffect.js";import y from"../../layers/support/FeatureFilter.js";import{getSignedInUser as m}from"../../layers/support/featureLayerUtils.js";import{fetchFeaturePopupFeatures as h,loadFeaturePopupArcadeModules as c}from"../../layers/support/featurePopupQueryUtils.js";import{fixFields as F,unpackFieldNames as g,collectLabelingFields as I,collectElevationFields as b,collectFilterFields as w,collectFeatureReductionFields as E,collectOrderByInfos as v,collectFields as x,collectTrackInfoFields as q,collectDisplayFilterFields as R,collectField as j,featureHasFields as _}from"../../layers/support/fieldUtils.js";import{getFloorFilterClause as C}from"../../layers/support/floorFilterUtils.js";import{getUtilityNetworkFields as O}from"../../networks/support/networkFieldUtils.js";import k from"../../rest/support/Query.js";import{createFeatureIdInfo as U}from"../2d/layers/features/layerAdapters/featureServiceUtils.js";import{getRequiredFields as P,getFetchPopupTemplate as T}from"./support/popupUtils.js";import{WhereClauseVisitor as L}from"./support/WhereClauseVisitor.js";const S=S=>{let N=class extends S{constructor(...e){super(...e),this._updatingRequiredPromise=null,this.filter=null,this.layer=null,this.requiresCurrentUser=!1,this.requiredFields=[],this.view=null}initialize(){this.addHandles([i((()=>{const e=this.layer,t=this.view;return[e&&"elevationInfo"in e?e.elevationInfo?.featureExpressionInfo:null,e&&"displayField"in e?e.displayField:null,e&&"timeInfo"in e&&e.timeInfo,e&&"renderer"in e&&e.renderer,e&&"labelingInfo"in e&&e.labelingInfo,e&&"floorInfo"in e&&e.floorInfo,t?.requiredFieldsOptions?.featureTitleFields&&e&&"featureTitleFields"in e&&e.featureTitleFields,t?.requiredFieldsOptions?.utilityNetworkFields&&O(t,e),e.displayFilterInfo,this.displayFilterEnabled,this.filter,this.featureEffect,this.timeExtent,"knowledge-graph-sublayer"===e?.type&&"link-chart"===e.parentCompositeLayer.type&&e.parentCompositeLayer.linkChart?.linkChartProperties.nonspatialDataDisplay?.mode,"parquet"===e?.type&&e.popupTemplate]}),(()=>this._handleChange()),s),l((()=>this.view?.floors),"change",(()=>this._handleChange())),l((()=>this.layer.displayFilterInfo?.filters),"change",(()=>this._handleChange())),l((()=>this.layer&&"sublayers"in this.layer?this.layer.sublayers:null),"change",(()=>this._handleChange()))])}get availableFields(){if(!this.layer)return[];const{layer:e,layer:{fieldsIndex:t},requiredFields:r}=this;return"outFields"in e&&e.outFields?F(t,[...g(t,e.outFields),...r]):F(t,r)}get displayFilterEnabled(){return(this.view?.displayFilterEnabled??!0)&&(!("displayFilterEnabled"in this.layer)||(this.layer?.displayFilterEnabled??!0))}get effectiveDisplayFilter(){const e=this.layer;return this.displayFilterEnabled&&e.displayFilterInfo?p(e.displayFilterInfo,this.view):null}get featureEffect(){return this.layer&&"featureEffect"in this.layer?this.layer.featureEffect:null}set featureEffect(e){this._override("featureEffect",e)}get maximumNumberOfFeatures(){return 0}set maximumNumberOfFeatures(e){t.getLogger(this).error("#maximumNumberOfFeatures=","Setting maximum number of features is not supported")}get maximumNumberOfFeaturesExceeded(){return!1}get signedInUser(){return this.layer?.url?m(this.layer.url):Promise.resolve(null)}highlight(e,t){throw new Error("missing implementation")}createQuery(){const e={outFields:["*"],returnGeometry:!0,outSpatialReference:this.view.spatialReference},t=null!=this.filter?this.filter.createQuery(e):new k(e);return"floorInfo"in this.layer&&this.layer.floorInfo&&(t.where=o(t.where,C(this))),this.displayFilterEnabled&&(t.where=o(t.where,this.effectiveDisplayFilter?.where)),null!=this.timeExtent&&(t.timeExtent=null!=t.timeExtent?t.timeExtent.intersection(this.timeExtent):this.timeExtent.clone()),t}createAggregateQuery(){const e={outFields:["*"],returnGeometry:!0,outSpatialReference:this.view.spatialReference};return new k(e)}queryFeatures(e,t){throw new Error("missing implementation")}queryObjectIds(e,t){throw new Error("missing implementation")}queryFeatureCount(e,t){throw new Error("missing implementation")}queryExtent(e,t){throw new Error("missing implementation")}async fetchPopupFeaturesFromGraphics(e,t){const r=await this._createPopupQuery(e.map((e=>e.origin?.layer??e.layer)),t);return await h(this.layer,e,r,{getPopupTemplate:e=>e&&"popupEnabled"in e&&e.popupEnabled?T(e,t):null,hasRequiredFields:(e,t)=>this._popupFeatureHasRequiredFields(e,t),...t})}_handleChange(){const e=Promise.all([this._updateRequiredFields(),this._updateClientWhereClauseRequirements()]).then((()=>{}));return this._set("_updatingRequiredPromise",e),e.then((()=>{this._updatingRequiredPromise===e&&this._set("_updatingRequiredPromise",null)})),e}async _updateClientWhereClauseRequirements(){if(!this.layer||!this.view)return;const{layer:e}=this,r=new L(e.fieldsIndex);if(r.visitFilter(this.filter),"featureReduction"in e&&r.visitFeatureReduction(e.featureReduction),"labelingInfo"in e&&r.visitLabelingInfo(e.labelsVisible,e.labelingInfo),"trackInfo"in e&&r.visitTrackInfo(e.trackInfo),"2d"===this.view.type&&(r.visitFilter(this.featureEffect?.filter),r.visitDisplayFilter(this.displayFilterEnabled,e.displayFilterInfo),"featureReduction"in e&&r.visitFeatureReduction(e.featureReduction)),"subtype-group"===e.type)for(const t of e.sublayers)r.visitLabelingInfo(t.labelsVisible,t.labelingInfo);try{const e=await r.finish();this._set("requiresCurrentUser",e.requiresCurrentUser)}catch(i){t.getLogger(this).error(i)}}async _updateRequiredFields(){if(!this.layer||!this.view)return;const e="3d"===this.view.type,{layer:r,layer:{fieldsIndex:i}}=this,l="renderer"in r&&r.renderer,s="orderBy"in r&&r.orderBy,o="featureReduction"in r?r.featureReduction:null,n=new Set,a=[l?l.collectRequiredFields(n,i):null,I(n,r),e&&"elevationInfo"in r?b(n,r):null,null!=this.filter?w(n,r,this.filter):null,e||null==this.featureEffect?null:w(n,r,this.featureEffect.filter),!e&&o?E(n,r,o):null,!e&&s?v(n,r,s):null];if("timeInfo"in r&&r.timeInfo&&this.timeExtent&&x(n,r.fieldsIndex,[r.timeInfo.startField,r.timeInfo.endField]),"timeInfo"in r&&r.timeInfo&&"trackInfo"in r&&r.trackInfo){const{trackInfo:e}=r;x(n,r.fieldsIndex,[r.timeInfo.trackIdField]),"feature"!==r.type&&"startTimeField"!==e.timeField||x(n,r.fieldsIndex,[r.timeInfo.startField]),"endTimeField"===e.timeField&&x(n,r.fieldsIndex,[r.timeInfo.endField]),await q(n,r)}if("floorInfo"in r&&r.floorInfo&&x(n,r.fieldsIndex,[r.floorInfo.floorField]),"featureTitleFields"in r&&this.view?.requiredFieldsOptions?.featureTitleFields&&r.featureTitleFields&&x(n,r.fieldsIndex,r.featureTitleFields),"feature"===r.type&&r.globalIdField&&this.view?.requiredFieldsOptions?.globalIdField&&x(n,r.fieldsIndex,[r.globalIdField]),this.displayFilterEnabled&&a.push(R(n,r,r.displayFilterInfo)),"feature"===r.type&&e&&null!=r.infoFor3D&&(null==r.globalIdField&&t.getLogger(this).error("globalIdField missing on 3DObjectFeatureLayer"),x(n,r.fieldsIndex,[r.globalIdField])),"subtype-group"===r.type){j(n,i,r.subtypeField);const e=r.sublayers.map((e=>Promise.all([e.renderer?.collectRequiredFields(n,i),I(n,e)])));a.push(Promise.all(e))}if("catalog-footprint"===r.type&&r.parent){const e=r.parent;x(n,i,[e.itemNameField,e.itemSourceField,e.itemTypeField,e.maxScaleField,e.minScaleField])}"knowledge-graph-sublayer"===r.type&&"link-chart"===r.parentCompositeLayer.type&&j(n,i,d),"parquet"===r.type&&a.push(P(r,r.popupTemplate).then((e=>{for(const t of e)n.add(t)})));const p=await Promise.allSettled(a);if(e)j(n,i,r.objectIdField);else for(const t of u(U(r)))j(n,i,t);e&&"displayField"in r&&r.displayField&&j(n,i,r.displayField);for(const u of p)"rejected"===u.status&&t.getLogger(this).error(u.reason);const f=Array.from(n).sort();this._set("requiredFields",f)}_popupFeatureHasRequiredFields(e,t){return _(e,t)}async _createPopupQuery(e,t){const i=this.layer.createQuery(),l=new Set;let s=!1;const n=e??[this.layer];for(const o of n){if(!("popupEnabled"in o))continue;const e=T(o,t);if(null==e)continue;const i=await c(e);r(t);const n=i&&i.arcadeUtils.hasGeometryOperations(e);s=!("point"!==this.layer.geometryType&&!n);const a=await P(this.layer,e);r(t);for(const t of a)l.add(t)}return i.returnGeometry=s,i.returnZ=s,i.returnM=s,i.outFields=Array.from(l),i.outSpatialReference=this.view.spatialReference,"floorInfo"in this.layer&&this.layer.floorInfo&&(i.where=o(i.where,C(this))),i}canResume(){return!!super.canResume()&&(null==this.timeExtent||!this.timeExtent.isEmpty)}getTest(){}get test(){}};return e([n()],N.prototype,"_updatingRequiredPromise",void 0),e([n({readOnly:!0})],N.prototype,"availableFields",null),e([n({readOnly:!0})],N.prototype,"displayFilterEnabled",null),e([n({readOnly:!0})],N.prototype,"effectiveDisplayFilter",null),e([n({type:f})],N.prototype,"featureEffect",null),e([n({type:y})],N.prototype,"filter",void 0),e([n()],N.prototype,"layer",void 0),e([n({type:Number})],N.prototype,"maximumNumberOfFeatures",null),e([n({readOnly:!0,type:Boolean})],N.prototype,"maximumNumberOfFeaturesExceeded",null),e([n()],N.prototype,"requiresCurrentUser",void 0),e([n({readOnly:!0})],N.prototype,"requiredFields",void 0),e([n({readOnly:!0})],N.prototype,"signedInUser",null),e([n()],N.prototype,"suspended",void 0),e([n()],N.prototype,"view",void 0),N=e([a("esri.views.layers.FeatureLayerView")],N),N};export{S as default};