@vertigis/arcgis-extensions 53.4.1 → 53.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 (209) hide show
  1. package/AppConfig.schema.json +7 -0
  2. package/README.md +0 -1
  3. package/data/ArcGISServiceTableExtension.js +1 -1
  4. package/data/Feature.js +1 -1
  5. package/data/FeatureList.js +1 -1
  6. package/data/FeatureSettings.d.ts +1 -0
  7. package/data/FeatureSettings.js +1 -1
  8. package/data/FeatureSourceBase.d.ts +1 -0
  9. package/data/FeatureSourceBase.js +1 -1
  10. package/data/FieldExtension.d.ts +1 -0
  11. package/data/FieldExtension.js +1 -1
  12. package/data/PopupContentExtension.d.ts +1 -0
  13. package/data/PopupContentExtension.js +1 -1
  14. package/data/Schema.d.ts +4 -0
  15. package/data/Schema.js +1 -1
  16. package/data/_TableExtension.d.ts +6 -1
  17. package/data/_TableExtension.js +1 -1
  18. package/docs/html/assets/highlight.css +6 -6
  19. package/docs/html/assets/navigation.js +1 -1
  20. package/docs/html/assets/search.js +1 -1
  21. package/docs/html/classes/Entity.EntityBase.html +4 -3
  22. package/docs/html/classes/data_ArcGISServiceTableExtension.ArcGISServiceTableExtension.html +4 -3
  23. package/docs/html/classes/data_Attachment.Attachment.html +4 -3
  24. package/docs/html/classes/data_Feature.Feature.html +4 -3
  25. package/docs/html/classes/data_FeatureList.FeatureList.html +13 -34
  26. package/docs/html/classes/data_FeatureSettings.FeatureSettings.html +6 -4
  27. package/docs/html/classes/data_FeatureSourceBase.FeatureSourceBase.html +7 -6
  28. package/docs/html/classes/data_FeatureSourceBase.RelationshipCollection.html +13 -34
  29. package/docs/html/classes/data_FeatureStream.FeatureStream.html +4 -3
  30. package/docs/html/classes/data_FieldExtension.FieldExtension.html +7 -6
  31. package/docs/html/classes/data_PopupContentExtension.PopupContentExtension.html +6 -5
  32. package/docs/html/classes/data_RelationshipBase.RelationshipBase.html +4 -3
  33. package/docs/html/classes/data_Schema.Schema.html +7 -4
  34. package/docs/html/classes/data_TaskSettings.TaskSettings.html +6 -4
  35. package/docs/html/classes/data__TableExtension.TableExtension.html +4 -3
  36. package/docs/html/classes/data__TableExtension.TableFeatureSettings.html +6 -4
  37. package/docs/html/classes/data__TableExtension.TableSchema.html +8 -5
  38. package/docs/html/classes/layer_preset_LayerPreset.LayerPreset.html +4 -3
  39. package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerExtension.html +4 -6
  40. package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerRelationshipCollection.html +13 -34
  41. package/docs/html/classes/mapping_BasemapExtension.BasemapExtension.html +5 -7
  42. package/docs/html/classes/mapping_Bookmark.Bookmark.html +4 -3
  43. package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerExtension.html +4 -6
  44. package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerSchema.html +7 -4
  45. package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerExtension.html +4 -6
  46. package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerSchema.html +7 -4
  47. package/docs/html/classes/mapping_BuildingSceneLayerExtension.BuildingSceneLayerExtension.html +5 -8
  48. package/docs/html/classes/mapping_BuildingSceneLayerExtension.BuildingSceneLayerReadOnlySchema.html +7 -4
  49. package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerExtension.html +4 -6
  50. package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerFeatureSettings.html +6 -4
  51. package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerSchema.html +7 -4
  52. package/docs/html/classes/mapping_CSVLayerExtension.CSVLayerExtension.html +5 -8
  53. package/docs/html/classes/mapping_ElevationLayerExtension.ElevationLayerExtension.html +5 -8
  54. package/docs/html/classes/mapping_FeatureCollectionLayerExtension.FeatureCollectionLayerExtension.html +5 -8
  55. package/docs/html/classes/mapping_FeatureLayerExtension.FeatureLayerExtension.html +5 -8
  56. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerExtensionBase.html +5 -8
  57. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerReadOnlySchema.html +7 -4
  58. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerSchema.html +7 -4
  59. package/docs/html/classes/mapping_GeoJSONLayerExtension.GeoJSONLayerExtension.html +5 -8
  60. package/docs/html/classes/mapping_GeoRSSLayerExtension.GeoRSSLayerExtension.html +5 -8
  61. package/docs/html/classes/mapping_GraphicsLayerExtension.GraphicsLayerExtension.html +5 -8
  62. package/docs/html/classes/mapping_GroundExtension.GroundExtension.html +5 -7
  63. package/docs/html/classes/mapping_GroupLayerExtension.GroupLayerExtension.html +5 -8
  64. package/docs/html/classes/mapping_GroupLayerExtension.GroupLayerExtensionCollection.html +14 -35
  65. package/docs/html/classes/mapping_ImageryLayerExtension.ImageryLayerExtension.html +5 -8
  66. package/docs/html/classes/mapping_ImageryTileLayerExtension.ImageryTileLayerExtension.html +5 -8
  67. package/docs/html/classes/mapping_IntegratedMeshLayerExtension.IntegratedMeshLayerExtension.html +5 -8
  68. package/docs/html/classes/mapping_KMLLayerExtension.KMLLayerExtension.html +5 -8
  69. package/docs/html/classes/mapping_KMLSublayerExtension.KMLSublayerExtension.html +4 -6
  70. package/docs/html/classes/mapping_MapConstraints.MapConstraints.html +6 -4
  71. package/docs/html/classes/mapping_MapExtension.MapExtension.html +12 -7
  72. package/docs/html/classes/mapping_MapImageLayerExtension.MapImageLayerExtension.html +5 -8
  73. package/docs/html/classes/mapping_MapImageSublayerExtension.MapImageSublayerExtension.html +4 -6
  74. package/docs/html/classes/mapping_MapNotesLayerExtension.MapNotesLayerExtension.html +5 -8
  75. package/docs/html/classes/mapping_MapNotesSublayerExtension.MapNotesSublayerExtension.html +4 -6
  76. package/docs/html/classes/mapping_MapNotesSublayerExtension.MapNotesSublayerExtensionSchema.html +7 -4
  77. package/docs/html/classes/mapping_MediaLayerExtension.MediaLayerExtension.html +5 -8
  78. package/docs/html/classes/mapping_OpenStreetMapLayerExtension.OpenStreetMapLayerExtension.html +5 -8
  79. package/docs/html/classes/mapping_PointCloudLayerExtension.PointCloudLayerExtension.html +5 -8
  80. package/docs/html/classes/mapping_RouteLayerExtension.RouteLayerExtension.html +5 -8
  81. package/docs/html/classes/mapping_RouteLayerExtension.RouteLayerExtensionSchema.html +7 -4
  82. package/docs/html/classes/mapping_SceneLayerExtension.SceneLayerExtension.html +5 -8
  83. package/docs/html/classes/mapping_StreamLayerExtension.StreamLayerExtension.html +5 -8
  84. package/docs/html/classes/mapping_StreamLayerExtension.StreamLayerSchema.html +7 -4
  85. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerExtension.html +5 -8
  86. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerRelationshipCollection.html +13 -34
  87. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerSchema.html +7 -4
  88. package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerExtension.html +4 -6
  89. package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerRelationshipCollection.html +13 -34
  90. package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerSchema.html +7 -4
  91. package/docs/html/classes/mapping_TileLayerExtension.TileLayerExtension.html +5 -8
  92. package/docs/html/classes/mapping_TileSublayerExtension.TileSublayerExtension.html +4 -6
  93. package/docs/html/classes/mapping_UnsupportedLayerExtension.UnsupportedLayerExtension.html +5 -8
  94. package/docs/html/classes/mapping_VectorTileLayerExtension.VectorTileLayerExtension.html +5 -8
  95. package/docs/html/classes/mapping_WFSLayerExtension.WFSLayerExtension.html +5 -8
  96. package/docs/html/classes/mapping_WMSLayerExtension.WMSLayerExtension.html +5 -8
  97. package/docs/html/classes/mapping_WMSSublayerExtension.WMSSublayerExtension.html +4 -6
  98. package/docs/html/classes/mapping_WMTSLayerExtension.WMTSLayerExtension.html +5 -8
  99. package/docs/html/classes/mapping_WebTileLayerExtension.WebTileLayerExtension.html +5 -8
  100. package/docs/html/classes/mapping__LayerExtension.LayerExtension.html +5 -8
  101. package/docs/html/classes/mapping__LayerExtension.LayerExtensionReadOnlySchema.html +7 -4
  102. package/docs/html/classes/mapping__LayerExtension.LayerExtensionSchema.html +7 -4
  103. package/docs/html/classes/mapping__LayerExtensionCollectionImpl.LayerExtensionCollectionImpl.html +14 -35
  104. package/docs/html/classes/mapping__SublayerExtension.SubSublayerExtensionCollection.html +14 -35
  105. package/docs/html/classes/mapping__SublayerExtension.SublayerExtension.html +4 -6
  106. package/docs/html/classes/mapping__SublayerExtension.SublayerSchema.html +7 -4
  107. package/docs/html/classes/mapping_support_ArrayWrappedCollection.ArrayWrappedCollection.html +13 -34
  108. package/docs/html/classes/mapping_support__LayerExtensionCollection.LayerExtensionCollectionBase.html +16 -37
  109. package/docs/html/classes/mapping_support__SublayerExtensionCollection.SublayerExtensionCollectionBase.html +16 -37
  110. package/docs/html/classes/menus_Menu.Menu.html +4 -3
  111. package/docs/html/classes/menus_MenuItem.MenuItem.html +4 -3
  112. package/docs/html/classes/support_FormatSettings.FormatSettings.html +6 -4
  113. package/docs/html/classes/support_HandlesMixin.HandlesMixin.html +5 -0
  114. package/docs/html/classes/support_InitializableBase.InitializableBase.html +10 -9
  115. package/docs/html/classes/support_InitializableCollectionProxy.InitializableCollectionProxy.html +15 -35
  116. package/docs/html/classes/support_ReadOnlyInitializableCollection.ReadOnlyInitializableCollection.html +15 -35
  117. package/docs/html/classes/support_Settings.Settings.html +10 -8
  118. package/docs/html/classes/support__ArcGISRelationshipCollection.ArcGISRelationshipCollection.html +13 -34
  119. package/docs/html/classes/tasks_geocoding_ArcGISGeocoder.ArcGISGeocoder.html +3 -2
  120. package/docs/html/classes/tasks_geocoding_Geocoder.Geocoder.html +3 -2
  121. package/docs/html/classes/tasks_identify_IdentifyService.IdentifyService.html +4 -3
  122. package/docs/html/classes/tasks_query_ArcGISRelationship.ArcGISRelationship.html +4 -3
  123. package/docs/html/classes/tasks_query_QueryBasedRelationship.QueryBasedRelationship.html +4 -3
  124. package/docs/html/classes/tasks_query_QueryService.QueryService.html +4 -3
  125. package/docs/html/classes/tasks_search_SearchService.SearchService.html +4 -3
  126. package/docs/html/classes/utilities_CaseInsensitiveObservableMap.CaseInsensitiveObservableMap.html +6 -4
  127. package/docs/html/classes/utilities_CollectionProxy.CollectionProxy.html +16 -36
  128. package/docs/html/classes/utilities_CopyOnWriteCollection.CopyOnWriteCollection.html +13 -34
  129. package/docs/html/classes/utilities_MapTransformCollection.MapTransformCollection.html +13 -34
  130. package/docs/html/classes/utilities_ObservableMap.ObservableMap.html +8 -6
  131. package/docs/html/classes/utilities_ReadOnlyCollection.ReadOnlyCollection.html +15 -35
  132. package/docs/html/classes/utilities_ReadOnlyMap.ReadOnlyMap.html +6 -4
  133. package/docs/html/classes/utilities__ReferenceCountedHandle.default.html +3 -1
  134. package/docs/html/functions/support_HandlesMixin.handles.html +4 -0
  135. package/docs/html/functions/support_observableUtils.observable-1.html +3 -3
  136. package/docs/html/functions/support_observableUtils.onWatch.html +1 -1
  137. package/docs/html/functions/support_observableUtils.watch.html +1 -1
  138. package/docs/html/functions/support_observableUtils.watchEach.html +1 -1
  139. package/docs/html/functions/utilities__layers.groundsAreEquivalent.html +4 -0
  140. package/docs/html/functions/utilities_checkArg.checkArg.html +1 -1
  141. package/docs/html/interfaces/data_Feature.PresentableAttributes.html +6 -4
  142. package/docs/html/interfaces/data_support_attachments.AttachmentEnabledLayer.html +1 -1
  143. package/docs/html/interfaces/utilities_CollectionProxy.CollectionProxyOptions.html +4 -0
  144. package/docs/html/modules/support_HandlesMixin.html +3 -0
  145. package/docs/html/modules/utilities_CollectionProxy.html +1 -0
  146. package/docs/html/modules/utilities__layers.html +1 -0
  147. package/docs/html/modules.html +1 -0
  148. package/docs/html/variables/version.version.html +1 -1
  149. package/mapping/ArcGISSublayerExtension.js +1 -1
  150. package/mapping/BasemapExtension.d.ts +4 -6
  151. package/mapping/BasemapExtension.js +1 -1
  152. package/mapping/BuildingComponentSublayerExtension.d.ts +1 -0
  153. package/mapping/BuildingComponentSublayerExtension.js +1 -1
  154. package/mapping/BuildingSceneLayerExtension.d.ts +1 -1
  155. package/mapping/BuildingSceneLayerExtension.js +1 -1
  156. package/mapping/CSVLayerExtension.js +1 -1
  157. package/mapping/FeatureLayerExtension.js +1 -1
  158. package/mapping/FeatureLayerExtensionBase.d.ts +1 -0
  159. package/mapping/FeatureLayerExtensionBase.js +1 -1
  160. package/mapping/GeoJSONLayerExtension.js +1 -1
  161. package/mapping/GeoRSSLayerExtension.js +1 -1
  162. package/mapping/GraphicsLayerExtension.js +1 -1
  163. package/mapping/GroundExtension.d.ts +0 -6
  164. package/mapping/GroundExtension.js +1 -1
  165. package/mapping/GroupLayerExtension.d.ts +1 -0
  166. package/mapping/GroupLayerExtension.js +1 -1
  167. package/mapping/ImageryLayerExtension.js +1 -1
  168. package/mapping/MapExtension.d.ts +18 -0
  169. package/mapping/MapExtension.js +1 -1
  170. package/mapping/MapNotesSublayerExtension.js +1 -1
  171. package/mapping/PointCloudLayerExtension.js +1 -1
  172. package/mapping/RouteLayerExtension.js +1 -1
  173. package/mapping/SceneLayerExtension.js +1 -1
  174. package/mapping/StreamLayerExtension.d.ts +1 -0
  175. package/mapping/StreamLayerExtension.js +1 -1
  176. package/mapping/SubtypeGroupLayerExtension.d.ts +2 -1
  177. package/mapping/SubtypeGroupLayerExtension.js +1 -1
  178. package/mapping/SubtypeSublayerExtension.d.ts +2 -0
  179. package/mapping/SubtypeSublayerExtension.js +1 -1
  180. package/mapping/WFSLayerExtension.js +1 -1
  181. package/mapping/WMTSLayerExtension.js +1 -1
  182. package/mapping/_LayerExtension.d.ts +5 -7
  183. package/mapping/_LayerExtension.js +1 -1
  184. package/mapping/_SublayerExtension.d.ts +14 -6
  185. package/mapping/_SublayerExtension.js +1 -1
  186. package/mapping/support/ArrayWrappedCollection.js +1 -1
  187. package/mapping/support/_LayerExtensionCollection.d.ts +1 -0
  188. package/mapping/support/_LayerExtensionCollection.js +1 -1
  189. package/mapping/support/_SublayerExtensionCollection.d.ts +1 -0
  190. package/mapping/support/_SublayerExtensionCollection.js +1 -1
  191. package/package.json +1 -1
  192. package/support/HandlesMixin.d.ts +27 -0
  193. package/support/HandlesMixin.js +1 -0
  194. package/support/InitializableBase.d.ts +1 -1
  195. package/support/InitializableBase.js +1 -1
  196. package/support/Settings.d.ts +2 -2
  197. package/support/Settings.js +1 -1
  198. package/utilities/CollectionProxy.d.ts +22 -3
  199. package/utilities/CollectionProxy.js +1 -1
  200. package/utilities/MapTransformCollection.js +1 -1
  201. package/utilities/ObservableMap.d.ts +1 -1
  202. package/utilities/ObservableMap.js +1 -1
  203. package/utilities/ReadOnlyMap.js +1 -1
  204. package/utilities/_ReferenceCountedHandle.d.ts +4 -0
  205. package/utilities/_ReferenceCountedHandle.js +1 -1
  206. package/utilities/_layers.d.ts +10 -1
  207. package/utilities/_layers.js +1 -1
  208. package/version.d.ts +1 -1
  209. package/version.js +1 -1
@@ -105,6 +105,9 @@
105
105
  "@arcgis.core.core.Error.Error": {
106
106
  "description": "Error is a class that enhances the debugging and error handling process. Rather than returning a generic\n[JavaScript error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error),\nthis Error returns a standardized error object with several properties. The error class can be useful\nin many scenarios, such as working with promises, the [esriRequest](https://developers.arcgis.com/javascript/latest/references/core/request/) module, and many different layers and widgets."
107
107
  },
108
+ "@arcgis.core.core.Handles.Handles": {
109
+ "description": "This class helps manage a group of handles."
110
+ },
108
111
  "@arcgis.core.editing.sharedTemplates.SharedTemplateMetadata.SharedTemplateMetadata": {
109
112
  "description": "The `SharedTemplateMetadata` class represents a minimal set of\ninformation about a shared template. This is the information from\nthe the [`sharedTemplates/query` endpoint](https://developers.arcgis.com/rest/services-reference/enterprise/query-shared-templates/) of a feature service. By contrast, the [SharedTemplate](https://developers.arcgis.com/javascript/latest/references/core/editing/sharedTemplates/SharedTemplate/) class represents full information about a shared template, which is a larger payload obtained from the\n[`sharedTemplates/templates`\nendpoint](https://developers.arcgis.com/rest/services-reference/enterprise/fs-template/).\nUse the `SharedTemplateMetadata` class when you\nneed only minimal information about many shared templates, such as when\npopulating a gallery or picker interface. Use the [SharedTemplate](https://developers.arcgis.com/javascript/latest/references/core/editing/sharedTemplates/SharedTemplate/) class when\nyou need full information about a specific template, such as when a\nparticular template has been selected for use in a feature creation workflow."
110
113
  },
@@ -4097,6 +4100,9 @@
4097
4100
  "$ref": "#/definitions/FailureMode",
4098
4101
  "default": "warn"
4099
4102
  },
