@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 11.6 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{_ as e}from"../../chunks/tslib.es6.js";import t from"../../core/Error.js";import"../../core/has.js";import r from"../../core/Logger.js";import{throwIfAborted as i}from"../../core/promiseUtils.js";import{watch as l,syncAndInitial as s,on as o}from"../../core/reactiveUtils.js";import{sqlAnd as n}from"../../core/sql.js";import{property as a}from"../../core/accessorSupport/decorators/property.js";import"../../core/RandomLCG.js";import{subclass as u}from"../../core/accessorSupport/decorators/subclass.js";import{systemIsSpatialFieldName as p}from"../../layers/knowledgeGraph/constants.js";import{getEffectiveDisplayFilter as d}from"../../layers/support/displayFilterUtils.js";import f from"../../layers/support/FeatureEffect.js";import y from"../../layers/support/FeatureFilter.js";import{getSignedInUser as h}from"../../layers/support/featureLayerUtils.js";import{fixFields as m,unpackFieldNames as c,collectLabelingFields as F,collectElevationFields as g,collectFilterFields as I,collectFeatureReductionFields as w,collectOrderByInfos as b,collectFields as v,collectTrackInfoFields as E,collectDisplayFilterFields as x,collectField as q,featureHasFields as R}from"../../layers/support/fieldUtils.js";import{getFloorFilterClause as _}from"../../layers/support/floorFilterUtils.js";import{getUtilityNetworkFields as j}from"../../networks/support/networkFieldUtils.js";import P from"../../rest/support/Query.js";import{loadArcade as O}from"../../support/arcadeOnDemand.js";import{getRequiredFields as k,getFetchPopupTemplate as C}from"./support/popupUtils.js";import{WhereClauseVisitor as T}from"./support/WhereClauseVisitor.js";const U=U=>{let L=class extends U{constructor(...e){super(...e),this._updatingRequiredPromise=null,this.filter=null,this.layer=null,this.requiresCurrentUser=!1,this.requiredFields=[],this.view=null}initialize(){this.addHandles([l((()=>{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&&j(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),o((()=>this.view?.floors),"change",(()=>this._handleChange())),o((()=>this.layer.displayFilterInfo?.filters),"change",(()=>this._handleChange())),o((()=>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?m(t,[...c(t,e.outFields),...r]):m(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?d(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){r.getLogger(this).error("#maximumNumberOfFeatures=","Setting maximum number of features is not supported")}get maximumNumberOfFeaturesExceeded(){return!1}get signedInUser(){return this.layer?.url?h(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 P(e);return"floorInfo"in this.layer&&this.layer.floorInfo&&(t.where=n(t.where,_(this))),this.displayFilterEnabled&&(t.where=n(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 P(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){return this._validateFetchPopupFeatures(e,t),this._fetchPopupFeatures(e,t)}_loadArcadeModules(e){return e.expressionInfos?.length||Array.isArray(e.content)&&e.content.some((e=>"expression"===e.type))?O():Promise.resolve()}_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,t=new T(e.fieldsIndex);if(t.visitFilter(this.filter),"featureReduction"in e&&t.visitFeatureReduction(e.featureReduction),"labelingInfo"in e&&t.visitLabelingInfo(e.labelsVisible,e.labelingInfo),"trackInfo"in e&&t.visitTrackInfo(e.trackInfo),"2d"===this.view.type&&(t.visitFilter(this.featureEffect?.filter),t.visitDisplayFilter(this.displayFilterEnabled,e.displayFilterInfo),"featureReduction"in e&&t.visitFeatureReduction(e.featureReduction)),"subtype-group"===e.type)for(const r of e.sublayers)t.visitLabelingInfo(r.labelsVisible,r.labelingInfo);try{const e=await t.finish();this._set("requiresCurrentUser",e.requiresCurrentUser)}catch(i){r.getLogger(this).error(i)}}async _updateRequiredFields(){if(!this.layer||!this.view)return;const e="3d"===this.view.type,{layer:t,layer:{fieldsIndex:i,objectIdField:l}}=this,s="renderer"in t&&t.renderer,o="orderBy"in t&&t.orderBy,n="featureReduction"in t?t.featureReduction:null,a=new Set,u=[s?s.collectRequiredFields(a,i):null,F(a,t),e&&"elevationInfo"in t?g(a,t):null,null!=this.filter?I(a,t,this.filter):null,e||null==this.featureEffect?null:I(a,t,this.featureEffect.filter),!e&&n?w(a,t,n):null,!e&&o?b(a,t,o):null];if("timeInfo"in t&&t.timeInfo&&this.timeExtent&&v(a,t.fieldsIndex,[t.timeInfo.startField,t.timeInfo.endField]),"timeInfo"in t&&t.timeInfo&&"trackInfo"in t&&t.trackInfo){const{trackInfo:e}=t;v(a,t.fieldsIndex,[t.timeInfo.trackIdField]),"feature"!==t.type&&"startTimeField"!==e.timeField||v(a,t.fieldsIndex,[t.timeInfo.startField]),"endTimeField"===e.timeField&&v(a,t.fieldsIndex,[t.timeInfo.endField]),await E(a,t)}if("floorInfo"in t&&t.floorInfo&&v(a,t.fieldsIndex,[t.floorInfo.floorField]),"featureTitleFields"in t&&this.view?.requiredFieldsOptions?.featureTitleFields&&t.featureTitleFields&&v(a,t.fieldsIndex,t.featureTitleFields),"feature"===t.type&&t.globalIdField&&this.view?.requiredFieldsOptions?.globalIdField&&v(a,t.fieldsIndex,[t.globalIdField]),this.displayFilterEnabled&&u.push(x(a,t,t.displayFilterInfo)),"feature"===t.type&&e&&null!=t.infoFor3D&&(null==t.globalIdField&&r.getLogger(this).error("globalIdField missing on 3DObjectFeatureLayer"),v(a,t.fieldsIndex,[t.globalIdField])),"subtype-group"===t.type){q(a,i,t.subtypeField);const e=t.sublayers.map((e=>Promise.all([e.renderer?.collectRequiredFields(a,i),F(a,e)])));u.push(Promise.all(e))}if("catalog-footprint"===t.type&&t.parent){const e=t.parent;v(a,i,[e.itemNameField,e.itemSourceField,e.itemTypeField,e.maxScaleField,e.minScaleField])}"knowledge-graph-sublayer"===t.type&&"link-chart"===t.parentCompositeLayer.type&&q(a,i,p),"parquet"===t.type&&u.push(k(t,t.popupTemplate).then((e=>{for(const t of e)a.add(t)})));const d=await Promise.allSettled(u);q(a,i,l),e&&"displayField"in t&&t.displayField&&q(a,i,t.displayField);for(const p of d)"rejected"===p.status&&r.getLogger(this).error(p.reason);const f=Array.from(a).sort();this._set("requiredFields",f)}_validateFetchPopupFeatures(e,r){if(null!=r)for(const i of e){const e=i.origin&&"layer"in i.origin?i.origin.layer:i.layer;if("popupEnabled"in e&&!e.popupEnabled)throw new t("featurelayerview:fetchPopupFeatures","Popups are disabled",{layer:e});if(i.isAggregate){const r="featureReduction"in e?e.featureReduction:null,i="trackInfo"in e?e.trackInfo:null;if(null==r&&null==i||null!=r&&(!("popupTemplate"in r)||!r.popupEnabled||!r.popupTemplate)||i?.enabled&&(!("popupTemplate"in i)||!i.popupEnabled||!i.popupTemplate))throw new t("featurelayerview:fetchPopupFeatures","Popups are disabled",{layer:e})}else if("popupTemplate"in e){if(!C(e,r))throw new t("featurelayerview:fetchPopupFeatures","Layer does not define a popup template",{layer:e})}}}_popupFeatureHasRequiredFields(e,t){return R(t,e)}async _fetchPopupFeatures(e,t){const r=new Array(e.length),l=new Map,s=await this._createPopupQuery(e.map((e=>e.origin?.layer??e.layer)),t);for(let o=0;o<e.length;o++){const n=e[o];if(n.isAggregate){r[o]=n;continue}const a=n.origin?.layer??n.layer;if(!a||!("popupEnabled"in a))continue;const u=c(this.layer.fieldsIndex,s.outFields),p=C(a,t);if(null==p)continue;const d=await this._loadArcadeModules(p);i(t);d&&d.arcadeUtils.hasGeometryOperations(p)||!this._popupFeatureHasRequiredFields(n,u)?l.set(n.getObjectId(),{graphic:n,index:o}):r[o]=n}if("stream"===this.layer.type||"parquet"===this.layer.type||0===l.size)return r.filter(Boolean);s.objectIds=Array.from(l.keys());try{const e=await this.layer.queryFeatures(s,t);for(const t of e.features){const{graphic:{geometry:e,origin:i},index:s}=l.get(t.getObjectId());t.geometry||=e,t.origin=i,r[s]=t}}catch{}return r.filter(Boolean)}async _createPopupQuery(e,t){const r=this.layer.createQuery(),l=new Set;let s=!1;const o=e??[this.layer];for(const n of o){if(!("popupEnabled"in n))continue;const e=C(n,t);if(null==e)continue;const r=await this._loadArcadeModules(e);i(t);const o=r&&r.arcadeUtils.hasGeometryOperations(e);s=!("point"!==this.layer.geometryType&&!o);const a=await k(this.layer,e);i(t);for(const t of a)l.add(t)}if(r.returnGeometry=s,r.returnZ=s,r.returnM=s,r.outFields=Array.from(l),r.outSpatialReference=this.view.spatialReference,"floorInfo"in this.layer&&this.layer.floorInfo){const e=_(this);null!=e&&(r.where=r.where?`(${r.where}) AND (${e})`:e)}return r}canResume(){return!!super.canResume()&&(null==this.timeExtent||!this.timeExtent.isEmpty)}getTest(){}get test(){}};return e([a()],L.prototype,"_updatingRequiredPromise",void 0),e([a({readOnly:!0})],L.prototype,"availableFields",null),e([a({readOnly:!0})],L.prototype,"displayFilterEnabled",null),e([a({readOnly:!0})],L.prototype,"effectiveDisplayFilter",null),e([a({type:f})],L.prototype,"featureEffect",null),e([a({type:y})],L.prototype,"filter",void 0),e([a()],L.prototype,"layer",void 0),e([a({type:Number})],L.prototype,"maximumNumberOfFeatures",null),e([a({readOnly:!0,type:Boolean})],L.prototype,"maximumNumberOfFeaturesExceeded",null),e([a()],L.prototype,"requiresCurrentUser",void 0),e([a({readOnly:!0})],L.prototype,"requiredFields",void 0),e([a({readOnly:!0})],L.prototype,"signedInUser",null),e([a()],L.prototype,"suspended",void 0),e([a()],L.prototype,"view",void 0),L=e([u("esri.views.layers.FeatureLayerView")],L),L};export{U as default};