@vertigis/arcgis-extensions 37.4.0 → 37.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/data/ArcGISServiceTableExtension.js +1 -1
  2. package/data/FeatureSettings.js +1 -1
  3. package/data/Schema.d.ts +1 -1
  4. package/data/Schema.js +1 -1
  5. package/data/TableExtension.d.ts +1 -1
  6. package/docs/html/assets/search.js +1 -1
  7. package/docs/html/classes/data_Schema.Schema.html +1 -1
  8. package/docs/html/classes/data__TableExtension.TableSchema.html +1 -1
  9. package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerSchema.html +1 -1
  10. package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerSchema.html +1 -1
  11. package/docs/html/classes/mapping_BuildingSceneLayerExtension.BuildingSceneLayerReadOnlySchema.html +1 -1
  12. package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerSchema.html +1 -1
  13. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerReadOnlySchema.html +1 -1
  14. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerSchema.html +1 -1
  15. package/docs/html/classes/mapping_StreamLayerExtension.StreamLayerSchema.html +1 -1
  16. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerExtension.html +20 -20
  17. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerSchema.html +1436 -0
  18. package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerSchema.html +6 -6
  19. package/docs/html/classes/mapping__LayerExtension.LayerExtensionReadOnlySchema.html +1398 -0
  20. package/docs/html/classes/mapping__LayerExtension.LayerExtensionSchema.html +3 -2
  21. package/docs/html/classes/mapping__SublayerExtension.SublayerSchema.html +1 -1
  22. package/docs/html/modules/data_TableExtension.html +6 -2
  23. package/docs/html/modules/mapping_SubtypeGroupLayerExtension.html +2 -0
  24. package/docs/html/modules/mapping__LayerExtension.html +8 -1
  25. package/docs/html/types/mapping__LayerExtension.LayerExtensionSchemaPropertyBinding.html +3 -1
  26. package/docs/html/variables/mapping__LayerExtension.ERR_SCHEMA_READ_ONLY.html +599 -0
  27. package/docs/html/variables/version.version.html +1 -1
  28. package/mapping/FeatureLayerExtension.js +1 -1
  29. package/mapping/FeatureLayerExtensionBase.js +1 -1
  30. package/mapping/SubtypeGroupLayerExtension.d.ts +55 -3
  31. package/mapping/SubtypeGroupLayerExtension.js +1 -1
  32. package/mapping/SubtypeSublayerExtension.d.ts +8 -1
  33. package/mapping/SubtypeSublayerExtension.js +1 -1
  34. package/mapping/_LayerExtension.d.ts +15 -0
  35. package/mapping/_LayerExtension.js +1 -1
  36. package/mapping/support/layers.js +1 -1
  37. package/package.json +1 -1
  38. package/version.d.ts +1 -1
  39. package/version.js +1 -1
@@ -16,7 +16,7 @@
16
16
  <li><a href="../modules/version.html">version</a></li>
17
17
  <li><a href="version.version.html">version</a></li></ul>
18
18
  <h1>Variable version<code class="tsd-tag ts-flagConst">Const</code> </h1></div>
19
- <div class="tsd-signature">version<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">&quot;37.4.0&quot;</span><span class="tsd-signature-symbol"> = &quot;37.4.0&quot;</span></div>
19
+ <div class="tsd-signature">version<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">&quot;37.5.0&quot;</span><span class="tsd-signature-symbol"> = &quot;37.5.0&quot;</span></div>
20
20
  <div class="tsd-comment tsd-typography"><p>The current version of the Geocortex ArcGIS Extensions API.</p>
21
21
  </div></div>