4103
+ "_handles": {
4104
+ "$ref": "#/definitions/@arcgis.core.core.Handles.Handles"
4105
+ },
4100
4106
  "_hideOnDisable": {
4101
4107
  "default": false,
4102
4108
  "type": "boolean"
@@ -4224,6 +4230,7 @@
4224
4230
  "_description",
4225
4231
  "_destroyPromise",
4226
4232
  "_failureMode",
4233
+ "_handles",
4227
4234
  "_hideOnDisable",
4228
4235
  "_iconId",
4229
4236
  "_id",
package/README.md CHANGED
@@ -1,4 +1,3 @@
1
1
  # Geocortex ArcGIS Extensions
2
2
 
3
3
  An API that adds Geocortex extensions to Esri's JavaScript API. It can be used as a standalone API, and is also an integral part of the Geocortex Web SDK. For more information on extending Geocortex Web, visit our [Developer Center](https://developers.geocortex.com/docs/web/overview).
4
-
@@ -1 +1 @@
1
- import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import r from"@arcgis/core/rest/support/AttachmentQuery.js";import{InvalidOperationError as s}from"../InvalidOperationError.js";import{toAttachment as i}from"../data/Attachment.js";import{PopupTemplateFeatureSettings as a}from"../mapping/support/PopupTemplateFeatureSettings.js";import{DefaultArcGISRequestHelper as l}from"../support/ArcGISRequestHelper.js";import{serializable as o}from"../support/Serializable.js";import{ArcGISRelationshipCollection as n}from"../support/_ArcGISRelationshipCollection.js";import{applyEdits as u}from"../support/_featureEdit.js";import{watch as p}from"../support/observableUtils.js";import{ReadOnlyCollection as c}from"../utilities/ReadOnlyCollection.js";import{getGdbVersion as h}from"../utilities/_version.js";import{isArcGISServiceTableExtension as m}from"../utilities/extensions.js";import{parse as d}from"../utilities/format/number.js";import{isFeatureLayer as b,isMapImageSublayer as y,isSubtypeGroupLayer as _}from"../utilities/layers.js";import{isNumeric as f}from"../utilities/number.js";import{TableExtension as g,TableSchema as j}from"./_TableExtension.js";import{addAttachment as I,deleteAttachments as w,supportsAttachmentEditing as x}from"./support/attachments.js";let S=class extends g{attachmentTypes;get requestHelper(){return this._requestHelper||(this._requestHelper=new l),this._requestHelper}set requestHelper(e){this._requestHelper=e}get capabilities(){const e=x(this.table);return this.table?.capabilities?.operations?{...this.table.capabilities.operations,supportsAttachmentEditing:e,supportsStandardizedQueries:this.table.capabilities?.query?.supportsStandardizedQueriesOnly}:{...super.capabilities,supportsAttachmentEditing:e}}get canChangeDefinitionExpression(){return!0}_requestHelper;async _getAttachments(e){if(!this.table?.capabilities?.data?.supportsAttachment)return[];const t=+e.primaryKey,s=this.table?.gdbVersion??h(this.table?.customParameters),a=new r({objectIds:[t]}),l=await this.table.queryAttachments(a);return l?.[t]?.length?l[t].map((e=>i(e,{gdbVersion:s}))):[]}async _addAttachment(e,t){return I(e,this.table,t,{attachmentTypes:this.attachmentTypes})}async _deleteAttachments(e,t){return w(e,this.table,t)}get _layerUrl(){return f(this.table.layerId)?`${this.table.url}/${this.table.layerId}`:this.table.url}async*_getFeatures(e,t){const r=this.table.createQuery();r.objectIds=e.map((e=>d(e))),r.where=void 0,r.outFields=t.outFields,r.returnGeometry=t.returnGeometry,yield*(await import("../support/_query.js")).executeQuery(r,this,this.table,t.cancelToken)}async _addFeatures(e,t){await u({adds:e},this.table,t)}async _updateFeatures(e,t){await u({updates:e},this.table,t)}async _deleteFeatures(e,t){await u({deletes:e},this.table,t)}async _onInitialize(){await super._onInitialize(),await this.relationships.initialize()}_isSupportedTable(e){return!e.loaded||e.isTable}_createFeatureSettings(){return new z(this)}_createRelationships(){return new A(this)}_createSchema(){return new E(this)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,attachmentTypes:["initial"],table:{...this._toPropertyDef(e.table),default:{}},requestHelper:{serialize:!1}}}};S=e([o],S);export{S as ArcGISServiceTableExtension};class T extends c{constructor(e){super(),e.table?this._onTableResolved(e.table):(this._collection=new t,p(e,"table",(()=>{this._onTableResolved(e.table)}),{sync:!0,once:!0}))}_onTableResolved(e){this._collection=new t(e.types)}}let E=class extends j{_typeCollection;constructor(e){super(e),this._typeCollection=new T(e),this._bindSettingToTableProperty("displayField"),this._bindSettingToTableProperty("typeIdField")}get types(){return this._typeCollection}_setSetting(e,t){if(this._tableBindings.has(e))throw new s("This schema property is read-only.");super._setSetting(e,t)}_createFieldCollection(){return new c(super._createFieldCollection())}};E=e([o],E);let z=class extends a{};z=e([o],z);class A extends n{get _sourceUrl(){if(this._source.table?.url)return f(this._source.table.layerId)?`${this._source.table.url}/${this._source.table.layerId}`:this._source.table.url}get _sourceLayerId(){return this._source.table?.layerId}_findRelatedSource(e){if(!this._source.mapExtension||!this._source.table?.url)return;const t=this._source.mapExtension.tableExtensions.initializedItems.find((t=>m(t)&&t.table.url===this._source.table.url&&t.table.layerId===e));if(t)return t;for(const t of this._source.mapExtension.allLayerExtensions.initializedItems.toArray()){const r=t.allSublayerExtensions.initializedItems.find((t=>y(t.sublayer)&&t.sublayer.layer.url===this._source.table.url&&t.sublayer.id===e));if(r)return r}return this._source.mapExtension.allLayerExtensions.initializedItems.find((t=>(b(t.layer)||_(t.layer))&&t.layer.url===this._source.table.url&&t.layer.layerId===e))}}
1
+ import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import s from"@arcgis/core/rest/support/AttachmentQuery.js";import{InvalidOperationError as r}from"../InvalidOperationError.js";import{toAttachment as i}from"../data/Attachment.js";import{PopupTemplateFeatureSettings as a}from"../mapping/support/PopupTemplateFeatureSettings.js";import{DefaultArcGISRequestHelper as l}from"../support/ArcGISRequestHelper.js";import{serializable as o}from"../support/Serializable.js";import{ArcGISRelationshipCollection as n}from"../support/_ArcGISRelationshipCollection.js";import{applyEdits as u}from"../support/_featureEdit.js";import{watch as p}from"../support/observableUtils.js";import{ReadOnlyCollection as c}from"../utilities/ReadOnlyCollection.js";import{getGdbVersion as h}from"../utilities/_version.js";import{isArcGISServiceTableExtension as d}from"../utilities/extensions.js";import{parse as m}from"../utilities/format/number.js";import{isFeatureLayer as b,isMapImageSublayer as y,isSubtypeGroupLayer as _}from"../utilities/layers.js";import{isNumeric as f}from"../utilities/number.js";import{TableExtension as g,TableSchema as j}from"./_TableExtension.js";import{addAttachment as I,deleteAttachments as w,supportsAttachmentEditing as x}from"./support/attachments.js";let S=class extends g{attachmentTypes;get requestHelper(){return this._requestHelper||(this._requestHelper=new l),this._requestHelper}set requestHelper(e){this._requestHelper=e}get capabilities(){const e=x(this.table);return this.table?.capabilities?.operations?{...this.table.capabilities.operations,supportsAttachmentEditing:e,supportsStandardizedQueries:this.table.capabilities?.query?.supportsStandardizedQueriesOnly}:{...super.capabilities,supportsAttachmentEditing:e}}get canChangeDefinitionExpression(){return!0}_requestHelper;async _getAttachments(e){if(!this.table?.capabilities?.data?.supportsAttachment)return[];const t=+e.primaryKey,r=this.table?.gdbVersion??h(this.table?.customParameters),a=new s({objectIds:[t]}),l=await this.table.queryAttachments(a);return l?.[t]?.length?l[t].map((e=>i(e,{gdbVersion:r}))):[]}async _addAttachment(e,t){return I(e,this.table,t,{attachmentTypes:this.attachmentTypes})}async _deleteAttachments(e,t){return w(e,this.table,t)}get _layerUrl(){return f(this.table.layerId)?`${this.table.url}/${this.table.layerId}`:this.table.url}async*_getFeatures(e,t){const s=this.table.createQuery();s.objectIds=e.map((e=>m(e))),s.where=void 0,s.outFields=t.outFields,s.returnGeometry=t.returnGeometry,yield*(await import("../support/_query.js")).executeQuery(s,this,this.table,t.cancelToken)}async _addFeatures(e,t){await u({adds:e},this.table,t)}async _updateFeatures(e,t){await u({updates:e},this.table,t)}async _deleteFeatures(e,t){await u({deletes:e},this.table,t)}async _onInitialize(){await super._onInitialize(),await this.relationships.initialize()}_isSupportedTable(e){return!e.loaded||e.isTable}_createFeatureSettings(){return new z(this)}_createRelationships(){return new A(this)}_createSchema(){return new E(this)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,attachmentTypes:["initial"],table:{...this._toPropertyDef(e.table),default:{}},requestHelper:{serialize:!1}}}};S=e([o],S);export{S as ArcGISServiceTableExtension};class T extends c{constructor(e){super(),e.table?this._onTableResolved(e.table):(this._collection=new t,this._handles.add(p(e,"table",(()=>{this._onTableResolved(e.table)}),{sync:!0,once:!0})))}_onTableResolved(e){this._collection=new t(e.types)}}let E=class extends j{_typeCollection;constructor(e){super(e),this._typeCollection=new T(e),this._bindSettingToTableProperty("displayField"),this._bindSettingToTableProperty("typeIdField")}destroy(){this._typeCollection.destroy(),super.destroy()}get types(){return this._typeCollection}_setSetting(e,t){if(this._tableBindings.has(e))throw new r("This schema property is read-only.");super._setSetting(e,t)}_createFieldCollection(){return new c(super._createFieldCollection(),{destroyBackingCollection:!0})}};E=e([o],E);let z=class extends a{};z=e([o],z);class A extends n{get _sourceUrl(){if(this._source.table?.url)return f(this._source.table.layerId)?`${this._source.table.url}/${this._source.table.layerId}`:this._source.table.url}get _sourceLayerId(){return this._source.table?.layerId}_findRelatedSource(e){if(!this._source.mapExtension||!this._source.table?.url)return;const t=this._source.mapExtension.tableExtensions.initializedItems.find((t=>d(t)&&t.table.url===this._source.table.url&&t.table.layerId===e));if(t)return t;for(const t of this._source.mapExtension.allLayerExtensions.initializedItems.toArray()){const s=t.allSublayerExtensions.initializedItems.find((t=>y(t.sublayer)&&t.sublayer.layer.url===this._source.table.url&&t.sublayer.id===e));if(s)return s}return this._source.mapExtension.allLayerExtensions.initializedItems.find((t=>(b(t.layer)||_(t.layer))&&t.layer.url===this._source.table.url&&t.layer.layerId===e))}}
package/data/Feature.js CHANGED
@@ -1 +1 @@
1
- import{__decorate as e}from"tslib";import t from"@arcgis/core/Graphic";import s from"@arcgis/core/core/Collection";import{fromJSON as i}from"@arcgis/core/geometry/support/jsonUtils";import{EntityBase as r}from"../Entity.js";import{Hyperlink as a}from"../Hyperlink.js";import{InvalidOperationError as o}from"../InvalidOperationError.js";import{isLayerExtension as n,isTableExtension as l,ItemType as h}from"../ItemType.js";import{serializable as u}from"../support/Serializable.js";import{createIHandle as p,notifyChange as c,onWatch as m,watch as f,watchEvent as d}from"../support/observableUtils.js";import{CaseInsensitiveObservableMap as g}from"../utilities/CaseInsensitiveObservableMap.js";import{MapTransformCollection as y}from"../utilities/MapTransformCollection.js";import{ObservableMap as _}from"../utilities/ObservableMap.js";import{ReadOnlyMap as b}from"../utilities/ReadOnlyMap.js";import{Time as F}from"../utilities/Time.js";import{flatten as x,groupBy as w}from"../utilities/array.js";import{checkArg as v}from"../utilities/checkArg.js";import{compare as I}from"../utilities/collection.js";import{isCodedValueDomain as S,isGeometry as z}from"../utilities/esri.js";import{getArcadeExpressionFromField as E,getRelationshipFromField as A,isArcadeExpressionField as j}from"../utilities/field.js";import{parse as T,esriFormatToGeocortexFormat as k}from"../utilities/format/date.js";import{NumberFormat as R}from"../utilities/format/formats.js";import{parse as O}from"../utilities/format/number.js";import{format as M}from"../utilities/format/string.js";import{parse as N,esriFormatToGeocortexFormat as D}from"../utilities/format/time.js";import{map as V,find as U}from"../utilities/iterable.js";import{getLogger as P}from"../utilities/log.js";import{map as C}from"../utilities/promise.js";import{caseInsensitiveEquals as G}from"../utilities/string.js";import{FeatureSettings as L}from"./FeatureSettings.js";import{Schema as Z}from"./Schema.js";const $=P("geocortex.api.data.Feature");export const SCORE_FIELD="_score";export const SCORE_FIELD_ORIGINAL="_score_original";let H=class extends r{attributes;get geometry(){return this._geometry}set geometry(e){this._geometry=z(e)||!e?e:i(e),this.schema.spatialReference=this._geometry?.spatialReference,c(this,"geometryType")}settings;schema;attachments;expressionFieldValues;_itemType=h.FEATURE;get geometryType(){return this.geometry?this.geometry.type:void 0}get source(){return this._source}set source(e){this._source===e||null==this._source&&null==e||(this._source&&this.settings.parent===this._source.featureSettings&&(this.settings.parent=void 0),this._source&&this.schema.parent===this._source.schema&&(this.schema.parent=void 0),this._source=e,this.settings.parent||(this.settings.parent=e?e.featureSettings:void 0),this.schema.parent||(this.schema.parent=e?e.schema:void 0),c(this,"attachmentsInitialized"),c(this,"relatedFeaturesInitialized"))}get primaryKey(){const e=this.attributes.get(this.schema.primaryKeyField);return null!=e?`${e}`:void 0}get hasGlobalId(){return!!this.schema.fields.find((e=>"global-id"===e.type))}get globalId(){const e=this.schema.fields.find((e=>"global-id"===e.type));return e?this.attributes.get(e.name):void 0}set globalId(e){const t=this.schema.fields.find((e=>"global-id"===e.type));if(!t)throw new o("Cannot set global ID on feature -- no global ID field.");this.attributes.set(t.name,e)}get presentableAttributes(){return null==this._presentableAttributes&&(this._presentableAttributes=new B(this)),this._presentableAttributes}get title(){return this.format(this._title||"")}get description(){return this.format(this._description)}get hyperlinks(){return this._hyperlinks||(this._hyperlinks=new se(this))}get relatedFeatures(){return this._relatedFeatures}get type(){if(this.schema.typeIdField&&this.attributes.has(this.schema.typeIdField)){const e=this.attributes.get(this.schema.typeIdField);return this.schema.types.find((t=>t.id===e))}}get attachmentsInitialized(){return!this.source||this._attachmentsInitialized}get relatedFeaturesInitialized(){return!this.source||this.source.relationships.every((e=>this._initializedRelationships.has(e)))}get expressionsInitialized(){return!this.settings.popupTemplate?.expressionInfos?.length||this._expressionsInitialized}get _hydrationStatus(){return this._featureHydrationStatus?this._featureHydrationStatus:this.source?.capabilities?.supportsQuery&&1===this.attributes.size&&void 0!==this.primaryKey?"dehydrated":"hydrated"}set _hydrationStatus(e){this._featureHydrationStatus=e}get _key(){return`${this.source?.id}//${this.primaryKey??this.globalId??this.id}`}get _title(){let e;return this.settings.popupTemplate&&(e="function"==typeof this.settings.popupTemplate.title?this.settings.popupTemplate.title():this.settings.popupTemplate.title),e||this.schema.displayField&&this.presentableAttributes.get(this.schema.displayField)||""}get _description(){if(this.settings.popupTemplate?.content){if("string"==typeof this.settings.popupTemplate.content)return this.settings.popupTemplate.content;if(Array.isArray(this.settings.popupTemplate.content)){const e=this.settings.popupTemplate.content.find((e=>"text"===e.type));if(e)return e.text}}return""}_geometry;_source;_presentableAttributes;_hyperlinks;_featureHydrationStatus;_relatedFeatures;_expressionFieldValues=new _;_expressionValuesUpdatePending=!1;_attachmentsInitialized=!1;_expressionsInitialized=!1;_initializedRelationships=new WeakSet;constructor(e){super(e),this.settings=new L,this.settings._setFeature(this),this.schema=new Z,this.schema._featureSettings=this.settings,this.attachments=new s,this.attributes=new g,this._relatedFeatures=new _,this.expressionFieldValues=new Q(this._expressionFieldValues,this),f(this.settings,"popupTemplate",(()=>{this._expressionsInitialized=!1,c(this,"expressionsInitialized")}),{sync:!0}),m(this,"title",(()=>{const e=f(this.settings,"popupTemplate.title",(()=>c(this,"title")),{sync:!0}),t=this.presentableAttributes.on("change",(()=>c(this,"title")));return p([e,t])})),m(this,"description",(()=>{const e=f(this.settings,"popupTemplate.content",(()=>c(this,"description")),{sync:!0}),t=this.presentableAttributes.on("change",(()=>c(this,"description")));return p([e,t])})),m(this,"relatedFeaturesInitialized",(()=>d(this,"source.relationships",["after-changes",()=>{c(this,"relatedFeaturesInitialized")}])))}format(e,...t){let s="string"==typeof e?{format:e}:e;v("options",s).isNotMissing();const{format:i}=s;v("format",i).isNotMissing();let r=s.format.replace(X,Y);return r=r.replace(W,((e,t,i,r,a)=>re(this,t||i,r,{...s,format:a?`{0:${a}}`:"{0}"}))),r=r.replace(ee,"{{"),s={...s},s.format=r,M(s,...t)}clearExpressionInfos(){this._expressionFieldValues.clear()}toGraphic(){return toGraphic(this)}async fetchExpressionInfos(e=!1){const{expressionInfos:t}=this.settings.popupTemplate??{};if(!t)return;const{runAsyncArcadeExpression:s}=await import("../utilities/arcade.js");if(await Promise.all(t.map((async e=>{try{const t=this.source?.layer??this.source?.sublayer;let i=this.source?.mapExtension;if(!i){const e=this.source?.layerExtension;i=e?.mapExtension}this._expressionFieldValues.set(e.name,await s(e.expression,{layer:t,map:i?.map,feature:this,spatialReference:this.schema.spatialReference}))}catch(t){t instanceof Error&&$.error({message:"Error evaluating expression '{0}': {1}.",error:t},e.name,t.message),this._expressionFieldValues.set(e.name,te)}}))),e)return this.attributes.on("change",(async e=>{this._expressionValuesUpdatePending||(this._expressionValuesUpdatePending=!0,setTimeout((async()=>{this._expressionValuesUpdatePending=!1,await this.fetchExpressionInfos()}),0))}));this._expressionsInitialized=!0,c(this,"expressionsInitialized")}async fetchRelatedFeatures(e,t){if(!this.source)return;let s=[];if(e){const t=new Set(Array.isArray(e)?e:[e]);for(const e of t){const t="string"==typeof e?this.source.relationships.find((t=>t.id===e)):e;if(!t||!this.source.relationships.includes(t))throw new o("Relationship not found in feature source.");s.push(t)}}else s=this.source.relationships.toArray();const i=await C(s,(async e=>[e,await(async()=>{const s=await e.getRelatedFeatures(this,t);return this._initializedRelationships.add(e),s})()]));for(const e of i)this._relatedFeatures.set(e[0],e[1]);c(this,"relatedFeaturesInitialized")}async fetchAttachments(){if(this.source){const e=await this.source.getAttachments(this);I(this.attachments,e,{equals:(e,t)=>e.id===t.id,onMissing:(e,t)=>{this.attachments.remove(e)},onNew:(e,t)=>{this.attachments.add(e)},onMatch:(e,t,s,i)=>{this.attachments.splice(s,1,t)}}),this._attachmentsInitialized=!0,c(this,"attachmentsInitialized")}}async addAttachment(e){return this.source?.addAttachment(this,e)}async deleteAttachments(e){return this.source?.deleteAttachments(this,e)}_getSerializableProperties(){return{...super._getSerializableProperties(),attributes:{serializeModes:["project"],serialize:e=>{const t={};if("project"===e&&this.primaryKey&&(this.source?.capabilities).supportsQuery)t[this.schema.primaryKeyField]=this.primaryKey;else for(const[e,s]of this.attributes.entries())t[e]=s;return t},deserialize:e=>{if(this.attributes.clear(),e instanceof Map||e instanceof _)e.forEach(((e,t)=>{this.attributes.set(t,e)}));else for(const[t,s]of Object.entries(e))this.attributes.set(t,s)}},geometry:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("geometry"):this.geometry?.toJSON(),deserialize:e=>{z(e)?this.geometry=e:this.geometry=e?i(e):void 0}},settings:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("settings"):this.settings.toJSON(e)},schema:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("schema"):this.schema.toJSON(e)},source:["project"]}}async _onInitialize(){const e=this._findRelationshipIds(this._title,this._description),t=this.source?this.source.relationships.map((e=>e.id)).toArray():[],s=[];for(const i of e)t.includes(i)?s.push(this.fetchRelatedFeatures(i)):$.error("Could not find relationship '{0}' referenced in feature title or description.",i);await Promise.all(s)}_findRelationshipIds(...e){const t=[];for(const s of e){let e;const i=s.replace(X,Y);for(;e=q.exec(i),null!==e;){const s=e[0];t.includes(s)||t.push(e[1])}}return t}};H=e([u],H);export{H as Feature};export function toFeature(e,t){const s=new H(t);if(e.attributes){const t=e.attributes;for(const[e,i]of Object.entries(t))s.attributes.set(e,i)}return s.geometry=e.geometry,e.popupTemplate&&(s.settings.popupTemplate=e.popupTemplate),s}export function toGraphic(e){const s=new t;s.attributes={};for(const t of e.attributes.keys())s.attributes[t]=e.attributes.get(t);return n(e.source)&&e.source.layer&&(s.layer=e.source.layer),l(e.source)&&e.source.table&&(s.layer=e.source.table),s.geometry=e.geometry,e.settings.popupTemplate&&(s.popupTemplate=e.settings.popupTemplate),s}const K="Presentable attributes are read-only.",J="Feature hyperlinks are read-only. Modify the feature's hyperlink templates instead.";class Q extends b{_feature;_pending=new Set;constructor(e,t){super(e),this._feature=t}get(e){return super.has(e)||this._calcExpressionValue(e),super.get(e)}async _calcExpressionValue(e){if(!this._pending.has(e)){this._pending.add(e);try{const{spatialReference:t}=this._feature.schema,s=this._feature.settings.popupTemplate?.expressionInfos?.find((t=>t.name===e));if(!s)return;const{isArcadeScriptAsync:i,runAsyncArcadeExpression:r,arcadeScriptUsesGeometry:a,runArcadeExpression:o}=await import("../utilities/arcade.js");try{if(i(s.expression,t)){const i=this._feature.source?.layer??this._feature.source?.sublayer;let a=this._feature.source?.mapExtension;if(!a){const e=this._feature.source?.layerExtension;a=e?.mapExtension}this._originalMap.set(e,await r(s.expression,{feature:this._feature,layer:i,map:a?.map,spatialReference:t}))}else{if(a(s.expression,t)){const{enableGeometrySupport:e}=await import("@arcgis/core/arcade/arcade");await e()}this._originalMap.set(e,o(s.expression,{feature:this._feature,spatialReference:t}))}}catch(t){t instanceof Error&&$.error({message:"Error evaluating expression '{0}': {1}.",error:t},e,t.message),this._originalMap.set(e,te)}}finally{this._pending.delete(e)}}}}class B extends b{get size(){return this._feature.attributes.size+this._feature.schema.fields._expressionFieldsLength}_feature;_numObservers;_onAllObserversRemoved;constructor(e){super(new g),this._feature=e,m(this,"size",(()=>f(this._feature.attributes,"size",(()=>c(this,"size")),{sync:!0}))),m(this,"size",(()=>f(this._feature.schema.fields,"_expressionFieldsLength",(()=>c(this,"size")),{sync:!0})))}clear(){throw new o(K)}delete(e){throw new o(K)}forEach(e,t){v("callback",e).isNotMissing();for(const s of this.keys())e.call(t,this.get(s),s,this)}get(e){const t=this._getFieldExtensionFormat(e);return this._formatAttribute(e,t)}has(e){for(const t of this.keys())if(G(t,e))return!0;return!1}set(...e){throw new o(K)}*entries(){yield*V(this.keys(),(e=>[e,this.get(e)]))}*keys(){yield*this._feature.attributes.keys();for(const e of this._feature.schema.fields.expressionFields)yield e.name;if(null!=this._feature.source?.relationships)for(const e of this._feature.source.relationships)if("one-to-one"===e.cardinality||"many-to-one"===e.cardinality)for(const t of e.relatedSource.schema.fields)yield`relationships/${e.id}/${t.name}`}*values(){yield*V(this.keys(),(e=>this.get(e)))}[Symbol.iterator](){return this.entries()}toJSON(){return Array.from(this.entries())}on(e,t){if(v("callback",t).isNotMissing(),!this._numObservers){const e=new Map,t=new Set,s=()=>{for(const e of t)e.remove();t.clear()};let i;const r=()=>{const t=()=>{i&&(window.clearTimeout(i),i=void 0)};t(),i=window.setTimeout((()=>{const s=[],i=[];for(const[t,i]of this.entries())i!==e.get(t)&&s.push([t,i]);for(const[t,s]of e.entries())this.has(t)&&s===this.get(t)||i.push([t,s]);if(s.length||i.length){const e={added:s,removed:i,target:this};if(this.hasEventListener("after-add"))for(const e of s)this.emit("after-add",{target:this,item:e});if(this.hasEventListener("after-remove"))for(const e of i)this.emit("after-remove",{target:this,item:e});this.emit("change",e),a()}t()}))},a=()=>{e.clear(),s();for(const s of this.keys()){const i=this._getFieldExtension(s);let a="{0}";if(i){const e=f(i,"format",r);t.add(e),i.format&&(a=i.format)}e.set(s,this._formatAttribute(s,a))}};a();const o=this._feature.attributes.on("change",r),n=this._feature.schema.fieldExtensions.on("change",r),l=[f(this._feature.settings.formatSettings,"numberFormat",r),f(this._feature.settings.formatSettings,"dateFormat",r),f(this._feature.settings.formatSettings,"timeFormat",r),f(this._feature.settings.formatSettings,"locale",r)],h=this._feature.expressionFieldValues.on("change",r),u=this._feature.schema.fields.on("change",(e=>{(e.added?.some((e=>j(e.name)))||e.removed?.some((e=>j(e.name))))&&r()})),p=f(this._feature.settings,"popupTemplate",r);this._onAllObserversRemoved=()=>{h.remove(),o.remove(),n.remove(),u.remove();for(const e of l)e.remove();p.remove(),e.clear(),s()}}const s=super.on(e,t);return this._numObservers++,{remove:()=>{s.remove(),this._numObservers--,this._numObservers||this._onAllObserversRemoved()}}}_getFieldExtension(e){const t=this._feature.schema.findFieldByName(e);if(t)return this._feature.schema.fieldExtensions.forField(t)}_getFieldExtensionFormat(e){const t=this._getFieldExtension(e);return t?t.format:"{0}"}_formatAttribute(e,t){const s=E(e);if(null!=s)return re(this._feature,"expression",s,{format:t});const[i,r]=A(e);return null!=i?re(this._feature,i,r,{format:t}):re(this._feature,void 0,e,{format:t})}}const W=/\{(?:relationships[\\/]([\w-]*)[\\/])?(?:(expression)[\\/])?([_a-zA-ZÀ-ÖØ-öø-ÿ][._a-zA-ZÀ-ÖØ-öø-ÿ0-9()]*)(?::([^}]*))?\}/gi,q=/\{relationships\/([\w-]*)[\\/]([^}]*)\}/gi,X=/{{/g,Y="\0MAGIC\0",ee=new RegExp(Y,"g"),te="#INVALID";class se extends y{_feature;_hyperlinks;constructor(e){super(e.settings.hyperlinkTemplates,(e=>this._getHyperlink(e))),this._feature=e}_getHyperlink(e){return null==this._hyperlinks&&(this._hyperlinks=new WeakMap),this._hyperlinks.has(e)||this._hyperlinks.set(e,new ie(this._feature,e)),this._hyperlinks.get(e)}}let ie=class extends a{get url(){return this._template.url?this._feature.format(this._template.url):this._template.url}set url(e){throw new o(J)}get text(){return this._template.text?this._feature.format(this._template.text):this._template.text}set text(e){throw new o(J)}get iconUrl(){return this._template.iconUrl?this._feature.format(this._template.iconUrl):this._template.iconUrl}set iconUrl(e){throw new o(J)}get target(){return this._template.target?this._feature.format(this._template.target):this._template.target}set target(e){throw new o(J)}get tooltip(){return this._template.tooltip?this._feature.format(this._template.tooltip):this._template.tooltip}set tooltip(e){throw new o(J)}_feature;_template;constructor(e,t){super(t.toJSON()),this._feature=e,this._template=t,m(this,(e=>{const t=f(this._template,e,(()=>c(this,e)),{sync:!0}),s=this._feature.presentableAttributes.on("change",(()=>{c(this,e)})),i=this._feature.relatedFeatures.on("change",(()=>{c(this,e)}));return p([t,s,i])}))}_getSerializableProperties(){return{}}};function re(e,t,s,i={format:"{0}"}){if(!G(t,"expression")){if(t){const r=U(e.relatedFeatures.keys(),(e=>G(e.id,t)));if(!r)return $.debug("Could not resolve related field '{0}/{1}",t,s),te;const a=Array.from(e.relatedFeatures.get(r));return"many-to-one"===r.cardinality||"one-to-one"===r.cardinality?a.length<1?($.debug("Could not resolve related field '{0}/{1}",t,s),te):ae(a[0],s,i):a.map((e=>ae(e,s,i))).filter((e=>""!==e)).join(",")}return ae(e,s,i)}if(!e.settings.popupTemplate?.expressionInfos?.find((e=>G(e.name,s))))return $.debug("Could not find expression '{0}'.",s),te;try{const t=e.expressionFieldValues.get(s)??i.defaultExpressionValue??"",r=e.schema.findFieldByName(`expression/${s}`),a=null==r?void 0:e.schema.fieldExtensions.forField(r);return oe(e,t,s,a?.formatSettings,i)}catch(e){if(e instanceof Error)return $.error({message:"Error evaluating expression '{0}': {1}.",error:e},s,e.message),te;throw e}}function ae(e,t,s){let i;if(i=e.attributes.get(t),null==i)return"";const r=e.schema.findFieldByName(t),a=e.type?.domains?.[r?.name??t],o=e=>e.codedValues?.find((e=>e.code.toString()===i.toString()))?.name??i;let n;if(G(t,e.schema.typeIdField)){const t=a&&"inherited"!==a.type?a:r?.domain;i="coded-value"===t?.type?o(t):e.type?.name??i}else if(a&&S(a))i=o(a);else if(r?.domain&&S(r.domain))i=o(r.domain);else if(r){switch(r.type){case"integer":case"small-integer":case"big-integer":case"single":case"double":i=O(i);break;case"date":i=T({timeZone:e.schema.timeZone},i);break;case"timestamp-offset":case"date-only":i=T({},i),"date-only"===r.type&&(s.isDateOnly=!0);break;case"time-only":i=N(i);break;default:i=`${i.toString()}`}const t=e.schema.fieldExtensions.forField(r);t&&(n=t.formatSettings)}return oe(e,i,t,n,s)}function oe(e,t,s,i,r){if("string"==typeof t&&(null==r.format||"{0}"===r.format))return t;const a={...r};if("number"==typeof t||t instanceof Date||t instanceof F){null==a.locale&&(a.locale=i?.locale??e.settings.formatSettings.locale);const r=e.settings.popupTemplate?.fieldInfos?.find((e=>G(e.fieldName,s)))?.format;"number"==typeof t?function(e,t,s,i){null==e.currency&&(e.currency=t?.currency??i.settings.formatSettings.currency);null==e.numberFormat&&(e.numberFormat=t?.numberFormat,null==e.numberFormat&&(e.numberFormat=null==s?i.settings.formatSettings.numberFormat:s.digitSeparator?R.NUMBER:R.FIXED_POINT));null==e.fractionalDigits&&(e.fractionalDigits=t?.fractionalDigits,null==e.fractionalDigits&&(e.fractionalDigits=null==s?i.settings.formatSettings.fractionalDigits:s.places))}(a,i,r,e):t instanceof Date?function(e,t,s,i){null==e.dateFormat&&(e.dateFormat=t?.dateFormat,null==e.dateFormat&&(e.dateFormat=null==s?i.settings.formatSettings.dateFormat:k(s.dateFormat)));null==e.timeZone&&(e.timeZone=t?.timeZone??i.settings.formatSettings.timeZone)}(a,i,r,e):function(e,t,s,i){null==e.timeFormat&&(e.timeFormat=t?.timeFormat,null==e.timeFormat&&(e.timeFormat=null==s?i.settings.formatSettings.timeFormat:D(s.dateFormat)))}(a,i,r,e)}return M(a,t)}ie=e([u],ie);export async function resolveRelatedFeatures(e){const t=w(e,(e=>e.source));await Promise.all(x([...t.keys()].map((e=>e.relationships.toArray()))).map((e=>(async e=>{[...(await e.getAllRelatedFeatures(t.get(e.source))).entries()].forEach((([t,s])=>{t.relatedFeatures.set(e,s)}))})(e))))}
1
+ import{__decorate as e}from"tslib";import t from"@arcgis/core/Graphic";import s from"@arcgis/core/core/Collection";import{fromJSON as i}from"@arcgis/core/geometry/support/jsonUtils";import{EntityBase as r}from"../Entity.js";import{Hyperlink as a}from"../Hyperlink.js";import{InvalidOperationError as o}from"../InvalidOperationError.js";import{isLayerExtension as n,isTableExtension as l,ItemType as h}from"../ItemType.js";import{handles as u}from"../support/HandlesMixin.js";import{serializable as p}from"../support/Serializable.js";import{createIHandle as c,notifyChange as m,onWatch as f,watch as d,watchEvent as g}from"../support/observableUtils.js";import{CaseInsensitiveObservableMap as y}from"../utilities/CaseInsensitiveObservableMap.js";import{MapTransformCollection as _}from"../utilities/MapTransformCollection.js";import{ObservableMap as b}from"../utilities/ObservableMap.js";import{ReadOnlyMap as x}from"../utilities/ReadOnlyMap.js";import{Time as F}from"../utilities/Time.js";import{flatten as w,groupBy as v}from"../utilities/array.js";import{checkArg as I}from"../utilities/checkArg.js";import{compare as S}from"../utilities/collection.js";import{isCodedValueDomain as z,isGeometry as A}from"../utilities/esri.js";import{getArcadeExpressionFromField as E,getRelationshipFromField as j,isArcadeExpressionField as T}from"../utilities/field.js";import{esriFormatToGeocortexFormat as k,parse as R}from"../utilities/format/date.js";import{NumberFormat as O}from"../utilities/format/formats.js";import{parse as M}from"../utilities/format/number.js";import{format as N}from"../utilities/format/string.js";import{esriFormatToGeocortexFormat as D,parse as V}from"../utilities/format/time.js";import{find as U,map as P}from"../utilities/iterable.js";import{getLogger as C}from"../utilities/log.js";import{map as G}from"../utilities/promise.js";import{caseInsensitiveEquals as H}from"../utilities/string.js";import{FeatureSettings as L}from"./FeatureSettings.js";import{Schema as Z}from"./Schema.js";const $=C("geocortex.api.data.Feature");export const SCORE_FIELD="_score";export const SCORE_FIELD_ORIGINAL="_score_original";let K=class extends r{attributes;get geometry(){return this._geometry}set geometry(e){this._geometry=A(e)||!e?e:i(e),this.schema.spatialReference=this._geometry?.spatialReference,m(this,"geometryType")}settings;schema;attachments;expressionFieldValues;_itemType=h.FEATURE;get geometryType(){return this.geometry?this.geometry.type:void 0}get source(){return this._source}set source(e){this._source===e||null==this._source&&null==e||(this._source&&this.settings.parent===this._source.featureSettings&&(this.settings.parent=void 0),this._source&&this.schema.parent===this._source.schema&&(this.schema.parent=void 0),this._source=e,this.settings.parent||(this.settings.parent=e?e.featureSettings:void 0),this.schema.parent||(this.schema.parent=e?e.schema:void 0),m(this,"attachmentsInitialized"),m(this,"relatedFeaturesInitialized"))}get primaryKey(){const e=this.attributes.get(this.schema.primaryKeyField);return null!=e?`${e}`:void 0}get hasGlobalId(){return!!this.schema.fields.find((e=>"global-id"===e.type))}get globalId(){const e=this.schema.fields.find((e=>"global-id"===e.type));return e?this.attributes.get(e.name):void 0}set globalId(e){const t=this.schema.fields.find((e=>"global-id"===e.type));if(!t)throw new o("Cannot set global ID on feature -- no global ID field.");this.attributes.set(t.name,e)}get presentableAttributes(){return null==this._presentableAttributes&&(this._presentableAttributes=new W(this)),this._presentableAttributes}get title(){return this.format(this._title||"")}get description(){return this.format(this._description)}get hyperlinks(){return this._hyperlinks||(this._hyperlinks=new ie(this))}get relatedFeatures(){return this._relatedFeatures}get type(){if(this.schema.typeIdField&&this.attributes.has(this.schema.typeIdField)){const e=this.attributes.get(this.schema.typeIdField);return this.schema.types.find((t=>t.id===e))}}get attachmentsInitialized(){return!this.source||this._attachmentsInitialized}get relatedFeaturesInitialized(){return!this.source||this.source.relationships.every((e=>this._initializedRelationships.has(e)))}get expressionsInitialized(){return!this.settings.popupTemplate?.expressionInfos?.length||this._expressionsInitialized}get _hydrationStatus(){return this._featureHydrationStatus?this._featureHydrationStatus:this.source?.capabilities?.supportsQuery&&1===this.attributes.size&&void 0!==this.primaryKey?"dehydrated":"hydrated"}set _hydrationStatus(e){this._featureHydrationStatus=e}get _key(){return`${this.source?.id}//${this.primaryKey??this.globalId??this.id}`}get _title(){let e;return this.settings.popupTemplate&&(e="function"==typeof this.settings.popupTemplate.title?this.settings.popupTemplate.title():this.settings.popupTemplate.title),e||this.schema.displayField&&this.presentableAttributes.get(this.schema.displayField)||""}get _description(){if(this.settings.popupTemplate?.content){if("string"==typeof this.settings.popupTemplate.content)return this.settings.popupTemplate.content;if(Array.isArray(this.settings.popupTemplate.content)){const e=this.settings.popupTemplate.content.find((e=>"text"===e.type));if(e)return e.text}}return""}_geometry;_source;_presentableAttributes;_hyperlinks;_featureHydrationStatus;_relatedFeatures;_expressionFieldValues=new b;_expressionValuesUpdatePending=!1;_attachmentsInitialized=!1;_expressionsInitialized=!1;_initializedRelationships=new WeakSet;constructor(e){super(e),this.settings=new L,this.settings._setFeature(this),this.schema=new Z,this.schema._featureSettings=this.settings,this.attachments=new s,this.attributes=new y,this._relatedFeatures=new b,this.expressionFieldValues=new B(this._expressionFieldValues,this),this._handles.add([d(this.settings,"popupTemplate",(()=>{this._expressionsInitialized=!1,m(this,"expressionsInitialized")}),{sync:!0}),f(this,"title",(()=>{const e=d(this.settings,"popupTemplate.title",(()=>m(this,"title")),{sync:!0}),t=this.presentableAttributes.on("change",(()=>m(this,"title")));return c([e,t])})),f(this,"description",(()=>{const e=d(this.settings,"popupTemplate.content",(()=>m(this,"description")),{sync:!0}),t=this.presentableAttributes.on("change",(()=>m(this,"description")));return c([e,t])})),f(this,"relatedFeaturesInitialized",(()=>g(this,"source.relationships",["after-changes",()=>{m(this,"relatedFeaturesInitialized")}])))])}format(e,...t){let s="string"==typeof e?{format:e}:e;I("options",s).isNotMissing();const{format:i}=s;I("format",i).isNotMissing();let r=s.format.replace(Y,ee);return r=r.replace(q,((e,t,i,r,a)=>ae(this,t||i,r,{...s,format:a?`{0:${a}}`:"{0}"}))),r=r.replace(te,"{{"),s={...s},s.format=r,N(s,...t)}clearExpressionInfos(){this._expressionFieldValues.clear()}toGraphic(){return toGraphic(this)}async fetchExpressionInfos(e=!1){const{expressionInfos:t}=this.settings.popupTemplate??{};if(!t)return;const{runAsyncArcadeExpression:s}=await import("../utilities/arcade.js");if(await Promise.all(t.map((async e=>{try{const t=this.source?.layer??this.source?.sublayer;let i=this.source?.mapExtension;if(!i){const e=this.source?.layerExtension;i=e?.mapExtension}this._expressionFieldValues.set(e.name,await s(e.expression,{layer:t,map:i?.map,feature:this,spatialReference:this.schema.spatialReference}))}catch(t){t instanceof Error&&$.error({message:"Error evaluating expression '{0}': {1}.",error:t},e.name,t.message),this._expressionFieldValues.set(e.name,se)}}))),e)return this.attributes.on("change",(async e=>{this._expressionValuesUpdatePending||(this._expressionValuesUpdatePending=!0,setTimeout((async()=>{this._expressionValuesUpdatePending=!1,await this.fetchExpressionInfos()}),0))}));this._expressionsInitialized=!0,m(this,"expressionsInitialized")}async fetchRelatedFeatures(e,t){if(!this.source)return;let s=[];if(e){const t=new Set(Array.isArray(e)?e:[e]);for(const e of t){const t="string"==typeof e?this.source.relationships.find((t=>t.id===e)):e;if(!t||!this.source.relationships.includes(t))throw new o("Relationship not found in feature source.");s.push(t)}}else s=this.source.relationships.toArray();const i=await G(s,(async e=>[e,await(async()=>{const s=await e.getRelatedFeatures(this,t);return this._initializedRelationships.add(e),s})()]));for(const e of i)this._relatedFeatures.set(e[0],e[1]);m(this,"relatedFeaturesInitialized")}async fetchAttachments(){if(this.source){const e=await this.source.getAttachments(this);S(this.attachments,e,{equals:(e,t)=>e.id===t.id,onMissing:(e,t)=>{this.attachments.remove(e)},onNew:(e,t)=>{this.attachments.add(e)},onMatch:(e,t,s,i)=>{this.attachments.splice(s,1,t)}}),this._attachmentsInitialized=!0,m(this,"attachmentsInitialized")}}async addAttachment(e){return this.source?.addAttachment(this,e)}async deleteAttachments(e){return this.source?.deleteAttachments(this,e)}_getSerializableProperties(){return{...super._getSerializableProperties(),attributes:{serializeModes:["project"],serialize:e=>{const t={};if("project"===e&&this.primaryKey&&(this.source?.capabilities).supportsQuery)t[this.schema.primaryKeyField]=this.primaryKey;else for(const[e,s]of this.attributes.entries())t[e]=s;return t},deserialize:e=>{if(this.attributes.clear(),e instanceof Map||e instanceof b)e.forEach(((e,t)=>{this.attributes.set(t,e)}));else for(const[t,s]of Object.entries(e))this.attributes.set(t,s)}},geometry:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("geometry"):this.geometry?.toJSON(),deserialize:e=>{A(e)?this.geometry=e:this.geometry=e?i(e):void 0}},settings:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("settings"):this.settings.toJSON(e)},schema:{serializeModes:["project"],serialize:e=>"project"===e&&(this.source?.capabilities).supportsQuery?this.getDefault("schema"):this.schema.toJSON(e)},source:["project"]}}async _onInitialize(){const e=this._findRelationshipIds(this._title,this._description),t=this.source?this.source.relationships.map((e=>e.id)).toArray():[],s=[];for(const i of e)t.includes(i)?s.push(this.fetchRelatedFeatures(i)):$.error("Could not find relationship '{0}' referenced in feature title or description.",i);await Promise.all(s)}_findRelationshipIds(...e){const t=[];for(const s of e){let e;const i=s.replace(Y,ee);for(;e=X.exec(i),null!==e;){const s=e[0];t.includes(s)||t.push(e[1])}}return t}};K=e([p],K);export{K as Feature};export function toFeature(e,t){const s=new K(t);if(e.attributes){const t=e.attributes;for(const[e,i]of Object.entries(t))s.attributes.set(e,i)}return s.geometry=e.geometry,e.popupTemplate&&(s.settings.popupTemplate=e.popupTemplate),s}export function toGraphic(e){const s=new t;s.attributes={};for(const t of e.attributes.keys())s.attributes[t]=e.attributes.get(t);return n(e.source)&&e.source.layer&&(s.layer=e.source.layer),l(e.source)&&e.source.table&&(s.layer=e.source.table),s.geometry=e.geometry,e.settings.popupTemplate&&(s.popupTemplate=e.settings.popupTemplate),s}const J="Presentable attributes are read-only.",Q="Feature hyperlinks are read-only. Modify the feature's hyperlink templates instead.";class B extends x{_feature;_pending=new Set;constructor(e,t){super(e),this._feature=t}get(e){return super.has(e)||this._calcExpressionValue(e),super.get(e)}async _calcExpressionValue(e){if(!this._pending.has(e)){this._pending.add(e);try{const{spatialReference:t}=this._feature.schema,s=this._feature.settings.popupTemplate?.expressionInfos?.find((t=>t.name===e));if(!s)return;const{isArcadeScriptAsync:i,runAsyncArcadeExpression:r,arcadeScriptUsesGeometry:a,runArcadeExpression:o}=await import("../utilities/arcade.js");try{if(i(s.expression,t)){const i=this._feature.source?.layer??this._feature.source?.sublayer;let a=this._feature.source?.mapExtension;if(!a){const e=this._feature.source?.layerExtension;a=e?.mapExtension}this._originalMap.set(e,await r(s.expression,{feature:this._feature,layer:i,map:a?.map,spatialReference:t}))}else{if(a(s.expression,t)){const{enableGeometrySupport:e}=await import("@arcgis/core/arcade/arcade");await e()}this._originalMap.set(e,o(s.expression,{feature:this._feature,spatialReference:t}))}}catch(t){t instanceof Error&&$.error({message:"Error evaluating expression '{0}': {1}.",error:t},e,t.message),this._originalMap.set(e,se)}}finally{this._pending.delete(e)}}}}class W extends x{get size(){return this._feature.attributes.size+this._feature.schema.fields._expressionFieldsLength}_feature;_numObservers;_onAllObserversRemoved;constructor(e){super(new y),this._feature=e,this._handles.add([f(this,"size",(()=>d(this._feature.attributes,"size",(()=>m(this,"size")),{sync:!0}))),f(this,"size",(()=>d(this._feature.schema.fields,"_expressionFieldsLength",(()=>m(this,"size")),{sync:!0})))])}destroy(){this._onAllObserversRemoved?.(),this._numObservers=0,super.destroy()}clear(){throw new o(J)}delete(e){throw new o(J)}forEach(e,t){I("callback",e).isNotMissing();for(const s of this.keys())e.call(t,this.get(s),s,this)}get(e){const t=this._getFieldExtensionFormat(e);return this._formatAttribute(e,t)}has(e){for(const t of this.keys())if(H(t,e))return!0;return!1}set(...e){throw new o(J)}*entries(){yield*P(this.keys(),(e=>[e,this.get(e)]))}*keys(){yield*this._feature.attributes.keys();for(const e of this._feature.schema.fields.expressionFields)yield e.name;if(null!=this._feature.source?.relationships)for(const e of this._feature.source.relationships)if("one-to-one"===e.cardinality||"many-to-one"===e.cardinality)for(const t of e.relatedSource.schema.fields)yield`relationships/${e.id}/${t.name}`}*values(){yield*P(this.keys(),(e=>this.get(e)))}[Symbol.iterator](){return this.entries()}toJSON(){return Array.from(this.entries())}on(e,t){if(I("callback",t).isNotMissing(),!this._numObservers){const e=new Map,t=new Set,s=()=>{for(const e of t)e.remove();t.clear()};let i;const r=()=>{const t=()=>{i&&(window.clearTimeout(i),i=void 0)};t(),i=window.setTimeout((()=>{const s=[],i=[];for(const[t,i]of this.entries())i!==e.get(t)&&s.push([t,i]);for(const[t,s]of e.entries())this.has(t)&&s===this.get(t)||i.push([t,s]);if(s.length||i.length){const e={added:s,removed:i,target:this};if(this.hasEventListener("after-add"))for(const e of s)this.emit("after-add",{target:this,item:e});if(this.hasEventListener("after-remove"))for(const e of i)this.emit("after-remove",{target:this,item:e});this.emit("change",e),a()}t()}))},a=()=>{e.clear(),s();for(const s of this.keys()){const i=this._getFieldExtension(s);let a="{0}";if(i){const e=d(i,"format",r);t.add(e),i.format&&(a=i.format)}e.set(s,this._formatAttribute(s,a))}};a();const o=this._feature.attributes.on("change",r),n=this._feature.schema.fieldExtensions.on("change",r),l=[d(this._feature.settings.formatSettings,"numberFormat",r),d(this._feature.settings.formatSettings,"dateFormat",r),d(this._feature.settings.formatSettings,"timeFormat",r),d(this._feature.settings.formatSettings,"locale",r)],h=this._feature.expressionFieldValues.on("change",r),u=this._feature.schema.fields.on("change",(e=>{(e.added?.some((e=>T(e.name)))||e.removed?.some((e=>T(e.name))))&&r()})),p=d(this._feature.settings,"popupTemplate",r);this._onAllObserversRemoved=()=>{h.remove(),o.remove(),n.remove(),u.remove();for(const e of l)e.remove();p.remove(),e.clear(),s()}}const s=super.on(e,t);return this._numObservers++,{remove:()=>{s.remove(),this._numObservers--,this._numObservers||this._onAllObserversRemoved()}}}_getFieldExtension(e){const t=this._feature.schema.findFieldByName(e);if(t)return this._feature.schema.fieldExtensions.forField(t)}_getFieldExtensionFormat(e){const t=this._getFieldExtension(e);return t?t.format:"{0}"}_formatAttribute(e,t){const s=E(e);if(null!=s)return ae(this._feature,"expression",s,{format:t});const[i,r]=j(e);return null!=i?ae(this._feature,i,r,{format:t}):ae(this._feature,void 0,e,{format:t})}}const q=/\{(?:relationships[\\/]([\w-]*)[\\/])?(?:(expression)[\\/])?([_a-zA-ZÀ-ÖØ-öø-ÿ][._a-zA-ZÀ-ÖØ-öø-ÿ0-9()]*)(?::([^}]*))?\}/gi,X=/\{relationships\/([\w-]*)[\\/]([^}]*)\}/gi,Y=/{{/g,ee="\0MAGIC\0",te=new RegExp(ee,"g"),se="#INVALID";class ie extends _{_feature;_hyperlinks;constructor(e){super(e.settings.hyperlinkTemplates,(e=>this._getHyperlink(e))),this._feature=e}destroy(){for(const e of this)e.destroy();super.destroy()}_getHyperlink(e){return null==this._hyperlinks&&(this._hyperlinks=new WeakMap),this._hyperlinks.has(e)||this._hyperlinks.set(e,new re(this._feature,e)),this._hyperlinks.get(e)}}let re=class extends(u(a)){get url(){return this._template.url?this._feature.format(this._template.url):this._template.url}set url(e){throw new o(Q)}get text(){return this._template.text?this._feature.format(this._template.text):this._template.text}set text(e){throw new o(Q)}get iconUrl(){return this._template.iconUrl?this._feature.format(this._template.iconUrl):this._template.iconUrl}set iconUrl(e){throw new o(Q)}get target(){return this._template.target?this._feature.format(this._template.target):this._template.target}set target(e){throw new o(Q)}get tooltip(){return this._template.tooltip?this._feature.format(this._template.tooltip):this._template.tooltip}set tooltip(e){throw new o(Q)}_feature;_template;constructor(e,t){super(t.toJSON()),this._feature=e,this._template=t,this._handles.add(f(this,(e=>{const t=d(this._template,e,(()=>m(this,e)),{sync:!0}),s=this._feature.presentableAttributes.on("change",(()=>{m(this,e)})),i=this._feature.relatedFeatures.on("change",(()=>{m(this,e)}));return c([t,s,i])})))}_getSerializableProperties(){return{}}};function ae(e,t,s,i={format:"{0}"}){if(!H(t,"expression")){if(t){const r=U(e.relatedFeatures.keys(),(e=>H(e.id,t)));if(!r)return $.debug("Could not resolve related field '{0}/{1}",t,s),se;const a=Array.from(e.relatedFeatures.get(r));return"many-to-one"===r.cardinality||"one-to-one"===r.cardinality?a.length<1?($.debug("Could not resolve related field '{0}/{1}",t,s),se):oe(a[0],s,i):a.map((e=>oe(e,s,i))).filter((e=>""!==e)).join(",")}return oe(e,s,i)}if(!e.settings.popupTemplate?.expressionInfos?.find((e=>H(e.name,s))))return $.debug("Could not find expression '{0}'.",s),se;try{const t=e.expressionFieldValues.get(s)??i.defaultExpressionValue??"",r=e.schema.findFieldByName(`expression/${s}`),a=null==r?void 0:e.schema.fieldExtensions.forField(r);return ne(e,t,s,a?.formatSettings,i)}catch(e){if(e instanceof Error)return $.error({message:"Error evaluating expression '{0}': {1}.",error:e},s,e.message),se;throw e}}function oe(e,t,s){let i;if(i=e.attributes.get(t),null==i)return"";const r=e.schema.findFieldByName(t),a=e.type?.domains?.[r?.name??t],o=e=>e.codedValues?.find((e=>e.code.toString()===i.toString()))?.name??i;let n;if(H(t,e.schema.typeIdField)){const t=a&&"inherited"!==a.type?a:r?.domain;i="coded-value"===t?.type?o(t):e.type?.name??i}else if(a&&z(a))i=o(a);else if(r?.domain&&z(r.domain))i=o(r.domain);else if(r){switch(r.type){case"integer":case"small-integer":case"big-integer":case"single":case"double":i=M(i);break;case"date":i=R({timeZone:e.schema.timeZone},i);break;case"timestamp-offset":case"date-only":i=R({},i),"date-only"===r.type&&(s.isDateOnly=!0);break;case"time-only":i=V(i);break;default:i=`${i.toString()}`}const t=e.schema.fieldExtensions.forField(r);t&&(n=t.formatSettings)}return ne(e,i,t,n,s)}function ne(e,t,s,i,r){if("string"==typeof t&&(null==r.format||"{0}"===r.format))return t;const a={...r};if("number"==typeof t||t instanceof Date||t instanceof F){null==a.locale&&(a.locale=i?.locale??e.settings.formatSettings.locale);const r=e.settings.popupTemplate?.fieldInfos?.find((e=>H(e.fieldName,s)))?.format;"number"==typeof t?function(e,t,s,i){null==e.currency&&(e.currency=t?.currency??i.settings.formatSettings.currency);null==e.numberFormat&&(e.numberFormat=t?.numberFormat,null==e.numberFormat&&(e.numberFormat=null==s?i.settings.formatSettings.numberFormat:s.digitSeparator?O.NUMBER:O.FIXED_POINT));null==e.fractionalDigits&&(e.fractionalDigits=t?.fractionalDigits,null==e.fractionalDigits&&(e.fractionalDigits=null==s?i.settings.formatSettings.fractionalDigits:s.places))}(a,i,r,e):t instanceof Date?function(e,t,s,i){null==e.dateFormat&&(e.dateFormat=t?.dateFormat,null==e.dateFormat&&(e.dateFormat=null==s?i.settings.formatSettings.dateFormat:k(s.dateFormat)));null==e.timeZone&&(e.timeZone=t?.timeZone??i.settings.formatSettings.timeZone)}(a,i,r,e):function(e,t,s,i){null==e.timeFormat&&(e.timeFormat=t?.timeFormat,null==e.timeFormat&&(e.timeFormat=null==s?i.settings.formatSettings.timeFormat:D(s.dateFormat)))}(a,i,r,e)}return N(a,t)}re=e([p],re);export async function resolveRelatedFeatures(e){const t=v(e,(e=>e.source));await Promise.all(w([...t.keys()].map((e=>e.relationships.toArray()))).map((e=>(async e=>{[...(await e.getAllRelatedFeatures(t.get(e.source))).entries()].forEach((([t,s])=>{t.relatedFeatures.set(e,s)}))})(e))))}
@@ -1 +1 @@
1
- import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection.js";import i from"@arcgis/core/layers/support/Field";import{ArgumentError as r}from"../ArgumentError.js";import{generateId as s}from"../Entity.js";import{isFeatureSet as n,ItemType as o}from"../ItemType.js";import{assignProperties as a,assignPropertiesAsync as l,filterJSONProperties as c,getDefaults as u,getSerializableProperties as f,serializable as h}from"../support/Serializable.js";import{getSearchableValue as m}from"../tasks/search/_utilities.js";import{ReadOnlyCollection as d}from"../utilities/ReadOnlyCollection.js";import{isCodedValueDomain as g}from"../utilities/esri.js";import{parse as _}from"../utilities/format/date.js";import{parse as p}from"../utilities/format/number.js";import{parse as F}from"../utilities/format/time.js";import{escapeRegExp as S}from"../utilities/string.js";import{FeatureSet as y}from"./FeatureSet.js";let b=class extends d{id;title;featureSet;_sortFunc;_filterFunc;get itemType(){return o.FEATURE_LIST}constructor(e){if(super(new t),this.id=e?.id??s(),n(e))this.featureSet=e;else if(e){const t=e;Array.isArray(t.featureSet)?this.featureSet=new y({features:t.featureSet}):n(t.featureSet)?this.featureSet=t.featureSet:this.featureSet=new y(t.featureSet)}else this.featureSet=new y;for(const e of this.featureSet)this._collection.add(e);this.featureSet.on("change",(e=>this._onFeatureSetChange(e)))}toItemUri(){return`item://${encodeURIComponent(o.FEATURE_LIST)}/${encodeURIComponent(this.id)}`}assignProperties(e){a(this._getSerializableProperties(),this,e)}async assignPropertiesAsync(e){return l(this._getSerializableProperties(),this,e)}async finishAssignProperties(){}toJSON(e="all"){return c(this._getSerializableProperties(),this,e)}getDefaults(){return u(this._getSerializableProperties())}getDefault(e){return this.getDefaults()[e]}sort(e){if("function"==typeof e)this._sortFunc=e;else if(Array.isArray(e))this._sortFunc=this._createSortFunc(e);else if("object"==typeof e&&e.field)this._sortFunc=this._createSortFunc([e]);else{if("string"!=typeof e)throw new r("criteria","Invalid sort criteria.");this._sortFunc=this._createSortFunc([{field:e}])}return this._sortFunc=this._stabilizeSortFunc(this._sortFunc),this._sort(this._sortFunc),this.emit("change",{moved:this._collection.toArray(),added:[],removed:[]}),this}applyFilter(e){if(e)if("function"==typeof e)this._filterFunc=e;else if(Array.isArray(e))this._filterFunc=this._createFilterFunc(e);else if("object"==typeof e&&e.field)this._filterFunc=this._createFilterFunc([e]);else{if("string"!=typeof e)throw new r("criteria","Invalid filter criteria.");{const t=this.featureSet.schema.fieldExtensions.initializedItems.filter((e=>e.searchable)).map((t=>({field:t.field.name,match:e}))).toArray();this._filterFunc=this._createFilterFunc(t)}}else delete this._filterFunc;const t=new Set,i=[],s=[];let n=0;for(;n<this._collection.length;){const e=this._collection.getItemAt(n);this._filterFunc&&!this._filterFunc(e)?(i.push(e),this._collection.removeAt(n)):(t.add(e),n++)}for(const e of this.featureSet)t.has(e)||this._filterFunc&&!this._filterFunc(e)||(this._collection.add(e),s.push(e));this._sortFunc&&s.length&&(s.length<=10?this._insertionSort(this._sortFunc):this._sort(this._sortFunc)),(s.length||i.length)&&this.emit("change",{added:s,removed:i,moved:[]})}removeFilter(){this.applyFilter(void 0)}getSerializableProperties(e="all"){return f(this._getSerializableProperties(),e)}_getSerializableProperties(){return{title:["project"],featureSet:{serializeModes:["project"],deserialize:e=>{n(e)?this.featureSet.assignProperties({title:e.title,features:[...e]}):Array.isArray(e)?this.featureSet.assignProperties({features:e}):this.featureSet.assignProperties(e)}}}}_onFeatureSetChange(e){if(e.removed?.length&&this._collection.removeMany(e.removed),e.added?.length){const t=this._filterFunc?e.added.filter(this._filterFunc):e.added;t.length&&(this._collection.addMany(t),this._sortFunc&&(t.length<=10?this._insertionSort(this._sortFunc):this._sort(this._sortFunc)))}}_createSortFunc(e){return(t,i)=>{for(let s of e){if("string"==typeof s&&(s={field:s}),!s.field)throw new r("criteria","Invalid sort criteria.");const e=this._getField(s.field),n=this._getSortValue(t,e),o=this._getSortValue(i,e);let a="string"==typeof n?n.localeCompare(o):n-o;if("desc"===s.direction&&(a*=-1),0!==a)return a}return 0}}_stabilizeSortFunc(e){return(t,i)=>{const r=e(t,i);return 0===r?this._collection.indexOf(t)-this._collection.indexOf(i):r}}_createFilterFunc(e){const t=new Map;for(const i of e){if(!i.field)throw new r("criteria","Invalid sort criteria.");if(!i.match)continue;const e=this._getField(i.field),s=this._getFilterRegex(i.match,e);t.set(e.name,s)}return t.size?e=>{for(const i of t.keys()){const r=this._getField(i),s=m(e,r),n=t.get(i);let o=n[0];if(n.length>1&&"string"!==r.type&&g(e.type?.domains?.[r.name])&&(o=n[1]),o.exec(s))return!0}return!1}:()=>!0}_getSortValue(e,t){if(g(e.type?.domains?.[t.name])||g(t.domain))return e.presentableAttributes.get(t.name);switch(t.type){case"integer":case"small-integer":case"big-integer":case"double":case"single":case"oid":{const i=e.attributes.get(t.name);return null==i||isNaN(i)?Number.MIN_VALUE:p(i)}case"date":{const i=_(e.attributes.get(t.name)).getTime();return isNaN(i)?0:i}case"timestamp-offset":case"date-only":{const i=_({},e.attributes.get(t.name)).getTime();return isNaN(i)?0:i}case"time-only":{const i=F(e.attributes.get(t.name)).toDate().getTime();return isNaN(i)?0:i}default:return e.presentableAttributes.get(t.name)??""}}_getFilterRegex(e,t){if(t.domain&&"coded-value"===t.domain.type)return[new RegExp(`${S(e)}`,"i")];switch(t.type){case"integer":case"small-integer":case"big-integer":case"double":case"single":case"oid":{const i=new RegExp(`(^|${w})${S(e)}`,"i");return this.featureSet.schema.types.some((e=>g(e.domains?.[t.name])))?[i,new RegExp(`${S(e)}`,"i")]:[i]}default:return[new RegExp(`${S(e)}`,"i")]}}_getField(e){let t=this.featureSet.schema.findFieldByName(e);return t||(t=new i({name:e,type:this._inferFieldType(e),editable:!1}),this.featureSet.schema.fields.add(t)),t}_inferFieldType(e){for(const t of this.featureSet.values()){const i=t.attributes.get(e);if(null!=i)return"number"==typeof i?"double":i instanceof Date?"date":"string"}return"string"}_sort(e){this._collection._items.sort(e)}_insertionSort(e){const t=this._collection._items;for(let i=1;i<this.length;i++){const r=t[i];let s=i-1;for(;s>=0&&e(t[s],r)>0;)t[s+1]=t[s],s--;t[s+1]=r}}};b=e([h],b);export{b as FeatureList};const w="\t";
1
+ import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection.js";import i from"@arcgis/core/layers/support/Field";import{ArgumentError as r}from"../ArgumentError.js";import{generateId as s}from"../Entity.js";import{isFeatureSet as n,ItemType as o}from"../ItemType.js";import{assignProperties as a,assignPropertiesAsync as l,filterJSONProperties as c,getDefaults as u,getSerializableProperties as f,serializable as h}from"../support/Serializable.js";import{getSearchableValue as d}from"../tasks/search/_utilities.js";import{ReadOnlyCollection as m}from"../utilities/ReadOnlyCollection.js";import{isCodedValueDomain as g}from"../utilities/esri.js";import{parse as _}from"../utilities/format/date.js";import{parse as p}from"../utilities/format/number.js";import{parse as F}from"../utilities/format/time.js";import{escapeRegExp as S}from"../utilities/string.js";import{FeatureSet as y}from"./FeatureSet.js";let b=class extends m{id;title;featureSet;_sortFunc;_filterFunc;get itemType(){return o.FEATURE_LIST}constructor(e){if(super(new t),this.id=e?.id??s(),n(e))this.featureSet=e;else if(e){const t=e;Array.isArray(t.featureSet)?this.featureSet=new y({features:t.featureSet}):n(t.featureSet)?this.featureSet=t.featureSet:this.featureSet=new y(t.featureSet)}else this.featureSet=new y;for(const e of this.featureSet)this._collection.add(e);this._handles.add(this.featureSet.on("change",(e=>this._onFeatureSetChange(e))))}toItemUri(){return`item://${encodeURIComponent(o.FEATURE_LIST)}/${encodeURIComponent(this.id)}`}assignProperties(e){a(this._getSerializableProperties(),this,e)}async assignPropertiesAsync(e){return l(this._getSerializableProperties(),this,e)}async finishAssignProperties(){}toJSON(e="all"){return c(this._getSerializableProperties(),this,e)}getDefaults(){return u(this._getSerializableProperties())}getDefault(e){return this.getDefaults()[e]}sort(e){if("function"==typeof e)this._sortFunc=e;else if(Array.isArray(e))this._sortFunc=this._createSortFunc(e);else if("object"==typeof e&&e.field)this._sortFunc=this._createSortFunc([e]);else{if("string"!=typeof e)throw new r("criteria","Invalid sort criteria.");this._sortFunc=this._createSortFunc([{field:e}])}return this._sortFunc=this._stabilizeSortFunc(this._sortFunc),this._sort(this._sortFunc),this.emit("change",{moved:this._collection.toArray(),added:[],removed:[]}),this}applyFilter(e){if(e)if("function"==typeof e)this._filterFunc=e;else if(Array.isArray(e))this._filterFunc=this._createFilterFunc(e);else if("object"==typeof e&&e.field)this._filterFunc=this._createFilterFunc([e]);else{if("string"!=typeof e)throw new r("criteria","Invalid filter criteria.");{const t=this.featureSet.schema.fieldExtensions.initializedItems.filter((e=>e.searchable)).map((t=>({field:t.field.name,match:e}))).toArray();this._filterFunc=this._createFilterFunc(t)}}else delete this._filterFunc;const t=new Set,i=[],s=[];let n=0;for(;n<this._collection.length;){const e=this._collection.getItemAt(n);this._filterFunc&&!this._filterFunc(e)?(i.push(e),this._collection.removeAt(n)):(t.add(e),n++)}for(const e of this.featureSet)t.has(e)||this._filterFunc&&!this._filterFunc(e)||(this._collection.add(e),s.push(e));this._sortFunc&&s.length&&(s.length<=10?this._insertionSort(this._sortFunc):this._sort(this._sortFunc)),(s.length||i.length)&&this.emit("change",{added:s,removed:i,moved:[]})}removeFilter(){this.applyFilter(void 0)}getSerializableProperties(e="all"){return f(this._getSerializableProperties(),e)}_getSerializableProperties(){return{title:["project"],featureSet:{serializeModes:["project"],deserialize:e=>{n(e)?this.featureSet.assignProperties({title:e.title,features:[...e]}):Array.isArray(e)?this.featureSet.assignProperties({features:e}):this.featureSet.assignProperties(e)}}}}_onFeatureSetChange(e){if(e.removed?.length&&this._collection.removeMany(e.removed),e.added?.length){const t=this._filterFunc?e.added.filter(this._filterFunc):e.added;t.length&&(this._collection.addMany(t),this._sortFunc&&(t.length<=10?this._insertionSort(this._sortFunc):this._sort(this._sortFunc)))}}_createSortFunc(e){return(t,i)=>{for(let s of e){if("string"==typeof s&&(s={field:s}),!s.field)throw new r("criteria","Invalid sort criteria.");const e=this._getField(s.field),n=this._getSortValue(t,e),o=this._getSortValue(i,e);let a="string"==typeof n?n.localeCompare(o):n-o;if("desc"===s.direction&&(a*=-1),0!==a)return a}return 0}}_stabilizeSortFunc(e){return(t,i)=>{const r=e(t,i);return 0===r?this._collection.indexOf(t)-this._collection.indexOf(i):r}}_createFilterFunc(e){const t=new Map;for(const i of e){if(!i.field)throw new r("criteria","Invalid sort criteria.");if(!i.match)continue;const e=this._getField(i.field),s=this._getFilterRegex(i.match,e);t.set(e.name,s)}return t.size?e=>{for(const i of t.keys()){const r=this._getField(i),s=d(e,r),n=t.get(i);let o=n[0];if(n.length>1&&"string"!==r.type&&g(e.type?.domains?.[r.name])&&(o=n[1]),o.exec(s))return!0}return!1}:()=>!0}_getSortValue(e,t){if(g(e.type?.domains?.[t.name])||g(t.domain))return e.presentableAttributes.get(t.name);switch(t.type){case"integer":case"small-integer":case"big-integer":case"double":case"single":case"oid":{const i=e.attributes.get(t.name);return null==i||isNaN(i)?Number.MIN_VALUE:p(i)}case"date":{const i=_(e.attributes.get(t.name)).getTime();return isNaN(i)?0:i}case"timestamp-offset":case"date-only":{const i=_({},e.attributes.get(t.name)).getTime();return isNaN(i)?0:i}case"time-only":{const i=F(e.attributes.get(t.name)).toDate().getTime();return isNaN(i)?0:i}default:return e.presentableAttributes.get(t.name)??""}}_getFilterRegex(e,t){if(t.domain&&"coded-value"===t.domain.type)return[new RegExp(`${S(e)}`,"i")];switch(t.type){case"integer":case"small-integer":case"big-integer":case"double":case"single":case"oid":{const i=new RegExp(`(^|${w})${S(e)}`,"i");return this.featureSet.schema.types.some((e=>g(e.domains?.[t.name])))?[i,new RegExp(`${S(e)}`,"i")]:[i]}default:return[new RegExp(`${S(e)}`,"i")]}}_getField(e){let t=this.featureSet.schema.findFieldByName(e);return t||(t=new i({name:e,type:this._inferFieldType(e),editable:!1}),this.featureSet.schema.fields.add(t)),t}_inferFieldType(e){for(const t of this.featureSet.values()){const i=t.attributes.get(e);if(null!=i)return"number"==typeof i?"double":i instanceof Date?"date":"string"}return"string"}_sort(e){this._collection._items.sort(e)}_insertionSort(e){const t=this._collection._items;for(let i=1;i<this.length;i++){const r=t[i];let s=i-1;for(;s>=0&&e(t[s],r)>0;)t[s+1]=t[s],s--;t[s+1]=r}}};b=e([h],b);export{b as FeatureList};const w="\t";
@@ -152,6 +152,7 @@ export declare class FeatureSettings extends Settings<FeatureSettingsProperties>
152
152
  private _featureSource;
153
153
  private _feature;
154
154
  constructor(properties?: FeatureSettingsProperties);
155
+ destroy(): void;
155
156
  /**
156
157
  * Returns the default outFields for the corresponding FeatureSource.
157
158
  */
@@ -1 +1 @@
1
- import{__decorate as e}from"tslib";import t from"@arcgis/core/PopupTemplate";import{Hyperlink as n}from"../Hyperlink.js";import{isPopupContentExtension as i}from"../ItemType.js";import{ArrayWrappedCollection as o}from"../mapping/support/ArrayWrappedCollection.js";import{FormatSettings as s}from"../support/FormatSettings.js";import{InitializableCollectionProxy as r}from"../support/InitializableCollectionProxy.js";import{filterJSONProperties as p,isDefault as a,serializable as u,shouldExcludeDefaults as h}from"../support/Serializable.js";import{Settings as l}from"../support/Settings.js";import{createIHandle as f,notifyChange as d,onWatch as m,watch as c}from"../support/observableUtils.js";import _ from"../utilities/_ReferenceCountedHandle.js";import{compare as g}from"../utilities/array.js";import{checkArg as C}from"../utilities/checkArg.js";import{getAllFieldInfos as S,getAllReferencedFieldNames as y,isPopupTemplate as v}from"../utilities/esri.js";import{isArcadeExpressionField as A,isRelationshipField as T}from"../utilities/field.js";import{objectKeys as x}from"../utilities/object.js";import{isQueryBasedRelationship as P}from"../utilities/relationships.js";import{PopupContentExtension as z,_popupContentExtensionMap as w}from"./PopupContentExtension.js";let E=class extends l{popupContentExtensions;_isDefaultPopupTemplate=!1;_popupContentCollection;get _popupContent(){return null==this._popupContentCollection&&(this._popupContentCollection=this._createPopupContentCollection()),this._popupContentCollection}get hyperlinkTemplates(){return this._getCollectionSetting("hyperlinkTemplates")}get popupTemplate(){return this._getSetting("popupTemplate")}set popupTemplate(e){let n;n=e instanceof Object&&!v(e)?t.fromJSON(e):e;const i=this?._feature?.schema?.createPopupTemplate()??this?._featureSource?.schema?.createPopupTemplate();n&&i&&(n.content=n.content??i.content,n.fieldInfos=n.fieldInfos??i.fieldInfos),this._setSetting("popupTemplate",n),this._isDefaultPopupTemplate=!1,this.featureSource?.schema?.fieldExtensions.toArray().forEach((e=>{e._clearFieldInfoCache()}))}get showRelatedRecordsWhenUnconfigured(){return this._getSetting("showRelatedRecordsWhenUnconfigured",!0)}set showRelatedRecordsWhenUnconfigured(e){this._setSetting("showRelatedRecordsWhenUnconfigured",e)}get formatSettings(){return this._getNestedSettings("formatSettings",(()=>new s))}get returnGeometry(){return this._getSetting("returnGeometry",!0)}set returnGeometry(e){this._setSetting("returnGeometry",e)}get outFields(){return this._getSetting("outFields",this._defaultOutFields)}set outFields(e){this._setSetting("outFields",e)}get outSpatialReference(){return this._getSetting("outSpatialReference")}set outSpatialReference(e){this._setSetting("outSpatialReference",e)}get maxAllowableOffset(){return this._getSetting("maxAllowableOffset")}set maxAllowableOffset(e){this._setSetting("maxAllowableOffset",e)}get zoomScale(){return this._getSetting("zoomScale")}set zoomScale(e){this._setSetting("zoomScale",e)}get zoomFactor(){const e=this._feature?this._feature.schema:this._featureSource?.schema,t=e&&"point"===e.geometryType?void 0:1.5;return this._getSetting("zoomFactor",t)}set zoomFactor(e){this._setSetting("zoomFactor",e)}get featureSource(){return this._featureSource}get feature(){return this._feature}_featureSource;_feature;constructor(e){super(e),this.popupContentExtensions=new b(this)}get _defaultOutFields(){if(null==this.popupTemplate)return["*"];const e=S(this.popupTemplate),t=this.featureSource?.schema?.primaryKeyField;if(!e||!t)return["*"];const n=new Set([t]),i=new Map;this.featureSource.schema.fields.forEach((e=>{i.set(e.name.toLowerCase(),e.name)}));const o=new Set([...y(this.popupTemplate),...this.hyperlinkTemplates.toArray().flatMap((e=>e.getReferencedFields()))]);this._featureSource.relationships.forEach((e=>{P(e)&&o.add(e.keyField)}));const s=this.featureSource?.schema?.typeIdField;s&&o.add(s);const r=e.reduce(((e,t)=>((t.visible||t.isEditable&&this.featureSource.capabilities.supportsEditing)&&e.push(t.fieldName),e)),[]),p=new Set([...r,...o]);for(const e of p){if(A(e)||T(e))continue;const t=i.get(e.toLowerCase());t&&n.add(t)}return Array.from(n)}_setFeatureSource(e){this._featureSource=e,d(this,"featureSource")}_setFeature(e){this._feature=e,d(this,"feature")}toJSON(e="all"){const t=p(this._getSerializableProperties(),this,e)||{},n=t.popupContentExtensions?.filter((e=>{const t=this.parent;return!t?.popupContentExtensions?.some((t=>t.id===e.id))}));if(t)for(const e of x(t))this.isModified(e)||delete t[e];if(n?.length&&(t.popupContentExtensions=n),!h(e)||!a(t))return t}_hasSettingIncludingAncestor(e){return"outFields"===e||super._hasSettingIncludingAncestor(e)}_createPopupContentCollection(){return new o({parent:this,targetProperty:"popupTemplate",arrayProperty:"content"})}_getSerializableProperties(){return{hyperlinkTemplates:{serializeModes:["initial"],deserialize:e=>{e.forEach((e=>{this.hyperlinkTemplates.find((t=>this._hyperlinksAreEquivalent(t,e)))||this.hyperlinkTemplates.add(e instanceof n?e:new n(e))})),this.hyperlinkTemplates.toArray().forEach((t=>{const n=this.hyperlinkTemplates.indexOf(t),i=e.findIndex((e=>this._hyperlinksAreEquivalent(e,t)));i<0?this.hyperlinkTemplates.removeAt(n):i!==n&&this.hyperlinkTemplates.reorder(t,i)}))}},popupTemplate:{serializeModes:["project"],isDefault:()=>!this._isDefaultPopupTemplate},showRelatedRecordsWhenUnconfigured:{serializeModes:["initial"],default:!0},formatSettings:"initial",outFields:{serializeModes:["initial"],serialize:()=>this.isModified("outFields")?this.outFields:void 0},returnGeometry:{serializeModes:["initial"],default:!0},outSpatialReference:"initial",maxAllowableOffset:"initial",zoomScale:"initial",zoomFactor:{serializeModes:["initial"],isDefault:e=>{const t=this._feature?this._feature.schema:this._featureSource?.schema;return e===(t&&"point"===t.geometryType?void 0:1.5)}},popupContentExtensions:{serializeModes:["initial"],serialize:e=>this.popupContentExtensions.map((t=>t.toJSON(e))).filter((e=>!(e&&2===Object.keys(e).length&&e.id&&e.content))).toArray(),deserialize:e=>{e&&g(this.popupContentExtensions,e,{onNew:(e,t)=>{this.popupContentExtensions.add(i(e)?e:new z(e),t)},onMatch:(e,t,n,o)=>{i(t)||e.assignProperties(t),n!==o&&this.popupContentExtensions.reorder(e,o)},onMissing:e=>{this.popupContentExtensions.remove(e)},equals:(e,t)=>{if(!t)return!1;if(i(t))return t===e||t.id===e.id;const n=this.popupContentExtensions.indexOf(e);if(t.content&&n>-1){const e=this.popupContentExtensions.toArray();return z.matchesRef(e,n,t.content)}return e.id===t.id}})}}}}_hyperlinksAreEquivalent(e,t){if(e===t)return!0;const n=e=>e||"";return n(e.text)===n(t.text)&&n(e.url)===n(t.url)&&n(e.iconUrl)===n(t.iconUrl)&&n(e.target)===n(t.target)&&n(e.tooltip)===n(t.tooltip)}};E=e([u],E);export{E as FeatureSettings};class b extends r{get _collection(){return this._featureSettings._popupContent.map((e=>this._forContent(e))).concat(Array.from(this._uninitializedPopupContentExtensions))}get _popupTemplateIsInherited(){return this._featureSettings.parent&&this._featureSettings.popupTemplate===this._featureSettings.parent.popupTemplate}_featureSettings;_uninitializedPopupContentExtensions=new Set;_onChangePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("change",(e=>{const t={added:(e.added||[]).map((e=>this._forContent(e))),moved:(e.moved||[]).map((e=>this._forContent(e))),removed:(e.removed||[]).map((e=>this._forContent(e))),target:this};this.emit("change",t)}))));_onBeforeAddPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-add",(e=>{this.emit("before-add",{...e,item:this._forContent(e.item)})}))));_onBeforeRemovePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-remove",(e=>{this.emit("before-remove",{...e,item:this._forContent(e.item)})}))));_onBeforeChangesPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-changes",(e=>{this.emit("before-changes",{...e,item:this._forContent(e.item)})}))));_onAfterAddPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-add",(e=>{this.emit("after-add",{...e,item:this._forContent(e.item)})}))));_onAfterRemovePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-remove",(e=>{this.emit("after-remove",{...e,item:this._forContent(e.item)})}))));_onAfterChangesPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-changes",(e=>{this.emit("after-changes",{...e})}))));constructor(e){super(),this._featureSettings=e,m(this,"length",(()=>c(this._featureSettings,"_popupContent.length",(()=>d(this,"length")),{sync:!0})))}forContent(e){if(C("content",e).isNotMissing(),this._featureSettings._popupContent.includes(e))return this._forContent(e)}add(e,n){if(C("contentX",e).isNotMissing(),this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),e.featureSettings&&e.featureSettings.popupContentExtensions.remove(e),e._setFeatureSettings(this._featureSettings),e.content){const t=w.get(e.content);if(w.set(e.content,e),t&&t!==e&&this._onRemoved(t),this._featureSettings._popupContent.includes(e.content))if(void 0===n){const n={added:[e],moved:[],removed:t?[t]:[],target:this};this.emit("change",n),this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),d(this,"length")}else this._featureSettings._popupContent.reorder(e.content,n);else this._featureSettings._popupContent.add(e.content,n)}else{this._uninitializedPopupContentExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("change",t),this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),d(this,"length")}return this._onAdded(e),this}removeAt(e){const n=this.getItemAt(e);if(void 0!==n){if(this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._uninitializedPopupContentExtensions.has(n)){this._uninitializedPopupContentExtensions.delete(n);const e={added:[],moved:[],removed:[n],target:this};this.emit("change",e),this.emit("after-remove",{item:n}),this.emit("after-changes",{target:this}),d(this,"length")}else this._featureSettings._popupContent.remove(n.content);return this._onRemoved(n),n}}reorder(e,n){if(e&&this._featureSettings._popupContent.includes(e.content))return this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._featureSettings._popupContent.reorder(e.content,n),e}sort(e){return this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._featureSettings._popupContent.sort(((t,n)=>e(this._forContent(t),this._forContent(n)))),this}on(e,t){const n=[];return"change"===e?n.push(this._onChangePopupContentHandle.add()):"before-add"===e?n.push(this._onBeforeAddPopupContentHandle.add()):"before-remove"===e?n.push(this._onBeforeRemovePopupContentHandle.add()):"before-changes"===e?n.push(this._onBeforeChangesPopupContentHandle.add()):"after-add"===e?n.push(this._onAfterAddPopupContentHandle.add()):"after-remove"===e?n.push(this._onAfterRemovePopupContentHandle.add()):"after-changes"===e&&n.push(this._onAfterChangesPopupContentHandle.add()),n.push(super.on(e,t)),f(n)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.content}_onAdded(e){}_onRemoved(e){e.featureSettings===this._featureSettings&&e._setFeatureSettings(void 0)}_forContent(e){if(this._uninitializedPopupContentExtensions.size)for(const e of this._uninitializedPopupContentExtensions)e._resolveContent(),e.content&&(w.set(e.content,e),this._uninitializedPopupContentExtensions.delete(e));if(!w.has(e)){const t=new z({content:e});w.set(e,t),t._setFeatureSettings(this._featureSettings),this._onAdded(t)}return w.get(e)}}
1
+ import{__decorate as e}from"tslib";import t from"@arcgis/core/PopupTemplate";import{Hyperlink as n}from"../Hyperlink.js";import{isPopupContentExtension as o}from"../ItemType.js";import{ArrayWrappedCollection as i}from"../mapping/support/ArrayWrappedCollection.js";import{FormatSettings as s}from"../support/FormatSettings.js";import{InitializableCollectionProxy as r}from"../support/InitializableCollectionProxy.js";import{filterJSONProperties as p,isDefault as a,serializable as u,shouldExcludeDefaults as h}from"../support/Serializable.js";import{Settings as l}from"../support/Settings.js";import{createIHandle as d,notifyChange as f,onWatch as m,watch as c}from"../support/observableUtils.js";import _ from"../utilities/_ReferenceCountedHandle.js";import{compare as g}from"../utilities/array.js";import{checkArg as C}from"../utilities/checkArg.js";import{getAllFieldInfos as S,getAllReferencedFieldNames as y,isPopupTemplate as v}from"../utilities/esri.js";import{isArcadeExpressionField as P,isRelationshipField as A}from"../utilities/field.js";import{objectKeys as x}from"../utilities/object.js";import{isQueryBasedRelationship as E}from"../utilities/relationships.js";import{PopupContentExtension as T,_popupContentExtensionMap as z}from"./PopupContentExtension.js";let w=class extends l{popupContentExtensions;_isDefaultPopupTemplate=!1;_popupContentCollection;get _popupContent(){return null==this._popupContentCollection&&(this._popupContentCollection=this._createPopupContentCollection()),this._popupContentCollection}get hyperlinkTemplates(){return this._getCollectionSetting("hyperlinkTemplates")}get popupTemplate(){return this._getSetting("popupTemplate")}set popupTemplate(e){let n;n=e instanceof Object&&!v(e)?t.fromJSON(e):e;const o=this?._feature?.schema?.createPopupTemplate()??this?._featureSource?.schema?.createPopupTemplate();n&&o&&(n.content=n.content??o.content,n.fieldInfos=n.fieldInfos??o.fieldInfos),this._setSetting("popupTemplate",n),this._isDefaultPopupTemplate=!1,this.featureSource?.schema?.fieldExtensions.toArray().forEach((e=>{e._clearFieldInfoCache()}))}get showRelatedRecordsWhenUnconfigured(){return this._getSetting("showRelatedRecordsWhenUnconfigured",!0)}set showRelatedRecordsWhenUnconfigured(e){this._setSetting("showRelatedRecordsWhenUnconfigured",e)}get formatSettings(){return this._getNestedSettings("formatSettings",(()=>new s))}get returnGeometry(){return this._getSetting("returnGeometry",!0)}set returnGeometry(e){this._setSetting("returnGeometry",e)}get outFields(){return this._getSetting("outFields",this._defaultOutFields)}set outFields(e){this._setSetting("outFields",e)}get outSpatialReference(){return this._getSetting("outSpatialReference")}set outSpatialReference(e){this._setSetting("outSpatialReference",e)}get maxAllowableOffset(){return this._getSetting("maxAllowableOffset")}set maxAllowableOffset(e){this._setSetting("maxAllowableOffset",e)}get zoomScale(){return this._getSetting("zoomScale")}set zoomScale(e){this._setSetting("zoomScale",e)}get zoomFactor(){const e=this._feature?this._feature.schema:this._featureSource?.schema,t=e&&"point"===e.geometryType?void 0:1.5;return this._getSetting("zoomFactor",t)}set zoomFactor(e){this._setSetting("zoomFactor",e)}get featureSource(){return this._featureSource}get feature(){return this._feature}_featureSource;_feature;constructor(e){super(e),this.popupContentExtensions=new b(this)}destroy(){this.parent=void 0,this.popupContentExtensions.destroy(),this._popupContentCollection?.destroy(),super.destroy()}get _defaultOutFields(){if(null==this.popupTemplate)return["*"];const e=S(this.popupTemplate),t=this.featureSource?.schema?.primaryKeyField;if(!e||!t)return["*"];const n=new Set([t]),o=new Map;this.featureSource.schema.fields.forEach((e=>{o.set(e.name.toLowerCase(),e.name)}));const i=new Set([...y(this.popupTemplate),...this.hyperlinkTemplates.toArray().flatMap((e=>e.getReferencedFields()))]);this._featureSource.relationships.forEach((e=>{E(e)&&i.add(e.keyField)}));const s=this.featureSource?.schema?.typeIdField;s&&i.add(s);const r=e.reduce(((e,t)=>((t.visible||t.isEditable&&this.featureSource.capabilities.supportsEditing)&&e.push(t.fieldName),e)),[]),p=new Set([...r,...i]);for(const e of p){if(P(e)||A(e))continue;const t=o.get(e.toLowerCase());t&&n.add(t)}return Array.from(n)}_setFeatureSource(e){this._featureSource=e,f(this,"featureSource")}_setFeature(e){this._feature=e,f(this,"feature")}toJSON(e="all"){const t=p(this._getSerializableProperties(),this,e)||{},n=t.popupContentExtensions?.filter((e=>{const t=this.parent;return!t?.popupContentExtensions?.some((t=>t.id===e.id))}));if(t)for(const e of x(t))this.isModified(e)||delete t[e];if(n?.length&&(t.popupContentExtensions=n),!h(e)||!a(t))return t}_hasSettingIncludingAncestor(e){return"outFields"===e||super._hasSettingIncludingAncestor(e)}_createPopupContentCollection(){return new i({parent:this,targetProperty:"popupTemplate",arrayProperty:"content"})}_getSerializableProperties(){return{hyperlinkTemplates:{serializeModes:["initial"],deserialize:e=>{e.forEach((e=>{this.hyperlinkTemplates.find((t=>this._hyperlinksAreEquivalent(t,e)))||this.hyperlinkTemplates.add(e instanceof n?e:new n(e))})),this.hyperlinkTemplates.toArray().forEach((t=>{const n=this.hyperlinkTemplates.indexOf(t),o=e.findIndex((e=>this._hyperlinksAreEquivalent(e,t)));o<0?this.hyperlinkTemplates.removeAt(n):o!==n&&this.hyperlinkTemplates.reorder(t,o)}))}},popupTemplate:{serializeModes:["project"],isDefault:()=>!this._isDefaultPopupTemplate},showRelatedRecordsWhenUnconfigured:{serializeModes:["initial"],default:!0},formatSettings:"initial",outFields:{serializeModes:["initial"],serialize:()=>this.isModified("outFields")?this.outFields:void 0},returnGeometry:{serializeModes:["initial"],default:!0},outSpatialReference:"initial",maxAllowableOffset:"initial",zoomScale:"initial",zoomFactor:{serializeModes:["initial"],isDefault:e=>{const t=this._feature?this._feature.schema:this._featureSource?.schema;return e===(t&&"point"===t.geometryType?void 0:1.5)}},popupContentExtensions:{serializeModes:["initial"],serialize:e=>this.popupContentExtensions.map((t=>t.toJSON(e))).filter((e=>!(e&&2===Object.keys(e).length&&e.id&&e.content))).toArray(),deserialize:e=>{e&&g(this.popupContentExtensions,e,{onNew:(e,t)=>{this.popupContentExtensions.add(o(e)?e:new T(e),t)},onMatch:(e,t,n,i)=>{o(t)||e.assignProperties(t),n!==i&&this.popupContentExtensions.reorder(e,i)},onMissing:e=>{this.popupContentExtensions.remove(e)},equals:(e,t)=>{if(!t)return!1;if(o(t))return t===e||t.id===e.id;const n=this.popupContentExtensions.indexOf(e);if(t.content&&n>-1){const e=this.popupContentExtensions.toArray();return T.matchesRef(e,n,t.content)}return e.id===t.id}})}}}}_hyperlinksAreEquivalent(e,t){if(e===t)return!0;const n=e=>e||"";return n(e.text)===n(t.text)&&n(e.url)===n(t.url)&&n(e.iconUrl)===n(t.iconUrl)&&n(e.target)===n(t.target)&&n(e.tooltip)===n(t.tooltip)}};w=e([u],w);export{w as FeatureSettings};class b extends r{get _collection(){return this._featureSettings._popupContent.map((e=>this._forContent(e))).concat(Array.from(this._uninitializedPopupContentExtensions))}get _popupTemplateIsInherited(){return this._featureSettings.parent&&this._featureSettings.popupTemplate===this._featureSettings.parent.popupTemplate}_featureSettings;_uninitializedPopupContentExtensions=new Set;_onChangePopupContentHandle=new _((()=>{const e=new WeakMap;return d([this._featureSettings._popupContent.on("before-remove",(t=>{e.set(t.item,this._forContent(t.item))})),this._featureSettings._popupContent.on("change",(t=>{const n={added:(t.added||[]).map((e=>this._forContent(e))),moved:(t.moved||[]).map((e=>this._forContent(e))),removed:(t.removed||[]).map((t=>{const n=e.get(t);return e.delete(t),n??this._forContent(t)})),target:this};this.emit("change",n)}))])}));_onBeforeAddPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-add",(e=>{this.emit("before-add",{...e,item:this._forContent(e.item)})}))));_onBeforeRemovePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-remove",(e=>{this.emit("before-remove",{...e,item:this._forContent(e.item)})}))));_onBeforeChangesPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("before-changes",(e=>{this.emit("before-changes",{...e,item:this._forContent(e.item)})}))));_onAfterAddPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-add",(e=>{this.emit("after-add",{...e,item:this._forContent(e.item)})}))));_onAfterRemovePopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-remove",(e=>{this.emit("after-remove",{...e,item:this._forContent(e.item)})}))));_onAfterChangesPopupContentHandle=new _((()=>this._featureSettings._popupContent.on("after-changes",(e=>{this.emit("after-changes",{...e})}))));constructor(e){super(),this._featureSettings=e,this._handles.add(m(this,"length",(()=>c(this._featureSettings,"_popupContent.length",(()=>f(this,"length")),{sync:!0}))))}forContent(e){if(C("content",e).isNotMissing(),this._featureSettings._popupContent.includes(e))return this._forContent(e)}add(e,n){if(C("contentX",e).isNotMissing(),this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),e.featureSettings&&e.featureSettings.popupContentExtensions.remove(e),e._setFeatureSettings(this._featureSettings),e.content){const t=z.get(e.content);if(z.set(e.content,e),t&&t!==e&&this._onRemoved(t),this._featureSettings._popupContent.includes(e.content))if(void 0===n){const n={added:[e],moved:[],removed:t?[t]:[],target:this};this.emit("change",n),this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),f(this,"length")}else this._featureSettings._popupContent.reorder(e.content,n);else this._featureSettings._popupContent.add(e.content,n)}else{this._uninitializedPopupContentExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("change",t),this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),f(this,"length")}return this._onAdded(e),this}removeAt(e){const n=this.getItemAt(e);if(void 0!==n){if(this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._uninitializedPopupContentExtensions.has(n)){this._uninitializedPopupContentExtensions.delete(n);const e={added:[],moved:[],removed:[n],target:this};this.emit("change",e),this.emit("after-remove",{item:n}),this.emit("after-changes",{target:this}),f(this,"length")}else this._featureSettings._popupContent.remove(n.content);return this._onRemoved(n),n}}reorder(e,n){if(e&&this._featureSettings._popupContent.includes(e.content))return this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._featureSettings._popupContent.reorder(e.content,n),e}sort(e){return this._popupTemplateIsInherited&&(this._featureSettings.popupTemplate=new t({content:this._featureSettings._popupContent.toArray()})),this._featureSettings._popupContent.sort(((t,n)=>e(this._forContent(t),this._forContent(n)))),this}on(e,t){const n=[];return"change"===e?n.push(this._onChangePopupContentHandle.add()):"before-add"===e?n.push(this._onBeforeAddPopupContentHandle.add()):"before-remove"===e?n.push(this._onBeforeRemovePopupContentHandle.add()):"before-changes"===e?n.push(this._onBeforeChangesPopupContentHandle.add()):"after-add"===e?n.push(this._onAfterAddPopupContentHandle.add()):"after-remove"===e?n.push(this._onAfterRemovePopupContentHandle.add()):"after-changes"===e&&n.push(this._onAfterChangesPopupContentHandle.add()),n.push(super.on(e,t)),d(n)}destroy(){if(this.destroyed)return;this._onChangePopupContentHandle.destroy(),this._onBeforeAddPopupContentHandle.destroy(),this._onBeforeRemovePopupContentHandle.destroy(),this._onBeforeChangesPopupContentHandle.destroy(),this._onAfterAddPopupContentHandle.destroy(),this._onAfterRemovePopupContentHandle.destroy(),this._onAfterChangesPopupContentHandle.destroy();const e=new Set;this._featureSettings._popupContent.forEach((t=>{const n=z.get(t);n&&e.add(n)})),this._uninitializedPopupContentExtensions.forEach((t=>{e.add(t)})),e.forEach((e=>{e.featureSettings===this._featureSettings&&(this._onRemoved(e),e.destroy())})),this._uninitializedPopupContentExtensions.clear(),super.destroy()}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.content}_onAdded(e){}_onRemoved(e){e.featureSettings===this._featureSettings&&e._setFeatureSettings(void 0),e.content&&z.get(e.content)===e&&z.delete(e.content)}_forContent(e){if(this._uninitializedPopupContentExtensions.size)for(const e of this._uninitializedPopupContentExtensions)e._resolveContent(),e.content&&(z.set(e.content,e),this._uninitializedPopupContentExtensions.delete(e));if(!z.has(e)){const t=new T({content:e});z.set(e,t),t._setFeatureSettings(this._featureSettings),this._onAdded(t)}return z.get(e)}}
@@ -157,6 +157,7 @@ export declare abstract class FeatureSourceBase<TProperties extends FeatureSourc
157
157
  protected _initializableChildCollections(): IterableIterator<Collection<InitializableBase<unknown>>>;
