UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) • 18.5 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as e}from"tslib";import t from"../../PopupTemplate.js";import r from"../../core/Error.js";import{clone as i}from"../../core/lang.js";import o from"../../core/Logger.js";import{MultiOriginJSONSupportMixin as s}from"../../core/MultiOriginJSONSupport.js";import{property as n,subclass as a}from"../../core/accessorSupport/decorators.js";import"../../core/workers/workers.js";import p from"../../form/FormTemplate.js";import l from"../../geometry/Extent.js";import d from"../../geometry/Point.js";import u from"../../geometry/Polygon.js";import y from"../../geometry/Polyline.js";import{initializeProjection as m,project as h}from"../../geometry/projectionUtils.js";import g from"../../geometry/SpatialReference.js";import{wgs84 as c}from"../../geometry/support/spatialReferenceUtils.js";import{featureGeometryTypeKebabDictionary as f}from"../../geometry/support/typeUtils.js";import b from"../../graphic/KnowledgeGraphGraphicOrigin.js";import j from"../../graphic/LinkChartGraphicOrigin.js";import w from"../Layer.js";import v from"../graphics/data/FeatureStore.js";import{QueryEngine as T}from"../graphics/data/QueryEngine.js";import{createDrawingInfo as E}from"../graphics/sources/support/clientSideDefaults.js";import{systemOidFieldName as I,systemAggregationCountFieldName as O,systemIsSpatialFieldName as S,systemLayoutGeometryFieldName as F,systemOriginIdFieldName as N,systemDestinationIdFieldName as x}from"./constants.js";import{KnowledgeGraphSublayerBase as L}from"./KnowledgeGraphSublayerBase.js";import{createCapabilitiesFromKnowledgeGraph as _,createDefaultKGSLFormTemplate as C,getDisplayLabelProperty as R,getLinkChartDefaultLabelingInfo as P,getMapDefaultLabelingInfo as k,getKGSublayerSymbolColor as Q,getDefaultLCRelationshipSublayerSymbol as M,createDefaultKGSLFeatureTemplates as G,convertLayerEditsToGraphEdits as D,convertGraphEditsResultToFeatureEdits as J}from"./layerUtils.js";import{BlendLayer as U,blendModeProperty as q,effectProperty as A}from"../mixins/BlendLayer.js";import{DisplayFilteredLayer as H,displayFilterEnabledProperty as B,displayFilterInfoProperty as Z}from"../mixins/DisplayFilteredLayer.js";import{FeatureEffectLayer as K,featureEffectProperty as V}from"../mixins/FeatureEffectLayer.js";import{FeatureReductionLayer as W}from"../mixins/FeatureReductionLayer.js";import{OrderedLayer as Y,orderByProperty as z}from"../mixins/OrderedLayer.js";import{RefreshableLayer as X}from"../mixins/RefreshableLayer.js";import{ScaleRangeLayer as $}from"../mixins/ScaleRangeLayer.js";import{TemporalLayer as ee,useViewTimeProperty as te}from"../mixins/TemporalLayer.js";import{legendEnabled as re,maxScale as ie,minScale as oe,opacity as se,popupEnabled as ne}from"../support/commonProperties.js";import{featureReductionProperty as ae}from"../support/featureReductionUtils.js";import pe from"../support/FeatureTemplate.js";import le from"../support/Field.js";import{fixRendererFields as de,fixTimeInfoFields as ue}from"../support/fieldUtils.js";import ye from"../support/LabelClass.js";import{reader as me}from"../support/labelingInfo.js";import he from"../support/TimeInfo.js";import ge from"../../renderers/SimpleRenderer.js";import{fromJSON as ce}from"../../renderers/support/jsonUtils.js";import{rendererTypes as fe}from"../../renderers/support/typeUtils.js";import{executeApplyEdits as be}from"../../rest/knowledgeGraphService.js";import je from"../../rest/support/FeatureSet.js";import we from"../../rest/support/Query.js";import{createPopupTemplate as ve}from"../../support/popupUtils.js";import Te from"../../symbols/support/ElevationInfo.js";import{applyColorToSymbol as Ee}from"../../symbols/support/utils.js";import Ie from"../../core/workers/RemoteClient.js";import{writer as Oe}from"../../core/accessorSupport/decorators/writer.js";function Se(e){if(!e.json)return e;e.json.write=Fe(e.json.write);const t=e.json.origins;if(!t)return e;let r;for(r in t){const e=t[r];e&&(e.write=Fe(e.write))}return e}function Fe(e){return"object"==typeof e&&e?(!1!==e.enabled&&(e.overridePolicy=Ne(e)),e):!0===e?xe():e}function Ne(e){const{target:t,writer:r,overridePolicy:i,...o}=e;return function(e,t){const r=Le.call(this,e,t);return r.enabled?{...o,...r}:r}}function xe(){return{overridePolicy:Le}}function Le(e,t){const r=!!this.geometryType;let i={enabled:r};return r&&(i={...i,..._e.call(this,e,t)}),i}function _e(e,t){return{ignoreOrigin:this.originIdOf(t)>0}}let Ce=class extends(L(H(W(K(U(Y(ee($(X(s(w))))))))))){constructor(e){super(e),this.blendMode="normal",this.charts=null,this.definitionExpression=null,this.displayFilterEnabled=!0,this.displayFilterInfo=null,this.effect=null,this.elevationInfo=null,this.featureEffect=null,this.graphType=null,this.labelsVisible=!0,this.layerType=null,this.legendEnabled=!0,this.maxScale=0,this.minScale=0,this.objectIdField=I,this.objectType=null,this.opacity=1,this.orderBy=null,this.parent=null,this.parentCompositeLayer=null,this.persistenceEnabled=!0,this.popupEnabled=!0,this.popupTemplate=null,this.refreshInterval=0,this.source={openPorts:()=>this.load().then(()=>{const e=new MessageChannel;return new Ie(e.port1,{channel:e,client:{queryFeatures:(e,t={})=>{const r=we.fromJSON(e);return this.queryFeaturesJSON(r,t)}}}),[e.port2]})},this.type="knowledge-graph-sublayer",this.useViewTime=!0,this.visible=!0}get capabilities(){return this.parent?this.parent.sublayerCapabilities:_(null)}get isTable(){return"link-chart"!==this.parentCompositeLayer?.type&&null==this.geometryFieldName}get defaultPopupTemplate(){return this.createPopupTemplate()}get editingEnabled(){return this.capabilities.operations.supportsEditing&&this.userHasEditingPrivileges}set editingEnabled(e){this._overrideIfSome("editingEnabled",e)}get effectiveCapabilities(){const e=i(this.capabilities),{operations:t,editing:r}=e;return this.userHasUpdateItemPrivileges&&(t.supportsAdd=t.supportsDelete=t.supportsEditing=t.supportsQuery=t.supportsUpdate=r.supportsDeleteByOthers=r.supportsGeometryUpdate=r.supportsUpdateByOthers=!0),this.userHasFullEditingPrivileges&&t.supportsEditing&&(t.supportsAdd=t.supportsDelete=t.supportsUpdate=r.supportsGeometryUpdate=!0),e}get effectiveEditingEnabled(){return this.userHasUpdateItemPrivileges||this.editingEnabled}set featureReduction(e){const t=this._normalizeFeatureReduction(e);this._set("featureReduction",t)}get fields(){const e=[],t=new Map;for(const r of this.parent?.knowledgeGraph.dataModel.domains??[])t.set(r.name,r);return this.objectType?.properties?.forEach(r=>{const i="esriFieldTypeOID"===r.fieldType?"esriFieldTypeInteger":r.fieldType,o=le.fromJSON({name:r.name,type:i,alias:r.alias,defaultValue:r.defaultValue,editable:r.editable,nullable:r.nullable,domain:r.domain&&t.has(r.domain)?t.get(r.domain).toJSON():void 0});e.push(o)}),e.push(le.fromJSON({name:this.objectIdField,type:"esriFieldTypeString",alias:this.objectIdField,editable:!1}),le.fromJSON({name:O,type:"esriFieldTypeInteger",alias:O,editable:!1}),le.fromJSON({name:S,type:"esriFieldTypeInteger",alias:S,editable:!1})),e}get formTemplate(){return this._isOverridden("formTemplate")?this._get("formTemplate"):C(this)}set formTemplate(e){this._overrideIfSome("formTemplate",e)}get geometryType(){if("link-chart"===this.parentCompositeLayer?.type)return"relationship"===this.graphType?"polyline":"point";const e=this.parentCompositeLayer?.dataManager.geographicLookup.get(this.objectType?.name),t=e?.geometryType;return t&&"esriGeometryNull"!==t?f.fromJSON(t):null}get geometryFieldName(){if("link-chart"===this.parentCompositeLayer?.type)return F;const e=this.parentCompositeLayer?.dataManager.geographicLookup.get(this.objectType?.name);return e?.name??null}get graphicOrigin(){if(!this.parent)return null;switch(this.parent.type){case"knowledge-graph":return new b(this.parent,this);case"link-chart":return new j(this.parent,this)}}get graphTypeName(){return this.objectType?.name}set graphTypeName(e){this._set("graphTypeName",e)}get hasM(){const e=this.parentCompositeLayer?.dataManager.geographicLookup.get(this.objectType?.name),t=e?.name,r=t?this.objectType?.properties?.[t]:null;return r?.hasM??!1}get hasZ(){const e=this.parentCompositeLayer?.dataManager.geographicLookup.get(this.objectType?.name),t=e?.name,r=t?this.objectType?.properties?.[t]:null;return r?.hasZ??!1}set labelingInfo(e){this._set("labelingInfo",e)}get labelingInfo(){if(this._isOverridden("labelingInfo"))return this._get("labelingInfo");if(!this.objectType||!this.parentCompositeLayer||!this.graphTypeName)return null;const e=this.objectType.properties?R(this.objectType.properties):"ESRI__ID";return"link-chart"===this.parentCompositeLayer.type?P(this.graphType,this.graphTypeName,e):k(this.graphTypeName,this.geometryType,e)}set renderer(e){de(e,this.fieldsIndex),this._set("renderer",e)}get renderer(){if(this._isOverridden("renderer"))return this._get("renderer");const e=this.parentCompositeLayer?.dataManager?.knowledgeGraph?.dataModel,t=[...e?.entityTypes??[],...e?.relationshipTypes??[]].map(e=>e.name).indexOf(this.graphTypeName),r=Q(t);if("link-chart"===this.parentCompositeLayer?.type){if("relationship"===this.graphType)return new ge({type:"simple",symbol:M(r)});const e=ce(E(f.toJSON("point")).renderer);return Ee(e.symbol,r),e}const i=ce(E(f.toJSON(this.geometryType)).renderer);return Ee(i.symbol,r),i}get spatialReference(){return this.parentCompositeLayer?.dataManager?.knowledgeGraph?.dataModel?.spatialReference??g.WGS84}get templates(){return this._isOverridden("templates")?this._get("templates"):G(this)}set templates(e){this._overrideIfSome("templates",e)}set timeInfo(e){this._set("timeInfo",e)}get title(){return this._isOverridden("title")?this._get("title"):this.graphTypeName}set title(e){this._set("title",e)}writeTitle(e,t){t.title=e??"Layer"}get userHasEditingPrivileges(){return!this.parent||this.parent.userHasEditingPrivileges}get userHasFullEditingPrivileges(){return!!this.parent&&this.parent.userHasFullEditingPrivileges}get userHasUpdateItemPrivileges(){return!!this.parent&&this.parent.userHasUpdateItemPrivileges}createPopupTemplate(e){return ve(this,e)}createQuery(){return new we({where:"1=1",outFields:["*"]})}getField(e){return this.fieldsIndex.get(e)}getFieldDomain(e,t){return this.fields.find(t=>t.name===e)?.domain||null}async queryFeatures(e,t){await this.load();const{resolvedQuery:r,queryEngine:i}=await this._setupQueryObjects(e),o=this.graphicOrigin,s=je.fromJSON(await i.executeQuery(r.toJSON(),t?.signal));return s.features.forEach(e=>{e.sourceLayer=this,e.origin=o}),s}async queryFeaturesJSON(e,t){await this.load();const{resolvedQuery:r,queryEngine:i}=await this._setupQueryObjects(e);return await i.executeQuery(r.toJSON(),t?.signal)}async queryFeatureCount(e,t){await this.load();const{resolvedQuery:r,queryEngine:i}=await this._setupQueryObjects(e);return i.executeQueryForCount(r.toJSON(),t?.signal)}async queryExtent(e={},t){await this.load();const r={...e,returnGeometry:!0},{resolvedQuery:i,queryEngine:o}=await this._setupQueryObjects(r),s=await o.executeQueryForExtent(i.toJSON(),t?.signal);let n;return n=null!=s.extent?.xmin&&null!=s.extent?.xmax&&null!=s.extent?.ymin&&null!=s.extent?.ymax?new l(s.extent):new l,{count:s.count,extent:n}}async queryObjectIds(e,t){await this.load();const r=we.from(e);let i;if("link-chart"===this.parentCompositeLayer.type&&this._cachedQueryEngine)i=this._cachedQueryEngine;else{const e=await this.parentCompositeLayer.dataManager.getData(r,this,t);i=this.loadQueryEngine(e)}return await i.executeQueryForIds(r.toJSON(),t?.signal)}async applyEdits(e){if(!this.parentCompositeLayer.dataManager.knowledgeGraph)throw new r("knowledge-graph-sublayer:no-knowledge-graph","ApplyEdits cannot be executed because the parent does not have a Knowledge Graph model. This is usually caused by the layer not yet being loaded");const t=await D(e,this);t.options={cascadeDelete:!0,cascadeProvenanceDelete:!!this.parent?.knowledgeGraph.serviceDefinition.supportsProvenance||void 0};const i=await be(this.parentCompositeLayer.dataManager.knowledgeGraph,t),o=J(i,this.graphTypeName),s={addedFeatures:o.addFeatureResults,updatedFeatures:o.updateFeatureResults,deletedFeatures:o.deleteFeatureResults,addedAttachments:o.addAttachmentResults,deletedAttachments:o.deleteAttachmentResults,updatedAttachments:o.updateAttachmentResults,exceededTransferLimit:!1,historicMoment:new Date,edits:void 0};return this.emit("edits",s),this.emit("apply-edits",{result:Promise.resolve(s)}),"link-chart"===this.parentCompositeLayer.type&&await this.parentCompositeLayer.refreshLinkChartCache([...s.addedFeatures.map(e=>e.globalId),...s.updatedFeatures.map(e=>e.globalId),...s.deletedFeatures.map(e=>e.globalId)]),o}loadQueryEngine(e){const t=new v({geometryType:f.toJSON(this.geometryType),hasM:this.hasM,hasZ:this.hasZ}),r=new T({fieldsIndex:this.fieldsIndex.toJSON(),geometryType:f.toJSON(this.geometryType),hasM:this.hasM,hasZ:this.hasZ,featureIdInfo:{type:"object-id",fieldName:this.objectIdField},spatialReference:this.spatialReference.toJSON(),timeInfo:this.timeInfo?.toJSON(),featureStore:t});return r.featureStore.addMany(e),r}async refreshCachedQueryEngine(){const e=await this.parentCompositeLayer.dataManager.getData(new we({where:"1=1",outFields:[I]}),this);this._cachedQueryEngine=this.loadQueryEngine(e)}load(e){return this.addResolvingPromise(this.parent.load(e).then(()=>ue(this.timeInfo,this.fieldsIndex))),Promise.resolve(this)}async _setupQueryObjects(e,t){const r=we.from(e),i=r.geometry;if(i&&!i.spatialReference?.isWGS84&&(await m(i.spatialReference,c),r.geometry=h(i instanceof u||i instanceof y||i instanceof d?i:i.extent,c)),"link-chart"===this.parentCompositeLayer.type&&this._cachedQueryEngine)return{resolvedQuery:r,queryEngine:this._cachedQueryEngine};const o=await this.parentCompositeLayer.dataManager.getData(r,this,t);return{resolvedQuery:r,queryEngine:this.loadQueryEngine(o)}}};function Re(e,t,r){const i=[["ESRI__AGGREGATION_COUNT",O],["ESRI__ORIGIN_ID",N],["ESRI__DESTINATION_ID",x],["ESRI__LAYOUT_GEOMETRY",F]];try{for(const t of e)for(const[e,r]of i)t.labelExpression=t.labelExpression?.replaceAll(e,r),t.labelExpressionInfo?.expression&&(t.labelExpressionInfo.expression=t.labelExpressionInfo.expression.replaceAll(e,r))}catch(s){o.getLogger(this).warn("Error updating labelingInfo",s)}return me(e,t,r)}e([n(Se(i(q)))],Ce.prototype,"blendMode",void 0),e([n({readOnly:!0})],Ce.prototype,"capabilities",null),e([n()],Ce.prototype,"isTable",null),e([n({json:{origins:{"web-scene":{write:!1}},write:xe()}})],Ce.prototype,"charts",void 0),e([n({readOnly:!0})],Ce.prototype,"defaultPopupTemplate",null),e([n({type:String,json:{origins:{service:{read:!1}},name:"layerDefinition.definitionExpression",write:{ignoreOrigin:!0}}})],Ce.prototype,"definitionExpression",void 0),e([n(Se(i(B)))],Ce.prototype,"displayFilterEnabled",void 0),e([n(Se(i(Z)))],Ce.prototype,"displayFilterInfo",void 0),e([n()],Ce.prototype,"editingEnabled",null),e([n(Se(i(A)))],Ce.prototype,"effect",void 0),e([n({readOnly:!0})],Ce.prototype,"effectiveCapabilities",null),e([n({readOnly:!0})],Ce.prototype,"effectiveEditingEnabled",null),e([n({type:Te})],Ce.prototype,"elevationInfo",void 0),e([n(Se(i(V)))],Ce.prototype,"featureEffect",void 0),e([n(Se(i(ae)))],Ce.prototype,"featureReduction",null),e([n()],Ce.prototype,"fields",null),e([n({type:p})],Ce.prototype,"formTemplate",null),e([n()],Ce.prototype,"geometryType",null),e([n()],Ce.prototype,"geometryFieldName",null),e([n({readOnly:!0})],Ce.prototype,"graphicOrigin",null),e([n({type:["entity","relationship"],nonNullable:!0,json:{write:{isRequired:!0,ignoreOrigin:!0}}})],Ce.prototype,"graphType",void 0),e([n({type:String,nonNullable:!0,json:{write:{isRequired:!0,ignoreOrigin:!0}}})],Ce.prototype,"graphTypeName",null),e([n()],Ce.prototype,"hasM",null),e([n()],Ce.prototype,"hasZ",null),e([n({type:String,json:{origins:{service:{read:!1},"portal-item":{read:!1}},write:{ignoreOrigin:!0}}})],Ce.prototype,"id",void 0),e([n({type:Boolean,value:!0,nonNullable:!0,json:{name:"showLabels",default:!1,write:{overridePolicy(){return{enabled:!!this.geometryType,alwaysWriteDefaults:!0,ignoreOrigin:!0}}}}})],Ce.prototype,"labelsVisible",void 0),e([n({type:[ye],json:{name:"layerDefinition.drawingInfo.labelingInfo",read:Re,write:xe()}})],Ce.prototype,"labelingInfo",null),e([n({readOnly:!0,json:{read:!1,write:{writer(e,t){switch(this.parentCompositeLayer?.type){case"link-chart":t.layerType="LinkChartSubLayer";break;case"knowledge-graph":t.layerType=this.geometryType?"KnowledgeGraphSubLayer":"KnowledgeGraphSubTable"}},isRequired:!0,ignoreOrigin:!0,writerEnsuresNonNull:!0}}})],Ce.prototype,"layerType",void 0),e([n(Se(i(re)))],Ce.prototype,"legendEnabled",void 0),e([n(Se(i(ie)))],Ce.prototype,"maxScale",void 0),e([n(Se(i(oe)))],Ce.prototype,"minScale",void 0),e([n()],Ce.prototype,"objectIdField",void 0),e([n()],Ce.prototype,"objectType",void 0),e([n(Se(i(se)))],Ce.prototype,"opacity",void 0),e([n(Se(i(z)))],Ce.prototype,"orderBy",void 0),e([n({clonable:!1})],Ce.prototype,"parent",void 0),e([n()],Ce.prototype,"parentCompositeLayer",void 0),e([n(Se(i(ne)))],Ce.prototype,"popupEnabled",void 0),e([n({type:t,json:{name:"popupInfo",write:{ignoreOrigin:!0}}})],Ce.prototype,"popupTemplate",void 0),e([n({type:Number,json:{write:{overridePolicy:_e}}})],Ce.prototype,"refreshInterval",void 0),e([n({types:fe,json:{name:"layerDefinition.drawingInfo.renderer",write:xe()}})],Ce.prototype,"renderer",null),e([n()],Ce.prototype,"source",void 0),e([n()],Ce.prototype,"spatialReference",null),e([n({type:pe})],Ce.prototype,"templates",null),e([n({type:he,json:{name:"layerDefinition.timeInfo",write:{overridePolicy:_e},origins:{"web-document":{name:"layerDefinition.timeInfo",read:!0,write:{overridePolicy:_e}},"portal-item":{name:"layerDefinition.timeInfo",read:!0,write:{overridePolicy:_e}}}}})],Ce.prototype,"timeInfo",null),e([n({type:String,json:{write:{isRequired:!0,ignoreOrigin:!0,writerEnsuresNonNull:!0}}})],Ce.prototype,"title",null),e([Oe("title")],Ce.prototype,"writeTitle",null),e([n({json:{read:!1}})],Ce.prototype,"type",void 0),e([n(Se(i(te)))],Ce.prototype,"useViewTime",void 0),e([n({readOnly:!0})],Ce.prototype,"userHasEditingPrivileges",null),e([n({readOnly:!0})],Ce.prototype,"userHasFullEditingPrivileges",null),e([n({readOnly:!0})],Ce.prototype,"userHasUpdateItemPrivileges",null),e([n({type:Boolean,json:{name:"visibility",write:xe()}})],Ce.prototype,"visible",void 0),Ce=e([a("esri.layers.knowledgeGraph.KnowledgeGraphSublayer")],Ce);export{Ce as default};