12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.24/esri/copyright.txt for details.
- */
- import{_ as e}from"../../chunks/tslib.es6.js";import{deprecatedProperty as t}from"../../core/deprecate.js";import r from"../../core/Error.js";import i from"../../core/Logger.js";import{isSome as s,isNone as o}from"../../core/maybe.js";import{eachAlways as n}from"../../core/promiseUtils.js";import{watch as a,syncAndInitial as l,on as u}from"../../core/reactiveUtils.js";import{property as p}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/has.js";import"../../core/accessorSupport/ensureType.js";import{subclass as f}from"../../core/accessorSupport/decorators/subclass.js";import{combinedViewLayerTimeExtentProperty as d}from"../../layers/support/commonProperties.js";import c from"../../layers/support/FeatureEffect.js";import m from"../../layers/support/FeatureFilter.js";import{fixFields as h,unpackFieldNames as y,collectLabelingFields as F,collectElevationFields as g,collectFilterFields as w,collectFeatureReductionFields as E,collectOrderByInfos as b,collectFields as x,collectField as v,featureHasFields as j}from"../../layers/support/fieldUtils.js";import{getFloorFilterClause as R}from"../../layers/support/floorFilterUtils.js";import I from"../../rest/support/Query.js";import{loadArcade as q}from"../../support/arcadeOnDemand.js";import{getFetchPopupTemplate as _,getRequiredFields as P}from"./support/popupUtils.js";const O=i.getLogger("esri.views.layers.FeatureLayerView"),A=i=>{let A=class extends i{constructor(...e){super(...e),this._updatingRequiredFieldsPromise=null,this.filter=null,this.timeExtent=null,this.layer=null,this.requiredFields=[],this.view=null}initialize(){this.handles.add([a((()=>{const e=this.layer;return[e?.elevationInfo?.featureExpressionInfo,e?.displayField,e?.timeInfo,e&&"renderer"in e&&e.renderer,e&&"labelingInfo"in e&&e.labelingInfo,e&&"floorInfo"in e&&e.floorInfo,this.filter,this.featureEffect,this.timeExtent]}),(()=>this._handleRequiredFieldsChange()),l),u((()=>this.view?.floors),"change",(()=>this._handleRequiredFieldsChange())),u((()=>{const e=this.layer;return e&&"sublayers"in e&&e.sublayers}),"change",(()=>this._handleRequiredFieldsChange()))])}get availableFields(){const{layer:e,layer:{fieldsIndex:t},requiredFields:r}=this;return"outFields"in e&&e.outFields?h(t,[...y(t,e.outFields),...r]):h(t,r)}set effect(e){t(O,"effect",{replacement:"featureEffect",version:"4.22"}),this.featureEffect=e}get effect(){return t(O,"effect",{replacement:"featureEffect",version:"4.22"}),this.featureEffect}get featureEffect(){return this.layer&&"featureEffect"in this.layer?this.layer.featureEffect:null}set featureEffect(e){void 0!==e?this._override("featureEffect",e):this._clearOverride("featureEffect")}get maximumNumberOfFeatures(){return 0}set maximumNumberOfFeatures(e){O.error("#maximumNumberOfFeatures=","Setting maximum number of features is not supported")}get maximumNumberOfFeaturesExceeded(){return!1}highlight(e){throw new Error("missing implementation")}createQuery(){const e={outFields:["*"],returnGeometry:!0,outSpatialReference:this.view.spatialReference},t=s(this.filter)?this.filter.createQuery(e):new I(e);if("feature"===this.layer.type){const e=R(this);s(e)&&(t.where=t.where?`(${t.where}) AND (${e})`:e)}return s(this.timeExtent)&&(t.timeExtent=s(t.timeExtent)?t.timeExtent.intersection(this.timeExtent):this.timeExtent.clone()),t}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 fetchPopupFeatures(e,t){const r=this.validateFetchPopupFeatures(t);if(r)throw r;return this.fetchClientPopupFeatures(t)}_loadArcadeModules(e){if(e.get("expressionInfos.length")||Array.isArray(e.content)&&e.content.some((e=>"expression"===e.type)))return q()}_handleRequiredFieldsChange(){const e=this._updateRequiredFields();this._set("_updatingRequiredFieldsPromise",e),e.then((()=>{this._updatingRequiredFieldsPromise===e&&this._set("_updatingRequiredFieldsPromise",null)}))}async _updateRequiredFields(){if(!this.layer||!this.view)return;const e="3d"===this.view.type,{layer:t,layer:{fieldsIndex:r,objectIdField:i}}=this,o="renderer"in t&&t.renderer,a="orderBy"in t&&t.orderBy,l=t.featureReduction,u=new Set,p=await n([o?o.collectRequiredFields(u,r):null,F(u,t),e?g(u,t):null,s(this.filter)?w(u,t,this.filter):null,s(this.featureEffect)?w(u,t,this.featureEffect.filter):null,l?E(u,t,l):null,a?b(u,t,a):null]);if(t.timeInfo&&this.timeExtent&&x(u,t.fieldsIndex,[t.timeInfo.startField,t.timeInfo.endField]),"feature"===t.type&&t.floorInfo&&x(u,t.fieldsIndex,[t.floorInfo.floorField]),"subtype-group"===t.type){v(u,r,t.subtypeField);const e=t.sublayers.map((e=>Promise.all([e.renderer?.collectRequiredFields(u,r),F(u,e)])));await n(e)}for(const s of p)s.error&&O.error(s.error);v(u,r,i),e&&"displayField"in t&&t.displayField&&v(u,r,t.displayField);const f=Array.from(u).sort();this._set("requiredFields",f)}validateFetchPopupFeatures(e){if(o(e))return null;for(const t of e.clientGraphics){const i=t.layer;if("popupEnabled"in i&&!i.popupEnabled)return new r("featurelayerview:fetchPopupFeatures","Popups are disabled",{layer:i});if(t.isAggregate){if(!(i.featureReduction&&"popupTemplate"in i.featureReduction&&i.featureReduction.popupEnabled&&i.featureReduction.popupTemplate))return new r("featurelayerview:fetchPopupFeatures","Popups are disabled",{layer:i})}else if("popupTemplate"in i){if(!_(i,e))return new r("featurelayerview:fetchPopupFeatures","Layer does not define a popup template",{layer:i})}}}async fetchClientPopupFeatures(e){const t=s(e)?e.clientGraphics:null;if(!t||0===t.length)return[];const r=new Array(t.length),i=new Map,n=await this.createPopupQuery(e);for(let s=0;s<t.length;s++){const a=t[s];if(a.isAggregate){r[s]=a;continue}const{layer:l}=a;if(!("popupEnabled"in l))continue;const u=y(this.layer.fieldsIndex,n.outFields),p=_(l,e);if(o(p))continue;const f=await this._loadArcadeModules(p);f&&f.arcadeUtils.hasGeometryOperations(p)||!j(u,a)?i.set(a.getObjectId(),s):r[s]=a}if("stream"===this.layer.type||0===i.size)return r.filter(Boolean);n.objectIds=Array.from(i.keys());try{const e=await this.layer.queryFeatures(n);for(const t of e.features){r[i.get(t.getObjectId())]=t}}catch{}return r.filter(Boolean)}async createPopupQuery(e){const t=this.layer.createQuery(),r=new Set;let i=!1;const n=s(e)&&e.clientGraphics?e.clientGraphics.map((e=>e.layer)):[this.layer];for(const s of n){if(!("popupEnabled"in s))continue;const t=_(s,e);if(o(t))continue;const n=await this._loadArcadeModules(t),a=n&&n.arcadeUtils.hasGeometryOperations(t);i=!("point"!==this.layer.geometryType&&!a);const l=await P(this.layer,t);for(const e of l)r.add(e)}if(t.returnGeometry=i,t.returnZ=i,t.returnM=i,t.outFields=Array.from(r),t.outSpatialReference=this.view.spatialReference,"feature"===this.layer.type){const e=R(this);s(e)&&(t.where=t.where?`(${t.where}) AND (${e})`:e)}return t}canResume(){return!!super.canResume()&&(!s(this.timeExtent)||!this.timeExtent.isEmpty)}};return e([p()],A.prototype,"_updatingRequiredFieldsPromise",void 0),e([p({readOnly:!0})],A.prototype,"availableFields",null),e([p()],A.prototype,"effect",null),e([p({type:c})],A.prototype,"featureEffect",null),e([p({type:m})],A.prototype,"filter",void 0),e([p(d)],A.prototype,"timeExtent",void 0),e([p()],A.prototype,"layer",void 0),e([p({type:Number})],A.prototype,"maximumNumberOfFeatures",null),e([p({readOnly:!0,type:Boolean})],A.prototype,"maximumNumberOfFeaturesExceeded",null),e([p({readOnly:!0})],A.prototype,"requiredFields",void 0),e([p()],A.prototype,"suspended",void 0),e([p()],A.prototype,"view",void 0),A=e([f("esri.views.layers.FeatureLayerView")],A),A};export{A as default};
|