158
158
  protected _onInitialize(): Promise<void>;
159
159
  protected _postInitialize(): Promise<void>;
160
+ protected _onDestroy(): Promise<void>;
160
161
  /**
161
162
  * Called to create the {@link data/Schema!Schema} for this feature source.
162
163
  *
@@ -1 +1 @@
1
- import t from"@arcgis/core/core/Collection";import e from"@arcgis/core/popup/content/TextContent.js";import{ArgumentError as i}from"../ArgumentError.js";import{EntityBase as s}from"../Entity.js";import{Hyperlink as r}from"../Hyperlink.js";import{InvalidOperationError as a}from"../InvalidOperationError.js";import{isMenu as n,isRelationship as o}from"../ItemType.js";import{NotFoundError as u}from"../NotFoundError.js";import{FeatureReadOptions as c}from"../data/FeatureSource.js";import{Menu as h}from"../menus/Menu.js";import{initializeCollection as l}from"../support/InitializableBase.js";import{CollectionProxy as p}from"../utilities/CollectionProxy.js";import{first as d}from"../utilities/asyncIterable.js";import{checkArg as f}from"../utilities/checkArg.js";import{compare as m}from"../utilities/collection.js";import{every as g}from"../utilities/iterable.js";import{getLogger as _}from"../utilities/log.js";import{FeatureSettings as S}from"./FeatureSettings.js";import{Schema as y}from"./Schema.js";import{TaskSettings as w}from"./TaskSettings.js";import{Relationship as A}from"./_Relationship.js";const F="Adding features is not supported.",z="Updating features is not supported.",j="Deleting features is not supported.",k=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsAttachmentEditing:!1}),M=_("FeatureSourceBase");export class FeatureSourceBase extends s{iconUrl;onAddFeature;onEditFeature;get featureActions(){return this._featureActions}set featureActions(t){this._featureActions=t,t&&this.isInitialized&&!t.isInitialized&&(async()=>{try{await t.initialize()}catch(t){t instanceof Error&&M.error({message:"An error occurred while initializing feature action menu.",error:t})}})()}get featureSourceActions(){return this._featureSourceActions}set featureSourceActions(t){this._featureSourceActions=t,t&&this.isInitialized&&!t.isInitialized&&(async()=>{try{await t.initialize()}catch(t){t instanceof Error&&M.error({message:"An error occurred while initializing feature source action menu.",error:t})}})()}queryService;get capabilities(){return this._capabilities()}get featureSettings(){return null==this._featureSettings&&(this._featureSettings=this._createAndSetupFeatureSettings()),this._featureSettings}get taskSettings(){return null==this._taskSettings&&(this._taskSettings=this._createTaskSettings()),this._taskSettings}get schema(){return null==this._schema&&(this._schema=this._createAndSetupSchema()),this._schema}get hyperlinks(){return null==this._hyperlinks&&(this._hyperlinks=this._createHyperlinks()),this._hyperlinks}get relationships(){return null==this._relationships&&(this._relationships=this._createRelationships()),this._relationships}_featureActions;_featureSourceActions;_featureSettings;_taskSettings;_schema;_hyperlinks;_relationships;getFullExtent(){}async getAttachments(t){return f("feature",t).isNotMissing(),await this.initialize(),this._getAttachments(t)}async addAttachment(t,e){if(f("feature",t).isNotMissing(),f("attachment",e).isNotMissing(),t.source&&t.source!==this)throw new i("feature",`Cannot add an attachment to a feature not of this source (${this.title??this.id})`);return await this.initialize(),this._addAttachment(t,e)}async deleteAttachments(t,e){if(f("feature",t).isNotMissing(),f("attachmentIds",e).isNotMissing(),t.source&&t.source!==this)throw new i("feature",`Cannot delete attachments from a feature not of this source (${this.title??this.id})`);await this.initialize(),await this._deleteAttachments(t,e)}async getFeature(t,e){f("id",t).isNotMissing();const i=this.getFeatures([t],e),s=await d(i);if(!s)throw new u("No feature exists with ID '{0}'.",t);return s}getFeatures(t,e){f("ids",t).isNotMissing();const i=this;return async function*(){await i.initialize(),yield*i._getFeatures(t,{...c.DEFAULTS,...c.fromFeatureSource(i),...e})}()}async addFeature(t,e){f("feature",t).isNotMissing(),await this.addFeatures([t])}async addFeatures(t,e){if(f("features",t).isNotMissing(),await this.initialize(),!this.capabilities.supportsAdd)throw new a(F);await this._addFeatures(t,e)}async updateFeature(t,e){f("feature",t).isNotMissing(),await this.updateFeatures([t])}async updateFeatures(t,e){if(f("features",t).isNotMissing(),await this.initialize(),!this.capabilities.supportsUpdate)throw new a(z);await this._updateFeatures(t,e)}async deleteFeature(t,e){f("feature",t).isNotMissing(),await this.deleteFeatures([t])}async deleteFeatures(t,e){if(f("features",t).isNotMissing(),f("features",t).satisfies((t=>g(t,(t=>"string"==typeof t?null!=t:null!=t.primaryKey))),"Features must have an object id to be deleted."),await this.initialize(),!this.capabilities.supportsDelete)throw new a(j);const i=[];for(const e of t)i.push("string"==typeof e?e:e.primaryKey);await this._deleteFeatures(i,e)}_getSerializableProperties(){return{...super._getSerializableProperties(),featureSettings:{serializeModes:["initial","project"],isDefault:t=>{if(!t)return!0;if(t.constructor===Object){if(!Object.keys(t).length)return!0}return!1}},taskSettings:"initial",onAddFeature:"initial",onEditFeature:"initial",schema:["initial","project"],relationships:{serializeModes:["initial"],serialize:t=>this.relationships?this.relationships.filter((t=>"ArcGISRelationship"!==t.relationshipType)).toArray():[],deserialize:t=>{m(this.relationships,t,{onNew:t=>{o(t)?this.relationships.add(t):this.relationships.add(A.create(t))},onMatch:(t,e)=>{o(t)&&t.assignProperties({title:e.title})},onMissing:t=>{"ArcGISRelationship"!==t.relationshipType&&this.relationships.remove(t)},equals:(t,e)=>t.id===e.id})},default:[]},hyperlinks:{serialize:!1,deserialize:t=>{this.hyperlinks.removeAll(),this.hyperlinks.addMany(t.map((t=>t instanceof r?t:new r(t))))}},iconUrl:"initial",featureActions:{serializeModes:["initial"],deserialize:t=>{t?n(t)?this.featureActions=t:this.featureActions?this.featureActions.assignProperties(t):this.featureActions=h.create(t):this.featureActions=void 0}},featureSourceActions:{serializeModes:["initial"],deserialize:t=>{t?n(t)?this.featureSourceActions=t:this.featureSourceActions?this.featureSourceActions.assignProperties(t):this.featureSourceActions=h.create(t):this.featureSourceActions=void 0}}}}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.schema.fieldExtensions}async _onInitialize(){await super._onInitialize(),this.featureActions&&await this.featureActions.initialize(),this.featureSourceActions&&await this.featureSourceActions.initialize()}async _postInitialize(){await super._postInitialize(),this.featureSettings.popupTemplate||(this.featureSettings.popupTemplate=this.schema.createPopupTemplate(),this.featureSettings._isDefaultPopupTemplate=!0);const{popupTemplate:t}=this.featureSettings;"function"==typeof t.content&&(t.content=t.content()),t.content=await t.content,"string"==typeof t.content&&(t.content=[new e({text:t.content})]),!t.title&&this.schema.displayField&&(t.title=`{${this.schema.displayField}}`),await l(this.featureSettings.popupContentExtensions,{target:this,onInitializeWarning:t=>this.emit("initializeWarning",t)}),await Promise.all(this.relationships.toArray().map((t=>t.relatedSource?.initialize())))}_createSchema(t){return new y(t)}_createFeatureSettings(){return new S}_createTaskSettings(){return new w}_createRelationships(){return new RelationshipCollection(this)}_createHyperlinks(){return new t}async _getAttachments(t){return[]}async _addAttachment(t,e){throw new a("Adding attachments is not supported.")}async _deleteAttachments(t,e){throw new a("Deleting attachments is not supported.")}_getFeatures(t,e){const{primaryKeyField:i}=this.schema;if(this.queryService&&i){const s=t.map((t=>`${i} = ${t}`)).join(" OR ");return this.queryService.query(this,s,e)}throw new a("Querying features is not supported.")}_addFeatures(t,e){throw new a(F)}_updateFeatures(t,e){throw new a(z)}_deleteFeatures(t,e){throw new a(j)}_capabilities(){return k}_isRelationship(t){return"function"==typeof t.getRelatedFeatures}_createAndSetupSchema(){const t=this._createSchema();return t._featureSettings=this.featureSettings,t}_createAndSetupFeatureSettings(){const t=this._createFeatureSettings();return t._setFeatureSource(this),t}}export class RelationshipCollection extends p{_source;constructor(e){super(new t),this._source=e}add(t,e){return f("relationship",t).isNotMissing(),t.source&&t.source.relationships.remove(t),o(t)&&t._setSource(this._source),super.add(t,e)}removeAt(t){const e=super.removeAt(t);return o(e)&&e._setSource(void 0),e}}
1
+ import t from"@arcgis/core/core/Collection";import e from"@arcgis/core/popup/content/TextContent.js";import{ArgumentError as i}from"../ArgumentError.js";import{EntityBase as s}from"../Entity.js";import{Hyperlink as r}from"../Hyperlink.js";import{InvalidOperationError as a}from"../InvalidOperationError.js";import{isMenu as n,isRelationship as o}from"../ItemType.js";import{NotFoundError as u}from"../NotFoundError.js";import{FeatureReadOptions as c}from"../data/FeatureSource.js";import{Menu as h}from"../menus/Menu.js";import{initializeCollection as l}from"../support/InitializableBase.js";import{CollectionProxy as p}from"../utilities/CollectionProxy.js";import{first as d}from"../utilities/asyncIterable.js";import{checkArg as f}from"../utilities/checkArg.js";import{compare as m}from"../utilities/collection.js";import{every as g}from"../utilities/iterable.js";import{getLogger as _}from"../utilities/log.js";import{FeatureSettings as y}from"./FeatureSettings.js";import{Schema as S}from"./Schema.js";import{TaskSettings as w}from"./TaskSettings.js";import{Relationship as A}from"./_Relationship.js";const F="Adding features is not supported.",z="Updating features is not supported.",j="Deleting features is not supported.",k=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsAttachmentEditing:!1}),M=_("FeatureSourceBase");export class FeatureSourceBase extends s{iconUrl;onAddFeature;onEditFeature;get featureActions(){return this._featureActions}set featureActions(t){this._featureActions=t,t&&this.isInitialized&&!t.isInitialized&&(async()=>{try{await t.initialize()}catch(t){t instanceof Error&&M.error({message:"An error occurred while initializing feature action menu.",error:t})}})()}get featureSourceActions(){return this._featureSourceActions}set featureSourceActions(t){this._featureSourceActions=t,t&&this.isInitialized&&!t.isInitialized&&(async()=>{try{await t.initialize()}catch(t){t instanceof Error&&M.error({message:"An error occurred while initializing feature source action menu.",error:t})}})()}queryService;get capabilities(){return this._capabilities()}get featureSettings(){return null==this._featureSettings&&(this._featureSettings=this._createAndSetupFeatureSettings()),this._featureSettings}get taskSettings(){return null==this._taskSettings&&(this._taskSettings=this._createTaskSettings()),this._taskSettings}get schema(){return null==this._schema&&(this._schema=this._createAndSetupSchema()),this._schema}get hyperlinks(){return null==this._hyperlinks&&(this._hyperlinks=this._createHyperlinks()),this._hyperlinks}get relationships(){return null==this._relationships&&(this._relationships=this._createRelationships()),this._relationships}_featureActions;_featureSourceActions;_featureSettings;_taskSettings;_schema;_hyperlinks;_relationships;getFullExtent(){}async getAttachments(t){return f("feature",t).isNotMissing(),await this.initialize(),this._getAttachments(t)}async addAttachment(t,e){if(f("feature",t).isNotMissing(),f("attachment",e).isNotMissing(),t.source&&t.source!==this)throw new i("feature",`Cannot add an attachment to a feature not of this source (${this.title??this.id})`);return await this.initialize(),this._addAttachment(t,e)}async deleteAttachments(t,e){if(f("feature",t).isNotMissing(),f("attachmentIds",e).isNotMissing(),t.source&&t.source!==this)throw new i("feature",`Cannot delete attachments from a feature not of this source (${this.title??this.id})`);await this.initialize(),await this._deleteAttachments(t,e)}async getFeature(t,e){f("id",t).isNotMissing();const i=this.getFeatures([t],e),s=await d(i);if(!s)throw new u("No feature exists with ID '{0}'.",t);return s}getFeatures(t,e){f("ids",t).isNotMissing();const i=this;return async function*(){await i.initialize(),yield*i._getFeatures(t,{...c.DEFAULTS,...c.fromFeatureSource(i),...e})}()}async addFeature(t,e){f("feature",t).isNotMissing(),await this.addFeatures([t])}async addFeatures(t,e){if(f("features",t).isNotMissing(),await this.initialize(),!this.capabilities.supportsAdd)throw new a(F);await this._addFeatures(t,e)}async updateFeature(t,e){f("feature",t).isNotMissing(),await this.updateFeatures([t])}async updateFeatures(t,e){if(f("features",t).isNotMissing(),await this.initialize(),!this.capabilities.supportsUpdate)throw new a(z);await this._updateFeatures(t,e)}async deleteFeature(t,e){f("feature",t).isNotMissing(),await this.deleteFeatures([t])}async deleteFeatures(t,e){if(f("features",t).isNotMissing(),f("features",t).satisfies((t=>g(t,(t=>"string"==typeof t?null!=t:null!=t.primaryKey))),"Features must have an object id to be deleted."),await this.initialize(),!this.capabilities.supportsDelete)throw new a(j);const i=[];for(const e of t)i.push("string"==typeof e?e:e.primaryKey);await this._deleteFeatures(i,e)}_getSerializableProperties(){return{...super._getSerializableProperties(),featureSettings:{serializeModes:["initial","project"],isDefault:t=>{if(!t)return!0;if(t.constructor===Object){if(!Object.keys(t).length)return!0}return!1}},taskSettings:"initial",onAddFeature:"initial",onEditFeature:"initial",schema:["initial","project"],relationships:{serializeModes:["initial"],serialize:t=>this.relationships?this.relationships.filter((t=>"ArcGISRelationship"!==t.relationshipType)).toArray():[],deserialize:t=>{m(this.relationships,t,{onNew:t=>{o(t)?this.relationships.add(t):this.relationships.add(A.create(t))},onMatch:(t,e)=>{o(t)&&t.assignProperties({title:e.title})},onMissing:t=>{"ArcGISRelationship"!==t.relationshipType&&this.relationships.remove(t)},equals:(t,e)=>t.id===e.id})},default:[]},hyperlinks:{serialize:!1,deserialize:t=>{this.hyperlinks.removeAll(),this.hyperlinks.addMany(t.map((t=>t instanceof r?t:new r(t))))}},iconUrl:"initial",featureActions:{serializeModes:["initial"],deserialize:t=>{t?n(t)?this.featureActions=t:this.featureActions?this.featureActions.assignProperties(t):this.featureActions=h.create(t):this.featureActions=void 0}},featureSourceActions:{serializeModes:["initial"],deserialize:t=>{t?n(t)?this.featureSourceActions=t:this.featureSourceActions?this.featureSourceActions.assignProperties(t):this.featureSourceActions=h.create(t):this.featureSourceActions=void 0}}}}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.schema.fieldExtensions}async _onInitialize(){await super._onInitialize(),this.featureActions&&await this.featureActions.initialize(),this.featureSourceActions&&await this.featureSourceActions.initialize()}async _postInitialize(){await super._postInitialize(),this.featureSettings.popupTemplate||(this.featureSettings.popupTemplate=this.schema.createPopupTemplate(),this.featureSettings._isDefaultPopupTemplate=!0);const{popupTemplate:t}=this.featureSettings;"function"==typeof t.content&&(t.content=t.content()),t.content=await t.content,"string"==typeof t.content&&(t.content=[new e({text:t.content})]),!t.title&&this.schema.displayField&&(t.title=`{${this.schema.displayField}}`),await l(this.featureSettings.popupContentExtensions,{target:this,onInitializeWarning:t=>this.emit("initializeWarning",t)}),await Promise.all(this.relationships.toArray().map((t=>t.relatedSource?.initialize())))}async _onDestroy(){this._featureActions&&await this._featureActions.destroy(),this._featureSourceActions&&await this._featureSourceActions.destroy(),this._taskSettings&&(this._taskSettings.parent=void 0),this._featureSettings?.destroy(),this._schema?.destroy(),this._hyperlinks?.destroy(),this._relationships?.removeAll(),this._relationships?.destroy(),await super._onDestroy()}_createSchema(t){return new S(t)}_createFeatureSettings(){return new y}_createTaskSettings(){return new w}_createRelationships(){return new RelationshipCollection(this)}_createHyperlinks(){return new t}async _getAttachments(t){return[]}async _addAttachment(t,e){throw new a("Adding attachments is not supported.")}async _deleteAttachments(t,e){throw new a("Deleting attachments is not supported.")}_getFeatures(t,e){const{primaryKeyField:i}=this.schema;if(this.queryService&&i){const s=t.map((t=>`${i} = ${t}`)).join(" OR ");return this.queryService.query(this,s,e)}throw new a("Querying features is not supported.")}_addFeatures(t,e){throw new a(F)}_updateFeatures(t,e){throw new a(z)}_deleteFeatures(t,e){throw new a(j)}_capabilities(){return k}_isRelationship(t){return"function"==typeof t.getRelatedFeatures}_createAndSetupSchema(){const t=this._createSchema();return t._featureSettings=this.featureSettings,t}_createAndSetupFeatureSettings(){const t=this._createFeatureSettings();return t._setFeatureSource(this),t}}export class RelationshipCollection extends p{_source;constructor(e){super(new t),this._source=e}add(t,e){return f("relationship",t).isNotMissing(),t.source&&t.source.relationships.remove(t),o(t)&&t._setSource(this._source),super.add(t,e)}removeAt(t){const e=super.removeAt(t);return o(e)&&e._setSource(void 0),e}}
@@ -110,6 +110,7 @@ export declare class FieldExtension extends EntityBase<FieldExtensionProperties>
110
110
  * @param fieldRef The field reference to match with a field.
111
111
  */