22
22
  <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{config}from"../config.js";import{toAttachment}from"../data/Attachment.js";import{toGraphic}from"../data/Feature.js";import{FeatureSaveError}from"../data/FeatureSaveError.js";import{addAttachment,deleteAttachments}from"../data/support/attachments.js";import{FeatureLayer as FeatureLayerJson}from"../portal/FeatureLayer.js";import{Layer as PortalLayer}from"../portal/Layer.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{cancelify}from"../support/Cancellable.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{Collection}from"../utilities/collection.js";import{isFeatureLayerExtension,isSubtypeGroupLayerExtension}from"../utilities/extensions.js";import{isFeatureLayer}from"../utilities/layers.js";import{isNumeric}from"../utilities/number.js";import{FeatureLayerExtensionBase,FeatureLayerReadOnlySchema}from"./FeatureLayerExtensionBase.js";import{addOutFields,getGlobalIdField,isGlobalIdUsed}from"./support/layers.js";const ERR_INVALID_LAYER_TYPE="Cannot use feature layer that has a source collection and no url.",ERR_HEATMAPS_NOT_SUPPORTED="Heatmap rendering has been disabled. They are not supported in this browser.";let FeatureLayerExtension=class extends FeatureLayerExtensionBase{get enableClientSideData(){return void 0===this._enableClientSideData?"cluster"===this.layer?.featureReduction?.type:this._enableClientSideData}set enableClientSideData(e){this._enableClientSideData=e,this._updateClientSideFields()}get renderer(){return this.layer?.renderer}get canChangeLabels(){return!0}async _addAttachment(e,r){return addAttachment(e,this.layer,r,{attachmentTypes:this.attachmentTypes})}async _deleteAttachments(e,r){return deleteAttachments(e,this.layer,r)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,attachmentTypes:["initial"],requestHelper:{...this._toPropertyDef(e.requestHelper),default:new DefaultArcGISRequestHelper({batchLayerRequests:!1})},enableClientSideData:{serializeModes:["initial"],isDefault:e=>e===!("cluster"!==this.layer?.featureReduction?.type)}}}_isSupportedLayer(e){return super._isSupportedLayer(e)&&!Collection.isCollection(e.source)}async _getAttachments(e){if(!this.layer?.capabilities?.data?.supportsAttachment)return[];const r=+e.primaryKey,t=new AttachmentQuery({objectIds:[r]}),a=await this.layer.queryAttachments(t);return a?.[r]?.length?a[r].map((e=>toAttachment(e,e.url))):[]}async _addFeatures(e,r){const t=Array.from(e);if(0===t.length)return;const a=await this._applyEdits({addFeatures:t.map(toGraphic)},r);if(!a.addFeatureResults||a.addFeatureResults.length!==t.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.addFeatureResults.forEach(((e,r)=>{const{objectId:a,globalId:i,error:o}=e,l=t[r];if(o){s=s||new FeatureSaveError("Errors encountered when adding features.");const{title:t}=l;s.errors.set(`${t}-${r}`,new Error(`Failed to add feature '${t}'. ${e.error.name} : ${e.error.message}`))}else{const{primaryKeyField:e}=l.schema;l.attributes.set(e,a);const r=getGlobalIdField(this.layer);r&&i&&l.attributes.set(r,i)}})),s)throw s}async _updateFeatures(e,r){const t=Array.from(e);if(0===t.length)return;const a=await this._applyEdits({updateFeatures:Array.from(e).map(toGraphic)},r);if(!a.updateFeatureResults||a.updateFeatureResults.length!==t.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.updateFeatureResults.forEach(((e,r)=>{if(e.error){s=s||new FeatureSaveError("Errors encountered when updating features.");const{primaryKey:a}=t[r];s.errors.set(a,new Error(`Failed to update feature with id ${a}. ${e.error.name} : ${e.error.message}`))}})),s)throw s}async _deleteFeatures(e,r){if(0===e.length)return;const t=await this._applyEdits({deleteFeatures:e.map((e=>({objectId:e})))},r);if(!t.deleteFeatureResults)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let a;if(t.deleteFeatureResults.forEach(((r,t)=>{if(r.error){a=a||new FeatureSaveError("Errors encountered when deleting features.");const s=e[t];a.errors.set(s,new Error(`Failed to delete feature with id ${s}. ${r.error.name} : ${r.error.message}`))}})),a)throw a}_createRelationships(){return new RelationshipCollection(this)}_createSchema(){return new FeatureLayerReadOnlySchema(this)}async _onInitialize(){if(this.layer&&!this._isSupportedLayer(this.layer))throw new InvalidOperationError(ERR_INVALID_LAYER_TYPE);if(await super._onInitialize(),await this.relationships.initialize(),this.layer.renderer&&"heatmap"===this.layer.renderer.type&&!config.heatmapsEnabled)throw new InvalidOperationError(ERR_HEATMAPS_NOT_SUPPORTED);this._updateClientSideFields(),this._watchHandles.push(this.watch("layer",(()=>{this._updateClientSideFields()}),!0)),this.notifyChange("capabilities")}_applyLayerProperties(e,r){if(FeatureLayerJson.isFeatureCollection(e))throw new InvalidOperationError(ERR_INVALID_LAYER_TYPE);return super._applyLayerProperties(e,r)}async _applyPortalItemProperties(e){if("Feature Service"!==e.type)throw new Error(`Cannot create Feature Layer from Portal item that has type: ${e.type}`);const r={layerType:"ArcGISFeatureLayer"};let{url:t}=e;t.match(".*MapServer/\\d{1,}/?$")||t.match(".*FeatureServer/\\d{1,}/?$")||(t=`${t}/0`),r.url=t,await FeatureLayerJson.applyToEsriApiLayer(r,this.layer);const a=await e.fetchData();if(a?.layers){const e=a.layers.find((e=>e.id===this.layer.layerId));e&&await PortalLayer.applyToEsriApiLayer(e,this.layer)}}_updateClientSideFields(){this.layer&&this._enableClientSideData&&addOutFields(this.layer,this.featureSettings.outFields)}async _applyEdits(e,r={}){const t=isGlobalIdUsed(this.layer,e),a=this.layer.applyEdits(e,{globalIdUsed:t}),s=await cancelify(a,r.cancelToken);if(!s)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");return s}get _layerUrl(){return isNumeric(this.layer.layerId)?`${this.layer.url}/${this.layer.layerId}`:this.layer.url}};FeatureLayerExtension=__decorate([serializable],FeatureLayerExtension);export{FeatureLayerExtension};class RelationshipCollection extends ArcGISRelationshipCollection{get _sourceUrl(){if(this._source.layer&&this._source.layer.url)return isNumeric(this._source.layer.layerId)?`${this._source.layer.url}/${this._source.layer.layerId}`:this._source.layer.url}get _sourceLayerId(){return this._source.layer?this._source.layer.layerId:void 0}_findRelatedSource(e){if(!this._source.mapExtension||!this._source.layer||!this._source.layer.url)return;const r=this._source.mapExtension.layerExtensions.initializedItems.find((r=>(isFeatureLayerExtension(r)||isSubtypeGroupLayerExtension(r))&&r.layer.url===this._source.layer.url&&r.layer.layerId===e));return r||this._source.mapExtension.tableExtensions.initializedItems.find((r=>isFeatureLayer(r.table)&&r.table.url===this._source.layer.url&&r.table.layerId===e))}}
1
+ import{__decorate}from"tslib";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{config}from"../config.js";import{toAttachment}from"../data/Attachment.js";import{toGraphic}from"../data/Feature.js";import{FeatureSaveError}from"../data/FeatureSaveError.js";import{addAttachment,deleteAttachments}from"../data/support/attachments.js";import{FeatureLayer as FeatureLayerJson}from"../portal/FeatureLayer.js";import{Layer as PortalLayer}from"../portal/Layer.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{cancelify}from"../support/Cancellable.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{Collection}from"../utilities/collection.js";import{isFeatureLayerExtension,isSubtypeGroupLayerExtension}from"../utilities/extensions.js";import{isFeatureLayer}from"../utilities/layers.js";import{isNumeric}from"../utilities/number.js";import{FeatureLayerExtensionBase,FeatureLayerReadOnlySchema}from"./FeatureLayerExtensionBase.js";import{addOutFields,getGlobalIdField,isGlobalIdUsed}from"./support/layers.js";const ERR_INVALID_LAYER_TYPE="Cannot use feature layer that has a source collection and no url.",ERR_HEATMAPS_NOT_SUPPORTED="Heatmap rendering has been disabled. They are not supported in this browser.";let FeatureLayerExtension=class extends FeatureLayerExtensionBase{get enableClientSideData(){return void 0===this._enableClientSideData?"cluster"===this.layer?.featureReduction?.type:this._enableClientSideData}set enableClientSideData(e){this._enableClientSideData=e,this._updateClientSideFields()}get renderer(){return this.layer?.renderer}get canChangeLabels(){return!0}async _addAttachment(e,r){return addAttachment(e,this.layer,r,{attachmentTypes:this.attachmentTypes})}async _deleteAttachments(e,r){return deleteAttachments(e,this.layer,r)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,attachmentTypes:["initial"],requestHelper:{...this._toPropertyDef(e.requestHelper),default:new DefaultArcGISRequestHelper({batchLayerRequests:!1})},enableClientSideData:{serializeModes:["initial"],isDefault:e=>e===!("cluster"!==this.layer?.featureReduction?.type)}}}_isSupportedLayer(e){return super._isSupportedLayer(e)&&!Collection.isCollection(e.source)}async _getAttachments(e){if(!this.layer?.capabilities?.data?.supportsAttachment)return[];const r=+e.primaryKey,t=new AttachmentQuery({objectIds:[r]}),a=await this.layer.queryAttachments(t);return a?.[r]?.length?a[r].map((e=>toAttachment(e,e.url))):[]}async _addFeatures(e,r){const t=Array.from(e);if(0===t.length)return;const a=await this._applyEdits({addFeatures:t.map(toGraphic)},r);if(!a.addFeatureResults||a.addFeatureResults.length!==t.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.addFeatureResults.forEach(((e,r)=>{const{objectId:a,globalId:i,error:o}=e,l=t[r];if(o){s=s||new FeatureSaveError("Errors encountered when adding features.");const{title:t}=l;s.errors.set(`${t}-${r}`,new Error(`Failed to add feature '${t}'. ${e.error.name} : ${e.error.message}`))}else{const{primaryKeyField:e}=l.schema;l.attributes.set(e,a);const r=getGlobalIdField(this.layer);r&&i&&l.attributes.set(r,i)}})),s)throw s}async _updateFeatures(e,r){const t=Array.from(e);if(0===t.length)return;const a=await this._applyEdits({updateFeatures:Array.from(e).map(toGraphic)},r);if(!a.updateFeatureResults||a.updateFeatureResults.length!==t.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.updateFeatureResults.forEach(((e,r)=>{if(e.error){s=s||new FeatureSaveError("Errors encountered when updating features.");const{primaryKey:a}=t[r];s.errors.set(a,new Error(`Failed to update feature with id ${a}. ${e.error.name} : ${e.error.message}`))}})),s)throw s}async _deleteFeatures(e,r){if(0===e.length)return;const t=await this._applyEdits({deleteFeatures:e.map((e=>({objectId:e})))},r);if(!t.deleteFeatureResults)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let a;if(t.deleteFeatureResults.forEach(((r,t)=>{if(r.error){a=a||new FeatureSaveError("Errors encountered when deleting features.");const s=e[t];a.errors.set(s,new Error(`Failed to delete feature with id ${s}. ${r.error.name} : ${r.error.message}`))}})),a)throw a}_createRelationships(){return new RelationshipCollection(this)}_createSchema(){return new FeatureLayerReadOnlySchema(this)}async _onInitialize(){if(this.layer&&!this._isSupportedLayer(this.layer))throw new InvalidOperationError(ERR_INVALID_LAYER_TYPE);if(await super._onInitialize(),await this.relationships.initialize(),this.layer.renderer&&"heatmap"===this.layer.renderer.type&&!config.heatmapsEnabled)throw new InvalidOperationError(ERR_HEATMAPS_NOT_SUPPORTED);this._updateClientSideFields(),this._watchHandles.push(this.watch("layer",(()=>{this._updateClientSideFields()}),!0)),this.notifyChange("capabilities")}_applyLayerProperties(e,r){if(FeatureLayerJson.isFeatureCollection(e))throw new InvalidOperationError(ERR_INVALID_LAYER_TYPE);return super._applyLayerProperties(e,r)}async _applyPortalItemProperties(e){if("Feature Service"!==e.type)throw new Error(`Cannot create Feature Layer from Portal item that has type: ${e.type}`);const r={layerType:"ArcGISFeatureLayer"};let{url:t}=e;t.match(".*MapServer/\\d{1,}/?$")||t.match(".*FeatureServer/\\d{1,}/?$")||(t=`${t}/0`),r.url=t,await FeatureLayerJson.applyToEsriApiLayer(r,this.layer);const a=await e.fetchData();if(a?.layers){const e=a.layers.find((e=>e.id===this.layer.layerId));e&&await PortalLayer.applyToEsriApiLayer(e,this.layer)}}_updateClientSideFields(){this.layer&&this._enableClientSideData&&addOutFields(this.layer,this.featureSettings.outFields)}async _applyEdits(e,r={}){const t=isGlobalIdUsed(this.layer,e),a=this.layer.applyEdits(e,{globalIdUsed:t}),s=await cancelify(a,r.cancelToken);if(!s)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");return s}get _layerUrl(){return isNumeric(this.layer.layerId)?`${this.layer.url}/${this.layer.layerId}`:this.layer.url}};FeatureLayerExtension=__decorate([serializable],FeatureLayerExtension);export{FeatureLayerExtension};class RelationshipCollection extends ArcGISRelationshipCollection{get _sourceUrl(){if(this._source.layer&&this._source.layer.url)return isNumeric(this._source.layer.layerId)?`${this._source.layer.url}/${this._source.layer.layerId}`:this._source.layer.url}get _sourceLayerId(){return this._source.layer?this._source.layer.layerId:void 0}_findRelatedSource(e){if(!this._source.mapExtension||!this._source.layer||!this._source.layer.url)return;const r=this._source.mapExtension.allLayerExtensions.initializedItems.find((r=>(isFeatureLayerExtension(r)||isSubtypeGroupLayerExtension(r))&&r.layer.url===this._source.layer.url&&r.layer.layerId===e));return r||this._source.mapExtension.tableExtensions.initializedItems.find((r=>isFeatureLayer(r.table)&&r.table.url===this._source.layer.url&&r.table.layerId===e))}}
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{supportsAttachmentEditing as layerSupportsAttachmentEditing}from"../data/support/attachments.js";import{FeatureLayer as PortalFeatureLayer}from"../portal/FeatureLayer.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{serializable}from"../support/Serializable.js";import{executeQuery}from"../support/_query.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isCSVLayer,isFeatureLayer,isGraphicsLayer,isStreamLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{parse}from"../utilities/number.js";import{LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";import{ArrayWrappedCollection}from"./support/ArrayWrappedCollection.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";export class FeatureLayerExtensionBase extends LayerExtension{get hasFeatures(){return!0}get layer(){return super.layer}get renderer(){return this.layer?.renderer}get _layerView(){return this.layer&&this.mapExtension?._allLayerViews.find((e=>e.layer===this.layer))}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();if(!e||this.dynamicallyAddedLayer)return e;const{layerDefinition:r}=PortalFeatureLayer.fromEsriApiFeatureLayer(this.layer),{definitionExpression:t,drawingInfo:a}=r??{};return t&&(e.layerDefinition={...e.layerDefinition,definitionExpression:t}),a&&(e.layerDefinition={...e.layerDefinition,drawingInfo:a}),e}_getFeatures(e,r){const t=this.layer.createQuery();return t.objectIds=e.map((e=>parse(e))),t.where=void 0,t.outFields=r.outFields,t.returnGeometry=r.returnGeometry,executeQuery(t,this,this.layer,r.cancelToken)}_applyLayerProperties(e,r){return checkArg("properties",e).isNotMissing(),checkArg("properties.layerType",e.layerType).satisfies((e=>!e||"ArcGISFeatureLayer"===e||"ArcGISStreamLayer"===e||"CSV"===e),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",r).isNotMissing().satisfies((e=>isFeatureLayer(e)||isStreamLayer(e)||isCSVLayer(e)||isGraphicsLayer(e)),ERR_LAYER_TYPE_MISMATCH),checkArg("properties",e).satisfies((e=>!PortalFeatureLayer.isGraphicsLayerJson(e))),super._applyLayerProperties(e,r)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"ArcGISFeatureLayer"}}}}_createSchema(){return new FeatureLayerSchema(this)}_isSupportedLayer(e){return isFeatureLayer(e)}_createFeatureSettings(){return new FeatureLayerFeatureSettings(this)}_capabilities(){const e=layerSupportsAttachmentEditing(this.layer);return this.layer?.capabilities?.operations?{...this.layer.capabilities.operations,supportsAttachmentEditing:e}:{...super._capabilities(),supportsAttachmentEditing:e}}}let FeatureLayerFeatureSettings=class extends PopupTemplateFeatureSettings{get zoomScale(){const e="point"===this._layerExtension.schema.geometryType?this._layerExtension.layer.maxScale:void 0;return this._getSetting("zoomScale",e)}set zoomScale(e){this._setSetting("zoomScale",e)}};FeatureLayerFeatureSettings=__decorate([serializable],FeatureLayerFeatureSettings);let FeatureLayerSchema=class extends LayerExtensionSchema{constructor(e){super(e),this._fieldCollection=this._createFieldCollection(),this._typesCollection=this._createTypeCollection()}get types(){return this._typesCollection}get _fields(){return this._fieldCollection}_createFieldCollection(){return new ArrayWrappedCollection({parent:this._layerExtension,targetProperty:"layer",arrayProperty:"fields"})}_createTypeCollection(){return new ArrayWrappedCollection({parent:this._layerExtension,targetProperty:"layer",arrayProperty:"types"})}_getPropertyBindings(){return{primaryKeyField:"objectIdField",geometryType:"geometryType",spatialReference:"spatialReference",displayField:"displayField",typeIdField:"typeIdField"}}};FeatureLayerSchema=__decorate([serializable],FeatureLayerSchema);export{FeatureLayerSchema};let FeatureLayerReadOnlySchema=class extends FeatureLayerSchema{_setSetting(e,r){if(this._layerBindings.has(e))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);super._setSetting(e,r)}_createFieldCollection(){return new ReadOnlyCollection(super._createFieldCollection())}_createTypeCollection(){return new ReadOnlyCollection(super._createTypeCollection())}};FeatureLayerReadOnlySchema=__decorate([serializable],FeatureLayerReadOnlySchema);export{FeatureLayerReadOnlySchema};const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";
1
+ import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{supportsAttachmentEditing as layerSupportsAttachmentEditing}from"../data/support/attachments.js";import{FeatureLayer as PortalFeatureLayer}from"../portal/FeatureLayer.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{serializable}from"../support/Serializable.js";import{executeQuery}from"../support/_query.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isCSVLayer,isFeatureLayer,isGraphicsLayer,isStreamLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{parse}from"../utilities/number.js";import{LayerExtension,LayerExtensionSchema,ERR_SCHEMA_READ_ONLY}from"./_LayerExtension.js";import{ArrayWrappedCollection}from"./support/ArrayWrappedCollection.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";export class FeatureLayerExtensionBase extends LayerExtension{get hasFeatures(){return!0}get layer(){return super.layer}get renderer(){return this.layer?.renderer}get _layerView(){return this.layer&&this.mapExtension?._allLayerViews.find((e=>e.layer===this.layer))}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();if(!e||this.dynamicallyAddedLayer)return e;const{layerDefinition:r}=PortalFeatureLayer.fromEsriApiFeatureLayer(this.layer),{definitionExpression:t,drawingInfo:a}=r??{};return t&&(e.layerDefinition={...e.layerDefinition,definitionExpression:t}),a&&(e.layerDefinition={...e.layerDefinition,drawingInfo:a}),e}_getFeatures(e,r){const t=this.layer.createQuery();return t.objectIds=e.map((e=>parse(e))),t.where=void 0,t.outFields=r.outFields,t.returnGeometry=r.returnGeometry,executeQuery(t,this,this.layer,r.cancelToken)}_applyLayerProperties(e,r){return checkArg("properties",e).isNotMissing(),checkArg("properties.layerType",e.layerType).satisfies((e=>!e||"ArcGISFeatureLayer"===e||"ArcGISStreamLayer"===e||"CSV"===e),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",r).isNotMissing().satisfies((e=>isFeatureLayer(e)||isStreamLayer(e)||isCSVLayer(e)||isGraphicsLayer(e)),ERR_LAYER_TYPE_MISMATCH),checkArg("properties",e).satisfies((e=>!PortalFeatureLayer.isGraphicsLayerJson(e))),super._applyLayerProperties(e,r)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"ArcGISFeatureLayer"}}}}_createSchema(){return new FeatureLayerSchema(this)}_isSupportedLayer(e){return isFeatureLayer(e)}_createFeatureSettings(){return new FeatureLayerFeatureSettings(this)}_capabilities(){const e=layerSupportsAttachmentEditing(this.layer);return this.layer?.capabilities?.operations?{...this.layer.capabilities.operations,supportsAttachmentEditing:e}:{...super._capabilities(),supportsAttachmentEditing:e}}}let FeatureLayerFeatureSettings=class extends PopupTemplateFeatureSettings{get zoomScale(){const e="point"===this._layerExtension.schema.geometryType?this._layerExtension.layer.maxScale:void 0;return this._getSetting("zoomScale",e)}set zoomScale(e){this._setSetting("zoomScale",e)}};FeatureLayerFeatureSettings=__decorate([serializable],FeatureLayerFeatureSettings);let FeatureLayerSchema=class extends LayerExtensionSchema{constructor(e){super(e),this._fieldCollection=this._createFieldCollection(),this._typesCollection=this._createTypeCollection()}get types(){return this._typesCollection}get _fields(){return this._fieldCollection}_createFieldCollection(){return new ArrayWrappedCollection({parent:this._layerExtension,targetProperty:"layer",arrayProperty:"fields"})}_createTypeCollection(){return new ArrayWrappedCollection({parent:this._layerExtension,targetProperty:"layer",arrayProperty:"types"})}_getPropertyBindings(){return{primaryKeyField:"objectIdField",geometryType:"geometryType",spatialReference:"spatialReference",displayField:"displayField",typeIdField:"typeIdField"}}};FeatureLayerSchema=__decorate([serializable],FeatureLayerSchema);export{FeatureLayerSchema};let FeatureLayerReadOnlySchema=class extends FeatureLayerSchema{_setSetting(e,r){if(this._layerBindings.has(e))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);super._setSetting(e,r)}_createFieldCollection(){return new ReadOnlyCollection(super._createFieldCollection())}_createTypeCollection(){return new ReadOnlyCollection(super._createTypeCollection())}};FeatureLayerReadOnlySchema=__decorate([serializable],FeatureLayerReadOnlySchema);export{FeatureLayerReadOnlySchema};
@@ -1,8 +1,10 @@
1
1
  import type SubtypeGroupLayer from "@arcgis/core/layers/SubtypeGroupLayer.js";
2
+ import FeatureType from "@arcgis/core/layers/support/FeatureType.js";
3
+ import type Field from "@arcgis/core/layers/support/Field.js";
2
4
  import type PortalItem from "@arcgis/core/portal/PortalItem";
3
5
  import { Attachment, AttachmentProperties } from "../data/Attachment.js";
4
- import type { Feature } from "../data/Feature";
5
- import type { FeatureSource } from "../data/FeatureSource";
6
+ import { Feature } from "../data/Feature.js";
7
+ import type { FeatureReadOptions, FeatureSource, FeatureWriteOptions } from "../data/FeatureSource";
6
8
  import type { QuerySourceCapabilities } from "../data/QuerySourceCapabilities";
7
9
  import type { Schema } from "../data/Schema";
8
10
  import type { Relationship } from "../data/_Relationship";
@@ -11,7 +13,7 @@ import { PropertyDefs } from "../support/Serializable.js";
11
13
  import { ArcGISRelationshipCollection } from "../support/_ArcGISRelationshipCollection.js";
12
14
  import type { Collection } from "../support/esri";
13
15
  import { SubtypeSublayerExtension, SubtypeSublayerExtensionCollection, SubtypeSublayerExtensionProperties } from "./SubtypeSublayerExtension.js";
14
- import { LayerExtension, LayerExtensionProperties, LayerProperties } from "./_LayerExtension.js";
16
+ import { LayerExtension, LayerExtensionProperties, LayerExtensionReadOnlySchema, LayerExtensionSchemaPropertyBinding, LayerProperties } from "./_LayerExtension.js";
15
17
  /**
16
18
  * Properties that can be passed into the constructor for
17
19
  * {@link SubtypeGroupLayerExtension}.
@@ -127,8 +129,58 @@ export declare class SubtypeGroupLayerExtension extends LayerExtension<SubtypeGr
127
129
  * @inheritDoc
128
130
  */
129
131
  protected _applyPortalItemProperties(portalItem: PortalItem): Promise<void>;
132
+ /**
133
+ * @inheritDoc
134
+ */
135
+ protected _getFeatures(ids: string[], options?: FeatureReadOptions): AsyncIterable<Feature>;
136
+ /**
137
+ * @inheritDoc
138
+ */
139
+ protected _addFeatures(features: Iterable<Feature>, options?: FeatureWriteOptions): Promise<void>;
140
+ /**
141
+ * @inheritDoc
142
+ */
143
+ protected _updateFeatures(features: Iterable<Feature>, options?: FeatureWriteOptions): Promise<void>;
144
+ /**
145
+ * @inheritDoc
146
+ */
147
+ protected _deleteFeatures(ids: string[], options?: FeatureWriteOptions): Promise<void>;
148
+ private _applyEdits;
130
149
  private _updateClientSideFields;
131
150
  }
151
+ /**
152
+ * An implementation of Schema that directly mirrors the spatial reference on
153
+ * SubtypeGroupLayer. Spatial reference is read only for SubtypeGroupLayer.
154
+ */
155
+ export declare class SubtypeGroupLayerSchema extends LayerExtensionReadOnlySchema {
156
+ private readonly _fieldCollection;
157
+ private readonly _typesCollection;
158
+ constructor(layerExtension: LayerExtension);
159
+ /**
160
+ * @inheritDoc
161
+ */
162
+ get types(): Collection<FeatureType>;
163
+ /**
164
+ * @inheritDoc
165
+ */
166
+ get _types(): Collection<FeatureType>;
167
+ /**
168
+ * @inheritDoc
169
+ */
170
+ get _fields(): Collection<Field>;
171
+ /**
172
+ * Creates the backing collection for fields.
173
+ */
174
+ protected _createFieldCollection(): Collection<Field>;
175
+ /**
176
+ * Creates the backing collection for fields.
177
+ */
178
+ protected _createTypesCollection(): Collection<FeatureType>;
179
+ /**
180
+ * @inheritDoc
181
+ */
182
+ protected _getPropertyBindings(): Record<string, LayerExtensionSchemaPropertyBinding>;
183
+ }
132
184
  /**
133
185
  * Implementation of the
134
186
  * {@link support/_ArcGISRelationshipCollection!ArcGISRelationshipCollection}
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import CodedValueDomain from"@arcgis/core/layers/support/CodedValueDomain";import RangeDomain from"@arcgis/core/layers/support/RangeDomain";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery";import{toAttachment}from"../data/Attachment.js";import{addAttachment,deleteAttachments,supportsAttachmentEditing as layerSupportsAttachmentEditing}from"../data/support/attachments.js";import{SubtypeGroupLayer as SubtypeGroupLayerProperties}from"../portal/SubtypeGroupLayer.js";import{SubtypeSublayer}from"../portal/SubtypeSublayer.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{isFeatureLayer,isSubtypeGroupLayer}from"../utilities/_layers.js";import{FeatureLayerReadOnlySchema}from"./FeatureLayerExtensionBase.js";import{SubtypeSublayerExtension}from"./SubtypeSublayerExtension.js";import{LayerExtension}from"./_LayerExtension.js";import{addOutFields}from"./support/layers.js";let SubtypeGroupLayerExtension=class extends LayerExtension{get enableClientSideData(){return this._enableClientSideData}set enableClientSideData(e){this._enableClientSideData=e,this._updateClientSideFields()}get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get sublayersAreReadOnly(){return!1}get hasFeatures(){return!1}get _layerView(){return this.layer&&this.mapExtension?._allLayerViews.find((e=>e.layer===this.layer))}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return!e||this.dynamicallyAddedLayer||(e.layers=this.sublayerExtensions.toArray().map((e=>{const{layerDefinition:t,visibility:r,subtypeCode:a,layerType:i}=SubtypeSublayer.fromEsriApiSubtypeSublayer(e.sublayer),s={layerType:i,visibility:r,subtypeCode:a};return t?.drawingInfo&&(s.layerDefinition={drawingInfo:t.drawingInfo}),s}))),e}_createRelationships(){return new SubtypeGroupLayerRelationshipCollection(this)}async _onInitialize(){await super._onInitialize(),await this.relationships.initialize();const e=this.layer.sourceJSON?.subtypes;if(e)for(const t of e)if(t?.domains)for(const e of Object.keys(t.domains)){const r=t.domains[e],a=this.layer.fields.find((t=>t.name===e));a&&!a.domain&&(a.domain="codedValue"===r.type?new CodedValueDomain({...r,type:"coded-value"}):new RangeDomain({...r,type:"range"}))}}async _postInitialize(){await super._postInitialize(),this._updateClientSideFields(),this._watchHandles.push(this.watch("layer",(()=>{this._updateClientSideFields()}),!0))}_capabilities(){const e=layerSupportsAttachmentEditing(this.layer);return this.layer?.capabilities?.operations?{...this.layer.capabilities.operations,supportsAttachmentEditing:e}:{...super._capabilities(),supportsAttachmentEditing:e}}_createSublayerExtension(e){return new SubtypeSublayerExtension(e)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"ArcGISSubtypeGroupLayer"}},enableClientSideData:{serializeModes:["initial"],default:!1},attachmentTypes:["initial"]}}_isSupportedLayer(e){return isSubtypeGroupLayer(e)}_createSchema(){return new SubtypeGroupLayerSchema(this)}async _getAttachments(e){if(!this.layer?.capabilities?.data?.supportsAttachment)return[];const t=+e.primaryKey,r=new AttachmentQuery({objectIds:[t]}),a=await this.layer.queryAttachments(r);return a?.[t]?.length?a[t].map((e=>toAttachment(e,e.url))):[]}async _addAttachment(e,t){return addAttachment(e,this.layer,t,{attachmentTypes:this.attachmentTypes})}async _deleteAttachments(e,t){return deleteAttachments(e,this.layer,t)}async _applyPortalItemProperties(e){if("Feature Service"!==e.type)throw new Error(`Cannot create SubtypeGroupLayer from Portal item that has type: ${e.type}`);const t={layerType:"ArcGISSubtypeGroupLayer"};let{url:r}=e;r.match(".*MapServer/\\d{1,}/?$")||r.match(".*FeatureServer/\\d{1,}/?$")||(r=`${r}/0`),t.url=r,await SubtypeGroupLayerProperties.applyToEsriApiLayer(t,this.layer);const a=await e.fetchData();a&&await SubtypeGroupLayerProperties.applyToEsriApiLayer(a,this.layer)}_updateClientSideFields(){this.layer&&this._enableClientSideData&&(addOutFields(this.layer,this.featureSettings.outFields),this.allSublayerExtensions.forEach((e=>addOutFields(this.layer,e.featureSettings.outFields))))}};SubtypeGroupLayerExtension=__decorate([serializable],SubtypeGroupLayerExtension);export{SubtypeGroupLayerExtension};let SubtypeGroupLayerSchema=class extends FeatureLayerReadOnlySchema{};SubtypeGroupLayerSchema=__decorate([serializable],SubtypeGroupLayerSchema);export class SubtypeGroupLayerRelationshipCollection extends ArcGISRelationshipCollection{get _sourceUrl(){const e=this._source.layer;if(e)return`${e.url}/${e.layerId}`}get _sourceLayerId(){return this._source.layer?.layerId}_findRelatedSource(e){if(!this._source.mapExtension||!this._source.layer||!this._sourceUrl)return;const t=this._sourceUrl.slice(0,this._sourceUrl.length-`${this._sourceLayerId}`.length-1),r=this._source.mapExtension.layerExtensions.initializedItems.find((r=>(isFeatureLayer(r.layer)||isSubtypeGroupLayer(r.layer))&&r.layer.url===t&&r.layer.layerId===e));return r||this._source.mapExtension.tableExtensions.initializedItems.find((r=>isFeatureLayer(r.table)&&r.table.url===t&&r.table.layerId===e))}}
1
+ import{__decorate}from"tslib";import CodedValueDomain from"@arcgis/core/layers/support/CodedValueDomain";import FeatureType from"@arcgis/core/layers/support/FeatureType.js";import RangeDomain from"@arcgis/core/layers/support/RangeDomain";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery";import{toAttachment}from"../data/Attachment.js";import{toGraphic}from"../data/Feature.js";import{FeatureSaveError}from"../data/FeatureSaveError.js";import{addAttachment,deleteAttachments,supportsAttachmentEditing as layerSupportsAttachmentEditing}from"../data/support/attachments.js";import{SubtypeGroupLayer as SubtypeGroupLayerProperties}from"../portal/SubtypeGroupLayer.js";import{SubtypeSublayer}from"../portal/SubtypeSublayer.js";import{Template}from"../portal/Template.js";import{cancelify}from"../support/Cancellable.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{executeQuery}from"../support/_query.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isFeatureLayer,isSubtypeGroupLayer}from"../utilities/_layers.js";import{parse}from"../utilities/number.js";import{ArrayWrappedCollection}from"./LayerExtension.js";import{SubtypeSublayerExtension}from"./SubtypeSublayerExtension.js";import{LayerExtension,LayerExtensionReadOnlySchema}from"./_LayerExtension.js";import{addOutFields,getGlobalIdField,isGlobalIdUsed}from"./support/layers.js";let SubtypeGroupLayerExtension=class extends LayerExtension{get enableClientSideData(){return this._enableClientSideData}set enableClientSideData(e){this._enableClientSideData=e,this._updateClientSideFields()}get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get sublayersAreReadOnly(){return!1}get hasFeatures(){return!0}get _layerView(){return this.layer&&this.mapExtension?._allLayerViews.find((e=>e.layer===this.layer))}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return!e||this.dynamicallyAddedLayer||(e.layers=this.sublayerExtensions.toArray().map((e=>{const{layerDefinition:t,visibility:r,subtypeCode:a,layerType:s}=SubtypeSublayer.fromEsriApiSubtypeSublayer(e.sublayer),i={layerType:s,visibility:r,subtypeCode:a};return t?.drawingInfo&&(i.layerDefinition={drawingInfo:t.drawingInfo}),i}))),e}_createRelationships(){return new SubtypeGroupLayerRelationshipCollection(this)}async _onInitialize(){await super._onInitialize(),await this.relationships.initialize();const e=this.layer.sourceJSON?.templates?.map((e=>Template.toEsriApiFeatureTemplate(e)));this.sublayerExtensions.filter((e=>e.sublayer&&!e.sublayer.templates)).forEach((t=>{let r=e;1===e.length&&1!==this.sublayerExtensions.length&&(r=e.map((e=>{const r=Template.toEsriApiFeatureTemplate(Template.fromEsriApiFeatureTemplate(e));r.name=t.title;const a=r.prototype?.attributes;return"number"==typeof a?.[this.layer.subtypeField]&&(a[this.layer.subtypeField]=t.sublayer.subtypeCode),r}))),t.sublayer.templates=r}));const t=this.layer.sourceJSON?.subtypes;if(t){this._subtypes=t.map((e=>{const t={};for(const[r,a]of Object.entries(e.domains??{}))t[r]="codedValue"===a.type?new CodedValueDomain({...a,type:"coded-value"}):new RangeDomain({...a,type:"range"});return new FeatureType({id:e.code,name:e.name,domains:t,templates:this.sublayerExtensions.map((e=>e.sublayer)).find((t=>t.subtypeCode===e.code)).templates})}));for(const e of this._subtypes)for(const[t,r]of Object.entries(e.domains)){const e=this.layer.fields.find((e=>e.name===t));e&&!e.domain&&(e.domain=r)}}}async _postInitialize(){await super._postInitialize(),this._updateClientSideFields(),this._watchHandles.push(this.watch("layer",(()=>{this._updateClientSideFields()}),!0))}_capabilities(){const e=layerSupportsAttachmentEditing(this.layer);return this.layer?.capabilities?.operations?{...this.layer.capabilities.operations,supportsAttachmentEditing:e}:{...super._capabilities(),supportsAttachmentEditing:e}}_createSublayerExtension(e){return new SubtypeSublayerExtension(e)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"ArcGISSubtypeGroupLayer"}},enableClientSideData:{serializeModes:["initial"],default:!1},attachmentTypes:["initial"]}}_isSupportedLayer(e){return isSubtypeGroupLayer(e)}_createSchema(){return new SubtypeGroupLayerSchema(this)}async _getAttachments(e){if(!this.layer?.capabilities?.data?.supportsAttachment)return[];const t=+e.primaryKey,r=new AttachmentQuery({objectIds:[t]}),a=await this.layer.queryAttachments(r);return a?.[t]?.length?a[t].map((e=>toAttachment(e,e.url))):[]}async _addAttachment(e,t){return addAttachment(e,this.layer,t,{attachmentTypes:this.attachmentTypes})}async _deleteAttachments(e,t){return deleteAttachments(e,this.layer,t)}async _applyPortalItemProperties(e){if("Feature Service"!==e.type)throw new Error(`Cannot create SubtypeGroupLayer from Portal item that has type: ${e.type}`);const t={layerType:"ArcGISSubtypeGroupLayer"};let{url:r}=e;r.match(".*MapServer/\\d{1,}/?$")||r.match(".*FeatureServer/\\d{1,}/?$")||(r=`${r}/0`),t.url=r,await SubtypeGroupLayerProperties.applyToEsriApiLayer(t,this.layer);const a=await e.fetchData();a&&await SubtypeGroupLayerProperties.applyToEsriApiLayer(a,this.layer)}_getFeatures(e,t){if(!this.layer)return super._getFeatures(e,t);const r=this.layer.createQuery();return r.objectIds=e.map((e=>parse(e))),r.where=void 0,r.outFields=t.outFields,r.returnGeometry=t.returnGeometry,executeQuery(r,this,this.layer,t.cancelToken)}async _addFeatures(e,t){const r=Array.from(e);if(0===r.length||!this.layer)return;const a=await this._applyEdits({addFeatures:r.map(toGraphic)},t);if(!a.addFeatureResults||a.addFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.addFeatureResults.forEach(((e,t)=>{const{objectId:a,globalId:i,error:o}=e,l=r[t];if(o){s=s||new FeatureSaveError("Errors encountered when adding features.");const{title:r}=l;s.errors.set(`${r}-${t}`,new Error(`Failed to add feature '${r}'. ${e.error.name} : ${e.error.message}`))}else{const{primaryKeyField:e}=l.schema;l.attributes.set(e,a);const t=getGlobalIdField(this.layer);t&&i&&l.attributes.set(t,i)}})),s)throw s}async _updateFeatures(e,t){const r=Array.from(e);if(0===r.length)return;const a=await this._applyEdits({updateFeatures:Array.from(e).map(toGraphic)},t);if(!a.updateFeatureResults||a.updateFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.updateFeatureResults.forEach(((e,t)=>{if(e.error){s=s||new FeatureSaveError("Errors encountered when updating features.");const{primaryKey:a}=r[t];s.errors.set(a,new Error(`Failed to update feature with id ${a}. ${e.error.name} : ${e.error.message}`))}})),s)throw s}async _deleteFeatures(e,t){if(0===e.length)return;const r=await this._applyEdits({deleteFeatures:e.map((e=>({objectId:e})))},t);if(!r.deleteFeatureResults)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let a;if(r.deleteFeatureResults.forEach(((t,r)=>{if(t.error){a=a||new FeatureSaveError("Errors encountered when deleting features.");const s=e[r];a.errors.set(s,new Error(`Failed to delete feature with id ${s}. ${t.error.name} : ${t.error.message}`))}})),a)throw a}async _applyEdits(e,t={}){const r=isGlobalIdUsed(this.layer,e),a=this.layer.applyEdits(e,{globalIdUsed:r}),s=await cancelify(a,t.cancelToken);if(!s)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");return s}_updateClientSideFields(){this.layer&&this._enableClientSideData&&(addOutFields(this.layer,this.featureSettings.outFields),this.allSublayerExtensions.forEach((e=>addOutFields(this.layer,e.featureSettings.outFields))))}};SubtypeGroupLayerExtension=__decorate([serializable],SubtypeGroupLayerExtension);export{SubtypeGroupLayerExtension};let SubtypeGroupLayerSchema=class extends LayerExtensionReadOnlySchema{constructor(e){super(e),this._fieldCollection=this._createFieldCollection(),this._typesCollection=this._createTypesCollection()}get types(){return this._typesCollection}get _types(){return this._typesCollection}get _fields(){return this._fieldCollection}_createFieldCollection(){return new ReadOnlyCollection(new ArrayWrappedCollection({parent:this._layerExtension,targetProperty:"layer",arrayProperty:"fields"}))}_createTypesCollection(){return new ReadOnlyCollection(new ArrayWrappedCollection({parent:this._layerExtension,arrayProperty:"_subtypes"}))}_getPropertyBindings(){return{primaryKeyField:"objectIdField",geometryType:"geometryType",spatialReference:"spatialReference",displayField:"displayField",typeIdField:"subtypeField"}}};SubtypeGroupLayerSchema=__decorate([serializable],SubtypeGroupLayerSchema);export{SubtypeGroupLayerSchema};export class SubtypeGroupLayerRelationshipCollection extends ArcGISRelationshipCollection{get _sourceUrl(){const e=this._source.layer;if(e)return`${e.url}/${e.layerId}`}get _sourceLayerId(){return this._source.layer?.layerId}_findRelatedSource(e){if(!this._source.mapExtension||!this._source.layer||!this._sourceUrl)return;const t=this._sourceUrl.slice(0,this._sourceUrl.length-`${this._sourceLayerId}`.length-1),r=this._source.mapExtension.allLayerExtensions.initializedItems.find((r=>(isFeatureLayer(r.layer)||isSubtypeGroupLayer(r.layer))&&r.layer.url===t&&r.layer.layerId===e));return r||this._source.mapExtension.tableExtensions.initializedItems.find((r=>isFeatureLayer(r.table)&&r.table.url===t&&r.table.layerId===e))}}
@@ -1,3 +1,4 @@
1
+ import type FeatureType from "@arcgis/core/layers/support/FeatureType.js";
1
2
  import type Field from "@arcgis/core/layers/support/Field";
2
3
  import type SubtypeSublayer from "@arcgis/core/layers/support/SubtypeSublayer";
3
4
  import type EsriRenderer from "@arcgis/core/renderers/Renderer";
@@ -11,7 +12,7 @@ import type { Relationship } from "../data/_Relationship.js";
11
12
  import { Layer as PortalLayer } from "../portal/Layer.js";
12
13
  import type { InitializableCollection } from "../support/InitializableCollectionProxy.js";
13
14
  import { ArcGISRelationshipCollection } from "../support/_ArcGISRelationshipCollection.js";
14
- import type { Collection, SublayerLike } from "../support/esri.js";
15
+ import { Collection, SublayerLike } from "../support/esri.js";
15
16
  import type { SubtypeGroupLayerExtension } from "./SubtypeGroupLayerExtension.js";
16
17
  import type { LayerExtensionSchemaPropertyBinding } from "./_LayerExtension.js";
17
18
  import { SublayerExtension, SublayerExtensionProperties, SublayerProperties, SublayerSchema } from "./_SublayerExtension.js";
@@ -182,6 +183,8 @@ export declare class SubtypeSublayerSchema extends SublayerSchema {
182
183
  */
183
184
  protected readonly _sublayerExtension: SubtypeSublayerExtension;
184
185
  private readonly _fieldCollection;
186
+ private readonly _readonlyTypesCollection;
187
+ private readonly _typesCollection;
185
188
  /**
186
189
  * @inheritDoc
187
190
  */
@@ -214,6 +217,10 @@ export declare class SubtypeSublayerSchema extends SublayerSchema {
214
217
  * @inheritDoc
215
218
  */
216
219
  set typeIdField(value: string);
220
+ /**
221
+ * @inheritDoc
222
+ */
223
+ get types(): Collection<FeatureType>;
217
224
  constructor(layerExtension: SubtypeSublayerExtension);
218
225
  /**
219
226
  * @inheritDoc
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery";import{InvalidOperationError}from"../InvalidOperationError.js";import{toAttachment}from"../data/Attachment.js";import{toGraphic}from"../data/Feature.js";import{FeatureSaveError}from"../data/FeatureSaveError.js";import{addAttachment,deleteAttachments}from"../data/support/attachments.js";import{Layer as PortalLayer}from"../portal/Layer.js";import{cancelify}from"../support/Cancellable.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{executeQuery}from"../support/_query.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isFeatureLayer,isSubtypeGroupLayer,isSubtypeSublayer}from"../utilities/layers.js";import{parse}from"../utilities/number.js";import{SublayerExtension,SublayerSchema}from"./_SublayerExtension.js";import{ArrayWrappedCollection}from"./support/ArrayWrappedCollection.js";import{ExtensionBaseLayerListSettings}from"./support/LayerListSettings.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";import{getGlobalIdField,isGlobalIdUsed}from"./support/layers.js";let SubtypeSublayerExtension=class extends SublayerExtension{get supportsSublayers(){return!1}get layerExtension(){return super.layerExtension}get renderer(){return this.sublayer?.renderer}get hasFeatures(){return!0}get sublayer(){return super.sublayer}get sublayerExtensions(){return super.sublayerExtensions}get attachmentTypes(){return this.layerExtension?.attachmentTypes}get canChangeRenderer(){return!0}get canChangeOpacity(){return!1}async _addAttachment(e,t){return addAttachment(e,this.sublayer.layer,t,{attachmentTypes:this.layerExtension?.attachmentTypes})}async _deleteAttachments(e,t){return deleteAttachments(e,this.sublayer.layer,t)}_isSupportedSublayer(e){return isSubtypeSublayer(e)}_createLayerListSettings(e){return new SubtypeSublayerExtensionLayerListSettings(e,this)}_createFeatureSettings(){return new SubtypeSublayerFeatureSettings(this)}_createSublayer(e){return PortalLayer.toEsriApiSublayer(e,"ArcGISSubtypeGroupLayer")}_createSchema(){return new SubtypeSublayerSchema(this)}_createRelationships(){return new SubtypeSublayerRelationshipCollection(this)}async _applySublayerProperties(e,t){return PortalLayer.applyToEsriApiSublayer(e,t)}_capabilities(){return this.layerExtension?.capabilities}async _onInitialize(){await super._onInitialize(),await this.relationships.initialize(),this._watchHandles.push(this.watch("layerExtension.attachmentTypes",(()=>this.notifyChange("attachmentTypes"))))}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized()}_getFeatures(e,t){if(!this.sublayer?.layer)return super._getFeatures(e,t);const r=this.sublayer?.layer.createQuery();return r.objectIds=e.map((e=>parse(e))),r.where=void 0,r.outFields=t.outFields,r.returnGeometry=t.returnGeometry,executeQuery(r,this,this.sublayer.layer,t.cancelToken)}async _getAttachments(e){if(!this.sublayer?.layer?.capabilities?.data?.supportsAttachment)return[];const t=+e.primaryKey,r=new AttachmentQuery({objectIds:[t]}),a=await this.sublayer.layer.queryAttachments(r);return a?.[t]?.length?a[t].map((e=>toAttachment(e,e.url))):[]}async _addFeatures(e,t){const r=Array.from(e);if(0===r.length||!this.sublayer?.layer)return;const a=await this._applyEdits({addFeatures:r.map(toGraphic)},t);if(!a.addFeatureResults||a.addFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.addFeatureResults.forEach(((e,t)=>{const{objectId:a,globalId:i,error:l}=e,n=r[t];if(l){s=s||new FeatureSaveError("Errors encountered when adding features.");const{title:r}=n;s.errors.set(`${r}-${t}`,new Error(`Failed to add feature '${r}'. ${e.error.name} : ${e.error.message}`))}else{const{primaryKeyField:e}=n.schema;n.attributes.set(e,a);const t=getGlobalIdField(this.sublayer.layer);t&&i&&n.attributes.set(t,i)}})),s)throw s}async _updateFeatures(e,t){const r=Array.from(e);if(0===r.length)return;const a=await this._applyEdits({updateFeatures:Array.from(e).map(toGraphic)},t);if(!a.updateFeatureResults||a.updateFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.updateFeatureResults.forEach(((e,t)=>{if(e.error){s=s||new FeatureSaveError("Errors encountered when updating features.");const{primaryKey:a}=r[t];s.errors.set(a,new Error(`Failed to update feature with id ${a}. ${e.error.name} : ${e.error.message}`))}})),s)throw s}async _deleteFeatures(e,t){if(0===e.length)return;const r=await this._applyEdits({deleteFeatures:e.map((e=>({objectId:e})))},t);if(!r.deleteFeatureResults)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let a;if(r.deleteFeatureResults.forEach(((t,r)=>{if(t.error){a=a||new FeatureSaveError("Errors encountered when deleting features.");const s=e[r];a.errors.set(s,new Error(`Failed to delete feature with id ${s}. ${t.error.name} : ${t.error.message}`))}})),a)throw a}_serializeSublayer(e){return PortalLayer.fromEsriApiSublayer(e)}async _applyEdits(e,t={}){const r=isGlobalIdUsed(this.sublayer.layer,e),a=this.sublayer.layer.applyEdits(e,{globalIdUsed:r}),s=await cancelify(a,t.cancelToken);if(!s)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");return s}};SubtypeSublayerExtension=__decorate([serializable],SubtypeSublayerExtension);export{SubtypeSublayerExtension};const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";let SubtypeSublayerSchema=class extends SublayerSchema{constructor(e){super(e),this._fieldCollection=this._createFieldCollection()}get primaryKeyField(){return this._sublayerExtension.sublayer?.layer?.objectIdField}set primaryKeyField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get geometryType(){return this._sublayerExtension.sublayer?.layer?.geometryType}set geometryType(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get displayField(){return this._sublayerExtension.sublayer?.layer?.displayField}set displayField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get typeIdField(){return this._sublayerExtension.sublayer?.layer?.typeIdField}set typeIdField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get _fields(){return this._fieldCollection}_createFieldCollection(){return new ReadOnlyCollection(new ArrayWrappedCollection({parent:this._sublayerExtension,targetProperty:"sublayer",arrayProperty:"layer.fields"}))}_getPropertyBindings(){return{primaryKeyField:"layer.objectIdField",geometryType:"layer.geometryType",spatialReference:"layer.spatialReference",displayField:"layer.displayField",typeIdField:"layer.typeIdField"}}};SubtypeSublayerSchema=__decorate([serializable],SubtypeSublayerSchema);export{SubtypeSublayerSchema};let SubtypeSublayerFeatureSettings=class extends PopupTemplateFeatureSettings{get zoomScale(){const e="point"===this._layerExtension.schema.geometryType?this._layerExtension.sublayer.maxScale:void 0;return this._getSetting("zoomScale",e)}set zoomScale(e){this._setSetting("zoomScale",e)}};SubtypeSublayerFeatureSettings=__decorate([serializable],SubtypeSublayerFeatureSettings);let SubtypeSublayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _layerSupportsHideChildren(){return!1}get _esriLayer(){return this._extension.sublayer}get _listModePath(){return"sublayer.listMode"}get _supportsChildren(){return!1}};SubtypeSublayerExtensionLayerListSettings=__decorate([serializable],SubtypeSublayerExtensionLayerListSettings);export class SubtypeSublayerRelationshipCollection extends ArcGISRelationshipCollection{get _sourceUrl(){const e=this._source.sublayer?.layer;if(e)return`${e.url}/${e.layerId}`}get _sourceLayerId(){const e=this._source.sublayer?.layer;return e?.layerId}_findRelatedSource(e){if(!this._source.layerExtension?.mapExtension||!this._source.sublayer||!this._sourceUrl)return;const t=this._sourceUrl.slice(0,this._sourceUrl.length-`${this._sourceLayerId}`.length-1),r=this._source.layerExtension.mapExtension.layerExtensions.initializedItems.find((r=>(isFeatureLayer(r.layer)||isSubtypeGroupLayer(r.layer))&&r.layer.url===t&&r.layer.layerId===e));return r||this._source.layerExtension.mapExtension.tableExtensions.initializedItems.find((r=>isFeatureLayer(r.table)&&r.table.url===t&&r.table.layerId===e))}}
1
+ import{__decorate}from"tslib";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery";import{InvalidOperationError}from"../InvalidOperationError.js";import{toAttachment}from"../data/Attachment.js";import{toGraphic}from"../data/Feature.js";import{FeatureSaveError}from"../data/FeatureSaveError.js";import{addAttachment,deleteAttachments}from"../data/support/attachments.js";import{Layer as PortalLayer}from"../portal/Layer.js";import{cancelify}from"../support/Cancellable.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{executeQuery}from"../support/_query.js";import{Collection}from"../support/esri.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isFeatureLayer,isSubtypeGroupLayer,isSubtypeSublayer}from"../utilities/layers.js";import{parse}from"../utilities/number.js";import{SublayerExtension,SublayerSchema}from"./_SublayerExtension.js";import{ArrayWrappedCollection}from"./support/ArrayWrappedCollection.js";import{ExtensionBaseLayerListSettings}from"./support/LayerListSettings.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";import{getGlobalIdField,isGlobalIdUsed}from"./support/layers.js";let SubtypeSublayerExtension=class extends SublayerExtension{get supportsSublayers(){return!1}get layerExtension(){return super.layerExtension}get renderer(){return this.sublayer?.renderer}get hasFeatures(){return!0}get sublayer(){return super.sublayer}get sublayerExtensions(){return super.sublayerExtensions}get attachmentTypes(){return this.layerExtension?.attachmentTypes}get canChangeRenderer(){return!0}get canChangeOpacity(){return!1}async _addAttachment(e,t){return addAttachment(e,this.sublayer.layer,t,{attachmentTypes:this.layerExtension?.attachmentTypes})}async _deleteAttachments(e,t){return deleteAttachments(e,this.sublayer.layer,t)}_isSupportedSublayer(e){return isSubtypeSublayer(e)}_createLayerListSettings(e){return new SubtypeSublayerExtensionLayerListSettings(e,this)}_createFeatureSettings(){return new SubtypeSublayerFeatureSettings(this)}_createSublayer(e){return PortalLayer.toEsriApiSublayer(e,"ArcGISSubtypeGroupLayer")}_createSchema(){return new SubtypeSublayerSchema(this)}_createRelationships(){return new SubtypeSublayerRelationshipCollection(this)}async _applySublayerProperties(e,t){return PortalLayer.applyToEsriApiSublayer(e,t)}_capabilities(){return this.layerExtension?.capabilities}async _onInitialize(){await super._onInitialize(),await this.relationships.initialize(),this._watchHandles.push(this.watch("layerExtension.attachmentTypes",(()=>this.notifyChange("attachmentTypes"))))}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized()}_getFeatures(e,t){if(!this.sublayer?.layer)return super._getFeatures(e,t);const r=this.sublayer?.layer.createQuery();return r.objectIds=e.map((e=>parse(e))),r.where=void 0,r.outFields=t.outFields,r.returnGeometry=t.returnGeometry,executeQuery(r,this,this.sublayer.layer,t.cancelToken)}async _getAttachments(e){if(!this.sublayer?.layer?.capabilities?.data?.supportsAttachment)return[];const t=+e.primaryKey,r=new AttachmentQuery({objectIds:[t]}),a=await this.sublayer.layer.queryAttachments(r);return a?.[t]?.length?a[t].map((e=>toAttachment(e,e.url))):[]}async _addFeatures(e,t){const r=Array.from(e);if(0===r.length||!this.sublayer?.layer)return;const a=await this._applyEdits({addFeatures:r.map(toGraphic)},t);if(!a.addFeatureResults||a.addFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.addFeatureResults.forEach(((e,t)=>{const{objectId:a,globalId:i,error:n}=e,l=r[t];if(n){s=s||new FeatureSaveError("Errors encountered when adding features.");const{title:r}=l;s.errors.set(`${r}-${t}`,new Error(`Failed to add feature '${r}'. ${e.error.name} : ${e.error.message}`))}else{const{primaryKeyField:e}=l.schema;l.attributes.set(e,a);const t=getGlobalIdField(this.sublayer.layer);t&&i&&l.attributes.set(t,i)}})),s)throw s}async _updateFeatures(e,t){const r=Array.from(e);if(0===r.length)return;const a=await this._applyEdits({updateFeatures:Array.from(e).map(toGraphic)},t);if(!a.updateFeatureResults||a.updateFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.updateFeatureResults.forEach(((e,t)=>{if(e.error){s=s||new FeatureSaveError("Errors encountered when updating features.");const{primaryKey:a}=r[t];s.errors.set(a,new Error(`Failed to update feature with id ${a}. ${e.error.name} : ${e.error.message}`))}})),s)throw s}async _deleteFeatures(e,t){if(0===e.length)return;const r=await this._applyEdits({deleteFeatures:e.map((e=>({objectId:e})))},t);if(!r.deleteFeatureResults)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let a;if(r.deleteFeatureResults.forEach(((t,r)=>{if(t.error){a=a||new FeatureSaveError("Errors encountered when deleting features.");const s=e[r];a.errors.set(s,new Error(`Failed to delete feature with id ${s}. ${t.error.name} : ${t.error.message}`))}})),a)throw a}_serializeSublayer(e){return PortalLayer.fromEsriApiSublayer(e)}async _applyEdits(e,t={}){const r=isGlobalIdUsed(this.sublayer.layer,e),a=this.sublayer.layer.applyEdits(e,{globalIdUsed:r}),s=await cancelify(a,t.cancelToken);if(!s)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");return s}};SubtypeSublayerExtension=__decorate([serializable],SubtypeSublayerExtension);export{SubtypeSublayerExtension};const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";let SubtypeSublayerSchema=class extends SublayerSchema{constructor(e){super(e),this._fieldCollection=this._createFieldCollection(),this._typesCollection=new Collection,this._readonlyTypesCollection=new ReadOnlyCollection(this._typesCollection);const t=()=>this._sublayerExtension.sublayer?.subtypeCode,r=()=>{const e=this._sublayerExtension.layerExtension?._subtypes?.find((e=>e.id===t()));return!!e&&(this._typesCollection.add(e),!0)};if(this._sublayerExtension.layerExtension?._subtypes?.some((e=>e.id===t())))r();else{const e=this._sublayerExtension.watch("layerExtension._subtypes",(()=>{r()&&e.remove()}),!0)}}get primaryKeyField(){return this._sublayerExtension.sublayer?.layer?.objectIdField}set primaryKeyField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get geometryType(){return this._sublayerExtension.sublayer?.layer?.geometryType}set geometryType(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get displayField(){return this._sublayerExtension.sublayer?.layer?.displayField}set displayField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get typeIdField(){return this._sublayerExtension.sublayer?.layer?.subtypeField}set typeIdField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get types(){return this._readonlyTypesCollection}get _fields(){return this._fieldCollection}_createFieldCollection(){return new ReadOnlyCollection(new ArrayWrappedCollection({parent:this._sublayerExtension,targetProperty:"sublayer",arrayProperty:"layer.fields"}))}_getPropertyBindings(){return{primaryKeyField:"layer.objectIdField",geometryType:"layer.geometryType",spatialReference:"layer.spatialReference",displayField:"layer.displayField",typeIdField:"layer.typeIdField"}}};SubtypeSublayerSchema=__decorate([serializable],SubtypeSublayerSchema);export{SubtypeSublayerSchema};let SubtypeSublayerFeatureSettings=class extends PopupTemplateFeatureSettings{get zoomScale(){const e="point"===this._layerExtension.schema.geometryType?this._layerExtension.sublayer.maxScale:void 0;return this._getSetting("zoomScale",e)}set zoomScale(e){this._setSetting("zoomScale",e)}};SubtypeSublayerFeatureSettings=__decorate([serializable],SubtypeSublayerFeatureSettings);let SubtypeSublayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _layerSupportsHideChildren(){return!1}get _esriLayer(){return this._extension.sublayer}get _listModePath(){return"sublayer.listMode"}get _supportsChildren(){return!1}};SubtypeSublayerExtensionLayerListSettings=__decorate([serializable],SubtypeSublayerExtensionLayerListSettings);export class SubtypeSublayerRelationshipCollection extends ArcGISRelationshipCollection{get _sourceUrl(){const e=this._source.sublayer?.layer;if(e)return`${e.url}/${e.layerId}`}get _sourceLayerId(){const e=this._source.sublayer?.layer;return e?.layerId}_findRelatedSource(e){if(!this._source.layerExtension?.mapExtension||!this._source.sublayer||!this._sourceUrl)return;const t=this._sourceUrl.slice(0,this._sourceUrl.length-`${this._sourceLayerId}`.length-1),r=this._source.layerExtension.mapExtension.allLayerExtensions.initializedItems.find((r=>(isFeatureLayer(r.layer)||isSubtypeGroupLayer(r.layer))&&r.layer.url===t&&r.layer.layerId===e));return r||this._source.layerExtension.mapExtension.tableExtensions.initializedItems.find((r=>isFeatureLayer(r.table)&&r.table.url===t&&r.table.layerId===e))}}
@@ -472,3 +472,18 @@ export declare class LayerExtensionSchema extends Schema {
472
472
  */
473
473
  private _onLayerResolved;
474
474
  }
475
+ /**
476
+ * An implementation of Schema that allows for schema properties to directly
477
+ * mirror equivalent properties on a Layer. Attempting to set bound properties
478
+ * will result in a readonly error.
479
+ */
480
+ export declare class LayerExtensionReadOnlySchema extends LayerExtensionSchema {
481
+ /**
482
+ * @inheritDoc
483
+ */
484
+ protected _setSetting<T>(setting: string, value: T): void;
485
+ }
486
+ /**
487
+ * The error message for when readonly schema properties are set.
488
+ */
489
+ export declare const ERR_SCHEMA_READ_ONLY = "This schema property is read-only.";
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",ERR_SCHEMA_READ_ONLY="This schema property is read-only.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(t){getLayerXLogger().error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}},this._onVisibleChanged=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")},this._onSublayersSublayerVisibleChanged=(e,t,i,r)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)},this._onSublayersChange=e=>{e.added?.length&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if(i?.hasOwnProperty("listMode")&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?.title??this._deferredLayerProperties?.title??("string"==typeof this._deferredLayerProperties?.$ref?this._deferredLayerProperties?.$ref:this._deferredLayerProperties?.$ref?.title??this._deferredLayerProperties?.$ref?.id)??"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get canChangeLabels(){return!1}get initialVisibility(){return this._initialVisibility??this.layer?.visible??!1}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}get sublayersAreReadOnly(){return!0}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){checkArg("portalItemLike",e).isNotMissing();const i=t??{};checkArg("layerExtensionProperties.layer",i.layer).satisfies((e=>!isLayer(e)));const r={...i.layer};checkArg("layerExtensionProperties.layer.$ref",r.$ref).satisfies((e=>null==e));const s=new DefaultArcGISRequestHelper,a=toPortalItem(e);let n;await load(a);const o=a.typeKeywords??"";if("Map Service"===a.type)n=o.includes("Tiled")||o.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===a.type)n="ArcGISFeatureLayer";else if("Image Service"===a.type){const e=await LayerExtension._getLayerData(a.url,s);e.cacheType?"Map"===e.cacheType?n="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||o.includes("Elevation 3D Layer"))&&(n="ArcGISTiledElevationServiceLayer"):n=e.singleFusedMapCache||e.tileInfo||o.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===a.type)n="CSV";else if("KML"===a.type)n="KML";else if("Scene Service"===a.type)o.includes("3DObject")||o.includes("Point")?n="ArcGISSceneServiceLayer":o.includes("IntegratedMesh")?n="IntegratedMeshLayer":o.includes("PointCloud")?n="PointCloudLayer":o.includes("Building")&&(n="BuildingSceneLayer");else if("Stream Service"===a.type)n="ArcGISStreamLayer";else if("Vector Tile Service"===a.type)n="VectorTileLayer";else if("Feature Collection"===a.type){n="ArcGISFeatureLayer";const e=await a.fetchData();r.featureCollection=e}else if("WMTS"===a.type){n="WebTiledLayer";const e=await a.fetchData();Object.assign(r,e)}else if("WMS"===a.type){n="WMS";const e=await a.fetchData();Object.assign(r,e)}if(!n)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(r.layerType&&r.layerType!==n)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return r.layerType=n,r.$portalItem=a,i.layer=r,LayerExtension.create(i)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){if(this.layer||!this._deferredLayerProperties)return;const t=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let i;e?i=e.find(t):this.basemapExtension?.basemap?(i=this.basemapExtension.basemap.baseLayers.find(t),i=i||this.basemapExtension.basemap.referenceLayers.find(t)):this.groundExtension?.ground?i=this.groundExtension.ground.layers.find(t):this.parentLayerExtension?.layer?i=this.parentLayerExtension.layer.layers.find(t):this.mapExtension&&(i=this.mapExtension.map.layers.find(t)),i&&this._isSupportedLayer(i)&&(this._setLayer(i),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,e.hasOwnProperty("labelsVisible")&&this.layer.hasOwnProperty("labelsVisible")&&(e.labelsVisible=this.layer.labelsVisible),this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._initialVisibility=this.layer.visible,this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>!e||e===this.getDefault("layer")?.layerType),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged)}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);export{LayerExtensionLayerListSettings};let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){return e instanceof LayerExtension?!!e._deferredLayerProperties?.$ref:!isLayer(e.layer)&&!!e.layer?.$ref}
1
+ import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(t){getLayerXLogger().error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}},this._onVisibleChanged=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")},this._onSublayersSublayerVisibleChanged=(e,t,i,r)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)},this._onSublayersChange=e=>{e.added?.length&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if(i?.hasOwnProperty("listMode")&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?.title??this._deferredLayerProperties?.title??("string"==typeof this._deferredLayerProperties?.$ref?this._deferredLayerProperties?.$ref:this._deferredLayerProperties?.$ref?.title??this._deferredLayerProperties?.$ref?.id)??"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get canChangeLabels(){return!1}get initialVisibility(){return this._initialVisibility??this.layer?.visible??!1}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}get sublayersAreReadOnly(){return!0}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){checkArg("portalItemLike",e).isNotMissing();const i=t??{};checkArg("layerExtensionProperties.layer",i.layer).satisfies((e=>!isLayer(e)));const r={...i.layer};checkArg("layerExtensionProperties.layer.$ref",r.$ref).satisfies((e=>null==e));const s=new DefaultArcGISRequestHelper,a=toPortalItem(e);let n;await load(a);const o=a.typeKeywords??"";if("Map Service"===a.type)n=o.includes("Tiled")||o.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===a.type)n="ArcGISFeatureLayer";else if("Image Service"===a.type){const e=await LayerExtension._getLayerData(a.url,s);e.cacheType?"Map"===e.cacheType?n="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||o.includes("Elevation 3D Layer"))&&(n="ArcGISTiledElevationServiceLayer"):n=e.singleFusedMapCache||e.tileInfo||o.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===a.type)n="CSV";else if("KML"===a.type)n="KML";else if("Scene Service"===a.type)o.includes("3DObject")||o.includes("Point")?n="ArcGISSceneServiceLayer":o.includes("IntegratedMesh")?n="IntegratedMeshLayer":o.includes("PointCloud")?n="PointCloudLayer":o.includes("Building")&&(n="BuildingSceneLayer");else if("Stream Service"===a.type)n="ArcGISStreamLayer";else if("Vector Tile Service"===a.type)n="VectorTileLayer";else if("Feature Collection"===a.type){n="ArcGISFeatureLayer";const e=await a.fetchData();r.featureCollection=e}else if("WMTS"===a.type){n="WebTiledLayer";const e=await a.fetchData();Object.assign(r,e)}else if("WMS"===a.type){n="WMS";const e=await a.fetchData();Object.assign(r,e)}if(!n)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(r.layerType&&r.layerType!==n)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return r.layerType=n,r.$portalItem=a,i.layer=r,LayerExtension.create(i)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){if(this.layer||!this._deferredLayerProperties)return;const t=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let i;e?i=e.find(t):this.basemapExtension?.basemap?(i=this.basemapExtension.basemap.baseLayers.find(t),i=i||this.basemapExtension.basemap.referenceLayers.find(t)):this.groundExtension?.ground?i=this.groundExtension.ground.layers.find(t):this.parentLayerExtension?.layer?i=this.parentLayerExtension.layer.layers.find(t):this.mapExtension&&(i=this.mapExtension.map.layers.find(t)),i&&this._isSupportedLayer(i)&&(this._setLayer(i),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,e.hasOwnProperty("labelsVisible")&&this.layer.hasOwnProperty("labelsVisible")&&(e.labelsVisible=this.layer.labelsVisible),this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._initialVisibility=this.layer.visible,this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>!e||e===this.getDefault("layer")?.layerType),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged)}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);export{LayerExtensionLayerListSettings};let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){return e instanceof LayerExtension?!!e._deferredLayerProperties?.$ref:!isLayer(e.layer)&&!!e.layer?.$ref}let LayerExtensionReadOnlySchema=class extends LayerExtensionSchema{_setSetting(e,t){if(this._layerBindings.has(e))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);super._setSetting(e,t)}};LayerExtensionReadOnlySchema=__decorate([serializable],LayerExtensionReadOnlySchema);export{LayerExtensionReadOnlySchema};export const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";
@@ -1 +1 @@
1
- export function addOutFields(e,t){if(e.outFields?.includes("*")||!t?.length)return;const i=new Set((e.outFields??[]).concat(...t));e.outFields=[...i]}export function getGlobalIdField(e){return e.fields.find((e=>"global-id"===e.type))?.name}export function isGlobalIdUsed(e,t){if(!e.capabilities.editing.supportsGlobalId)return!1;const i=getGlobalIdField(e);return!!i&&t.addFeatures?.every((e=>!!e.attributes[i]))}
1
+ export function addOutFields(e,t){if(e.outFields?.includes("*")||!t?.length)return;const i=new Set((e.outFields??[]).concat(...t));e.outFields=[...i]}export function getGlobalIdField(e){return e.fields.find((e=>"global-id"===e.type))?.name}export function isGlobalIdUsed(e,t){if(!e.capabilities.editing.supportsGlobalId)return!1;const i=getGlobalIdField(e);return!!i&&(t.addFeatures?.some((e=>!!e.attributes[i]))&&t.addFeatures?.every((e=>!!e.attributes[i])))}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vertigis/arcgis-extensions",
3
3
  "license": "SEE LICENSE IN LICENSE",
4
- "version": "37.4.0",
4
+ "version": "37.5.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://geocortex.visualstudio.com/Geocortex/_git/geocortex-api-ts"
package/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * The current version of the Geocortex ArcGIS Extensions API.
3
3
  */
4
- export declare const version = "37.4.0";
4
+ export declare const version = "37.5.0";
package/version.js CHANGED
@@ -1 +1 @@
1
- export const version="37.4.0";
1
+ export const version="37.5.0";