112
112
  static matchesRef(fieldX: FieldExtension | Field, fieldRef: FieldProperties): boolean;
113
+ destroy(): Promise<void>;
113
114
  protected _getSerializableProperties(): PropertyDefs<FieldExtensionProperties>;
114
115
  protected _onInitialize(): Promise<void>;
115
116
  private _setField;
@@ -1 +1 @@
1
- var e;import{__decorate as t}from"tslib";import i from"@arcgis/core/layers/support/Field";import{EntityBase as s}from"../Entity.js";import{InvalidOperationError as r}from"../InvalidOperationError.js";import{isFieldExtension as o,ItemType as a}from"../ItemType.js";import{FormatSettings as f}from"../support/FormatSettings.js";import{serializable as n}from"../support/Serializable.js";import{notifyChange as l,onWatch as d,watch as h}from"../support/observableUtils.js";import{isField as m}from"../utilities/esri.js";import{isArcadeExpressionField as _,isFieldSearchable as p}from"../utilities/field.js";import{esriFormatToGeocortexFormat as c}from"../utilities/format/date.js";import{NumberFormat as F}from"../utilities/format/formats.js";import{esriFormatToGeocortexFormat as u}from"../utilities/format/time.js";import{deepClone as g}from"../utilities/object.js";import{caseInsensitiveEquals as I}from"../utilities/string.js";export const _fieldExtensionMap=new WeakMap;let S=e=class extends s{get field(){return this._field}get schema(){return this._schema}get searchable(){return this._searchable&&this.supportsSearchable}set searchable(e){this._searchable=e}get supportsSearchable(){return p(this._field?.type)}get fieldInfo(){if(this._fieldInfo)return this._fieldInfo;if(!this.field?.name)return;const e=this._schema?._featureSettings?.popupTemplate,t=e?.fieldInfos||[];return this._fieldInfo=t.find((e=>I(e.fieldName,this.field.name))),this._fieldInfo}format="{0}";formatSettings=new b(this);_itemType=a.FIELD_EXTENSION;_field;_fieldInfo;_schema;_searchable=!0;_deferredFieldProperties;_originalRef;constructor(e){super(e);const{field:t}=e??{};m(t)?this._setField(t):"string"==typeof t?this._deferredFieldProperties={$ref:t}:t?t.$ref?this._deferredFieldProperties=t:this._setField(i.fromJSON(t)):this._setField(new i),d(this,"fieldInfo",(()=>h(this,"schema._featureSettings.featureSource",(()=>l(this,"fieldInfo")),{sync:!0}))),h(this,"schema._featureSettings",(e=>{this.formatSettings.parent=e?e.formatSettings:void 0}),{sync:!0})}static matchesRef(e,t){return o(e)?I(e.field?.name??e._deferredFieldProperties?.$ref,t.$ref??t.name):I(e.name,t.$ref??t.name)}_clearFieldInfoCache(){this._fieldInfo=void 0}_switchField(e){e&&this._field!==e&&(this._field=e,_fieldExtensionMap.set(e,this))}_setSchema(e){this._schema=e,this._resolveField(),l(this,"schema"),l(this,"fieldInfo")}_resolveField(){if(this._field||!this._deferredFieldProperties||!this._schema)return;const t=this._schema.fields.find((t=>e.matchesRef(t,this._deferredFieldProperties)));t&&(this._setField(t),this.assignProperties({field:this._deferredFieldProperties}),this._originalRef=this._deferredFieldProperties.$ref,delete this._deferredFieldProperties,_fieldExtensionMap.set(t,this))}_getSerializableProperties(){return{...super._getSerializableProperties(),field:{serializeModes:["initial"],serialize:()=>this.field?this._originalRef?{$ref:this._originalRef}:this._schema?.fields.includes(this._field)&&this.field.name?{$ref:this.field.name}:this.field.toJSON():this._deferredFieldProperties?g(this._deferredFieldProperties):void 0,deserialize:e=>{if(m(e)&&e!==this.field)throw new Error("Property 'field' is read-only.")}},searchable:{serializeModes:["initial"],isDefault:e=>e===(this.supportsSearchable&&!_(this._field?.name))},format:{serializeModes:["initial"],default:"{0}"},formatSettings:"initial"}}async _onInitialize(){if(this._resolveField(),!this._field){const e=this._deferredFieldProperties.$ref;throw this._schema?new r(`Field not found with name: ${e}. Field does not exist.`):new r(`Field not found with name: ${e}. Field does not have a parent schema.`)}}_setField(e){this._field=e,!_(this._field?.name)&&this.supportsSearchable||(this.searchable=!1),l(this,"field"),l(this,"fieldInfo")}};S=e=t([n],S);export{S as FieldExtension};let b=class extends f{fieldExtension;constructor(e,t){super(t),this.fieldExtension=e,d(this,"dateFormat",(()=>h(this.fieldExtension,"fieldInfo.format.dateFormat",(()=>l(this,"dateFormat")),{sync:!0}))),d(this,"timeFormat",(()=>h(this.fieldExtension,"fieldInfo.format.dateFormat",(()=>l(this,"timeFormat")),{sync:!0}))),d(this,"fractionalDigits",(()=>h(this.fieldExtension,"fieldInfo.format.places",(()=>l(this,"fractionalDigits")),{sync:!0}))),d(this,"numberFormat",(()=>h(this.fieldExtension,"fieldInfo.format.digitSeparator",(()=>l(this,"numberFormat")),{sync:!0})))}get fractionalDigits(){const e=this.fieldExtension.fieldInfo?.format?.places;return!this.isModified("fractionalDigits")&&this.useFieldInfo&&e?e:this._getSetting("fractionalDigits")}set fractionalDigits(e){this._setSetting("fractionalDigits",e)}get numberFormat(){const e=this.fieldExtension.fieldInfo?.format?.digitSeparator;return!this.isModified("numberFormat")&&this.useFieldInfo&&e?e?F.NUMBER:F.FIXED_POINT:this._getSetting("numberFormat")}set numberFormat(e){this._setSetting("numberFormat",e)}get dateFormat(){const e=this.fieldExtension.fieldInfo?.format?.dateFormat;return!this.isModified("dateFormat")&&this.useFieldInfo&&e?c(e):this._getSetting("dateFormat")}set dateFormat(e){this._setSetting("dateFormat",e)}get timeFormat(){const e=this.fieldExtension.fieldInfo?.format?.dateFormat;return!this.isModified("timeFormat")&&this.useFieldInfo&&e&&"time-only"===this.fieldExtension.field.type?u(e):this._getSetting("timeFormat")}set timeFormat(e){this._setSetting("timeFormat",e)}};b=t([n],b);
1
+ var e;import{__decorate as t}from"tslib";import i from"@arcgis/core/layers/support/Field";import{EntityBase as s}from"../Entity.js";import{InvalidOperationError as r}from"../InvalidOperationError.js";import{isFieldExtension as o,ItemType as a}from"../ItemType.js";import{FormatSettings as f}from"../support/FormatSettings.js";import{serializable as d}from"../support/Serializable.js";import{notifyChange as n,onWatch as l,watch as h}from"../support/observableUtils.js";import{isField as m}from"../utilities/esri.js";import{isArcadeExpressionField as _,isFieldSearchable as p}from"../utilities/field.js";import{esriFormatToGeocortexFormat as c}from"../utilities/format/date.js";import{NumberFormat as F}from"../utilities/format/formats.js";import{esriFormatToGeocortexFormat as u}from"../utilities/format/time.js";import{deepClone as g}from"../utilities/object.js";import{caseInsensitiveEquals as I}from"../utilities/string.js";export const _fieldExtensionMap=new WeakMap;let S=e=class extends s{get field(){return this._field}get schema(){return this._schema}get searchable(){return this._searchable&&this.supportsSearchable}set searchable(e){this._searchable=e}get supportsSearchable(){return p(this._field?.type)}get fieldInfo(){if(this._fieldInfo)return this._fieldInfo;if(!this.field?.name)return;const e=this._schema?._featureSettings?.popupTemplate,t=e?.fieldInfos||[];return this._fieldInfo=t.find((e=>I(e.fieldName,this.field.name))),this._fieldInfo}format="{0}";formatSettings=new E(this);_itemType=a.FIELD_EXTENSION;_field;_fieldInfo;_schema;_searchable=!0;_deferredFieldProperties;_originalRef;constructor(e){super(e);const{field:t}=e??{};m(t)?this._setField(t):"string"==typeof t?this._deferredFieldProperties={$ref:t}:t?t.$ref?this._deferredFieldProperties=t:this._setField(i.fromJSON(t)):this._setField(new i),this._handles.add([l(this,"fieldInfo",(()=>h(this,"schema._featureSettings.featureSource",(()=>n(this,"fieldInfo")),{sync:!0}))),h(this,"schema._featureSettings",(e=>{this.formatSettings.parent=e?e.formatSettings:void 0}),{sync:!0})])}static matchesRef(e,t){return o(e)?I(e.field?.name??e._deferredFieldProperties?.$ref,t.$ref??t.name):I(e.name,t.$ref??t.name)}async destroy(){this._field&&_fieldExtensionMap.get(this._field)===this&&_fieldExtensionMap.delete(this._field),this.formatSettings.destroy(),await super.destroy()}_clearFieldInfoCache(){this._fieldInfo=void 0}_switchField(e){if(!e)return;const t=_fieldExtensionMap.get(e);t&&t!==this&&(t._setSchema(void 0),t.destroy());this._field!==e?(this._field&&_fieldExtensionMap.get(this._field)===this&&_fieldExtensionMap.delete(this._field),this._setField(e),_fieldExtensionMap.set(e,this)):_fieldExtensionMap.set(e,this)}_setSchema(e){this._schema=e,this._resolveField(),n(this,"schema"),n(this,"fieldInfo")}_resolveField(){if(this._field||!this._deferredFieldProperties||!this._schema)return;const t=this._schema.fields.find((t=>e.matchesRef(t,this._deferredFieldProperties)));t&&(this._setField(t),this.assignProperties({field:this._deferredFieldProperties}),this._originalRef=this._deferredFieldProperties.$ref,delete this._deferredFieldProperties,_fieldExtensionMap.set(t,this))}_getSerializableProperties(){return{...super._getSerializableProperties(),field:{serializeModes:["initial"],serialize:()=>this.field?this._originalRef?{$ref:this._originalRef}:this._schema?.fields.includes(this._field)&&this.field.name?{$ref:this.field.name}:this.field.toJSON():this._deferredFieldProperties?g(this._deferredFieldProperties):void 0,deserialize:e=>{if(m(e)&&e!==this.field)throw new Error("Property 'field' is read-only.")}},searchable:{serializeModes:["initial"],isDefault:e=>e===(this.supportsSearchable&&!_(this._field?.name))},format:{serializeModes:["initial"],default:"{0}"},formatSettings:"initial"}}async _onInitialize(){if(this._resolveField(),!this._field){const e=this._deferredFieldProperties.$ref;throw this._schema?new r(`Field not found with name: ${e}. Field does not exist.`):new r(`Field not found with name: ${e}. Field does not have a parent schema.`)}}_setField(e){this._field=e,!_(this._field?.name)&&this.supportsSearchable||(this.searchable=!1),n(this,"field"),n(this,"fieldInfo")}};S=e=t([d],S);export{S as FieldExtension};let E=class extends f{fieldExtension;constructor(e,t){super(t),this.fieldExtension=e,this._handles.add([l(this,"dateFormat",(()=>h(this.fieldExtension,"fieldInfo.format.dateFormat",(()=>n(this,"dateFormat")),{sync:!0}))),l(this,"timeFormat",(()=>h(this.fieldExtension,"fieldInfo.format.dateFormat",(()=>n(this,"timeFormat")),{sync:!0}))),l(this,"fractionalDigits",(()=>h(this.fieldExtension,"fieldInfo.format.places",(()=>n(this,"fractionalDigits")),{sync:!0}))),l(this,"numberFormat",(()=>h(this.fieldExtension,"fieldInfo.format.digitSeparator",(()=>n(this,"numberFormat")),{sync:!0})))])}get fractionalDigits(){const e=this.fieldExtension.fieldInfo?.format?.places;return!this.isModified("fractionalDigits")&&this.useFieldInfo&&e?e:this._getSetting("fractionalDigits")}set fractionalDigits(e){this._setSetting("fractionalDigits",e)}get numberFormat(){const e=this.fieldExtension.fieldInfo?.format?.digitSeparator;return!this.isModified("numberFormat")&&this.useFieldInfo&&e?e?F.NUMBER:F.FIXED_POINT:this._getSetting("numberFormat")}set numberFormat(e){this._setSetting("numberFormat",e)}get dateFormat(){const e=this.fieldExtension.fieldInfo?.format?.dateFormat;return!this.isModified("dateFormat")&&this.useFieldInfo&&e?c(e):this._getSetting("dateFormat")}set dateFormat(e){this._setSetting("dateFormat",e)}get timeFormat(){const e=this.fieldExtension.fieldInfo?.format?.dateFormat;return!this.isModified("timeFormat")&&this.useFieldInfo&&e&&"time-only"===this.fieldExtension.field.type?u(e):this._getSetting("timeFormat")}set timeFormat(e){this._setSetting("timeFormat",e)}destroy(){this.parent=void 0,super.destroy()}};E=t([d],E);
@@ -98,6 +98,7 @@ export declare class PopupContentExtension extends EntityBase<PopupContentExtens
98
98
  * popupContent.
99
99
  */
100
100
  static matchesRef(popupContent: (PopupContentExtension | Content)[], popupContentIndex: number, popupContentRef: ContentProperties): boolean;
101
+ destroy(): Promise<void>;
101
102
  protected _getSerializableProperties(): PropertyDefs<PopupContentExtensionProperties>;
102
103
  protected _onInitialize(): Promise<void>;
103
104
  private _setContent;
@@ -1 +1 @@
1
- var t;import{__decorate as e}from"tslib";import i from"@arcgis/core/core/Collection";import n from"@arcgis/core/popup/content/Content.js";import{EntityBase as r}from"../Entity.js";import{InvalidOperationError as s}from"../InvalidOperationError.js";import{ItemType as o}from"../ItemType.js";import{jsonToContent as p}from"../json/PopupInfoJson.js";import{serializable as a}from"../support/Serializable.js";import{notifyChange as f}from"../support/observableUtils.js";import{compare as d}from"../utilities/array.js";import{isCustomContent as u,isExpressionContent as h,isPopupContent as l,isTextContent as _}from"../utilities/esri.js";import{deepClone as m}from"../utilities/object.js";export const _popupContentExtensionMap=new WeakMap;let c=t=class extends r{get content(){return this._content}get featureSettings(){return this._featureSettings}_deferredContentProperties;visibleInSummary;summaryHiddenFields=new i;_itemType=o.POPUP_CONTENT_EXTENSION;_content;_featureSettings;_originalRef;get _index(){return Array.isArray(this.featureSettings?.popupTemplate?.content)?this.featureSettings.popupTemplate.content.indexOf(this.content):-1}constructor(t){super(t);const{content:e,visibleInSummary:i}=t??{};l(e)?this._setContent(e):"string"==typeof e?this._deferredContentProperties={$ref:e}:e?e.$ref?this._deferredContentProperties=e:this._setContent(p(e)):this._setContent(new n),this.visibleInSummary=i??this._getDefaultSummaryVisibility()}static matchesRef(e,i,n){const r=e.map(((e,i)=>y(e,e instanceof t&&e._index>=0?e._index:i))),s=r[i],{type:o,index:p,title:a,text:f}=n.$ref;if(o!==s.type)return!1;if("text"===o&&f===s.text)return!0;if(a&&a===s.title)return!0;if("number"==typeof p&&p===s.index)return!0;return 1===r.map(((t,e)=>t.type===o?t.index:void 0)).filter((t=>"number"==typeof t)).length}_switchContent(t){t&&this._content!==t&&(this._content=t,this._originalRef=y(t,this._index),_popupContentExtensionMap.set(t,this),f(this,"content"))}_setFeatureSettings(t){this._featureSettings=t,this._resolveContent(),f(this,"featureSettings")}_resolveContent(){if(this._content||!this._deferredContentProperties||!this._featureSettings)return;const e=this._featureSettings._popupContent.find(((e,i)=>t.matchesRef(this.featureSettings._popupContent.toArray(),i,this._deferredContentProperties)));e&&(this._setContent(e),this.assignProperties({content:this._deferredContentProperties}),this._originalRef={...this._deferredContentProperties.$ref},delete this._deferredContentProperties,_popupContentExtensionMap.set(e,this))}_getSerializableProperties(){return{...super._getSerializableProperties(),content:{serializeModes:["initial"],serialize:()=>this.content?this._originalRef?{$ref:this._originalRef}:this._featureSettings?._popupContent.includes(this._content)?{$ref:y(this.content,this._index)}:this.content?.toJSON():this._deferredContentProperties?m(this._deferredContentProperties):void 0,deserialize:t=>{if(l(t)&&t!==this.content)throw new Error("Property 'popupContent' is read-only.")}},visibleInSummary:{serializeModes:["initial"],isDefault:(t,e)=>t===this._getDefaultSummaryVisibility()},summaryHiddenFields:{serializeModes:["initial"],serialize:()=>this.summaryHiddenFields.toArray(),deserialize:t=>{d(this.summaryHiddenFields,t,{onMatch:(t,e,i,n)=>{this.summaryHiddenFields.reorder(t,n)},onMissing:t=>{this.summaryHiddenFields.remove(t)},onNew:t=>{this.summaryHiddenFields.add(t)}})}}}}async _onInitialize(){if(this._resolveContent(),!this._content){const t=this._deferredContentProperties.$ref;throw this._featureSettings?new s(`PopupContent not found with reference: ${JSON.stringify(t)}. PopupContent does not exist.`):new s(`PopupContent not found with reference: ${JSON.stringify(t)}. PopupContent does not have a parent featureSettings.`)}}_setContent(t){this._content=t,f(this,"content")}_getDefaultSummaryVisibility(){return"text"===(this.content?.type??this._deferredContentProperties?.type??this._deferredContentProperties?.$ref?.type)}};c=t=e([a],c);export{c as PopupContentExtension};function y(t,e){const i=t instanceof c?t.content:t;if(!i)return t._deferredContentProperties?.$ref;const n={type:i.type};return e>=0&&(n.index=e),h(i)?n.title=i.expressionInfo.title:_(i)?n.text=i.text:u(i)||(n.title=i.title),n}
1
+ var t;import{__decorate as e}from"tslib";import n from"@arcgis/core/core/Collection";import i from"@arcgis/core/popup/content/Content.js";import{EntityBase as r}from"../Entity.js";import{InvalidOperationError as s}from"../InvalidOperationError.js";import{ItemType as o}from"../ItemType.js";import{jsonToContent as p}from"../json/PopupInfoJson.js";import{serializable as a}from"../support/Serializable.js";import{notifyChange as d}from"../support/observableUtils.js";import{compare as f}from"../utilities/array.js";import{isCustomContent as u,isExpressionContent as h,isPopupContent as _,isTextContent as l}from"../utilities/esri.js";import{deepClone as m}from"../utilities/object.js";export const _popupContentExtensionMap=new WeakMap;let c=t=class extends r{get content(){return this._content}get featureSettings(){return this._featureSettings}_deferredContentProperties;visibleInSummary;summaryHiddenFields=new n;_itemType=o.POPUP_CONTENT_EXTENSION;_content;_featureSettings;_originalRef;get _index(){return Array.isArray(this.featureSettings?.popupTemplate?.content)?this.featureSettings.popupTemplate.content.indexOf(this.content):-1}constructor(t){super(t);const{content:e,visibleInSummary:n}=t??{};_(e)?this._setContent(e):"string"==typeof e?this._deferredContentProperties={$ref:e}:e?e.$ref?this._deferredContentProperties=e:this._setContent(p(e)):this._setContent(new i),this.visibleInSummary=n??this._getDefaultSummaryVisibility()}static matchesRef(e,n,i){const r=e.map(((e,n)=>y(e,e instanceof t&&e._index>=0?e._index:n))),s=r[n],{type:o,index:p,title:a,text:d}=i.$ref;if(o!==s.type)return!1;if("text"===o&&d===s.text)return!0;if(a&&a===s.title)return!0;if("number"==typeof p&&p===s.index)return!0;return 1===r.map(((t,e)=>t.type===o?t.index:void 0)).filter((t=>"number"==typeof t)).length}_switchContent(t){if(!t)return;const e=_popupContentExtensionMap.get(t);e&&e!==this&&(e._setFeatureSettings(void 0),e.destroy());this._content!==t?(this._content&&_popupContentExtensionMap.get(this._content)===this&&_popupContentExtensionMap.delete(this._content),this._content=t,this._originalRef=y(t,this._index),_popupContentExtensionMap.set(t,this),d(this,"content")):_popupContentExtensionMap.set(t,this)}_setFeatureSettings(t){this._featureSettings=t,this._resolveContent(),d(this,"featureSettings")}_resolveContent(){if(this._content||!this._deferredContentProperties||!this._featureSettings)return;const e=this._featureSettings._popupContent.find(((e,n)=>t.matchesRef(this.featureSettings._popupContent.toArray(),n,this._deferredContentProperties)));e&&(this._setContent(e),this.assignProperties({content:this._deferredContentProperties}),this._originalRef={...this._deferredContentProperties.$ref},delete this._deferredContentProperties,_popupContentExtensionMap.set(e,this))}async destroy(){this._content&&_popupContentExtensionMap.get(this._content)===this&&_popupContentExtensionMap.delete(this._content),await super.destroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),content:{serializeModes:["initial"],serialize:()=>this.content?this._originalRef?{$ref:this._originalRef}:this._featureSettings?._popupContent.includes(this._content)?{$ref:y(this.content,this._index)}:this.content?.toJSON():this._deferredContentProperties?m(this._deferredContentProperties):void 0,deserialize:t=>{if(_(t)&&t!==this.content)throw new Error("Property 'popupContent' is read-only.")}},visibleInSummary:{serializeModes:["initial"],isDefault:(t,e)=>t===this._getDefaultSummaryVisibility()},summaryHiddenFields:{serializeModes:["initial"],serialize:()=>this.summaryHiddenFields.toArray(),deserialize:t=>{f(this.summaryHiddenFields,t,{onMatch:(t,e,n,i)=>{this.summaryHiddenFields.reorder(t,i)},onMissing:t=>{this.summaryHiddenFields.remove(t)},onNew:t=>{this.summaryHiddenFields.add(t)}})}}}}async _onInitialize(){if(this._resolveContent(),!this._content){const t=this._deferredContentProperties.$ref;throw this._featureSettings?new s(`PopupContent not found with reference: ${JSON.stringify(t)}. PopupContent does not exist.`):new s(`PopupContent not found with reference: ${JSON.stringify(t)}. PopupContent does not have a parent featureSettings.`)}}_setContent(t){this._content=t,d(this,"content")}_getDefaultSummaryVisibility(){return"text"===(this.content?.type??this._deferredContentProperties?.type??this._deferredContentProperties?.$ref?.type)}};c=t=e([a],c);export{c as PopupContentExtension};function y(t,e){const n=t instanceof c?t.content:t;if(!n)return t._deferredContentProperties?.$ref;const i={type:n.type};return e>=0&&(i.index=e),h(n)?i.title=n.expressionInfo.title:l(n)?i.text=n.text:u(n)||(i.title=n.title),i}
package/data/Schema.d.ts CHANGED
@@ -167,6 +167,10 @@ export declare class Schema extends Settings<SchemaProperties> {
167
167
  * @param field The field to generate the field info object from.
168
168
  */
169
169
  static createFieldInfoFromField(field: Field): FieldInfo;
170
+ /**
171
+ * Cleans up resources used by the schema.
172
+ */
173
+ destroy(): void;
170
174
  /**
171
175
  * Finds a field by field name.
172
176
  *
package/data/Schema.js CHANGED
@@ -1 +1 @@
1
- var e;import{__decorate as i}from"tslib";import t from"@arcgis/core/PopupTemplate";import s from"@arcgis/core/core/Collection";import o from"@arcgis/core/layers/support/FeatureType";import l from"@arcgis/core/layers/support/Field";import n from"@arcgis/core/popup/FieldInfo";import{InvalidOperationError as d}from"../InvalidOperationError.js";import{isFieldExtension as r}from"../ItemType.js";import{jsonToGeometryType as a}from"../json/GeometryJson.js";import{InitializableCollectionProxy as h}from"../support/InitializableCollectionProxy.js";import{filterJSONProperties as m,isDefault as f,serializable as p,shouldExcludeDefaults as c}from"../support/Serializable.js";import{Settings as _}from"../support/Settings.js";import{createIHandle as u,notifyChange as g,onWatch as F,watch as y}from"../support/observableUtils.js";import{CaseInsensitiveObservableMap as x}from"../utilities/CaseInsensitiveObservableMap.js";import{CollectionProxy as v}from"../utilities/CollectionProxy.js";import{ReadOnlyCollection as b}from"../utilities/ReadOnlyCollection.js";import S from"../utilities/_ReferenceCountedHandle.js";import{checkArg as T}from"../utilities/checkArg.js";import{compare as I}from"../utilities/collection.js";import{isFeatureType as w,isField as z}from"../utilities/esri.js";import{fieldWithArcadeXRegex as N,fieldWithRelationshipRegex as E,getArcadeExpressionFromField as A}from"../utilities/field.js";import{isValidTimeZone as j,ERR_TIME_ZONE_INVALID as C}from"../utilities/format/date.js";import{objectKeys as M}from"../utilities/object.js";import{caseInsensitiveEquals as R}from"../utilities/string.js";import{_fieldExtensionMap as H,FieldExtension as O}from"./FieldExtension.js";const B=new Map;B.set("objectid","oid"),B.set("oid","oid"),B.set("fid","oid"),B.set("shape","geometry"),B.set("shape__length","double"),B.set("shape_length","double"),B.set("shape__area","double"),B.set("shape_area","double"),B.set("area","double"),B.set("perimeter","double"),B.set("length","double"),B.set("fnode_","double"),B.set("tnode_","double"),B.set("lpoly_","double"),B.set("rpoly_","double"),B.set("cover_","integer"),B.set("cover_id","integer"),B.set("idtic","integer"),B.set("xtic","double"),B.set("ytic","double"),B.set("xmin","double"),B.set("ymin","double"),B.set("xmax","double"),B.set("ymax","double"),B.set("arc_","double"),B.set("subclass_","integer"),B.set("subclass_id","integer"),B.set("routelink","integer"),B.set("arclink","integer"),B.set("f_meas","double"),B.set("t_meas","double"),B.set("f_pos","double"),B.set("t_pos","double"),B.set("f_meas","double"),B.set("globalid","global-id"),B.set("guid","guid");export{N as fieldWithArcadeXRegex,E as fieldWithRelationshipRegex};const P=new WeakMap;let Z=e=class extends _{fieldExtensions;fields;get spatialReference(){return this._getSetting("spatialReference")}set spatialReference(e){this._setSetting("spatialReference",e)}get primaryKeyField(){const e=this._getSetting("primaryKeyField");if(!e){const e=this.fields.filter((e=>"oid"===e.type));if(1===e.length)return e.getItemAt(0).name}return e}set primaryKeyField(e){this._setSetting("primaryKeyField",e)}get displayField(){return this._getSetting("displayField",this.primaryKeyField)}set displayField(e){!this._featureSettings?.popupTemplate||this._featureSettings.popupTemplate.title&&this._featureSettings.popupTemplate.title!==`{${this.displayField}}`||(this._featureSettings.popupTemplate.title=`{${e}}`),this._setSetting("displayField",e)}get geometryType(){return this._getSetting("geometryType")}set geometryType(e){this._setSetting("geometryType",e)}get hasGeometry(){return void 0!==this.geometryType&&null!==this.geometryType}get timeZone(){return this._getSetting("timeZone","UTC")}set timeZone(e){T("timeZone",e).satisfies((e=>j(e)),C(e)),this._setSetting("timeZone",e)}get typeIdField(){return this._getSetting("typeIdField")}set typeIdField(e){this._setSetting("typeIdField",e)}get types(){return this._getCollectionSetting("types")}get _fields(){return this._getCollectionSetting("_fields")}_featureSettings;_alwaysSerializeFieldExtensions;constructor(e){super(e),this.fieldExtensions=new K(this),this.fields=new J(this)}static createFieldInfoFromField(e){let i=!0;const t=e.name.toLowerCase();return("oid"===e.type||"geometry"===e.type||B.has(t)&&B.get(t)===e.type)&&(i=!1),new n({visible:i,fieldName:e.name,format:void 0,label:e.alias,stringFieldOption:void 0,tooltip:void 0,isEditable:e.editable})}findFieldByName(e){return this.fields.findFieldByName(e)}toJSON(e="all"){const i=m(this._getSerializableProperties(),this,e)||{};let t=i.fieldExtensions;this.parent&&(t=t?.filter((e=>{const i=this.parent;return!i?.fieldExtensions?.some((i=>i.id===e.id))})));const{fields:s}=i;if(i)for(const e of M(i))this.isModified(e)||delete i[e];if(s&&(i.fields=s),t?.length&&(i.fieldExtensions=t),!c(e)||!f(i))return i}createPopupTemplate(){const e=this.createAllFieldInfos();return new t({fieldInfos:e,content:[{type:"fields"},{type:"attachments"}]})}createAllFieldInfos(){return this.fields.toArray().filter((e=>!!e.name)).map((i=>e.createFieldInfoFromField(i)))}_getSerializableProperties(){return{geometryType:{serialize:!1,deserialize:e=>{this.geometryType=e?a(e):void 0}},spatialReference:{serialize:!1},primaryKeyField:{serialize:!1},displayField:{serialize:!1},typeIdField:{serialize:!1},fields:{serializeModes:["initial","project"],serialize:()=>this.isModified("_fields")?this.fields.toArray().map((e=>e.toJSON())):void 0,deserialize:e=>{if(!e)return;const i=e.map((e=>z(e)?e:l.fromJSON(e)));I(this.fields,i,{onNew:(e,i)=>{this.fields.add(e,i)},onMatch:(e,i,t,s)=>{e!==i&&(e.alias=i.alias,e.editable=i.editable,e.length=i.length,e.nullable=i.nullable,e.type=i.type),t!==s&&this.fields.reorder(e,s)},onMissing:e=>{this.fields.remove(e)},equals:(e,i)=>R(e.name,i.name)})}},fieldExtensions:{serializeModes:["initial"],serialize:e=>this.fieldExtensions.toArray().map((i=>i.toJSON(e))).filter((e=>this._alwaysSerializeFieldExtensions||!(e&&2===Object.keys(e).length&&e.id&&e.field))),deserialize:e=>{e&&I(this.fieldExtensions,e,{onNew:(e,i)=>{this.fieldExtensions.add(r(e)?e:new O(e),i)},onMatch:(e,i,t,s)=>{r(i)||e.assignProperties(i),t!==s&&this.fieldExtensions.reorder(e,s)},onMissing:e=>{this._alwaysSerializeFieldExtensions&&this.fieldExtensions.remove(e)},equals:(e,i)=>r(i)?i===e:!(!i?.field||!O.matchesRef(e,i.field))||e.id===i.id})}},types:{serialize:!1,deserialize:e=>{if(!e)return;const i=e.map((e=>w(e)||!e?e:o.fromJSON(e)));I(this.types,i,{onNew:(e,i)=>{this.types.add(e,i)},onMatch:(e,i,t,s)=>{e!==i&&(e.name=i.name,e.templates=i.templates?[...i.templates]:[],e.domains=i.domains),t!==s&&this.types.reorder(e,s)},onMissing:e=>{this.types.remove(e)},equals:(e,i)=>e.id===i.id})}},timeZone:{serialize:!1,deserialize:e=>{e&&(this.timeZone=e)}}}}};Z=e=i([p],Z);export{Z as Schema};class J extends v{_schema;_fieldNameToField=new x;_expressionFields=new s;_expressionFieldsReadOnly=new b(this._expressionFields);get _expressionFieldsLength(){return this.expressionFields.length}get expressionFields(){return this._expressionFieldsReadOnly}get _popupTemplate(){return this._schema._featureSettings?this._schema._featureSettings.popupTemplate:void 0}constructor(e){super(new s),this._schema=e,F(this,"length",(()=>y(this._schema,"_fields.length",(()=>g(this,"length")),{sync:!0})));const i=[];y(this._schema,"_fields",(e=>{for(const e of i)e.remove();if(null!=e){i.push(e.on("after-add",(i=>{this._collection.add(i.item,e.indexOf(i.item)),this._fieldNameToField.set(i.item.name,i.item)})),e.on("after-remove",(e=>{this._collection.remove(e.item),this._fieldNameToField.delete(e.item.name)})));for(const i of this._collection)e.includes(i)||(this._collection.remove(i),this._fieldNameToField.delete(i.name));for(const i of e)this._collection.includes(i)||(this._collection.add(i),this._fieldNameToField.set(i.name,i))}else for(const e of this._collection.filter((e=>!this._expressionFields.includes(e))))this._collection.remove(e),this._fieldNameToField.delete(e.name)}),{sync:!0,initial:!0}),this._generateExpressionFields(),y(this._schema,"_featureSettings.popupTemplate.fieldInfos",(()=>{this._generateExpressionFields()}),{sync:!0}),y(this._schema,"_featureSettings.popupTemplate.expressionInfos",(()=>{this._generateExpressionFields()}),{sync:!0})}clone(){return new J(this._schema)}add(e,i){T("field",e).isNotMissing();const t=A(e.name);if(t){if(!this._popupTemplate)throw new d("Cannot create a field that references an arcade expression without a feature source and popup template.");const i=this._popupTemplate.expressionInfos.find((e=>R(e.name,t)));if(!i)throw new d("Cannot create a field that references a non-existent arcade expression.");this._popupTemplate.fieldInfos||(this._popupTemplate.fieldInfos=[]);let s=this._popupTemplate.fieldInfos.find((i=>R(i.fieldName,e.name)));s||(s=new n({fieldName:e.name,label:i.title}),this._popupTemplate.fieldInfos.push(s));const o=P.get(s);P.set(s,e),null!=this._expressionFields&&(this._expressionFields.remove(o),this._expressionFields.includes(e)||(this._expressionFields.add(e),this._collection.add(e),this._fieldNameToField.set(e.name,e))),g(this,"_expressionFieldsLength")}else this._schema._fields.add(e,i);return this}removeAt(e){T("index",e).isNotMissing();const i=this.getItemAt(e);if(!i)return;if(A(i.name)){const e=this._popupTemplate.fieldInfos.findIndex((e=>R(e.fieldName,i.name)));this._popupTemplate.fieldInfos.splice(e,1),this._expressionFields.remove(i),this._collection.remove(i),this._fieldNameToField.delete(i.name),g(this,"_expressionFieldsLength")}else this._schema._fields.remove(i);return i}reorder(e,i){if(e&&this._schema._fields.includes(e))return this._schema._fields.reorder(e,i),this._collection.reorder(e,i),e}sort(e){return this._schema._fields.sort(e),this._collection.sort(((i,t)=>this._expressionFields.includes(i)&&this._expressionFields.includes(t)?0:this._expressionFields.includes(i)?1:this._expressionFields.includes(t)?-1:e(i,t))),this}findFieldByName(e){return this._fieldNameToField.get(e)}_generateExpressionFields(){if(!this._popupTemplate?.fieldInfos||!this._popupTemplate?.expressionInfos){for(const e of this._expressionFields)this._collection.remove(e),this._fieldNameToField.delete(e.name);return void this._expressionFields.removeAll()}const e=this._expressionFields.slice();for(const i of this._popupTemplate.fieldInfos){const t=A(i.fieldName);if(null==t)continue;const s=this._popupTemplate.expressionInfos.find((e=>R(e.name,t)));if(null==s)continue;let o=P.get(i);null==o&&(o=new l({name:i.fieldName,alias:i.label||s.title||i.fieldName,type:"number"===s.returnType?"double":"string",editable:!1})),this._expressionFields.includes(o)?e.remove(o):(P.set(i,o),this._expressionFields.add(o),this._collection.add(o),this._fieldNameToField.set(o.name,o),e.remove(o))}for(const i of e)this._expressionFields.remove(i),this._collection.remove(i),this._fieldNameToField.delete(i.name)}}class K extends h{get _collection(){return this._schema.fields.map((e=>this._forField(e))).concat(Array.from(this._uninitializedFieldExtensions))}_schema;_uninitializedFieldExtensions=new Set;_onChangeSchemaFieldsHandle=new S((()=>this._schema.fields.on("change",(e=>{const i={added:(e.added||[]).map((e=>this._forField(e))),moved:(e.moved||[]).map((e=>this._forField(e))),removed:(e.removed||[]).map((e=>this._forField(e))),target:this};this.emit("change",i)}))));_onBeforeAddSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-add",(e=>{this.emit("before-add",{...e,item:this._forField(e.item)})}))));_onBeforeRemoveSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-remove",(e=>{this.emit("before-remove",{...e,item:this._forField(e.item)})}))));_onBeforeChangesSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-changes",(e=>{this.emit("before-changes",{...e,item:this._forField(e.item)})}))));_onAfterAddSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-add",(e=>{this.emit("after-add",{...e,item:this._forField(e.item)})}))));_onAfterRemoveSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-remove",(e=>{this.emit("after-remove",{...e,item:this._forField(e.item)})}))));_onAfterChangesSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-changes",(e=>{this.emit("after-changes",{...e,target:this})}))));constructor(e){super(),this._schema=e,F(this,"length",(()=>y(this._schema.fields,"length",(()=>g(this,"length")),{sync:!0})))}forField(e){if(T("field",e).isNotMissing(),this._schema.fields.includes(e))return this._forField(e)}add(e,i){if(T("fieldX",e).isNotMissing(),e.schema&&e.schema.fieldExtensions.remove(e),e._setSchema(this._schema),e.field){const t=H.get(e.field);if(H.set(e.field,e),t&&t!==e&&this._onRemoved(t),this._schema.fields.includes(e.field))if(void 0===i){const i={added:[e],moved:[],removed:t?[t]:[],target:this};this.emit("change",i),this.emit("after-add",{item:e}),this.emit("after-changes",{})}else this._schema.fields.reorder(e.field,i);else this._schema.fields.add(e.field,i)}else{this._uninitializedFieldExtensions.add(e);const i={added:[e],moved:[],removed:[],target:this};this.emit("change",i),this.emit("after-add",{item:e}),this.emit("after-changes",{})}return this._onAdded(e),this}removeAt(e){const i=this.getItemAt(e);if(void 0!==i){if(this._uninitializedFieldExtensions.has(i)){this._uninitializedFieldExtensions.delete(i);const e={added:[],moved:[],removed:[i],target:this};this.emit("change",e),this.emit("after-remove",{item:i}),this.emit("after-changes",{})}else this._schema.fields.remove(i.field);return this._onRemoved(i),i}}reorder(e,i){if(e&&this._schema.fields.includes(e.field))return this._schema.fields.reorder(e.field,i),e}sort(e){return this._schema.fields.sort(((i,t)=>e(this._forField(i),this._forField(t)))),this}on(e,i){const t=[];return"change"===e?t.push(this._onChangeSchemaFieldsHandle.add()):"before-add"===e?t.push(this._onBeforeAddSchemaFieldsHandle.add()):"before-remove"===e?t.push(this._onBeforeRemoveSchemaFieldsHandle.add()):"before-changes"===e?t.push(this._onBeforeChangesSchemaFieldsHandle.add()):"after-add"===e?t.push(this._onAfterAddSchemaFieldsHandle.add()):"after-remove"===e?t.push(this._onAfterRemoveSchemaFieldsHandle.add()):"after-changes"===e&&t.push(this._onAfterChangesSchemaFieldsHandle.add()),t.push(super.on(e,i)),u(t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.field}_onAdded(e){}_onRemoved(e){e.schema===this._schema&&e._setSchema(void 0)}_forField(e){if(this._uninitializedFieldExtensions.size)for(const e of this._uninitializedFieldExtensions)e._resolveField(),e.field&&(H.set(e.field,e),this._uninitializedFieldExtensions.delete(e));if(!H.has(e)){const i=new O({field:e});H.set(e,i),i._setSchema(this._schema),this._onAdded(i),i.initialize()}return H.get(e)}}
1
+ var e;import{__decorate as i}from"tslib";import t from"@arcgis/core/PopupTemplate";import s from"@arcgis/core/core/Collection";import o from"@arcgis/core/layers/support/FeatureType";import l from"@arcgis/core/layers/support/Field";import d from"@arcgis/core/popup/FieldInfo";import{InvalidOperationError as n}from"../InvalidOperationError.js";import{isFieldExtension as r}from"../ItemType.js";import{jsonToGeometryType as a}from"../json/GeometryJson.js";import{InitializableCollectionProxy as h}from"../support/InitializableCollectionProxy.js";import{filterJSONProperties as m,isDefault as f,serializable as p,shouldExcludeDefaults as c}from"../support/Serializable.js";import{Settings as _}from"../support/Settings.js";import{createIHandle as u,notifyChange as g,onWatch as F,watch as y}from"../support/observableUtils.js";import{CaseInsensitiveObservableMap as x}from"../utilities/CaseInsensitiveObservableMap.js";import{CollectionProxy as v}from"../utilities/CollectionProxy.js";import{ReadOnlyCollection as b}from"../utilities/ReadOnlyCollection.js";import S from"../utilities/_ReferenceCountedHandle.js";import{checkArg as T}from"../utilities/checkArg.js";import{compare as z}from"../utilities/collection.js";import{isFeatureType as w,isField as I}from"../utilities/esri.js";import{fieldWithArcadeXRegex as N,fieldWithRelationshipRegex as E,getArcadeExpressionFromField as A}from"../utilities/field.js";import{ERR_TIME_ZONE_INVALID as j,isValidTimeZone as H}from"../utilities/format/date.js";import{objectKeys as C}from"../utilities/object.js";import{caseInsensitiveEquals as R}from"../utilities/string.js";import{_fieldExtensionMap as M,FieldExtension as O}from"./FieldExtension.js";const B=new Map;B.set("objectid","oid"),B.set("oid","oid"),B.set("fid","oid"),B.set("shape","geometry"),B.set("shape__length","double"),B.set("shape_length","double"),B.set("shape__area","double"),B.set("shape_area","double"),B.set("area","double"),B.set("perimeter","double"),B.set("length","double"),B.set("fnode_","double"),B.set("tnode_","double"),B.set("lpoly_","double"),B.set("rpoly_","double"),B.set("cover_","integer"),B.set("cover_id","integer"),B.set("idtic","integer"),B.set("xtic","double"),B.set("ytic","double"),B.set("xmin","double"),B.set("ymin","double"),B.set("xmax","double"),B.set("ymax","double"),B.set("arc_","double"),B.set("subclass_","integer"),B.set("subclass_id","integer"),B.set("routelink","integer"),B.set("arclink","integer"),B.set("f_meas","double"),B.set("t_meas","double"),B.set("f_pos","double"),B.set("t_pos","double"),B.set("f_meas","double"),B.set("globalid","global-id"),B.set("guid","guid");export{N as fieldWithArcadeXRegex,E as fieldWithRelationshipRegex};const P=new WeakMap;let Z=e=class extends _{fieldExtensions;fields;get spatialReference(){return this._getSetting("spatialReference")}set spatialReference(e){this._setSetting("spatialReference",e)}get primaryKeyField(){const e=this._getSetting("primaryKeyField");if(!e){const e=this.fields.filter((e=>"oid"===e.type));if(1===e.length)return e.getItemAt(0).name}return e}set primaryKeyField(e){this._setSetting("primaryKeyField",e)}get displayField(){return this._getSetting("displayField",this.primaryKeyField)}set displayField(e){!this._featureSettings?.popupTemplate||this._featureSettings.popupTemplate.title&&this._featureSettings.popupTemplate.title!==`{${this.displayField}}`||(this._featureSettings.popupTemplate.title=`{${e}}`),this._setSetting("displayField",e)}get geometryType(){return this._getSetting("geometryType")}set geometryType(e){this._setSetting("geometryType",e)}get hasGeometry(){return void 0!==this.geometryType&&null!==this.geometryType}get timeZone(){return this._getSetting("timeZone","UTC")}set timeZone(e){T("timeZone",e).satisfies((e=>H(e)),j(e)),this._setSetting("timeZone",e)}get typeIdField(){return this._getSetting("typeIdField")}set typeIdField(e){this._setSetting("typeIdField",e)}get types(){return this._getCollectionSetting("types")}get _fields(){return this._getCollectionSetting("_fields")}_featureSettings;_alwaysSerializeFieldExtensions;constructor(e){super(e),this.fieldExtensions=new K(this),this.fields=new J(this)}static createFieldInfoFromField(e){let i=!0;const t=e.name.toLowerCase();return("oid"===e.type||"geometry"===e.type||B.has(t)&&B.get(t)===e.type)&&(i=!1),new d({visible:i,fieldName:e.name,format:void 0,label:e.alias,stringFieldOption:void 0,tooltip:void 0,isEditable:e.editable})}destroy(){this.parent=void 0,this.fieldExtensions?.destroy(),this.fields?.destroy(),super.destroy()}findFieldByName(e){return this.fields.findFieldByName(e)}toJSON(e="all"){const i=m(this._getSerializableProperties(),this,e)||{};let t=i.fieldExtensions;this.parent&&(t=t?.filter((e=>{const i=this.parent;return!i?.fieldExtensions?.some((i=>i.id===e.id))})));const{fields:s}=i;if(i)for(const e of C(i))this.isModified(e)||delete i[e];if(s&&(i.fields=s),t?.length&&(i.fieldExtensions=t),!c(e)||!f(i))return i}createPopupTemplate(){const e=this.createAllFieldInfos();return new t({fieldInfos:e,content:[{type:"fields"},{type:"attachments"}]})}createAllFieldInfos(){return this.fields.toArray().filter((e=>!!e.name)).map((i=>e.createFieldInfoFromField(i)))}_getSerializableProperties(){return{geometryType:{serialize:!1,deserialize:e=>{this.geometryType=e?a(e):void 0}},spatialReference:{serialize:!1},primaryKeyField:{serialize:!1},displayField:{serialize:!1},typeIdField:{serialize:!1},fields:{serializeModes:["initial","project"],serialize:()=>this.isModified("_fields")?this.fields.toArray().map((e=>e.toJSON())):void 0,deserialize:e=>{if(!e)return;const i=e.map((e=>I(e)?e:l.fromJSON(e)));z(this.fields,i,{onNew:(e,i)=>{this.fields.add(e,i)},onMatch:(e,i,t,s)=>{e!==i&&(e.alias=i.alias,e.editable=i.editable,e.length=i.length,e.nullable=i.nullable,e.type=i.type),t!==s&&this.fields.reorder(e,s)},onMissing:e=>{this.fields.remove(e)},equals:(e,i)=>R(e.name,i.name)})}},fieldExtensions:{serializeModes:["initial"],serialize:e=>this.fieldExtensions.toArray().map((i=>i.toJSON(e))).filter((e=>this._alwaysSerializeFieldExtensions||!(e&&2===Object.keys(e).length&&e.id&&e.field))),deserialize:e=>{e&&z(this.fieldExtensions,e,{onNew:(e,i)=>{this.fieldExtensions.add(r(e)?e:new O(e),i)},onMatch:(e,i,t,s)=>{r(i)||e.assignProperties(i),t!==s&&this.fieldExtensions.reorder(e,s)},onMissing:e=>{this._alwaysSerializeFieldExtensions&&this.fieldExtensions.remove(e)},equals:(e,i)=>r(i)?i===e:!(!i?.field||!O.matchesRef(e,i.field))||e.id===i.id})}},types:{serialize:!1,deserialize:e=>{if(!e)return;const i=e.map((e=>w(e)||!e?e:o.fromJSON(e)));z(this.types,i,{onNew:(e,i)=>{this.types.add(e,i)},onMatch:(e,i,t,s)=>{e!==i&&(e.name=i.name,e.templates=i.templates?[...i.templates]:[],e.domains=i.domains),t!==s&&this.types.reorder(e,s)},onMissing:e=>{this.types.remove(e)},equals:(e,i)=>e.id===i.id})}},timeZone:{serialize:!1,deserialize:e=>{e&&(this.timeZone=e)}}}}};Z=e=i([p],Z);export{Z as Schema};class J extends v{_schema;_fieldNameToField=new x;_expressionFields=new s;_expressionFieldsReadOnly=new b(this._expressionFields);get _expressionFieldsLength(){return this.expressionFields.length}get expressionFields(){return this._expressionFieldsReadOnly}get _popupTemplate(){return this._schema._featureSettings?this._schema._featureSettings.popupTemplate:void 0}constructor(e){super(new s),this._schema=e,this._handles.add(F(this,"length",(()=>y(this._schema,"_fields.length",(()=>g(this,"length")),{sync:!0})))),this._handles.add(y(this._schema,"_fields",(e=>{if(this._handles.remove("schema-field-collection-schema-fields"),null!=e){this._handles.add([e.on("after-add",(i=>{this._collection.add(i.item,e.indexOf(i.item)),this._fieldNameToField.set(i.item.name,i.item)})),e.on("after-remove",(e=>{this._collection.remove(e.item),this._fieldNameToField.delete(e.item.name)}))],"schema-field-collection-schema-fields");for(const i of this._collection)e.includes(i)||(this._collection.remove(i),this._fieldNameToField.delete(i.name));for(const i of e)this._collection.includes(i)||(this._collection.add(i),this._fieldNameToField.set(i.name,i))}else for(const e of this._collection.filter((e=>!this._expressionFields.includes(e))))this._collection.remove(e),this._fieldNameToField.delete(e.name)}),{sync:!0,initial:!0})),this._generateExpressionFields(),this._handles.add([y(this._schema,"_featureSettings.popupTemplate.fieldInfos",(()=>{this._generateExpressionFields()}),{sync:!0}),y(this._schema,"_featureSettings.popupTemplate.expressionInfos",(()=>{this._generateExpressionFields()}),{sync:!0})])}clone(){return new J(this._schema)}add(e,i){T("field",e).isNotMissing();const t=A(e.name);if(t){if(!this._popupTemplate)throw new n("Cannot create a field that references an arcade expression without a feature source and popup template.");const i=this._popupTemplate.expressionInfos.find((e=>R(e.name,t)));if(!i)throw new n("Cannot create a field that references a non-existent arcade expression.");this._popupTemplate.fieldInfos||(this._popupTemplate.fieldInfos=[]);let s=this._popupTemplate.fieldInfos.find((i=>R(i.fieldName,e.name)));s||(s=new d({fieldName:e.name,label:i.title}),this._popupTemplate.fieldInfos.push(s));const o=P.get(s);P.set(s,e),null!=this._expressionFields&&(this._expressionFields.remove(o),this._expressionFields.includes(e)||(this._expressionFields.add(e),this._collection.add(e),this._fieldNameToField.set(e.name,e))),g(this,"_expressionFieldsLength")}else this._schema._fields.add(e,i);return this}destroy(){this._fieldNameToField.clear(),this._expressionFields.removeAll(),this._collection.removeAll(),super.destroy()}removeAt(e){T("index",e).isNotMissing();const i=this.getItemAt(e);if(!i)return;if(A(i.name)){const e=this._popupTemplate.fieldInfos.findIndex((e=>R(e.fieldName,i.name)));this._popupTemplate.fieldInfos.splice(e,1),this._expressionFields.remove(i),this._collection.remove(i),this._fieldNameToField.delete(i.name),g(this,"_expressionFieldsLength")}else this._schema._fields.remove(i);return i}reorder(e,i){if(e&&this._schema._fields.includes(e))return this._schema._fields.reorder(e,i),this._collection.reorder(e,i),e}sort(e){return this._schema._fields.sort(e),this._collection.sort(((i,t)=>this._expressionFields.includes(i)&&this._expressionFields.includes(t)?0:this._expressionFields.includes(i)?1:this._expressionFields.includes(t)?-1:e(i,t))),this}findFieldByName(e){return this._fieldNameToField.get(e)}_generateExpressionFields(){if(!this._popupTemplate?.fieldInfos||!this._popupTemplate?.expressionInfos){for(const e of this._expressionFields)this._collection.remove(e),this._fieldNameToField.delete(e.name);return void this._expressionFields.removeAll()}const e=this._expressionFields.slice();for(const i of this._popupTemplate.fieldInfos){const t=A(i.fieldName);if(null==t)continue;const s=this._popupTemplate.expressionInfos.find((e=>R(e.name,t)));if(null==s)continue;let o=P.get(i);null==o&&(o=new l({name:i.fieldName,alias:i.label||s.title||i.fieldName,type:"number"===s.returnType?"double":"string",editable:!1})),this._expressionFields.includes(o)?e.remove(o):(P.set(i,o),this._expressionFields.add(o),this._collection.add(o),this._fieldNameToField.set(o.name,o),e.remove(o))}for(const i of e)this._expressionFields.remove(i),this._collection.remove(i),this._fieldNameToField.delete(i.name)}}class K extends h{get _collection(){return this._schema.fields.map((e=>this._forField(e))).concat(Array.from(this._uninitializedFieldExtensions))}_schema;_uninitializedFieldExtensions=new Set;_onChangeSchemaFieldsHandle=new S((()=>this._schema.fields.on("change",(e=>{const i={added:(e.added||[]).map((e=>this._forField(e))),moved:(e.moved||[]).map((e=>this._forField(e))),removed:(e.removed||[]).map((e=>this._forField(e))),target:this};this.emit("change",i)}))));_onBeforeAddSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-add",(e=>{this.emit("before-add",{...e,item:this._forField(e.item)})}))));_onBeforeRemoveSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-remove",(e=>{this.emit("before-remove",{...e,item:this._forField(e.item)})}))));_onBeforeChangesSchemaFieldsHandle=new S((()=>this._schema.fields.on("before-changes",(e=>{this.emit("before-changes",{...e,item:this._forField(e.item)})}))));_onAfterAddSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-add",(e=>{this.emit("after-add",{...e,item:this._forField(e.item)})}))));_onAfterRemoveSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-remove",(e=>{this.emit("after-remove",{...e,item:this._forField(e.item)})}))));_onAfterChangesSchemaFieldsHandle=new S((()=>this._schema.fields.on("after-changes",(e=>{this.emit("after-changes",{...e,target:this})}))));constructor(e){super(),this._schema=e,this._handles.add(F(this,"length",(()=>y(this._schema.fields,"length",(()=>g(this,"length")),{sync:!0}))))}async destroy(){this._onChangeSchemaFieldsHandle.destroy(),this._onBeforeAddSchemaFieldsHandle.destroy(),this._onBeforeRemoveSchemaFieldsHandle.destroy(),this._onBeforeChangesSchemaFieldsHandle.destroy(),this._onAfterAddSchemaFieldsHandle.destroy(),this._onAfterRemoveSchemaFieldsHandle.destroy(),this._onAfterChangesSchemaFieldsHandle.destroy();const e=[];for(const i of this._schema.fields){const t=M.get(i);t&&t.schema===this._schema&&(M.delete(i),this._onRemoved(t),e.push(t.destroy()))}this._uninitializedFieldExtensions.forEach((i=>{this._onRemoved(i),e.push(i.destroy())})),this._uninitializedFieldExtensions.clear(),await Promise.all(e),super.destroy()}forField(e){if(T("field",e).isNotMissing(),this._schema.fields.includes(e))return this._forField(e)}add(e,i){if(T("fieldX",e).isNotMissing(),e.schema&&e.schema.fieldExtensions.remove(e),e._setSchema(this._schema),e.field){const t=M.get(e.field);if(M.set(e.field,e),t&&t!==e&&this._onRemoved(t),this._schema.fields.includes(e.field))if(void 0===i){const i={added:[e],moved:[],removed:t?[t]:[],target:this};this.emit("change",i),this.emit("after-add",{item:e}),this.emit("after-changes",{})}else this._schema.fields.reorder(e.field,i);else this._schema.fields.add(e.field,i)}else{this._uninitializedFieldExtensions.add(e);const i={added:[e],moved:[],removed:[],target:this};this.emit("change",i),this.emit("after-add",{item:e}),this.emit("after-changes",{})}return this._onAdded(e),this}removeAt(e){const i=this.getItemAt(e);if(void 0!==i){if(this._uninitializedFieldExtensions.has(i)){this._uninitializedFieldExtensions.delete(i);const e={added:[],moved:[],removed:[i],target:this};this.emit("change",e),this.emit("after-remove",{item:i}),this.emit("after-changes",{})}else this._schema.fields.remove(i.field);return this._onRemoved(i),i}}reorder(e,i){if(e&&this._schema.fields.includes(e.field))return this._schema.fields.reorder(e.field,i),e}sort(e){return this._schema.fields.sort(((i,t)=>e(this._forField(i),this._forField(t)))),this}on(e,i){const t=[];return"change"===e?t.push(this._onChangeSchemaFieldsHandle.add()):"before-add"===e?t.push(this._onBeforeAddSchemaFieldsHandle.add()):"before-remove"===e?t.push(this._onBeforeRemoveSchemaFieldsHandle.add()):"before-changes"===e?t.push(this._onBeforeChangesSchemaFieldsHandle.add()):"after-add"===e?t.push(this._onAfterAddSchemaFieldsHandle.add()):"after-remove"===e?t.push(this._onAfterRemoveSchemaFieldsHandle.add()):"after-changes"===e&&t.push(this._onAfterChangesSchemaFieldsHandle.add()),t.push(super.on(e,i)),u(t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.field}_onAdded(e){}_onRemoved(e){e.schema===this._schema&&e._setSchema(void 0)}_forField(e){if(this._uninitializedFieldExtensions.size)for(const e of this._uninitializedFieldExtensions)e._resolveField(),e.field&&(M.set(e.field,e),this._uninitializedFieldExtensions.delete(e));if(!M.has(e)){const i=new O({field:e});M.set(e,i),i._setSchema(this._schema),this._onAdded(i),i.initialize()}return M.get(e)}}
@@ -118,6 +118,10 @@ export declare abstract class TableExtension<TProperties extends TableExtensionP
118
118
  * on Table.
119
119
  */
120
120
  export declare class TableSchema extends Schema {
121
+ /**
122
+ * Handle group key for the temporary watch that waits for table to resolve.
123
+ */
124
+ private static readonly _tableResolveWatchKey;
121
125
  /**
122
126
  * TableExtension that this schema belongs to.
123
127
  */
@@ -125,12 +129,13 @@ export declare class TableSchema extends Schema {
125
129
  /**
126
130
  * Maps schema properties to equivalent properties on the table.
127
131
  */
128
- protected readonly _tableBindings: Map<keyof this, "listMode" | "title" | "url" | "id" | "gdbVersion" | "@eventTypes" | "set" | "emit" | "hasEventListener" | "on" | "addHandles" | "destroy" | "hasHandles" | "removeHandles" | "watch" | "clone" | "fields" | "outFields" | "hasM" | "hasZ" | "popupTemplate" | "labelingInfo" | "renderer" | "opacity" | "spatialReference" | "mode" | "elevationInfo" | "visible" | "refreshInterval" | "labelsVisible" | "maxScale" | "popupEnabled" | "floorInfo" | "source" | "sourceJSON" | "objectIdField" | "geometryType" | "types" | "templates" | "orderBy" | "definitionExpression" | "minScale" | "timeInfo" | "featureReduction" | "globalIdField" | "createPopupTemplate" | "createQuery" | "getField" | "getFieldDomain" | "queryExtent" | "queryFeatureCount" | "queryFeatures" | "queryObjectIds" | "getAtOrigin" | "originOf" | "revertAllToOrigin" | "revertToOrigin" | "isFulfilled" | "isRejected" | "isResolved" | "when" | "cancelLoad" | "load" | "fullExtent" | "parent" | "persistenceEnabled" | "visibilityTimeExtent" | "createLayerView" | "fetchAttributionData" | "customParameters" | "blendMode" | "legendEnabled" | "apiKey" | "save" | "saveAs" | "portalItem" | "copyright" | "layerId" | "effect" | "queryAttributeBins" | "refresh" | "timeExtent" | "timeOffset" | "useViewTime" | "dateFieldsTimeZone" | "displayField" | "historicMoment" | "returnM" | "returnZ" | "displayFilterEnabled" | "displayFilterInfo" | "formTemplate" | "attributeTableTemplate" | "screenSizePerspectiveEnabled" | "trackInfo" | "featureEffect" | "typeIdField" | "editingEnabled" | "addAttachment" | "applyEdits" | "deleteAttachments" | "queryAttachments" | "queryRelatedFeatures" | "queryRelatedFeaturesCount" | "updateAttachment" | "queryTopFeatures" | "charts" | "dynamicDataSource" | "fieldConfigurations" | "createFieldConfigurations" | "getFeatureTitle" | "getFeatureType" | "getFieldAlias" | "getFieldConfiguration" | "queryTopFeatureCount" | "queryTopFeaturesExtent" | "queryTopObjectIds">;
132
+ protected readonly _tableBindings: Map<keyof this, "listMode" | "title" | "url" | "id" | "gdbVersion" | "destroy" | "@eventTypes" | "set" | "emit" | "hasEventListener" | "on" | "addHandles" | "hasHandles" | "removeHandles" | "watch" | "clone" | "fields" | "outFields" | "hasM" | "hasZ" | "popupTemplate" | "labelingInfo" | "renderer" | "opacity" | "spatialReference" | "mode" | "elevationInfo" | "visible" | "refreshInterval" | "labelsVisible" | "maxScale" | "popupEnabled" | "floorInfo" | "source" | "sourceJSON" | "objectIdField" | "geometryType" | "types" | "templates" | "orderBy" | "definitionExpression" | "minScale" | "timeInfo" | "featureReduction" | "globalIdField" | "createPopupTemplate" | "createQuery" | "getField" | "getFieldDomain" | "queryExtent" | "queryFeatureCount" | "queryFeatures" | "queryObjectIds" | "getAtOrigin" | "originOf" | "revertAllToOrigin" | "revertToOrigin" | "isFulfilled" | "isRejected" | "isResolved" | "when" | "cancelLoad" | "load" | "fullExtent" | "parent" | "persistenceEnabled" | "visibilityTimeExtent" | "createLayerView" | "fetchAttributionData" | "customParameters" | "blendMode" | "legendEnabled" | "apiKey" | "save" | "saveAs" | "portalItem" | "copyright" | "layerId" | "effect" | "queryAttributeBins" | "refresh" | "timeExtent" | "timeOffset" | "useViewTime" | "dateFieldsTimeZone" | "displayField" | "historicMoment" | "returnM" | "returnZ" | "displayFilterEnabled" | "displayFilterInfo" | "formTemplate" | "attributeTableTemplate" | "screenSizePerspectiveEnabled" | "trackInfo" | "featureEffect" | "typeIdField" | "editingEnabled" | "addAttachment" | "applyEdits" | "deleteAttachments" | "queryAttachments" | "queryRelatedFeatures" | "queryRelatedFeaturesCount" | "updateAttachment" | "queryTopFeatures" | "charts" | "dynamicDataSource" | "fieldConfigurations" | "createFieldConfigurations" | "getFeatureTitle" | "getFeatureType" | "getFieldAlias" | "getFieldConfiguration" | "queryTopFeatureCount" | "queryTopFeaturesExtent" | "queryTopObjectIds">;
129
133
  /**
130
134
  * The collection of fields.
131
135
  */
132
136
  private readonly _fieldCollection;
133
137
  constructor(tableExtension: TableExtension);
138
+ destroy(): void;
134
139
  get geometryType(): GeometryType;
135
140
  set geometryType(value: GeometryType);
136
141
  get spatialReference(): SpatialReference;