@vertigis/arcgis-extensions 53.4.0 → 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.
- package/AppConfig.schema.json +7 -0
- package/README.md +0 -1
- package/data/ArcGISServiceTableExtension.js +1 -1
- package/data/Feature.js +1 -1
- package/data/FeatureList.js +1 -1
- package/data/FeatureSettings.d.ts +1 -0
- package/data/FeatureSettings.js +1 -1
- package/data/FeatureSourceBase.d.ts +1 -0
- package/data/FeatureSourceBase.js +1 -1
- package/data/FieldExtension.d.ts +1 -0
- package/data/FieldExtension.js +1 -1
- package/data/PopupContentExtension.d.ts +1 -0
- package/data/PopupContentExtension.js +1 -1
- package/data/Schema.d.ts +4 -0
- package/data/Schema.js +1 -1
- package/data/_TableExtension.d.ts +6 -1
- package/data/_TableExtension.js +1 -1
- package/docs/html/assets/highlight.css +6 -6
- package/docs/html/assets/navigation.js +1 -1
- package/docs/html/assets/search.js +1 -1
- package/docs/html/classes/Entity.EntityBase.html +4 -3
- package/docs/html/classes/data_ArcGISServiceTableExtension.ArcGISServiceTableExtension.html +4 -3
- package/docs/html/classes/data_Attachment.Attachment.html +4 -3
- package/docs/html/classes/data_Feature.Feature.html +4 -3
- package/docs/html/classes/data_FeatureList.FeatureList.html +13 -34
- package/docs/html/classes/data_FeatureSettings.FeatureSettings.html +6 -4
- package/docs/html/classes/data_FeatureSourceBase.FeatureSourceBase.html +7 -6
- package/docs/html/classes/data_FeatureSourceBase.RelationshipCollection.html +13 -34
- package/docs/html/classes/data_FeatureStream.FeatureStream.html +4 -3
- package/docs/html/classes/data_FieldExtension.FieldExtension.html +7 -6
- package/docs/html/classes/data_PopupContentExtension.PopupContentExtension.html +6 -5
- package/docs/html/classes/data_RelationshipBase.RelationshipBase.html +4 -3
- package/docs/html/classes/data_Schema.Schema.html +7 -4
- package/docs/html/classes/data_TaskSettings.TaskSettings.html +6 -4
- package/docs/html/classes/data__TableExtension.TableExtension.html +4 -3
- package/docs/html/classes/data__TableExtension.TableFeatureSettings.html +6 -4
- package/docs/html/classes/data__TableExtension.TableSchema.html +8 -5
- package/docs/html/classes/layer_preset_LayerPreset.LayerPreset.html +4 -3
- package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerRelationshipCollection.html +13 -34
- package/docs/html/classes/mapping_BasemapExtension.BasemapExtension.html +5 -7
- package/docs/html/classes/mapping_Bookmark.Bookmark.html +4 -3
- package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerSchema.html +7 -4
- package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerSchema.html +7 -4
- package/docs/html/classes/mapping_BuildingSceneLayerExtension.BuildingSceneLayerExtension.html +5 -8
- package/docs/html/classes/mapping_BuildingSceneLayerExtension.BuildingSceneLayerReadOnlySchema.html +7 -4
- package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerFeatureSettings.html +6 -4
- package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerSchema.html +7 -4
- package/docs/html/classes/mapping_CSVLayerExtension.CSVLayerExtension.html +5 -8
- package/docs/html/classes/mapping_ElevationLayerExtension.ElevationLayerExtension.html +5 -8
- package/docs/html/classes/mapping_FeatureCollectionLayerExtension.FeatureCollectionLayerExtension.html +5 -8
- package/docs/html/classes/mapping_FeatureLayerExtension.FeatureLayerExtension.html +5 -8
- package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerExtensionBase.html +5 -8
- package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerReadOnlySchema.html +7 -4
- package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerSchema.html +7 -4
- package/docs/html/classes/mapping_GeoJSONLayerExtension.GeoJSONLayerExtension.html +5 -8
- package/docs/html/classes/mapping_GeoRSSLayerExtension.GeoRSSLayerExtension.html +5 -8
- package/docs/html/classes/mapping_GraphicsLayerExtension.GraphicsLayerExtension.html +5 -8
- package/docs/html/classes/mapping_GroundExtension.GroundExtension.html +5 -7
- package/docs/html/classes/mapping_GroupLayerExtension.GroupLayerExtension.html +5 -8
- package/docs/html/classes/mapping_GroupLayerExtension.GroupLayerExtensionCollection.html +14 -35
- package/docs/html/classes/mapping_ImageryLayerExtension.ImageryLayerExtension.html +5 -8
- package/docs/html/classes/mapping_ImageryTileLayerExtension.ImageryTileLayerExtension.html +5 -8
- package/docs/html/classes/mapping_IntegratedMeshLayerExtension.IntegratedMeshLayerExtension.html +5 -8
- package/docs/html/classes/mapping_KMLLayerExtension.KMLLayerExtension.html +5 -8
- package/docs/html/classes/mapping_KMLSublayerExtension.KMLSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_MapConstraints.MapConstraints.html +6 -4
- package/docs/html/classes/mapping_MapExtension.MapExtension.html +12 -7
- package/docs/html/classes/mapping_MapImageLayerExtension.MapImageLayerExtension.html +5 -8
- package/docs/html/classes/mapping_MapImageSublayerExtension.MapImageSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_MapNotesLayerExtension.MapNotesLayerExtension.html +5 -8
- package/docs/html/classes/mapping_MapNotesSublayerExtension.MapNotesSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_MapNotesSublayerExtension.MapNotesSublayerExtensionSchema.html +7 -4
- package/docs/html/classes/mapping_MediaLayerExtension.MediaLayerExtension.html +5 -8
- package/docs/html/classes/mapping_OpenStreetMapLayerExtension.OpenStreetMapLayerExtension.html +5 -8
- package/docs/html/classes/mapping_PointCloudLayerExtension.PointCloudLayerExtension.html +5 -8
- package/docs/html/classes/mapping_RouteLayerExtension.RouteLayerExtension.html +5 -8
- package/docs/html/classes/mapping_RouteLayerExtension.RouteLayerExtensionSchema.html +7 -4
- package/docs/html/classes/mapping_SceneLayerExtension.SceneLayerExtension.html +5 -8
- package/docs/html/classes/mapping_StreamLayerExtension.StreamLayerExtension.html +5 -8
- package/docs/html/classes/mapping_StreamLayerExtension.StreamLayerSchema.html +7 -4
- package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerExtension.html +5 -8
- package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerRelationshipCollection.html +13 -34
- package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerSchema.html +7 -4
- package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerRelationshipCollection.html +13 -34
- package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerSchema.html +7 -4
- package/docs/html/classes/mapping_TileLayerExtension.TileLayerExtension.html +5 -8
- package/docs/html/classes/mapping_TileSublayerExtension.TileSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_UnsupportedLayerExtension.UnsupportedLayerExtension.html +5 -8
- package/docs/html/classes/mapping_VectorTileLayerExtension.VectorTileLayerExtension.html +5 -8
- package/docs/html/classes/mapping_WFSLayerExtension.WFSLayerExtension.html +5 -8
- package/docs/html/classes/mapping_WMSLayerExtension.WMSLayerExtension.html +5 -8
- package/docs/html/classes/mapping_WMSSublayerExtension.WMSSublayerExtension.html +4 -6
- package/docs/html/classes/mapping_WMTSLayerExtension.WMTSLayerExtension.html +5 -8
- package/docs/html/classes/mapping_WebTileLayerExtension.WebTileLayerExtension.html +5 -8
- package/docs/html/classes/mapping__LayerExtension.LayerExtension.html +5 -8
- package/docs/html/classes/mapping__LayerExtension.LayerExtensionReadOnlySchema.html +7 -4
- package/docs/html/classes/mapping__LayerExtension.LayerExtensionSchema.html +7 -4
- package/docs/html/classes/mapping__LayerExtensionCollectionImpl.LayerExtensionCollectionImpl.html +14 -35
- package/docs/html/classes/mapping__SublayerExtension.SubSublayerExtensionCollection.html +14 -35
- package/docs/html/classes/mapping__SublayerExtension.SublayerExtension.html +4 -6
- package/docs/html/classes/mapping__SublayerExtension.SublayerSchema.html +7 -4
- package/docs/html/classes/mapping_support_ArrayWrappedCollection.ArrayWrappedCollection.html +13 -34
- package/docs/html/classes/mapping_support__LayerExtensionCollection.LayerExtensionCollectionBase.html +16 -37
- package/docs/html/classes/mapping_support__SublayerExtensionCollection.SublayerExtensionCollectionBase.html +16 -37
- package/docs/html/classes/menus_Menu.Menu.html +4 -3
- package/docs/html/classes/menus_MenuItem.MenuItem.html +4 -3
- package/docs/html/classes/support_FormatSettings.FormatSettings.html +6 -4
- package/docs/html/classes/support_HandlesMixin.HandlesMixin.html +5 -0
- package/docs/html/classes/support_InitializableBase.InitializableBase.html +10 -9
- package/docs/html/classes/support_InitializableCollectionProxy.InitializableCollectionProxy.html +15 -35
- package/docs/html/classes/support_ReadOnlyInitializableCollection.ReadOnlyInitializableCollection.html +15 -35
- package/docs/html/classes/support_Settings.Settings.html +10 -8
- package/docs/html/classes/support__ArcGISRelationshipCollection.ArcGISRelationshipCollection.html +13 -34
- package/docs/html/classes/tasks_geocoding_ArcGISGeocoder.ArcGISGeocoder.html +3 -2
- package/docs/html/classes/tasks_geocoding_Geocoder.Geocoder.html +3 -2
- package/docs/html/classes/tasks_identify_IdentifyService.IdentifyService.html +4 -3
- package/docs/html/classes/tasks_query_ArcGISRelationship.ArcGISRelationship.html +4 -3
- package/docs/html/classes/tasks_query_QueryBasedRelationship.QueryBasedRelationship.html +4 -3
- package/docs/html/classes/tasks_query_QueryService.QueryService.html +4 -3
- package/docs/html/classes/tasks_search_SearchService.SearchService.html +4 -3
- package/docs/html/classes/utilities_CaseInsensitiveObservableMap.CaseInsensitiveObservableMap.html +6 -4
- package/docs/html/classes/utilities_CollectionProxy.CollectionProxy.html +16 -36
- package/docs/html/classes/utilities_CopyOnWriteCollection.CopyOnWriteCollection.html +13 -34
- package/docs/html/classes/utilities_MapTransformCollection.MapTransformCollection.html +13 -34
- package/docs/html/classes/utilities_ObservableMap.ObservableMap.html +8 -6
- package/docs/html/classes/utilities_ReadOnlyCollection.ReadOnlyCollection.html +15 -35
- package/docs/html/classes/utilities_ReadOnlyMap.ReadOnlyMap.html +6 -4
- package/docs/html/classes/utilities__ReferenceCountedHandle.default.html +3 -1
- package/docs/html/functions/support_HandlesMixin.handles.html +4 -0
- package/docs/html/functions/support_observableUtils.observable-1.html +3 -3
- package/docs/html/functions/support_observableUtils.onWatch.html +1 -1
- package/docs/html/functions/support_observableUtils.watch.html +1 -1
- package/docs/html/functions/support_observableUtils.watchEach.html +1 -1
- package/docs/html/functions/utilities__layers.groundsAreEquivalent.html +4 -0
- package/docs/html/functions/utilities_checkArg.checkArg.html +1 -1
- package/docs/html/interfaces/data_Feature.PresentableAttributes.html +6 -4
- package/docs/html/interfaces/data_support_attachments.AttachmentEnabledLayer.html +1 -1
- package/docs/html/interfaces/utilities_CollectionProxy.CollectionProxyOptions.html +4 -0
- package/docs/html/modules/support_HandlesMixin.html +3 -0
- package/docs/html/modules/utilities_CollectionProxy.html +1 -0
- package/docs/html/modules/utilities__layers.html +1 -0
- package/docs/html/modules.html +1 -0
- package/docs/html/variables/version.version.html +1 -1
- package/mapping/ArcGISSublayerExtension.js +1 -1
- package/mapping/BasemapExtension.d.ts +4 -6
- package/mapping/BasemapExtension.js +1 -1
- package/mapping/BuildingComponentSublayerExtension.d.ts +1 -0
- package/mapping/BuildingComponentSublayerExtension.js +1 -1
- package/mapping/BuildingSceneLayerExtension.d.ts +1 -1
- package/mapping/BuildingSceneLayerExtension.js +1 -1
- package/mapping/CSVLayerExtension.js +1 -1
- package/mapping/FeatureLayerExtension.js +1 -1
- package/mapping/FeatureLayerExtensionBase.d.ts +1 -0
- package/mapping/FeatureLayerExtensionBase.js +1 -1
- package/mapping/GeoJSONLayerExtension.js +1 -1
- package/mapping/GeoRSSLayerExtension.js +1 -1
- package/mapping/GraphicsLayerExtension.js +1 -1
- package/mapping/GroundExtension.d.ts +0 -6
- package/mapping/GroundExtension.js +1 -1
- package/mapping/GroupLayerExtension.d.ts +1 -0
- package/mapping/GroupLayerExtension.js +1 -1
- package/mapping/ImageryLayerExtension.js +1 -1
- package/mapping/MapExtension.d.ts +18 -0
- package/mapping/MapExtension.js +1 -1
- package/mapping/MapImageSublayerExtension.js +1 -1
- package/mapping/MapNotesSublayerExtension.js +1 -1
- package/mapping/PointCloudLayerExtension.js +1 -1
- package/mapping/RouteLayerExtension.js +1 -1
- package/mapping/SceneLayerExtension.js +1 -1
- package/mapping/StreamLayerExtension.d.ts +1 -0
- package/mapping/StreamLayerExtension.js +1 -1
- package/mapping/SubtypeGroupLayerExtension.d.ts +2 -1
- package/mapping/SubtypeGroupLayerExtension.js +1 -1
- package/mapping/SubtypeSublayerExtension.d.ts +2 -0
- package/mapping/SubtypeSublayerExtension.js +1 -1
- package/mapping/WFSLayerExtension.js +1 -1
- package/mapping/WMTSLayerExtension.js +1 -1
- package/mapping/_LayerExtension.d.ts +5 -7
- package/mapping/_LayerExtension.js +1 -1
- package/mapping/_SublayerExtension.d.ts +14 -6
- package/mapping/_SublayerExtension.js +1 -1
- package/mapping/support/ArrayWrappedCollection.js +1 -1
- package/mapping/support/_LayerExtensionCollection.d.ts +1 -0
- package/mapping/support/_LayerExtensionCollection.js +1 -1
- package/mapping/support/_SublayerExtensionCollection.d.ts +1 -0
- package/mapping/support/_SublayerExtensionCollection.js +1 -1
- package/package.json +1 -1
- package/support/HandlesMixin.d.ts +27 -0
- package/support/HandlesMixin.js +1 -0
- package/support/InitializableBase.d.ts +1 -1
- package/support/InitializableBase.js +1 -1
- package/support/Settings.d.ts +2 -2
- package/support/Settings.js +1 -1
- package/utilities/CollectionProxy.d.ts +22 -3
- package/utilities/CollectionProxy.js +1 -1
- package/utilities/MapTransformCollection.js +1 -1
- package/utilities/ObservableMap.d.ts +1 -1
- package/utilities/ObservableMap.js +1 -1
- package/utilities/ReadOnlyMap.js +1 -1
- package/utilities/_ReferenceCountedHandle.d.ts +4 -0
- package/utilities/_ReferenceCountedHandle.js +1 -1
- package/utilities/_layers.d.ts +10 -1
- package/utilities/_layers.js +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import{ArgumentError as i}from"../ArgumentError.js";import{InvalidOperationError as s}from"../InvalidOperationError.js";import{ItemType as r}from"../ItemType.js";import{FeatureSourceBase as a}from"../data/FeatureSourceBase.js";import{FieldExtension as n}from"../data/FieldExtension.js";import{PopupContentExtension as o}from"../data/PopupContentExtension.js";import{Schema as l}from"../data/Schema.js";import{layerToJson as y,getLayerJsonType as h,jsonToLayer as d,applyJsonToLayer as u}from"../json/LayerJson.js";import{DefaultArcGISRequestHelper as p}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection as c}from"../support/ReadOnlyInitializableCollection.js";import{serializable as f}from"../support/Serializable.js";import{createIHandle as _,notifyChange as b,onWatch as m,watch as g,watchEach as E}from"../support/observableUtils.js";import x from"../utilities/_ReferenceCountedHandle.js";import{getEquivalencyTypeForLayers as S,getLayerUrl as L,isLayer as v}from"../utilities/_layers.js";import{checkArg as w}from"../utilities/checkArg.js";import{compare as M}from"../utilities/collection.js";import{load as I}from"../utilities/esri.js";import{isGroupLayerExtension as P}from"../utilities/extensions.js";import{hasMmapLayer as A}from"../utilities/layers.js";import{getLogger as C}from"../utilities/log.js";import{deepClone as j,objectKeys as z}from"../utilities/object.js";import{toPortalItem as H}from"../utilities/portal.js";import{onCollectionPropertyChange as T}from"../utilities/watch.js";import{_assignSublayerExtensions as R}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings as O,fromLayerListMode as V}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase as D}from"./support/_SublayerExtensionCollection.js";const F="Invalid type of layer for this type of layer extension.",B="This type of layer does not have features.",$="This type of layer cannot have sublayers.",N=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1,supportsStandardizedQueries:!1});export class LayerExtension extends a{get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new p),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?.title??this._deferredLayerProperties?.title??("string"==typeof this._deferredLayerProperties?.$ref?this._deferredLayerProperties?.$ref:this._deferredLayerProperties?.$ref?.title??this._deferredLayerProperties?.$ref?.id)??"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get canChangeLabels(){return!1}get canChangeRenderer(){return!1}get canChangeDefinitionExpression(){return!1}get initialDefinitionExpression(){return this._initialDefinitionExpression}get initialRenderer(){return this._initialRenderer}get initialVisibility(){return this._initialVisibility??this.layer?.visible??!1}get _layerId(){return this.layer?.id??this._deferredLayerProperties?.$ref?.id}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}static factory;get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}tpkSource;layerListSettings;allSublayerExtensions;get sublayersAreReadOnly(){return!0}_itemType=r.LAYER_EXTENSION;_watchHandles=[];_layerWatchHandles=[];_mapExtension;_basemapExtension;_groundExtension;_parentLayerExtension;_sublayerExtensions;_layer;_dynamicallyAddedLayer=!1;_deferredLayerProperties;_requestHelper;_initialDefinitionExpression;_initialRenderer;_initialVisibility;_visibilityMode="independent";_portalItem;constructor(e){super(e);const t={...this.getDefaults(),...e};w("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let s;if(i?.hasOwnProperty("listMode")&&(s=V(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),v(i))w("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),F),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=H(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new W(this),m(this,"isEffectivelyVisible",(()=>g(this,"parentLayerExtension.isEffectivelyVisible",(()=>b(this,"isEffectivelyVisible")),{sync:!0}))),m(this,"_sublayers",(()=>g(this,"layer.sublayers",(()=>b(this,"_sublayers")),{sync:!0})))}static create(e){if(!LayerExtension.factory)throw new s("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){w("portalItemLike",e).isNotMissing();const s=t??{};w("layerExtensionProperties.layer",s.layer).satisfies((e=>!v(e)));const r={...s.layer};w("layerExtensionProperties.layer.$ref",r.$ref).satisfies((e=>null==e));const a=new p,n=H(e);let o;await I(n);const l=n.typeKeywords??"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o=l.includes("SubtypeGroupLayer")?"SubtypeGroupLayer":"ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType||l.includes("Tiled Imagery")?o="ArcGISTiledImageServiceLayer":"Elevation"===e.cacheType||l.includes("Elevation 3D Layer")?o="ArcGISTiledElevationServiceLayer":"Raster"===e.cacheType&&(o="ArcGISImageServiceLayer"):o=e.singleFusedMapCache||e.tileInfo||l.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===n.type)o="CSV";else if("KML"===n.type)o="KML";else if("Scene Service"===n.type)l.includes("3DObject")||l.includes("Point")?o="ArcGISSceneServiceLayer":l.includes("IntegratedMesh")?o="IntegratedMeshLayer":l.includes("PointCloud")?o="PointCloudLayer":l.includes("Building")&&(o="BuildingSceneLayer");else if("Stream Service"===n.type)o="ArcGISStreamLayer";else if("Vector Tile Service"===n.type)o="VectorTileLayer";else if("Feature Collection"===n.type){o="ArcGISFeatureLayer";const e=await n.fetchData();r.featureCollection=e}else if("WFS"===n.type){o="WFS";const e=await n.fetchData();Object.assign(r,e)}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(r,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(r,e)}if(!o)throw new i("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(r.layerType&&r.layerType!==o)throw new i("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return r.layerType=o,r.$portalItem=n,s.layer=r,LayerExtension.create(s)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i?.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new s(B);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.addFeatures(e,t)}async updateFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties?.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),w("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),F),this._deferredLayerProperties=void 0)}_setMapExtension(e){if(this.mapExtension===e)return;const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),b(this,"mapExtension")}_setBasemapExtension(e){this.basemapExtension!==e&&(this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),b(this,"basemapExtension"))}_setGroundExtension(e){this.groundExtension!==e&&(this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),b(this,"groundExtension"))}_setParentLayerExtension(e){if(this.parentLayerExtension===e)return;const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),b(this,"parentLayerExtension")}_resolveLayer(e){if(this.layer||!this._deferredLayerProperties)return;const t=e??this.basemapExtension?.basemap?.baseLayers??this.groundExtension?.ground?.layers??this.parentLayerExtension?.layer?.layers??this.mapExtension?.map.layers;if(!t)return;const i=[];let s;for(const e of t){const t=S(e,this._deferredLayerProperties);if("none"!==t){if("solid"===t){s=e;break}i.push(e)}}s||1!==i.length||(s=i[0]),s&&this._isSupportedLayer(s)&&(this._setLayer(s),this._deferredLayerProperties.$portalItem&&U().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;w("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),F),this.isInitialized&&await I(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,e.hasOwnProperty("labelsVisible")&&this.layer.hasOwnProperty("labelsVisible")&&(e.labelsVisible=this.layer.labelsVisible);const i=this.schema.fieldExtensions.toArray(),s=this.featureSettings.popupContentExtensions.toArray();this._setLayer(e),i.forEach((e=>{const t=this.schema.fields.find((t=>n.matchesRef(e,{$ref:t.name})));t&&e._switchField(t)})),s.forEach(((e,t)=>{const i=this.featureSettings.popupContentExtensions.find((e=>o.matchesRef(s,t,e.toJSON().content)));i&&e._switchContent(i.content)}));const r=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();r.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&r.push(this._initializeChildren()),await Promise.all(r)}_getProjectWebmapJSON(){if(!this.layer)return;let e=y(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:s,opacity:r}=e;e={id:t,title:i,layerType:s,visibility:this.layer.visible,opacity:r}}return e}_onSublayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(t){U().error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}};async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),this._layerWatchHandles.forEach((e=>e?.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{R(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=h(this._layer),t=this._getSerializableRefLayerProperties(),i=L(this._layer),s=i?{url:i}:{};return{$ref:{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType(),...s},layerType:e,...t}}return y(this.layer)}return this._deferredLayerProperties?j(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(v(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else if(e){if(this._layer)return this._applyLayerProperties(e,this.layer);this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e})}}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new s($);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await I(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new s(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new s("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await I(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new t),this._initialDefinitionExpression="definitionExpression"in this.layer?this.layer.definitionExpression:void 0,this._initialRenderer=this.renderer?.clone(),this._initialVisibility=this.layer.visible,this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this.supportsSublayers&&this._watchHandles.push(T(this,"layer.sublayers",(async e=>{const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new s("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new G(e,this)}_createSublayerExtensionCollection(){return new k(this)}_capabilities(){return N}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return d(e)}_applyLayerProperties(e,t){w("layerJson",e).isNotMissing();const i=e.layerType||e.type;return w("layerJson.layerType",i).satisfies((e=>!e||e===this.getDefault("layer")?.layerType)),w("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e))),u(e,t)}_setLayer(e){if(this._layer=e,this._layerWatchHandles.forEach((e=>e.remove())),this._layerWatchHandles.length=0,this._layerWatchHandles.push(g(e,"visible",((e,t,i)=>{this._onVisibleChanged(e),this.mapExtension?.emit("layer-visibility-change",i)})),m(this,"effectiveMinScale",(()=>g(this.layer,"minScale",(()=>b(this,"effectiveMinScale")),{sync:!0}))),m(this,"effectiveMaxScale",(()=>g(this.layer,"maxScale",(()=>b(this,"effectiveMaxScale")),{sync:!0}))),m(this,"title",(()=>g(this.layer,"title",(()=>b(this,"title")),{sync:!0})))),"definitionExpression"in e&&this._watchHandles.push(g(e,"definitionExpression",((e,t,i)=>{this.mapExtension?.emit("layer-definition-expression-change",i)}))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=g(e,"sublayers",(()=>{this._setupSublayersHandles()}),{sync:!0,once:!0});this._layerWatchHandles.push(t)}b(this,"layer"),b(this,"title"),b(this,"effectiveMinScale"),b(this,"effectiveMaxScale"),b(this,"isEffectivelyVisible")}_setupSublayersHandles(){this._layerWatchHandles.push(this._sublayers.on("after-add",this._onSublayersAfterAdd),this._sublayers.on("after-remove",this._onSublayersAfterRemove),E(this._sublayers,"[].visible",this._onSublayersSublayerVisibleChanged,{sync:!0}))}_onVisibleChanged=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;b(this,"isEffectivelyVisible")};_onSublayersSublayerVisibleChanged=(e,t,i)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(i)};_onSublayersAfterAdd=e=>{1!==this._sublayers.length||e.item.visible||"exclusive"!==this.visibilityMode?e.item.visible&&"exclusive"===this.visibilityMode&&(e.item.visible=!1):e.item.visible=!0};_onSublayersAfterRemove=e=>{0!==this._sublayers.length&&"exclusive"===this.visibilityMode&&e.item.visible&&this._ensureAChildSublayerVisible(this._sublayers.getItemAt(0))};_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class k extends D{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(w("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new s($);const i=e.sublayer?e.sublayer.layer:void 0;return i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class W extends c{get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}_layerExtension;_onChangeLayerExtensionsHandle=new x((()=>{const e=new WeakMap,i=new Set,s=r=>{const a=new t(r.added).flatten((e=>e.sublayerExtensions)),n=new t(r.moved).flatten((e=>e.sublayerExtensions)),o=new t(r.removed).flatten((e=>e.sublayerExtensions));for(const t of a)if(!e.has(t)){const r=t.sublayerExtensions.on("change",s);e.set(t,r),i.add(r)}for(const t of o){const s=e.get(t);s&&(s.remove(),e.delete(t),i.delete(s))}this.emit("change",{added:a.toArray(),moved:n.toArray(),removed:o.toArray()})};i.add(this._layerExtension.sublayerExtensions.on("change",s));const r=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const t of r){const r=t.sublayerExtensions.on("change",s);e.set(t,r),i.add(r)}return _(i)}));_onAfterAddLayerExtensionsHandle=new x((()=>{const e=new WeakMap,t=new Set,i=i=>{const s=e.get(i);s&&(s.remove(),e.delete(i),t.delete(s))},s=e=>{const t=e.item,s=t.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const e of s)i(e);i(t)},r=i=>{this.emit("after-add",{...i});const a=i.item.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const n of a)if(this.emit("after-add",{...i,item:n}),!e.has(n)){const i=n.sublayerExtensions.on("after-add",r),a=n.sublayerExtensions.on("after-remove",s),o=_([i,a]);e.set(n,o),t.add(o)}};t.add(this._layerExtension.sublayerExtensions.on("after-add",r)),t.add(this._layerExtension.sublayerExtensions.on("after-remove",s));const a=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const i of a){const a=i.sublayerExtensions.on("after-add",r),n=i.sublayerExtensions.on("after-remove",s),o=_([a,n]);e.set(i,o),t.add(o)}return _(t)}));_onAfterRemoveLayerExtensionsHandle=new x((()=>{const e=new WeakMap,t=new Set,i=i=>{const s=e.get(i);s&&(s.remove(),e.delete(i),t.delete(s))},s=e=>{this.emit("after-remove",{...e});const t=e.item,s=t.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const t of s)this.emit("after-remove",{...e,item:t}),i(t);i(t)},r=i=>{const a=i.item,n=a.sublayerExtensions.on("after-add",r),o=a.sublayerExtensions.on("after-remove",s),l=_([n,o]);e.set(a,l),t.add(l)};t.add(this._layerExtension.sublayerExtensions.on("after-remove",s)),t.add(this._layerExtension.sublayerExtensions.on("after-add",r));const a=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const i of a){const a=i.sublayerExtensions.on("after-add",r),n=i.sublayerExtensions.on("after-remove",s),o=_([a,n]);e.set(i,o),t.add(o)}return _(t)}));constructor(e){super(),this._layerExtension=e}on(e,t){const i=[];return"change"===e?i.push(this._onChangeLayerExtensionsHandle.add()):"after-add"===e?i.push(this._onAfterAddLayerExtensionsHandle.add()):"after-remove"===e&&i.push(this._onAfterRemoveLayerExtensionsHandle.add()),i.push(super.on(e,t)),_(i)}findById(e){return w("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return w("id",e).isNotMissing(),this.find((t=>t._sublayerId===e))}forSublayer(e){return w("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let G=class extends O{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};G=e([f],G);export{G as LayerExtensionLayerListSettings};export function toBindingOptions(e){return"object"==typeof e?e:{property:e}}let q=class extends l{_layerExtension;_layerBindings=new Map;constructor(e){super(),this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer?this._onLayerResolved(e.layer):g(e,"layer",(()=>{this._onLayerResolved(e.layer)}),{sync:!0,once:!0})}_getPropertyBindings(){return{}}_hasSettingIncludingAncestor(e){return!(!this._layerBindings.has(e)||!this._layerExtension.layer)||super._hasSettingIncludingAncestor(e)}_getSetting(e,t){if(this._layerBindings.has(e)){const t=toBindingOptions(this._layerBindings.get(e));if(t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){const i=toBindingOptions(this._layerBindings.get(e));if(i.readonly||i.hasOwnProperty("value"))throw new s(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of z(e)){const i=toBindingOptions(e[t]);this._layerBindings.set(t,i),i.hasOwnProperty("value")||m(this,t,(()=>g(this._layerExtension,`layer.${String(i.property)}`,(()=>b(this,t)),{sync:!i.hasOwnProperty("sync")||i.sync})))}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};q=e([f],q);export{q as LayerExtensionSchema};export function _assignLayerExtensions(e,t){return M(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),J(t)?void 0:i)},onMatch:(t,i,s,r)=>{i instanceof LayerExtension||t.assignProperties(i),s===r||J(i)||e.reorder(t,r)},onMissing:t=>{(A([t])||P(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>{const i="solid"===S(e.layer,t.layer);return t instanceof LayerExtension?e===t||i:i||e.id===t.id}})}function U(){return C("geocortex.api.mapping.LayerExtension")}function J(e){return e instanceof LayerExtension?!!e._deferredLayerProperties?.$ref:!v(e.layer)&&!!e.layer?.$ref}let Y=class extends q{_setSetting(e,t){if(this._layerBindings.has(e))throw new s(ERR_SCHEMA_READ_ONLY);super._setSetting(e,t)}};Y=e([f],Y);export{Y as LayerExtensionReadOnlySchema};export const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";
|
|
1
|
+
import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import{ArgumentError as i}from"../ArgumentError.js";import{InvalidOperationError as s}from"../InvalidOperationError.js";import{ItemType as r}from"../ItemType.js";import{FeatureSourceBase as a}from"../data/FeatureSourceBase.js";import{FieldExtension as n}from"../data/FieldExtension.js";import{PopupContentExtension as o}from"../data/PopupContentExtension.js";import{Schema as l}from"../data/Schema.js";import{applyJsonToLayer as y,getLayerJsonType as h,jsonToLayer as d,layerToJson as u}from"../json/LayerJson.js";import{DefaultArcGISRequestHelper as p}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection as c}from"../support/ReadOnlyInitializableCollection.js";import{serializable as f}from"../support/Serializable.js";import{createIHandle as _,notifyChange as b,onWatch as m,watch as g,watchEach as x}from"../support/observableUtils.js";import E from"../utilities/_ReferenceCountedHandle.js";import{getEquivalencyTypeForLayers as S,getLayerUrl as L,isLayer as v}from"../utilities/_layers.js";import{checkArg as w}from"../utilities/checkArg.js";import{compare as M}from"../utilities/collection.js";import{load as I}from"../utilities/esri.js";import{isGroupLayerExtension as A}from"../utilities/extensions.js";import{hasMmapLayer as P}from"../utilities/layers.js";import{getLogger as C}from"../utilities/log.js";import{deepClone as j,objectKeys as z}from"../utilities/object.js";import{toPortalItem as H}from"../utilities/portal.js";import{onCollectionPropertyChange as T}from"../utilities/watch.js";import{_assignSublayerExtensions as R}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings as O,fromLayerListMode as V}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase as F}from"./support/_SublayerExtensionCollection.js";const D="Invalid type of layer for this type of layer extension.",B="This type of layer does not have features.",$="This type of layer cannot have sublayers.",N=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1,supportsStandardizedQueries:!1});export class LayerExtension extends a{get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new p),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?.title??this._deferredLayerProperties?.title??("string"==typeof this._deferredLayerProperties?.$ref?this._deferredLayerProperties?.$ref:this._deferredLayerProperties?.$ref?.title??this._deferredLayerProperties?.$ref?.id)??"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get canChangeLabels(){return!1}get canChangeRenderer(){return!1}get canChangeDefinitionExpression(){return!1}get initialDefinitionExpression(){return this._initialDefinitionExpression}get initialRenderer(){return this._initialRenderer}get initialVisibility(){return this._initialVisibility??this.layer?.visible??!1}get _layerId(){return this.layer?.id??this._deferredLayerProperties?.$ref?.id}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}static factory;get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}static _layerWatchHandlesKey="layer-extension-layer-watch-handles";tpkSource;layerListSettings;allSublayerExtensions;get sublayersAreReadOnly(){return!0}_itemType=r.LAYER_EXTENSION;_mapExtension;_basemapExtension;_groundExtension;_parentLayerExtension;_sublayerExtensions;_layer;_dynamicallyAddedLayer=!1;_isSwitchingLayer=!1;_deferredLayerProperties;_requestHelper;_initialDefinitionExpression;_initialRenderer;_initialVisibility;_visibilityMode="independent";_portalItem;constructor(e){super(e);const t={...this.getDefaults(),...e};w("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let s;if(i?.hasOwnProperty("listMode")&&(s=V(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),v(i))w("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),D),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=H(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new W(this),this._handles.add([m(this,"isEffectivelyVisible",(()=>g(this,"parentLayerExtension.isEffectivelyVisible",(()=>b(this,"isEffectivelyVisible")),{sync:!0}))),m(this,"_sublayers",(()=>g(this,"layer.sublayers",(()=>b(this,"_sublayers")),{sync:!0})))])}static create(e){if(!LayerExtension.factory)throw new s("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){w("portalItemLike",e).isNotMissing();const s=t??{};w("layerExtensionProperties.layer",s.layer).satisfies((e=>!v(e)));const r={...s.layer};w("layerExtensionProperties.layer.$ref",r.$ref).satisfies((e=>null==e));const a=new p,n=H(e);let o;await I(n);const l=n.typeKeywords??"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o=l.includes("SubtypeGroupLayer")?"SubtypeGroupLayer":"ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType||l.includes("Tiled Imagery")?o="ArcGISTiledImageServiceLayer":"Elevation"===e.cacheType||l.includes("Elevation 3D Layer")?o="ArcGISTiledElevationServiceLayer":"Raster"===e.cacheType&&(o="ArcGISImageServiceLayer"):o=e.singleFusedMapCache||e.tileInfo||l.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===n.type)o="CSV";else if("KML"===n.type)o="KML";else if("Scene Service"===n.type)l.includes("3DObject")||l.includes("Point")?o="ArcGISSceneServiceLayer":l.includes("IntegratedMesh")?o="IntegratedMeshLayer":l.includes("PointCloud")?o="PointCloudLayer":l.includes("Building")&&(o="BuildingSceneLayer");else if("Stream Service"===n.type)o="ArcGISStreamLayer";else if("Vector Tile Service"===n.type)o="VectorTileLayer";else if("Feature Collection"===n.type){o="ArcGISFeatureLayer";const e=await n.fetchData();r.featureCollection=e}else if("WFS"===n.type){o="WFS";const e=await n.fetchData();Object.assign(r,e)}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(r,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(r,e)}if(!o)throw new i("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(r.layerType&&r.layerType!==o)throw new i("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return r.layerType=o,r.$portalItem=n,s.layer=r,LayerExtension.create(s)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i?.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new s(B);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.addFeatures(e,t)}async updateFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties?.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),w("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),D),this._deferredLayerProperties=void 0)}_setMapExtension(e){if(this.mapExtension===e)return;const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),b(this,"mapExtension")}_setBasemapExtension(e){this.basemapExtension!==e&&(this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),b(this,"basemapExtension"))}_setGroundExtension(e){this.groundExtension!==e&&(this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),b(this,"groundExtension"))}_setParentLayerExtension(e){if(this.parentLayerExtension===e)return;const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),b(this,"parentLayerExtension")}_resolveLayer(e){if(this.layer||!this._deferredLayerProperties)return;const t=e??this.basemapExtension?.basemap?.baseLayers??this.groundExtension?.ground?.layers??this.parentLayerExtension?.layer?.layers??this.mapExtension?.map.layers;if(!t)return;const i=[];let s;for(const e of t){const t=S(e,this._deferredLayerProperties);if("none"!==t){if("solid"===t){s=e;break}i.push(e)}}s||1!==i.length||(s=i[0]),s&&this._isSupportedLayer(s)&&(this._setLayer(s),this._deferredLayerProperties.$portalItem&&K().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;w("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),D),this._isSwitchingLayer=!0,this.isInitialized&&await I(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,e.hasOwnProperty("labelsVisible")&&this.layer.hasOwnProperty("labelsVisible")&&(e.labelsVisible=this.layer.labelsVisible);const i=this.schema.fieldExtensions.toArray(),s=this.featureSettings.popupContentExtensions.toArray();this._setLayer(e);const r=[];i.forEach((e=>{const t=this.schema.fields.find((t=>n.matchesRef(e,{$ref:t.name})));t?e._switchField(t):(e._setSchema(void 0),r.push(e.destroy()))})),s.forEach(((e,t)=>{const i=this.featureSettings.popupContentExtensions.find((e=>o.matchesRef(s,t,e.toJSON().content)));i?e._switchContent(i.content):(e._setFeatureSettings(void 0),r.push(e.destroy()))}));const a=new Set;if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();r.push(...e.map((async e=>{const i=t.get(e.id);i&&(a.add(i),await i._switchSublayer(e),this._sublayerExtensions._register(i))})))}const l=[];for(const e of t.values())e&&!a.has(e)&&l.push(e);r.push(...l.map((async e=>{this._sublayerExtensions._detach(e),await e.destroy()}))),await Promise.all(r),this.isInitialized&&await this._initializeChildren(),this._isSwitchingLayer=!1}_getProjectWebmapJSON(){if(!this.layer)return;let e=u(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:s,opacity:r}=e;e={id:t,title:i,layerType:s,visibility:this.layer.visible,opacity:r}}return e}_onSublayerAddedPostInitialize=async e=>{if(!this._isSwitchingLayer)try{await e.initialize()}catch(t){K().error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}};async _onDestroy(){await Promise.all(this.sublayerExtensions.map((e=>e.destroy()))),this._sublayerExtensions.destroy(),this.allSublayerExtensions.destroy(),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{R(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=h(this._layer),t=this._getSerializableRefLayerProperties(),i=L(this._layer),s=i?{url:i}:{};return{$ref:{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType(),...s},layerType:e,...t}}return u(this.layer)}return this._deferredLayerProperties?j(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(v(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else if(e){if(this._layer)return this._applyLayerProperties(e,this.layer);this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e})}}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new s($);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await I(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new s(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new s("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await I(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new t),this._initialDefinitionExpression="definitionExpression"in this.layer?this.layer.definitionExpression:void 0,this._initialRenderer=this.renderer?.clone(),this._initialVisibility=this.layer.visible,this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this.supportsSublayers&&this._handles.add(T(this,"layer.sublayers",(async e=>{if(this._isSwitchingLayer)return;const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new s("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new G(e,this)}_createSublayerExtensionCollection(){return new k(this)}_capabilities(){return N}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return d(e)}_applyLayerProperties(e,t){w("layerJson",e).isNotMissing();const i=e.layerType||e.type;return w("layerJson.layerType",i).satisfies((e=>!e||e===this.getDefault("layer")?.layerType)),w("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e))),y(e,t)}_setLayer(e){if(this._layer=e,this._handles.remove(LayerExtension._layerWatchHandlesKey),this._handles.add([g(e,"visible",((e,t,i)=>{this._onVisibleChanged(e),this.mapExtension?.emit("layer-visibility-change",i)})),m(this,"effectiveMinScale",(()=>g(this.layer,"minScale",(()=>b(this,"effectiveMinScale")),{sync:!0}))),m(this,"effectiveMaxScale",(()=>g(this.layer,"maxScale",(()=>b(this,"effectiveMaxScale")),{sync:!0}))),m(this,"title",(()=>g(this.layer,"title",(()=>b(this,"title")),{sync:!0})))],LayerExtension._layerWatchHandlesKey),"definitionExpression"in e&&this._handles.add(g(e,"definitionExpression",((e,t,i)=>{this.mapExtension?.emit("layer-definition-expression-change",i)})),LayerExtension._layerWatchHandlesKey),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=g(e,"sublayers",(()=>{this._setupSublayersHandles()}),{sync:!0,once:!0});this._handles.add(t,LayerExtension._layerWatchHandlesKey)}b(this,"layer"),b(this,"title"),b(this,"effectiveMinScale"),b(this,"effectiveMaxScale"),b(this,"isEffectivelyVisible")}_setupSublayersHandles(){this._handles.add([this._sublayers.on("after-add",this._onSublayersAfterAdd),this._sublayers.on("after-remove",this._onSublayersAfterRemove),x(this._sublayers,"[].visible",this._onSublayersSublayerVisibleChanged,{sync:!0})],LayerExtension._layerWatchHandlesKey)}_onVisibleChanged=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;b(this,"isEffectivelyVisible")};_onSublayersSublayerVisibleChanged=(e,t,i)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(i)};_onSublayersAfterAdd=e=>{1!==this._sublayers.length||e.item.visible||"exclusive"!==this.visibilityMode?e.item.visible&&"exclusive"===this.visibilityMode&&(e.item.visible=!1):e.item.visible=!0};_onSublayersAfterRemove=e=>{0!==this._sublayers.length&&"exclusive"===this.visibilityMode&&e.item.visible&&this._ensureAChildSublayerVisible(this._sublayers.getItemAt(0))};_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class k extends F{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(w("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new s($);const i=e.sublayer?e.sublayer.layer:void 0;return i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class W extends c{get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}_layerExtension;_onChangeLayerExtensionsHandle=new E((()=>{const e=new WeakMap,i=new Set,s=r=>{const a=new t(r.added).flatten((e=>e.sublayerExtensions)),n=new t(r.moved).flatten((e=>e.sublayerExtensions)),o=new t(r.removed).flatten((e=>e.sublayerExtensions));for(const t of a)if(!e.has(t)){const r=t.sublayerExtensions.on("change",s);e.set(t,r),i.add(r)}for(const t of o){const s=e.get(t);s&&(s.remove(),e.delete(t),i.delete(s))}this.emit("change",{added:a.toArray(),moved:n.toArray(),removed:o.toArray()})};i.add(this._layerExtension.sublayerExtensions.on("change",s));const r=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const t of r){const r=t.sublayerExtensions.on("change",s);e.set(t,r),i.add(r)}return _(i)}));_onAfterAddLayerExtensionsHandle=new E((()=>{const e=new WeakMap,t=new Set,i=i=>{const s=e.get(i);s&&(s.remove(),e.delete(i),t.delete(s))},s=e=>{const t=e.item,s=t.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const e of s)i(e);i(t)},r=i=>{this.emit("after-add",{...i});const a=i.item.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const n of a)if(this.emit("after-add",{...i,item:n}),!e.has(n)){const i=n.sublayerExtensions.on("after-add",r),a=n.sublayerExtensions.on("after-remove",s),o=_([i,a]);e.set(n,o),t.add(o)}};t.add(this._layerExtension.sublayerExtensions.on("after-add",r)),t.add(this._layerExtension.sublayerExtensions.on("after-remove",s));const a=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const i of a){const a=i.sublayerExtensions.on("after-add",r),n=i.sublayerExtensions.on("after-remove",s),o=_([a,n]);e.set(i,o),t.add(o)}return _(t)}));_onAfterRemoveLayerExtensionsHandle=new E((()=>{const e=new WeakMap,t=new Set,i=i=>{const s=e.get(i);s&&(s.remove(),e.delete(i),t.delete(s))},s=e=>{this.emit("after-remove",{...e});const t=e.item,s=t.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const t of s)this.emit("after-remove",{...e,item:t}),i(t);i(t)},r=i=>{const a=i.item,n=a.sublayerExtensions.on("after-add",r),o=a.sublayerExtensions.on("after-remove",s),l=_([n,o]);e.set(a,l),t.add(l)};t.add(this._layerExtension.sublayerExtensions.on("after-remove",s)),t.add(this._layerExtension.sublayerExtensions.on("after-add",r));const a=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const i of a){const a=i.sublayerExtensions.on("after-add",r),n=i.sublayerExtensions.on("after-remove",s),o=_([a,n]);e.set(i,o),t.add(o)}return _(t)}));constructor(e){super(),this._layerExtension=e}destroy(){this._onChangeLayerExtensionsHandle.destroy(),this._onAfterAddLayerExtensionsHandle.destroy(),this._onAfterRemoveLayerExtensionsHandle.destroy(),super.destroy()}on(e,t){const i=[];return"change"===e?i.push(this._onChangeLayerExtensionsHandle.add()):"after-add"===e?i.push(this._onAfterAddLayerExtensionsHandle.add()):"after-remove"===e&&i.push(this._onAfterRemoveLayerExtensionsHandle.add()),i.push(super.on(e,t)),_(i)}findById(e){return w("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return w("id",e).isNotMissing(),this.find((t=>t._sublayerId===e))}forSublayer(e){return w("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let G=class extends O{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};G=e([f],G);export{G as LayerExtensionLayerListSettings};export function toBindingOptions(e){return"object"==typeof e?e:{property:e}}let q=class extends l{_layerExtension;_layerBindings=new Map;constructor(e){super(),this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer?this._onLayerResolved(e.layer):this._handles.add(g(e,"layer",(()=>{this._onLayerResolved(e.layer)}),{sync:!0,once:!0}))}_getPropertyBindings(){return{}}_hasSettingIncludingAncestor(e){return!(!this._layerBindings.has(e)||!this._layerExtension.layer)||super._hasSettingIncludingAncestor(e)}_getSetting(e,t){if(this._layerBindings.has(e)){const t=toBindingOptions(this._layerBindings.get(e));if(t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){const i=toBindingOptions(this._layerBindings.get(e));if(i.readonly||i.hasOwnProperty("value"))throw new s(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of z(e)){const i=toBindingOptions(e[t]);this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._handles.add(m(this,t,(()=>g(this._layerExtension,`layer.${String(i.property)}`,(()=>b(this,t)),{sync:!i.hasOwnProperty("sync")||i.sync}))))}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};q=e([f],q);export{q as LayerExtensionSchema};export function _assignLayerExtensions(e,t){return M(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),U(t)?void 0:i)},onMatch:(t,i,s,r)=>{i instanceof LayerExtension||t.assignProperties(i),s===r||U(i)||e.reorder(t,r)},onMissing:t=>{(P([t])||A(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>{const i="solid"===S(e.layer,t.layer);return t instanceof LayerExtension?e===t||i:i||e.id===t.id}})}function K(){return C("geocortex.api.mapping.LayerExtension")}function U(e){return e instanceof LayerExtension?!!e._deferredLayerProperties?.$ref:!v(e.layer)&&!!e.layer?.$ref}let J=class extends q{_setSetting(e,t){if(this._layerBindings.has(e))throw new s(ERR_SCHEMA_READ_ONLY);super._setSetting(e,t)}};J=e([f],J);export{J as LayerExtensionReadOnlySchema};export const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import Collection from "@arcgis/core/core/Collection";
|
|
2
|
-
import type { ResourceHandle } from "@arcgis/core/core/Handles.js";
|
|
3
2
|
import type Extent from "@arcgis/core/geometry/Extent";
|
|
4
3
|
import type SpatialReference from "@arcgis/core/geometry/SpatialReference";
|
|
5
4
|
import type Renderer from "@arcgis/core/renderers/Renderer";
|
|
@@ -141,6 +140,18 @@ export declare abstract class SublayerExtension<TProperties extends SublayerExte
|
|
|
141
140
|
* sublayer extension creation.
|
|
142
141
|
*/
|
|
143
142
|
static factory: SublayerExtensionFactory;
|
|
143
|
+
/**
|
|
144
|
+
* Handle group key for watches on the current sublayer instance.
|
|
145
|
+
*/
|
|
146
|
+
private static readonly _sublayerWatchHandlesKey;
|
|
147
|
+
/**
|
|
148
|
+
* Handle group key for watches from parent LayerExtension.
|
|
149
|
+
*/
|
|
150
|
+
private static readonly _layerExtensionWatchHandlesKey;
|
|
151
|
+
/**
|
|
152
|
+
* Handle group key for watches from parent SublayerExtension.
|
|
153
|
+
*/
|
|
154
|
+
private static readonly _parentSublayerWatchHandlesKey;
|
|
144
155
|
/**
|
|
145
156
|
* The sublayer that is being extended.
|
|
146
157
|
*/
|
|
@@ -261,11 +272,6 @@ export declare abstract class SublayerExtension<TProperties extends SublayerExte
|
|
|
261
272
|
* @inheritDoc
|
|
262
273
|
*/
|
|
263
274
|
protected readonly _itemType: string;
|
|
264
|
-
/**
|
|
265
|
-
* A set of watch handles that get cleaned up when the class instance is
|
|
266
|
-
* destroyed.
|
|
267
|
-
*/
|
|
268
|
-
protected readonly _watchHandles: ResourceHandle[];
|
|
269
275
|
private readonly _sublayerExtensions;
|
|
270
276
|
private _layerExtension;
|
|
271
277
|
private _parentSublayerExtension;
|
|
@@ -273,6 +279,7 @@ export declare abstract class SublayerExtension<TProperties extends SublayerExte
|
|
|
273
279
|
private _initialRenderer;
|
|
274
280
|
private _initialVisibility;
|
|
275
281
|
private _sublayer;
|
|
282
|
+
private _isSwitchingSublayer;
|
|
276
283
|
private _visibilityMode;
|
|
277
284
|
private _deferredSublayerProperties;
|
|
278
285
|
private _originalRef;
|
|
@@ -386,6 +393,7 @@ export declare class SublayerSchema extends Schema {
|
|
|
386
393
|
constructor(sublayerExtension: SublayerExtension);
|
|
387
394
|
get spatialReference(): SpatialReference;
|
|
388
395
|
set spatialReference(value: SpatialReference);
|
|
396
|
+
destroy(): void;
|
|
389
397
|
/**
|
|
390
398
|
* Returns the property bindings.
|
|
391
399
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import{InvalidOperationError as i}from"../InvalidOperationError.js";import{isSublayerExtension as s,ItemType as r}from"../ItemType.js";import{FeatureSourceBase as a}from"../data/FeatureSourceBase.js";import{Schema as n}from"../data/Schema.js";import{serializable as l}from"../support/Serializable.js";import{createIHandle as o,notifyChange as u,onWatch as y,watch as h,watchEach as b}from"../support/observableUtils.js";import{isBuildingComponentSublayer as f,isBuildingGroupSublayer as c,isKMLSublayer as p,isMapImageSublayer as S,isMapNotesSublayer as d,isSubtypeSublayer as _,isTileLayer as g,isWMSSublayer as x,isWMTSSublayer as E}from"../utilities/_layers.js";import{checkArg as v}from"../utilities/checkArg.js";import{compare as m}from"../utilities/collection.js";import{load as w}from"../utilities/esri.js";import{parse as M}from"../utilities/format/number.js";import{getLogger as P}from"../utilities/log.js";import{deepClone as V,objectKeys as C}from"../utilities/object.js";import{onCollectionPropertyChange as A}from"../utilities/watch.js";import{toBindingOptions as z}from"./_LayerExtension.js";import{fromLayerListMode as $,LayerListSettings as R}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase as F}from"./support/_SublayerExtensionCollection.js";const j=P("SublayerExtension"),I="Invalid type of sublayer for this type of sublayer extension.",T="This type of layer does not have features.",k="This type of sublayer extension cannot have child sublayer extensions.",L=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1,supportsStandardizedQueries:!1});export function getSublayerType(e){if(S(e))return g(e?.layer)?"ArcGISTiledSublayer":"ArcGISMapServiceSublayer";if(p(e))return"KMLSublayer";if(E(e))return"WMTSSublayer";if(x(e))return"WMSSublayer";if(f(e))return"BuildingComponentSublayer";if(c(e))return"BuildingGroupSublayer";if(_(e))return"SubtypeSublayer";if(d(e))return"MapNotesSublayer";throw new Error(`Unknown sublayer type for sublayer: "${e?.title}"`)}export class SublayerExtension extends a{static factory;get sublayer(){return this._sublayer}get layerExtension(){return this._layerExtension}get parentSublayerExtension(){return this._parentSublayerExtension}get hasFeatures(){return!1}get sublayerExtensions(){return this._sublayerExtensions}get renderer(){}layerListSettings;get visibilityMode(){return this.canToggleVisibility?this._visibilityMode:"inherited"}set visibilityMode(e){v("visibilityMode",e).satisfies((e=>this.canToggleVisibility||"inherited"===e),'Sublayers of this type only support a visibility mode of "inherited".'),this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get capabilities(){return this._capabilities()}get effectiveMinScale(){const e=this.sublayer?this.sublayer.minScale:0;if(this.parentSublayerExtension){const t=this.parentSublayerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}if(this.layerExtension){const t=this.layerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}return e}get effectiveMaxScale(){const e=this.sublayer?this.sublayer.maxScale:0;return this.parentSublayerExtension&&this.parentSublayerExtension.effectiveMaxScale>e?this.parentSublayerExtension.effectiveMaxScale:this.layerExtension&&this.layerExtension.effectiveMaxScale>e?this.layerExtension.effectiveMaxScale:e}get isEffectivelyVisible(){const e=!!this.sublayer&&this.sublayer.visible;return this.parentSublayerExtension?this.parentSublayerExtension.isEffectivelyVisible&&e:this.layerExtension?this.layerExtension.isEffectivelyVisible&&e:e}get title(){return this.sublayer?.title??("string"==typeof this._deferredSublayerProperties?.$ref||"number"==typeof this._deferredSublayerProperties?.$ref?this._deferredSublayerProperties?.$ref.toString():this._deferredSublayerProperties?.$ref?.title??this._deferredSublayerProperties?.$ref?.id.toString())??"Sublayer"}get supportsSublayers(){return!1}get canToggleVisibility(){return!0}get canChangeOpacity(){return!0}get canChangeScale(){return!0}get canChangeRenderer(){return!1}get canChangeLabels(){return!1}get canChangeDefinitionExpression(){return!1}get _layerSupportsHideChildren(){return!1}get _sublayerId(){return this.sublayer?.id??("number"==typeof this._deferredSublayerProperties?.$ref?this._deferredSublayerProperties?.$ref:this._deferredSublayerProperties?.$ref?.id)}get _sublayers(){if(this.supportsSublayers)return this.sublayer?.sublayers}get effectiveFullExtent(){return this._effectiveFullExtent?this._effectiveFullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}get initialDefinitionExpression(){return this._initialDefinitionExpression}get initialRenderer(){return this._initialRenderer}get initialVisibility(){return this._initialVisibility??this.sublayer?.visible??!1}_effectiveFullExtent;_itemType=r.SUBLAYER_EXTENSION;_watchHandles=[];_sublayerExtensions;_layerExtension;_parentSublayerExtension;_initialDefinitionExpression;_initialRenderer;_initialVisibility;_sublayer;_visibilityMode;_deferredSublayerProperties;_originalRef;constructor(e){super(e);const t=e||{};this._visibilityMode=this.canToggleVisibility?"independent":"inherited",this._sublayerExtensions=this._createSublayerExtensionCollection();const i=t.sublayer;let s;i?.hasOwnProperty("listMode")&&(s=$(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),O(i)?(v("properties.sublayer",i).satisfies((e=>this._isSupportedSublayer(e)),I),this._setSublayer(i)):i&&(this._deferredSublayerProperties=i),y(this,"isEffectivelyVisible",(()=>h(this,"parentSublayerExtension.isEffectivelyVisible",(()=>u(this,"isEffectivelyVisible")),{sync:!0})))}static create(e){if(!SublayerExtension.factory)throw new i("Cannot create sublayer extension: no sublayer extension factory has been registered.");return SublayerExtension.factory.create(e)}static _matchesRef(e,t,i){if(!e||!t?.$ref)return!1;let s=t.$ref;if("string"==typeof s){const e=M(s);s={id:isNaN(e)?s:e,title:s}}else"number"==typeof s&&(s={id:s});const r=_(e)?e.subtypeCode:e.id;return"both"===i?r===s.id&&e.title===s.title:"by-id"===i?r===s.id:"by-title"===i&&e.title===s.title}getFeatures(e,t){if(!this.hasFeatures)throw new i(T);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(v("features",e).isNotMissing(),!this.hasFeatures)throw new i(T);await super.addFeatures(e,t)}async updateFeatures(e,t){if(v("features",e).isNotMissing(),!this.hasFeatures)throw new i(T);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(v("features",e).isNotMissing(),!this.hasFeatures)throw new i(T);await super.deleteFeatures(e,t)}_resolveSublayer(){if(this._sublayer||!this._deferredSublayerProperties||!this.layerExtension?.layer||!this.layerExtension.layer.sublayers)return;const e=e=>t=>SublayerExtension._matchesRef(t,this._deferredSublayerProperties,e),t=this.layerExtension.layer.sublayers.flatten((e=>e.sublayers));let i=t.find(e("both"));if(i||(i=t.find(e("by-title"))),i||(i=t.find(e("by-id"))),i&&this._isSupportedSublayer(i)){this._setSublayer(i);const e={sublayer:{title:this.title,...this._deferredSublayerProperties}};this.assignProperties(e),this._originalRef=this._deferredSublayerProperties.$ref,this._deferredSublayerProperties=void 0}}_setLayerExtension(e){const t=this.layerExtension;this._layerExtension=e,this.layerExtension&&(y(this,"effectiveMinScale",(()=>h(this.layerExtension,"effectiveMinScale",(()=>u(this,"effectiveMinScale")),{sync:!0}))),y(this,"effectiveMaxScale",(()=>h(this.layerExtension,"effectiveMaxScale",(()=>u(this,"effectiveMaxScale")),{sync:!0}))),y(this,"isEffectivelyVisible",(()=>h(this.layerExtension,"isEffectivelyVisible",(()=>u(this,"isEffectivelyVisible")),{sync:!0})))),this._parentSublayerExtension||(t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings))),this._resolveSublayer(),u(this,"layerExtension"),this.supportsSublayers&&this._sublayerExtensions.onLayerExtensionChanged()}_setParentSublayerExtension(e){if(this._parentSublayerExtension===e)return;const t=this._parentSublayerExtension;this._parentSublayerExtension=e,this.parentSublayerExtension&&(y(this,"effectiveMinScale",(()=>h(this.parentSublayerExtension,"effectiveMinScale",(()=>u(this,"effectiveMinScale")),{sync:!0}))),y(this,"effectiveMaxScale",(()=>h(this.parentSublayerExtension,"effectiveMaxScale",(()=>u(this,"effectiveMaxScale")),{sync:!0})))),t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.layerExtension?this.layerExtension.featureSettings.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=this.layerExtension?this.layerExtension.taskSettings:void 0)),e&&((!this.featureSettings.formatSettings.parent||this.layerExtension&&this.featureSettings.formatSettings.parent===this.layerExtension.featureSettings.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),(!this.taskSettings.parent||this.layerExtension&&this.taskSettings.parent===this.layerExtension.taskSettings)&&(this.taskSettings.parent=e.taskSettings)),this._resolveSublayer(),u(this,"parentSublayerExtension")}async _switchSublayer(e){if(e===this.sublayer)return;v("newSublayer",e).isNotMissing().satisfies((e=>e.id===this.sublayer.id),"Sublayer ID must match existing sublayer.").satisfies((e=>this._isSupportedSublayer(e)),I),this.isInitialized&&await w(e);const t=new Map;if(this.sublayer?.sublayers)for(const e of this.sublayer.sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));this.canToggleVisibility&&(e.visible=this.sublayer.visible),this.canChangeOpacity&&(e.opacity=this.sublayer.opacity),this._setSublayer(e);const i=[];if(this.supportsSublayers&&this.sublayer.sublayers){const e=this.sublayer.sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}async _postInitialize(){await super._postInitialize(),this.supportsSublayers&&this._watchHandles.push(A(this,"sublayer.sublayers",(async e=>{const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_onSublayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(t){j.error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}};async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),visibilityMode:{serializeModes:["initial"],default:this.canToggleVisibility?"independent":"inherited"},layerListSettings:"initial",sublayerExtensions:{serializeModes:["initial","project"],serialize:()=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},sublayer:{serializeModes:["initial","project"],serialize:()=>{if(this.sublayer){if(!this._layerExtension)return this._serializeSublayer(this._sublayer);{const e=getSublayerType(this._sublayer);if(this._originalRef)return{$ref:this._originalRef,$sublayerType:e};if(this._sublayer.title||this._sublayer.id)return{...this._createSublayerRef(),$sublayerType:e}}}else if(this._deferredSublayerProperties)return V(this._deferredSublayerProperties)},deserialize:e=>{if(O(e)){if(e!==this.sublayer)throw new Error("Property 'sublayer' is read-only.")}else{if(this._sublayer)return this._applySublayerProperties(e,this._sublayer);this._deferredSublayerProperties&&(this._deferredSublayerProperties={...this._deferredSublayerProperties,...e})}}},requestHelper:{serialize:!1}}}_createSublayerExtension(e){throw new i(k)}_createSchema(){return new N(this)}_createLayerListSettings(e){return new R(e)}_capabilities(){return L}async _onInitialize(){if(await super._onInitialize(),this._sublayer||this._deferredSublayerProperties?.$ref||(this._setSublayer(await this._createSublayer(this._deferredSublayerProperties)),this._deferredSublayerProperties=void 0),this._resolveSublayer(),!this._sublayer){const e=this._deferredSublayerProperties?.$ref;if(!this._layerExtension)throw new i("Cannot resolve sublayer reference: missing parent layer extension.");throw new i(`No sublayer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`)}this._initialDefinitionExpression="definitionExpression"in this.sublayer?this.sublayer.definitionExpression:void 0,this._initialRenderer=this.renderer?.clone(),this._initialVisibility=this.sublayer.visible,this.supportsSublayers&&this._sublayerExtensions.onParentInitialized()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}_createSublayerRef(){return{$ref:{id:_(this._sublayer)?this._sublayer.subtypeCode:this._sublayer.id,title:this._sublayer.title}}}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollection(this)}_watchSublayerProperties(){this._watchHandles.push(y(this,"effectiveMinScale",(()=>h(this.sublayer,"minScale",(()=>u(this,"effectiveMinScale")),{sync:!0}))),y(this,"effectiveMaxScale",(()=>h(this.sublayer,"maxScale",(()=>u(this,"effectiveMaxScale")),{sync:!0}))),y(this,"title",(()=>h(this.sublayer,"title",(()=>u(this,"title")),{sync:!0}))))}_setSublayer(e){if(this._sublayer=e,this._watchHandles.push(h(e,"visible",((e,t,i)=>{this._onSetSublayerVisible(e),this.layerExtension?.mapExtension?.emit("layer-visibility-change",i)}),{sync:!0})),"definitionExpression"in e&&this._watchHandles.push(h(e,"definitionExpression",((e,t,i)=>{this.layerExtension?.mapExtension?.emit("layer-definition-expression-change",i)}))),this.supportsSublayers){let t;this._watchHandles.push(h(e,"sublayers",(e=>{t&&t.remove(),t=o([e.on("after-add",this._onSublayersAfterAdd),e.on("after-remove",this._onSublayersAfterRemove)]),this._ensureAtMostOneChildSublayerVisible()}),{sync:!0}),t,b(e,"sublayers.[].visible",this._onSetSublayersSublayerVisible,{sync:!0}))}this._onSetSublayerVisible(this.sublayer.visible),"exclusive"===this.visibilityMode&&this._ensureAtMostOneChildSublayerVisible(),this._watchSublayerProperties(),u(this,"sublayer"),u(this,"title"),u(this,"effectiveMinScale"),u(this,"effectiveMaxScale"),u(this,"isEffectivelyVisible")}_onSetSublayerVisible=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this.sublayerExtensions)for(const t of this.sublayerExtensions.toArray())t.sublayer&&t.canToggleVisibility&&(t.sublayer.visible=e);u(this,"isEffectivelyVisible")};_onSetSublayersSublayerVisible=(e,t,i)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(i)};_onSublayersAfterAdd=e=>{1!==this._sublayers.length||e.item.visible||"exclusive"!==this.visibilityMode?e.item.visible&&"exclusive"===this.visibilityMode&&(e.item.visible=!1):e.item.visible=!0};_onSublayersAfterRemove=e=>{0!==this._sublayers.length&&"exclusive"===this.visibilityMode&&e.item.visible&&this._ensureAChildSublayerVisible(this._sublayers.getItemAt(0))};_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.sublayer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}let N=class extends n{_sublayerExtension;_sublayerBindings=new Map;constructor(e){super(),this._sublayerExtension=e,this._bindSettingsToSublayerProperties()}get spatialReference(){if(this._sublayerExtension.layerExtension)return this._sublayerExtension.layerExtension.schema.spatialReference}set spatialReference(e){throw new i("Cannot set sublayer schema spatial reference.")}_getPropertyBindings(){return{}}_hasSettingIncludingAncestor(e){return!(!this._sublayerBindings.has(e)||!this._sublayerExtension.sublayer)||super._hasSettingIncludingAncestor(e)}_bindSettingsToSublayerProperties(){const e=this._getPropertyBindings();for(const t of C(e)){const i=z(e[t]);this._sublayerBindings.set(t,i),i.hasOwnProperty("value")||y(this,t,(()=>h(this._sublayerExtension,`sublayer.${String(i.property)}`,(()=>u(this,t)),{sync:!i.hasOwnProperty("sync")||i.sync})))}}};N=e([l],N);export{N as SublayerSchema};export class SubSublayerExtensionCollection extends F{get _layerExtension(){return this._parent.layerExtension}constructor(e,t){super(e,t??"sublayer.sublayers")}add(e,s){if(v("sublayerX",e).isNotMissing(),!this._parent.supportsSublayers)throw new i(k);return e.sublayer&&this._parent.sublayer&&!this._parent.sublayer.sublayers&&(this._parent.sublayer.sublayers=new t),e.parentSublayerExtension&&e.parentSublayerExtension.sublayerExtensions.remove(e),super.add(e,s)}_onAdded(e){super._onAdded(e),e._setParentSublayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentSublayerExtension(void 0)}}export function _assignSublayerExtensions(e,t,i){m(e,t,{onNew:(t,r)=>{try{e.add(s(t)?t:i(t),B(t)?void 0:r)}catch(e){j.warn({message:`Error occurred while adding sublayer extension for sublayer '${t.title??t.sublayer?.id??t.id}'.`,error:e})}},onMatch:(t,i,r,a)=>{try{s(i)||t.assignProperties(i),r===a||B(i)||e.reorder(t,a)}catch(e){j.warn({message:`Error occurred while assigning sublayer extension properties for sublayer '${t.title??t.sublayer?.id??t.id}'.`,error:e})}},equals:(e,t)=>{if(s(t)){if(e===t)return!0;const i=_(t.sublayer)?t.sublayer.subtypeCode:t.sublayer?.id;return SublayerExtension._matchesRef(e.sublayer,{$ref:{id:i,title:t.sublayer?.title}},"both")}return SublayerExtension._matchesRef(e.sublayer,t.sublayer,"both")||e.id===t.id}})}function O(e){return e&&"function"==typeof e.set}function B(e){return s(e)?!!e._deferredSublayerProperties?.$ref:!O(e.sublayer)&&!!e.sublayer?.$ref}
|
|
1
|
+
import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import{InvalidOperationError as i}from"../InvalidOperationError.js";import{isSublayerExtension as s,ItemType as r}from"../ItemType.js";import{FeatureSourceBase as a}from"../data/FeatureSourceBase.js";import{FieldExtension as n}from"../data/FieldExtension.js";import{PopupContentExtension as l}from"../data/PopupContentExtension.js";import{Schema as o}from"../data/Schema.js";import{serializable as u}from"../support/Serializable.js";import{createIHandle as y,notifyChange as h,onWatch as b,watch as f,watchEach as d}from"../support/observableUtils.js";import{isBuildingComponentSublayer as c,isBuildingGroupSublayer as S,isKMLSublayer as p,isMapImageSublayer as _,isMapNotesSublayer as x,isSubtypeSublayer as g,isTileLayer as E,isWMSSublayer as m,isWMTSSublayer as v}from"../utilities/_layers.js";import{checkArg as w}from"../utilities/checkArg.js";import{compare as M}from"../utilities/collection.js";import{load as P}from"../utilities/esri.js";import{parse as C}from"../utilities/format/number.js";import{getLogger as V}from"../utilities/log.js";import{deepClone as A,objectKeys as z}from"../utilities/object.js";import{onCollectionPropertyChange as $}from"../utilities/watch.js";import{toBindingOptions as F}from"./_LayerExtension.js";import{fromLayerListMode as R,LayerListSettings as j}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase as I}from"./support/_SublayerExtensionCollection.js";const T=V("SublayerExtension"),k="Invalid type of sublayer for this type of sublayer extension.",L="This type of layer does not have features.",H="This type of sublayer extension cannot have child sublayer extensions.",N=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1,supportsStandardizedQueries:!1});export function getSublayerType(e){if(_(e))return E(e?.layer)?"ArcGISTiledSublayer":"ArcGISMapServiceSublayer";if(p(e))return"KMLSublayer";if(v(e))return"WMTSSublayer";if(m(e))return"WMSSublayer";if(c(e))return"BuildingComponentSublayer";if(S(e))return"BuildingGroupSublayer";if(g(e))return"SubtypeSublayer";if(x(e))return"MapNotesSublayer";throw new Error(`Unknown sublayer type for sublayer: "${e?.title}"`)}export class SublayerExtension extends a{static factory;static _sublayerWatchHandlesKey="sublayer-extension-sublayer-watch-handles";static _layerExtensionWatchHandlesKey="sublayer-extension-layer-extension-watch-handles";static _parentSublayerWatchHandlesKey="sublayer-extension-parent-sublayer-watch-handles";get sublayer(){return this._sublayer}get layerExtension(){return this._layerExtension}get parentSublayerExtension(){return this._parentSublayerExtension}get hasFeatures(){return!1}get sublayerExtensions(){return this._sublayerExtensions}get renderer(){}layerListSettings;get visibilityMode(){return this.canToggleVisibility?this._visibilityMode:"inherited"}set visibilityMode(e){w("visibilityMode",e).satisfies((e=>this.canToggleVisibility||"inherited"===e),'Sublayers of this type only support a visibility mode of "inherited".'),this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get capabilities(){return this._capabilities()}get effectiveMinScale(){const e=this.sublayer?this.sublayer.minScale:0;if(this.parentSublayerExtension){const t=this.parentSublayerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}if(this.layerExtension){const t=this.layerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}return e}get effectiveMaxScale(){const e=this.sublayer?this.sublayer.maxScale:0;return this.parentSublayerExtension&&this.parentSublayerExtension.effectiveMaxScale>e?this.parentSublayerExtension.effectiveMaxScale:this.layerExtension&&this.layerExtension.effectiveMaxScale>e?this.layerExtension.effectiveMaxScale:e}get isEffectivelyVisible(){const e=!!this.sublayer&&this.sublayer.visible;return this.parentSublayerExtension?this.parentSublayerExtension.isEffectivelyVisible&&e:this.layerExtension?this.layerExtension.isEffectivelyVisible&&e:e}get title(){return this.sublayer?.title??("string"==typeof this._deferredSublayerProperties?.$ref||"number"==typeof this._deferredSublayerProperties?.$ref?this._deferredSublayerProperties?.$ref.toString():this._deferredSublayerProperties?.$ref?.title??this._deferredSublayerProperties?.$ref?.id.toString())??"Sublayer"}get supportsSublayers(){return!1}get canToggleVisibility(){return!0}get canChangeOpacity(){return!0}get canChangeScale(){return!0}get canChangeRenderer(){return!1}get canChangeLabels(){return!1}get canChangeDefinitionExpression(){return!1}get _layerSupportsHideChildren(){return!1}get _sublayerId(){return this.sublayer?.id??("number"==typeof this._deferredSublayerProperties?.$ref?this._deferredSublayerProperties?.$ref:this._deferredSublayerProperties?.$ref?.id)}get _sublayers(){if(this.supportsSublayers)return this.sublayer?.sublayers}get effectiveFullExtent(){return this._effectiveFullExtent?this._effectiveFullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}get initialDefinitionExpression(){return this._initialDefinitionExpression}get initialRenderer(){return this._initialRenderer}get initialVisibility(){return this._initialVisibility??this.sublayer?.visible??!1}_effectiveFullExtent;_itemType=r.SUBLAYER_EXTENSION;_sublayerExtensions;_layerExtension;_parentSublayerExtension;_initialDefinitionExpression;_initialRenderer;_initialVisibility;_sublayer;_isSwitchingSublayer=!1;_visibilityMode;_deferredSublayerProperties;_originalRef;constructor(e){super(e);const t=e||{};this._visibilityMode=this.canToggleVisibility?"independent":"inherited",this._sublayerExtensions=this._createSublayerExtensionCollection();const i=t.sublayer;let s;i?.hasOwnProperty("listMode")&&(s=R(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),W(i)?(w("properties.sublayer",i).satisfies((e=>this._isSupportedSublayer(e)),k),this._setSublayer(i)):i&&(this._deferredSublayerProperties=i),this._handles.add(b(this,"isEffectivelyVisible",(()=>f(this,"parentSublayerExtension.isEffectivelyVisible",(()=>h(this,"isEffectivelyVisible")),{sync:!0}))))}static create(e){if(!SublayerExtension.factory)throw new i("Cannot create sublayer extension: no sublayer extension factory has been registered.");return SublayerExtension.factory.create(e)}static _matchesRef(e,t,i){if(!e||!t?.$ref)return!1;let s=t.$ref;if("string"==typeof s){const e=C(s);s={id:isNaN(e)?s:e,title:s}}else"number"==typeof s&&(s={id:s});const r=g(e)?e.subtypeCode:e.id;return"both"===i?r===s.id&&e.title===s.title:"by-id"===i?r===s.id:"by-title"===i&&e.title===s.title}getFeatures(e,t){if(!this.hasFeatures)throw new i(L);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new i(L);await super.addFeatures(e,t)}async updateFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new i(L);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new i(L);await super.deleteFeatures(e,t)}_resolveSublayer(){if(this._sublayer||!this._deferredSublayerProperties||!this.layerExtension?.layer||!this.layerExtension.layer.sublayers)return;const e=e=>t=>SublayerExtension._matchesRef(t,this._deferredSublayerProperties,e),t=this.layerExtension.layer.sublayers.flatten((e=>e.sublayers));let i=t.find(e("both"));if(i||(i=t.find(e("by-title"))),i||(i=t.find(e("by-id"))),i&&this._isSupportedSublayer(i)){this._setSublayer(i);const e={sublayer:{title:this.title,...this._deferredSublayerProperties}};this.assignProperties(e),this._originalRef=this._deferredSublayerProperties.$ref,this._deferredSublayerProperties=void 0}}_setLayerExtension(e){const t=this.layerExtension;this._handles.remove(SublayerExtension._layerExtensionWatchHandlesKey),this._layerExtension=e,this.layerExtension&&this._handles.add([b(this,"effectiveMinScale",(()=>f(this.layerExtension,"effectiveMinScale",(()=>h(this,"effectiveMinScale")),{sync:!0}))),b(this,"effectiveMaxScale",(()=>f(this.layerExtension,"effectiveMaxScale",(()=>h(this,"effectiveMaxScale")),{sync:!0}))),b(this,"isEffectivelyVisible",(()=>f(this.layerExtension,"isEffectivelyVisible",(()=>h(this,"isEffectivelyVisible")),{sync:!0})))],SublayerExtension._layerExtensionWatchHandlesKey),this._parentSublayerExtension||(t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings))),this._resolveSublayer(),h(this,"layerExtension"),this.supportsSublayers&&this._sublayerExtensions.onLayerExtensionChanged()}_setParentSublayerExtension(e){if(this._parentSublayerExtension===e)return;const t=this._parentSublayerExtension;this._handles.remove(SublayerExtension._parentSublayerWatchHandlesKey),this._parentSublayerExtension=e,this.parentSublayerExtension&&this._handles.add([b(this,"effectiveMinScale",(()=>f(this.parentSublayerExtension,"effectiveMinScale",(()=>h(this,"effectiveMinScale")),{sync:!0}))),b(this,"effectiveMaxScale",(()=>f(this.parentSublayerExtension,"effectiveMaxScale",(()=>h(this,"effectiveMaxScale")),{sync:!0})))],SublayerExtension._parentSublayerWatchHandlesKey),t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.layerExtension?this.layerExtension.featureSettings.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=this.layerExtension?this.layerExtension.taskSettings:void 0)),e&&((!this.featureSettings.formatSettings.parent||this.layerExtension&&this.featureSettings.formatSettings.parent===this.layerExtension.featureSettings.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),(!this.taskSettings.parent||this.layerExtension&&this.taskSettings.parent===this.layerExtension.taskSettings)&&(this.taskSettings.parent=e.taskSettings)),this._resolveSublayer(),h(this,"parentSublayerExtension")}async _switchSublayer(e){if(e===this.sublayer)return;w("newSublayer",e).isNotMissing().satisfies((e=>e.id===this.sublayer.id),"Sublayer ID must match existing sublayer.").satisfies((e=>this._isSupportedSublayer(e)),k),this._isSwitchingSublayer=!0,this.isInitialized&&await P(e);const t=new Map;if(this.sublayer?.sublayers)for(const e of this.sublayer.sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));const i=this.schema.fieldExtensions.toArray(),s=this.featureSettings.popupContentExtensions.toArray();this.canToggleVisibility&&(e.visible=this.sublayer.visible),this.canChangeOpacity&&(e.opacity=this.sublayer.opacity),this._setSublayer(e);const r=[],a=new Set;i.forEach((e=>{const t=this.schema.fields.find((t=>n.matchesRef(e,{$ref:t.name})));t&&(e._switchField(t),a.add(e))})),r.push(...i.filter((e=>!a.has(e))).map((async e=>{e._setSchema(void 0),await e.destroy()})));const o=new Set;s.forEach(((e,t)=>{const i=this.featureSettings.popupContentExtensions.find((e=>l.matchesRef(s,t,e.toJSON().content)));i&&(e._switchContent(i.content),o.add(e))})),r.push(...s.filter((e=>!o.has(e))).map((async e=>{e._setFeatureSettings(void 0),await e.destroy()})));const u=new Set;if(this.supportsSublayers&&this.sublayer.sublayers){const e=this.sublayer.sublayers.filter((e=>t.has(e.id))).toArray();r.push(...e.map((async e=>{const i=t.get(e.id);i&&(u.add(i),await i._switchSublayer(e),this._sublayerExtensions._register(i))})))}const y=[];for(const e of t.values())e&&!u.has(e)&&y.push(e);r.push(...y.map((async e=>{this._sublayerExtensions._detach(e),await e.destroy()}))),await Promise.all(r),this.isInitialized&&await this._initializeChildren(),this._isSwitchingSublayer=!1}async _postInitialize(){await super._postInitialize(),this.supportsSublayers&&this._handles.add($(this,"sublayer.sublayers",(async e=>{if(this._isSwitchingSublayer)return;const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_onSublayerAddedPostInitialize=async e=>{if(!this._isSwitchingSublayer)try{await e.initialize()}catch(t){T.error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}};async _onDestroy(){await Promise.all(this.sublayerExtensions.map((e=>e.destroy()))),this._sublayerExtensions.destroy(),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),visibilityMode:{serializeModes:["initial"],default:this.canToggleVisibility?"independent":"inherited"},layerListSettings:"initial",sublayerExtensions:{serializeModes:["initial","project"],serialize:()=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},sublayer:{serializeModes:["initial","project"],serialize:()=>{if(this.sublayer){if(!this._layerExtension)return this._serializeSublayer(this._sublayer);{const e=getSublayerType(this._sublayer);if(this._originalRef)return{$ref:this._originalRef,$sublayerType:e};if(this._sublayer.title||this._sublayer.id)return{...this._createSublayerRef(),$sublayerType:e}}}else if(this._deferredSublayerProperties)return A(this._deferredSublayerProperties)},deserialize:e=>{if(W(e)){if(e!==this.sublayer)throw new Error("Property 'sublayer' is read-only.")}else{if(this._sublayer)return this._applySublayerProperties(e,this._sublayer);this._deferredSublayerProperties&&(this._deferredSublayerProperties={...this._deferredSublayerProperties,...e})}}},requestHelper:{serialize:!1}}}_createSublayerExtension(e){throw new i(H)}_createSchema(){return new O(this)}_createLayerListSettings(e){return new j(e)}_capabilities(){return N}async _onInitialize(){if(await super._onInitialize(),this._sublayer||this._deferredSublayerProperties?.$ref||(this._setSublayer(await this._createSublayer(this._deferredSublayerProperties)),this._deferredSublayerProperties=void 0),this._resolveSublayer(),!this._sublayer){const e=this._deferredSublayerProperties?.$ref;if(!this._layerExtension)throw new i("Cannot resolve sublayer reference: missing parent layer extension.");throw new i(`No sublayer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`)}this._initialDefinitionExpression="definitionExpression"in this.sublayer?this.sublayer.definitionExpression:void 0,this._initialRenderer=this.renderer?.clone(),this._initialVisibility=this.sublayer.visible,this.supportsSublayers&&this._sublayerExtensions.onParentInitialized()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}_createSublayerRef(){return{$ref:{id:g(this._sublayer)?this._sublayer.subtypeCode:this._sublayer.id,title:this._sublayer.title}}}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollection(this)}_watchSublayerProperties(){this._handles.add([b(this,"effectiveMinScale",(()=>f(this.sublayer,"minScale",(()=>h(this,"effectiveMinScale")),{sync:!0}))),b(this,"effectiveMaxScale",(()=>f(this.sublayer,"maxScale",(()=>h(this,"effectiveMaxScale")),{sync:!0}))),b(this,"title",(()=>f(this.sublayer,"title",(()=>h(this,"title")),{sync:!0})))],SublayerExtension._sublayerWatchHandlesKey)}_setSublayer(e){if(this._handles.remove(SublayerExtension._sublayerWatchHandlesKey),this._sublayer=e,this._handles.add(f(e,"visible",((e,t,i)=>{this._onSetSublayerVisible(e),this.layerExtension?.mapExtension?.emit("layer-visibility-change",i)}),{sync:!0}),SublayerExtension._sublayerWatchHandlesKey),"definitionExpression"in e&&this._handles.add(f(e,"definitionExpression",((e,t,i)=>{this.layerExtension?.mapExtension?.emit("layer-definition-expression-change",i)})),SublayerExtension._sublayerWatchHandlesKey),this.supportsSublayers){let t;this._handles.add([f(e,"sublayers",(e=>{t?.remove(),t=y([e.on("after-add",this._onSublayersAfterAdd),e.on("after-remove",this._onSublayersAfterRemove)]),this._ensureAtMostOneChildSublayerVisible()}),{sync:!0}),{remove:()=>{t?.remove(),t=void 0}},d(e,"sublayers.[].visible",this._onSetSublayersSublayerVisible,{sync:!0})],SublayerExtension._sublayerWatchHandlesKey)}this._onSetSublayerVisible(this.sublayer.visible),"exclusive"===this.visibilityMode&&this._ensureAtMostOneChildSublayerVisible(),this._watchSublayerProperties(),h(this,"sublayer"),h(this,"title"),h(this,"effectiveMinScale"),h(this,"effectiveMaxScale"),h(this,"isEffectivelyVisible")}_onSetSublayerVisible=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this.sublayerExtensions)for(const t of this.sublayerExtensions.toArray())t.sublayer&&t.canToggleVisibility&&(t.sublayer.visible=e);h(this,"isEffectivelyVisible")};_onSetSublayersSublayerVisible=(e,t,i)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(i)};_onSublayersAfterAdd=e=>{1!==this._sublayers.length||e.item.visible||"exclusive"!==this.visibilityMode?e.item.visible&&"exclusive"===this.visibilityMode&&(e.item.visible=!1):e.item.visible=!0};_onSublayersAfterRemove=e=>{0!==this._sublayers.length&&"exclusive"===this.visibilityMode&&e.item.visible&&this._ensureAChildSublayerVisible(this._sublayers.getItemAt(0))};_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.sublayer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}let O=class extends o{_sublayerExtension;_sublayerBindings=new Map;constructor(e){super(),this._sublayerExtension=e,this._bindSettingsToSublayerProperties()}get spatialReference(){if(this._sublayerExtension.layerExtension)return this._sublayerExtension.layerExtension.schema.spatialReference}set spatialReference(e){throw new i("Cannot set sublayer schema spatial reference.")}destroy(){return this._sublayerBindings.clear(),super.destroy()}_getPropertyBindings(){return{}}_hasSettingIncludingAncestor(e){return!(!this._sublayerBindings.has(e)||!this._sublayerExtension.sublayer)||super._hasSettingIncludingAncestor(e)}_bindSettingsToSublayerProperties(){const e=this._getPropertyBindings();for(const t of z(e)){const i=F(e[t]);this._sublayerBindings.set(t,i),i.hasOwnProperty("value")||this._handles.add(b(this,t,(()=>f(this._sublayerExtension,`sublayer.${String(i.property)}`,(()=>h(this,t)),{sync:!i.hasOwnProperty("sync")||i.sync}))))}}};O=e([u],O);export{O as SublayerSchema};export class SubSublayerExtensionCollection extends I{get _layerExtension(){return this._parent.layerExtension}constructor(e,t){super(e,t??"sublayer.sublayers")}add(e,s){if(w("sublayerX",e).isNotMissing(),!this._parent.supportsSublayers)throw new i(H);return e.sublayer&&this._parent.sublayer&&!this._parent.sublayer.sublayers&&(this._parent.sublayer.sublayers=new t),e.parentSublayerExtension&&e.parentSublayerExtension.sublayerExtensions.remove(e),super.add(e,s)}_onAdded(e){super._onAdded(e),e._setParentSublayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentSublayerExtension(void 0)}}export function _assignSublayerExtensions(e,t,i){M(e,t,{onNew:(t,r)=>{try{e.add(s(t)?t:i(t),K(t)?void 0:r)}catch(e){T.warn({message:`Error occurred while adding sublayer extension for sublayer '${t.title??t.sublayer?.id??t.id}'.`,error:e})}},onMatch:(t,i,r,a)=>{try{s(i)||t.assignProperties(i),r===a||K(i)||e.reorder(t,a)}catch(e){T.warn({message:`Error occurred while assigning sublayer extension properties for sublayer '${t.title??t.sublayer?.id??t.id}'.`,error:e})}},equals:(e,t)=>{if(s(t)){if(e===t)return!0;const i=g(t.sublayer)?t.sublayer.subtypeCode:t.sublayer?.id;return SublayerExtension._matchesRef(e.sublayer,{$ref:{id:i,title:t.sublayer?.title}},"both")}return SublayerExtension._matchesRef(e.sublayer,t.sublayer,"both")||e.id===t.id}})}function W(e){return e&&"function"==typeof e.set}function K(e){return s(e)?!!e._deferredSublayerProperties?.$ref:!W(e.sublayer)&&!!e.sublayer?.$ref}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import t from"@arcgis/core/core/Collection";import{watch as r}from"../../support/observableUtils.js";import{CollectionProxy as e}from"../../utilities/CollectionProxy.js";export class ArrayWrappedCollection extends e{_parent;_targetProperty;_arrayProperty;get _target(){return this._targetProperty?this._getProp(this._parent,this._targetProperty):this._parent}constructor(e,o){if(super(),o)this._parent=e,this._targetProperty=e.hasOwnProperty("sublayer")?"sublayer":"layer",this._arrayProperty=o;else{const{parent:t,targetProperty:r,arrayProperty:o}=e;this._parent=t,this._targetProperty=r,this._arrayProperty=o}
|
|
1
|
+
import t from"@arcgis/core/core/Collection";import{watch as r}from"../../support/observableUtils.js";import{CollectionProxy as e}from"../../utilities/CollectionProxy.js";export class ArrayWrappedCollection extends e{_parent;_targetProperty;_arrayProperty;get _target(){return this._targetProperty?this._getProp(this._parent,this._targetProperty):this._parent}constructor(e,o){if(super(),o)this._parent=e,this._targetProperty=e.hasOwnProperty("sublayer")?"sublayer":"layer",this._arrayProperty=o;else{const{parent:t,targetProperty:r,arrayProperty:o}=e;this._parent=t,this._targetProperty=r,this._arrayProperty=o}this._target?this._onTargetResolved(this._target):(this._collection=new t,this._handles.add(r(this._parent,this._targetProperty,(()=>{const t=this._target;t&&(this.length&&this._setProp(t,this._arrayProperty,this.toArray()),this._onTargetResolved(t),this._handles.remove("array-wrapped-collection-target-resolved-handle"))}),{sync:!0}),"array-wrapped-collection-target-resolved-handle"))}add(t,r){const e=this._target;return e&&!this._getProp(e,this._arrayProperty)&&(this._setProp(e,this._arrayProperty,[]),this._collection=o(this._getProp(e,this._arrayProperty)??[])),super.add(t,r)}_onTargetResolved(t){this._handles.remove("array-wrapped-collection-array-watch-handles"),this._collection=o(this._getProp(t,this._arrayProperty)??[]),this._handles.add(r(this._parent,this._targetProperty?`${this._targetProperty}.${this._arrayProperty}`:this._arrayProperty,(()=>{this._target&&(this._collection=o(this._getProp(this._target,this._arrayProperty)??[]))}),{sync:!0}),"array-wrapped-collection-array-watch-handles")}_setProp(t,r,e){if(!r)return t;const o=r.split(".");let a=t;for(;a&&"object"==typeof a&&o.length>1;)a=a[o.shift()];return a&&"object"==typeof a&&(a[o[0]]=e),t}_getProp(t,r){if(!r)return;const e=r.split(".");let o=t;for(;o&&"object"==typeof o&&e.length;)o=o[e.shift()];return e.length?void 0:o}}function o(r){const e=Array.isArray(r)?r:[],o=new t;return Object.defineProperty(o,"_items",{get:()=>e}),Object.defineProperty(o,"length",{get:()=>e.length,set:t=>e.length=t}),o}
|
|
@@ -84,6 +84,7 @@ export declare abstract class LayerExtensionCollectionBase extends Initializable
|
|
|
84
84
|
constructor(parent: Observable, layersProperty: string);
|
|
85
85
|
on<Type extends EventNames<this>>(eventName: Type, listener: EventedCallback<this["@eventTypes"][Type]>): ResourceHandle;
|
|
86
86
|
clone(): LayerExtensionCollectionBase;
|
|
87
|
+
destroy(): void;
|
|
87
88
|
/**
|
|
88
89
|
* @inheritDoc
|
|
89
90
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@arcgis/core/core/Collection";import{InvalidOperationError as t}from"../../InvalidOperationError.js";import{InitializableCollectionProxy as i}from"../../support/InitializableCollectionProxy.js";import{createIHandle as
|
|
1
|
+
import e from"@arcgis/core/core/Collection";import{InvalidOperationError as t}from"../../InvalidOperationError.js";import{InitializableCollectionProxy as i}from"../../support/InitializableCollectionProxy.js";import{createIHandle as s,notifyChange as r,onWatch as a,watch as n,watchEvent as o}from"../../support/observableUtils.js";import h from"../../utilities/_ReferenceCountedHandle.js";import{checkArg as d}from"../../utilities/checkArg.js";import{layersAreEquivalent as l}from"../../utilities/layers.js";import{getLogger as y}from"../../utilities/log.js";import{onCollectionPropertyChange as _}from"../../utilities/watch.js";import{UnsupportedLayerExtension as m}from"../UnsupportedLayerExtension.js";import{LayerExtension as f}from"../_LayerExtension.js";export class LayerExtensionCollectionBase extends i{_parent;get _collection(){return this._layers.map((e=>this._forLayer(e))).concat(this._uninitializedLayerExtensions).filter((e=>!(e instanceof m)))}get _layers(){const t=this._layersProperty.split(".");let i=this._parent;for(const e of t){if(null==i){i=void 0;break}i=i[e]}return i||(this._tempLayers||(this._tempLayers=new e),i=this._tempLayers),i}_layerExtensionMap=new WeakMap;_uninitializedLayerExtensions=new e;_layersProperty;_tempLayers;_onChangeLayersHandle=new h((()=>_(this._parent,this._layersProperty,(e=>{try{const t={added:(e.added||[]).map((e=>this._forLayer(e))),moved:(e.moved||[]).map((e=>this._forLayer(e))),removed:(e.removed||[]).map((e=>this._forLayer(e)))};this.emit("change",t)}catch(e){e instanceof Error&&y("geocortex.api.support.LayerExtensionCollection").error(e.message)}}))));_onBeforeAddLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-add",e=>this.emit("before-add",{...e,item:this._forLayer(e.item)})])));_onBeforeRemoveLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-remove",e=>this.emit("before-remove",{...e,item:this._forLayer(e.item)})])));_onBeforeChangesLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-changes",e=>this.emit("before-changes",{...e})])));_onAfterAddLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-add",e=>this.emit("after-add",{...e,item:this._forLayer(e.item)})],(e=>{if(null!=e)for(const t of e)this.emit("after-add",{item:this._forLayer(t)})}))));_onAfterRemoveLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-remove",e=>this.emit("after-remove",{...e,item:this._forLayer(e.item)})],((e,t)=>{if(null!=t)for(const e of t)this.emit("after-remove",{item:this._forLayer(e)})}))));_onAfterChangesLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-changes",e=>this.emit("after-changes",{...e})],(()=>{this.emit("after-changes",{target:this})}))));constructor(e,t){super(),this._parent=e,this._layersProperty=t,this._handles.add(a(this,"length",(()=>n(this._parent,`${this._layersProperty}.length`,(()=>r(this,"length")),{sync:!0}))))}on(e,t){const i=[];return"change"===e?i.push(this._onChangeLayersHandle.add()):"before-add"===e?i.push(this._onBeforeAddLayersHandle.add()):"before-remove"===e?i.push(this._onBeforeRemoveLayersHandle.add()):"before-changes"===e?i.push(this._onBeforeChangesLayersHandle.add()):"after-add"===e?i.push(this._onAfterAddLayersHandle.add()):"after-remove"===e?i.push(this._onAfterRemoveLayersHandle.add()):"after-changes"===e&&i.push(this._onAfterChangesLayersHandle.add()),i.push(super.on(e,t)),s(i)}clone(){const e=super.clone();return e._layerExtensionMap=this._layerExtensionMap,e}destroy(){this._onChangeLayersHandle.destroy(),this._onBeforeAddLayersHandle.destroy(),this._onBeforeRemoveLayersHandle.destroy(),this._onBeforeChangesLayersHandle.destroy(),this._onAfterAddLayersHandle.destroy(),this._onAfterRemoveLayersHandle.destroy(),this._onAfterChangesLayersHandle.destroy(),this.forEach((e=>{this._onRemoved(e)})),this._uninitializedLayerExtensions.forEach((e=>{this._onRemoved(e)})),this._uninitializedLayerExtensions.removeAll(),this._layerExtensionMap=new WeakMap,super.destroy()}findById(e){return d("id",e).isNotMissing(),this.find((t=>t.id===e))}findByLayerId(e){return d("id",e).isNotMissing(),this.find((t=>t.layer.id===e))}forLayer(e){if(d("layer",e).isNotMissing(),this._layers.includes(e))return this._forLayer(e)}add(e,t){return d("layerX",e).isNotMissing(),this._register(e),e.layer?this._layers.includes(e.layer)?void 0!==t&&this._layers.reorder(e.layer,t):this._layers.add(e.layer,t):e.isInitialized||this._handles.add(n(e,"layer",(e=>{e&&(this._forLayer(e),this._layers.includes(e)||this._layers.add(e,t))}),{sync:!0,once:!0}),e),this}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedLayerExtensions.includes(t)){this._uninitializedLayerExtensions.remove(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("after-remove",{item:t}),this.emit("after-changes"),this.emit("change",e)}else this._layers.remove(t.layer);return this._onRemoved(t),t}}reorder(e,i){if(this._uninitializedLayerExtensions.includes(e)){if(this._uninitializedLayerExtensions.some((e=>e.isInitialized)))throw new t("Unable to reorder a mix of initialized / uninitialized layers.");this._uninitializedLayerExtensions.reorder(e,i)}if(e?.layer&&this._layers.includes(e.layer))return this._layers.reorder(e.layer,i),e}sort(e){return this._layers.sort(((t,i)=>e(this._forLayer(t),this._forLayer(i)))),this}onParentInitialized(){this._tempLayers?.length&&(this.addMany(this._tempLayers.map((e=>this._forLayer(e)))),this._tempLayers=void 0)}onMapExtensionChanged(){for(const e of this)e._setMapExtension(this._mapExtension)}_forLayer(e){for(const e of this._uninitializedLayerExtensions)e.layer||e._resolveLayer(this._layers),e.layer&&(this._layerExtensionMap.set(e.layer,e),this._uninitializedLayerExtensions.remove(e),this._mapExtension&&!e.mapExtension&&e._setMapExtension(this._mapExtension));if(!this._layerExtensionMap.has(e)){const t=this._uninitializedLayerExtensions.find((t=>l(e,t._deferredLayerProperties)));if(t)return t;const i=("map"===this._mapExtension?.viewMode?this._mapExtension?._scene:this._mapExtension?._map)?.allLayers.find((t=>l(t,e))),s=this._layerExtensionMap.get(i),r={layer:e};s&&(r.layerListSettings=s.layerListSettings.toJSON());const a=f.create(r);this._register(a)}return this._layerExtensionMap.get(e)}_register(e){if(d("layerX",e).isNotMissing(),e._setMapExtension(this._mapExtension),e.layer||e._resolveLayer(this._layers),e.layer){const t=this._layerExtensionMap.get(e.layer);if(e===t)return;if(this._layerExtensionMap.set(e.layer,e),t&&(this._onRemoved(t),this._mapExtension?.isSwitchingMap&&t?.destroy(),this._layers.includes(e.layer))){const i={added:[e],moved:[],removed:[t],target:this};this.emit("after-add",{item:e}),null!=t&&this.emit("after-remove",{item:t}),this.emit("after-changes"),this.emit("change",i)}}else{this._uninitializedLayerExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("after-add",{item:e}),this.emit("after-changes"),this.emit("change",t)}this._onAdded(e)}_detach(e){d("layerX",e).isNotMissing(),this._onRemoved(e)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.layer}_onAdded(e){}_onRemoved(e){this._handles.remove(e),e._setMapExtension(void 0)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@arcgis/core/core/Collection";import{InitializableCollectionProxy as t}from"../../support/InitializableCollectionProxy.js";import{createIHandle as s,notifyChange as r,onWatch as i,watch as a,watchEvent as n}from"../../support/observableUtils.js";import o from"../../utilities/_ReferenceCountedHandle.js";import{checkArg as l}from"../../utilities/checkArg.js";import{onCollectionPropertyChange as h}from"../../utilities/watch.js";import{SublayerExtension as
|
|
1
|
+
import e from"@arcgis/core/core/Collection";import{InitializableCollectionProxy as t}from"../../support/InitializableCollectionProxy.js";import{createIHandle as s,notifyChange as r,onWatch as i,watch as a,watchEvent as n}from"../../support/observableUtils.js";import o from"../../utilities/_ReferenceCountedHandle.js";import{checkArg as l}from"../../utilities/checkArg.js";import{onCollectionPropertyChange as h}from"../../utilities/watch.js";import{SublayerExtension as d}from"../_SublayerExtension.js";export class SublayerExtensionCollectionBase extends t{_parent;get _collection(){return this._sublayers.map((e=>this._forSublayer(e))).concat(Array.from(this._uninitializedSublayerExtensions))}get _sublayers(){const t=this._sublayersProperty.split(".");let s=this._parent;for(const e of t){if(null==s){s=void 0;break}s=s[e]}return s||(this._tempSublayers||(this._tempSublayers=new e),s=this._tempSublayers),s}_sublayersProperty;_tempSublayers;_sublayerExtensionMap=new WeakMap;_uninitializedSublayerExtensions=new Set;_onChangeSublayersHandle=new o((()=>h(this._parent,this._sublayersProperty,(e=>{const t={added:(e.added||[]).map((e=>this._forSublayer(e))),moved:(e.moved||[]).map((e=>this._forSublayer(e))),removed:(e.removed||[]).map((e=>this._forSublayer(e)))};this.emit("change",t)}))));_onBeforeAddSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-add",e=>this.emit("before-add",{...e,item:this._forSublayer(e.item)})])));_onBeforeRemoveSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-remove",e=>this.emit("before-remove",{...e,item:this._forSublayer(e.item)})])));_onBeforeChangesSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-changes",e=>this.emit("before-changes",{...e})])));_onAfterAddSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-add",e=>this.emit("after-add",{...e,item:this._forSublayer(e.item)})],(e=>{if(null!=e)for(const t of e)this.emit("after-add",{item:this._forSublayer(t)})}))));_onAfterRemoveSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-remove",e=>this.emit("after-remove",{...e,item:this._forSublayer(e.item)})],((e,t)=>{if(null!=t)for(const e of t)this.emit("after-remove",{item:this._forSublayer(e)})}))));_onAfterChangesSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-changes",e=>this.emit("after-changes",{...e,target:this})],(()=>{this.emit("after-changes",{target:this})}))));constructor(e,t){super(),this._parent=e,this._sublayersProperty=t,this._handles.add(i(this,"length",(()=>a(this._parent,`${this._sublayersProperty}.length`,(()=>r(this,"length")),{sync:!0}))))}on(e,t){const r=[];return"change"===e?r.push(this._onChangeSublayersHandle.add()):"before-add"===e?r.push(this._onBeforeAddSublayersHandle.add()):"before-remove"===e?r.push(this._onBeforeRemoveSublayersHandle.add()):"before-changes"===e?r.push(this._onBeforeChangesSublayersHandle.add()):"after-add"===e?r.push(this._onAfterAddSublayersHandle.add()):"after-remove"===e?r.push(this._onAfterRemoveSublayersHandle.add()):"after-changes"===e&&r.push(this._onAfterChangesSublayersHandle.add()),r.push(super.on(e,t)),s(r)}clone(){const e=super.clone();return e._sublayerExtensionMap=this._sublayerExtensionMap,e}findById(e){return l("id",e).isNotMissing(),this.find((t=>t.id===e))}destroy(){this._onChangeSublayersHandle.destroy(),this._onBeforeAddSublayersHandle.destroy(),this._onBeforeRemoveSublayersHandle.destroy(),this._onBeforeChangesSublayersHandle.destroy(),this._onAfterAddSublayersHandle.destroy(),this._onAfterRemoveSublayersHandle.destroy(),this._onAfterChangesSublayersHandle.destroy(),this.forEach((e=>{this._onRemoved(e)})),this._uninitializedSublayerExtensions.clear(),this._tempSublayers&&(this._tempSublayers.removeAll(),this._tempSublayers=void 0),this._sublayerExtensionMap=new WeakMap,super.destroy()}findBySublayerId(e){return l("id",e).isNotMissing(),this.find((t=>t._sublayerId===e))}forSublayer(e){if(l("sublayer",e).isNotMissing(),!(this._sublayers.indexOf(e)<0))return this._forSublayer(e)}add(e,t){return l("sublayerX",e).isNotMissing(),this._register(e),e.sublayer&&(this._sublayers.includes(e.sublayer)?void 0!==t&&this.reorder(e,t):this._sublayers.add(e.sublayer,t)),this}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedSublayerExtensions.has(t)){this._uninitializedSublayerExtensions.delete(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("after-remove",{item:t}),this.emit("after-changes",{}),this.emit("change",e)}else this._sublayers.removeAt(e);return this._onRemoved(t),t}}reorder(e,t){if(!e)return;const s=this._sublayers.indexOf(e.sublayer);return s<0?void 0:(s!==t&&this._sublayers.reorder(e.sublayer,t),e)}sort(e){return this._sublayers.sort(((t,s)=>e(this._forSublayer(t),this._forSublayer(s)))),this}onParentInitialized(){this._tempSublayers?.length&&(this.addMany(this._tempSublayers.map((e=>this._forSublayer(e)))),this._tempSublayers=void 0)}onLayerExtensionChanged(){for(const e of this)e._setLayerExtension(this._layerExtension)}_register(e){if(l("sublayerX",e).isNotMissing(),e._setLayerExtension(this._layerExtension),e.sublayer||e._resolveSublayer(),e.sublayer){const t=this._sublayerExtensionMap.get(e.sublayer);if(e===t)return;if(this._sublayerExtensionMap.set(e.sublayer,e),t){if(this._onRemoved(t),this._sublayers.includes(e.sublayer)){const s={added:[e],moved:[],removed:[t],target:this};this.emit("after-add",{item:e}),null!=t&&this.emit("after-remove",{item:t}),this.emit("after-changes",{target:this}),this.emit("change",s)}t.destroy()}}else{this._uninitializedSublayerExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),this.emit("change",t)}this._onAdded(e)}_detach(e){l("sublayerX",e).isNotMissing(),this._onRemoved(e)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}_onAdded(e){}_onRemoved(e){e._setLayerExtension(void 0)}_forSublayer(e){for(const e of this._uninitializedSublayerExtensions)e._resolveSublayer(),e.sublayer&&(this._sublayerExtensionMap.set(e.sublayer,e),this._uninitializedSublayerExtensions.delete(e));if(!this._sublayerExtensionMap.has(e)){const t=d.create({sublayer:e});this._register(t)}return this._sublayerExtensionMap.get(e)}}
|
package/package.json
CHANGED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GroupKey } from "@arcgis/core/core/Accessor.js";
|
|
2
|
+
import Handles from "@arcgis/core/core/Handles.js";
|
|
3
|
+
type DestroyResult = void | Promise<void>;
|
|
4
|
+
type Constructor<TInstance = object> = abstract new (...args: any[]) => TInstance;
|
|
5
|
+
interface HasDestroy<TResult extends DestroyResult = DestroyResult> {
|
|
6
|
+
destroy(): TResult;
|
|
7
|
+
}
|
|
8
|
+
type DestroyResultOf<TConstructor extends Constructor> = InstanceType<TConstructor> extends HasDestroy<infer TResult> ? TResult : void;
|
|
9
|
+
type HandlesConstructor<TBase extends Constructor> = abstract new (...args: ConstructorParameters<TBase>) => InstanceType<TBase> & HandlesMixin<DestroyResultOf<TBase>>;
|
|
10
|
+
/**
|
|
11
|
+
* Supporting mixin declaration for {@link handles}.
|
|
12
|
+
*/
|
|
13
|
+
export declare class HandlesMixin<TResult extends DestroyResult = void> {
|
|
14
|
+
protected readonly _handles: Handles<GroupKey<unknown>>;
|
|
15
|
+
destroy(): TResult;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Adds a protected _handles property backed by Esri handles.
|
|
19
|
+
*/
|
|
20
|
+
export declare function handles(): abstract new () => HandlesMixin<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Adds a protected _handles property backed by Esri handles.
|
|
23
|
+
*
|
|
24
|
+
* @param obj The base class to add handles to.
|
|
25
|
+
*/
|
|
26
|
+
export declare function handles<TBase extends Constructor>(obj: TBase): HandlesConstructor<TBase>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import s from"@arcgis/core/core/Handles.js";class e{}export function handles(r){const t=r?.prototype?.destroy;return class extends(r??e){_handles=new s;destroy(){return this._handles.destroy(),t?.call(this)??void 0}}}
|
|
@@ -70,7 +70,7 @@ export interface InitializableBaseEvents {
|
|
|
70
70
|
*/
|
|
71
71
|
initializeWarning: InitializeWarningEvent;
|
|
72
72
|
}
|
|
73
|
-
declare const InitializableBase_base:
|
|
73
|
+
declare const InitializableBase_base: abstract new (_properties?: InitializableBaseProperties) => SerializableBase<InitializableBaseProperties> & ObservableMixin & import("./HandlesMixin.js").HandlesMixin<void>;
|
|
74
74
|
/**
|
|
75
75
|
* A base class that contains logic for initializing items.
|
|
76
76
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getLogger as i}from"../utilities/log.js";import{parallelEach as e}from"../utilities/promise.js";import{
|
|
1
|
+
import{getLogger as i}from"../utilities/log.js";import{parallelEach as e}from"../utilities/promise.js";import{handles as t}from"./HandlesMixin.js";import{InitializeError as r}from"./InitializeError.js";import{SerializableBase as s}from"./Serializable.js";import{notifyChange as a,observable as o}from"./observableUtils.js";export class InitializableBase extends(t(o(s))){get isInitialized(){return this._isInitialized}get isDestroyed(){return this._isDestroyed}get failureMode(){return this._failureMode}set failureMode(i){this._failureMode=i}_isInitialized=!1;_isDestroyed=!1;_initializePromise;_destroyPromise;_failureMode="warn";async initialize(){return void 0===this._initializePromise&&(this._initializePromise=(async()=>{try{await this.finishAssignProperties(),await this._onInitialize(),await this._initializeChildren(),await this._postInitialize()}catch(i){throw i instanceof Error?(this._initializePromise=void 0,new r(this.failureMode,i,this)):i}this._isInitialized=!0,a(this,"isInitialized")})()),this._initializePromise}async destroy(){return void 0===this._destroyPromise&&(this._destroyPromise=(async()=>{try{await this._onDestroy(),super.destroy()}catch(i){throw this._destroyPromise=void 0,i}this._isDestroyed=!0,a(this,"isDestroyed")})()),this._destroyPromise}toJSON(i="all"){return super.toJSON(i)}assignProperties(i){super.assignProperties(i)}assignPropertiesAsync(i){return super.assignPropertiesAsync(i)}getDefaults(){return super.getDefaults()}getDefault(i){return super.getDefault(i)}getSerializableProperties(i){return super.getSerializableProperties(i)}_getSerializableProperties(){return{...super._getSerializableProperties(),failureMode:{serializeModes:["initial"],default:"warn"}}}async _onInitialize(){}async _postInitialize(){}async _onDestroy(){}async _initializeChildren(){await e(this._initializableChildCollections(),(i=>initializeCollection(i,{target:this,onInitializeWarning:i=>this.emit("initializeWarning",i)})))}*_initializableChildCollections(){}}const n={onInitializeWarning:()=>{}};export async function initializeCollection(t,s=n){const{onInitializeWarning:a,target:o}=s;await e(t.toArray(),(async e=>{const t=e.on("initializeWarning",a);try{await e.initialize()}catch(t){const s=t instanceof r?t:new r(e.failureMode,t,e);if("error"===s.failureMode)throw s;"warn"===s.failureMode&&i("geocortex.api.support.InitializeBase").warn({message:"Error attempting to initialize child item: {0}.",error:s},s.error.message);a({error:s,target:o})}finally{t.remove()}}))}
|
package/support/Settings.d.ts
CHANGED
|
@@ -15,20 +15,20 @@ export interface SettingsEvents<T> {
|
|
|
15
15
|
property: keyof T;
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
declare const Settings_base:
|
|
18
|
+
declare const Settings_base: abstract new (_properties?: unknown) => SerializableBase<unknown> & import("./observableUtils.js").ObservableMixin & import("./HandlesMixin.js").HandlesMixin<void>;
|
|
19
19
|
/**
|
|
20
20
|
* Helper class for implementing a collection of settings that can be inherited
|
|
21
21
|
* at runtime from a parent collection of settings. Setting a value locally will
|
|
22
22
|
* override the inherited setting.
|
|
23
23
|
*/
|
|
24
24
|
export declare abstract class Settings<TProperties> extends Settings_base {
|
|
25
|
+
private static readonly _parentHandleKey;
|
|
25
26
|
/**
|
|
26
27
|
* @deprecated Do not directly reference this property. Use EventNames and
|
|
27
28
|
* EventTypes helpers from @arcgis/core/Evented.
|
|
28
29
|
*/
|
|
29
30
|
"@eventTypes": SettingsEvents<this>;
|
|
30
31
|
private _parent;
|
|
31
|
-
private _parentHandle;
|
|
32
32
|
/**
|
|
33
33
|
* Locally overridden setting values, keyed by setting name.
|
|
34
34
|
*/
|
package/support/Settings.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@arcgis/core/core/Collection";import{CopyOnWriteCollection as t}from"../utilities/CopyOnWriteCollection.js";import{every as i}from"../utilities/iterable.js";import{objectKeys as s}from"../utilities/object.js";import{isDefault as
|
|
1
|
+
import e from"@arcgis/core/core/Collection";import{CopyOnWriteCollection as t}from"../utilities/CopyOnWriteCollection.js";import{every as i}from"../utilities/iterable.js";import{objectKeys as s}from"../utilities/object.js";import{handles as r}from"./HandlesMixin.js";import{isDefault as n,SerializableBase as o,shouldExcludeDefaults as a}from"./Serializable.js";import{notifyChange as h,observable as d}from"./observableUtils.js";export class Settings extends(r(d(o))){static _parentHandleKey="settings-parent-handle";_parent;_overrides;get parent(){return this._parent}set parent(e){this._setParent(e)}reset(e){if(this._overrides)if(e)this._overrides.delete(e),this._notifySettingChange(e);else{const e=[...this._overrides.keys()];this._overrides.clear();for(const t of e)this._notifySettingChange(t)}}isModified(e){if(!this._overrides)return!1;if(e){if(!this._overrides.has(e))return!1;const i=this._overrides.get(e);return i instanceof t?i.isModified:!(i instanceof Settings)||i.isModified()}return!i(this._overrides.values(),(e=>e instanceof t&&!e.isModified||e instanceof Settings&&!e.isModified()))}toJSON(e="all"){if(!this._overrides?.size&&"initial-with-defaults"!==e)return a(e)?void 0:{};const t=super.toJSON(e);if(t&&"initial-with-defaults"!==e)for(const e of s(t))this.isModified(e)||delete t[e];return a(e)&&n(t)?void 0:t}getDefaults(){return{}}_hasSettingIncludingAncestor(e){return!!this._overrides?.has(e)||!!this.parent&&this.parent._hasSettingIncludingAncestor(e)}_getSetting(e,t){return this._overrides?.has(e)?this._overrides.get(e):this.parent&&this._hasSettingIncludingAncestor(e)?this.parent[e]:t}_getCollectionSetting(i){if(!this._overrides?.has(i)){const s=this.parent?this.parent[i]:new e;null==this._overrides&&(this._overrides=new Map),this._overrides.set(i,new t(s))}return this._overrides.get(i)}_getNestedSettings(e,t){if(!this._overrides?.has(e)){const i=t();this.parent&&(i.parent=this.parent[e]),null==this._overrides&&(this._overrides=new Map),this._overrides.set(e,i)}return this._overrides.get(e)}_setSetting(e,t){null==this._overrides&&(this._overrides=new Map),this._overrides.set(e,t),this._notifySettingChange(e)}_setParent(i){if(this._parent!==i&&(null!=this._parent||null!=i)){if(this._handles.remove(Settings._parentHandleKey),this._parent=i,null!=this._parent){const e=new WeakRef(this),t=this._parent.on("property-change",(i=>{const s=e.deref();null!=s?s._notifySettingChange(i.property):t.remove()}));this._handles.add(t,Settings._parentHandleKey)}if(this._overrides)for(const[s,r]of this._overrides)r instanceof t?r.originalCollection=i?i[s]:new e:r instanceof Settings&&(r.parent=i?i[s]:void 0);h(this)}}_notifySettingChange(e){this.emit("property-change",{property:e}),h(this,e)}}
|
|
@@ -9,7 +9,16 @@ import { type IHandle } from "../support/observableUtils.js";
|
|
|
9
9
|
*/
|
|
10
10
|
export interface CollectionProxy<T> extends Collection<T> {
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Options for the CollectionProxy constructor.
|
|
14
|
+
*/
|
|
15
|
+
export interface CollectionProxyOptions {
|
|
16
|
+
/**
|
|
17
|
+
* If true, destroy will also destroy the wrapped collection.
|
|
18
|
+
*/
|
|
19
|
+
destroyBackingCollection?: boolean;
|
|
20
|
+
}
|
|
21
|
+
declare const CollectionProxy_base: abstract new (...args: any[]) => Evented & import("../support/observableUtils.js").ObservableMixin & import("../support/HandlesMixin.js").HandlesMixin<void>;
|
|
13
22
|
/**
|
|
14
23
|
* Base class for implementing a Collection proxy, i.e. a class that wraps an
|
|
15
24
|
* existing collection and provides additional functionality or logic. The
|
|
@@ -29,7 +38,6 @@ export declare abstract class CollectionProxy<T> extends CollectionProxy_base im
|
|
|
29
38
|
* compatibility with Esri's API.
|
|
30
39
|
*/
|
|
31
40
|
declaredClass: string;
|
|
32
|
-
private readonly _handles;
|
|
33
41
|
/**
|
|
34
42
|
* The number of items in the collection.
|
|
35
43
|
*/
|
|
@@ -52,14 +60,16 @@ export declare abstract class CollectionProxy<T> extends CollectionProxy_base im
|
|
|
52
60
|
private _destroyed;
|
|
53
61
|
private _initialized;
|
|
54
62
|
private _collectionField;
|
|
63
|
+
private _destroyBackingCollection;
|
|
55
64
|
/**
|
|
56
65
|
* Initializes a new instance of the
|
|
57
66
|
* {@link utilities/CollectionProxy!CollectionProxy} class.
|
|
58
67
|
*
|
|
59
68
|
* @param collection The underlying collection to delegate to, or a function
|
|
60
69
|
* that produces the underlying collection.
|
|
70
|
+
* @param options Controls lifecycle behavior for the wrapped collection.
|
|
61
71
|
*/
|
|
62
|
-
constructor(collection?: Collection<T
|
|
72
|
+
constructor(collection?: Collection<T>, options?: CollectionProxyOptions);
|
|
63
73
|
/**
|
|
64
74
|
* @inheritDoc
|
|
65
75
|
*/
|
|
@@ -360,8 +370,17 @@ export declare abstract class CollectionProxy<T> extends CollectionProxy_base im
|
|
|
360
370
|
* @inheritdoc
|
|
361
371
|
*/
|
|
362
372
|
watch(path: string | string[], callback: (newValue: any, oldValue: any, propertyName: string, target: any) => void, sync?: boolean): IHandle;
|
|
373
|
+
/**
|
|
374
|
+
* @inheritdoc
|
|
375
|
+
*/
|
|
363
376
|
addHandles<T>(handles: IHandle | IHandle[], groupKey?: GroupKey<T>): void;
|
|
377
|
+
/**
|
|
378
|
+
* @inheritdoc
|
|
379
|
+
*/
|
|
364
380
|
removeHandles<T>(groupKey?: GroupKey<T>): void;
|
|
381
|
+
/**
|
|
382
|
+
* @inheritdoc
|
|
383
|
+
*/
|
|
365
384
|
hasHandles<T>(groupKey?: GroupKey<T>): boolean;
|
|
366
385
|
/**
|
|
367
386
|
* @deprecated - Unsupported on CollectionProxy.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Evented as t}from"@arcgis/core/core/Evented.js";import{notifyChange as
|
|
1
|
+
import{Evented as t}from"@arcgis/core/core/Evented.js";import{handles as e}from"../support/HandlesMixin.js";import{notifyChange as o,observable as i,onWatch as r,watch as n}from"../support/observableUtils.js";import{_generateChangeEvent as l}from"./collection.js";const s="collection-proxy-collection-change-handles";export class CollectionProxy extends(e(i(t))){declaredClass="esri.core.Collection";get length(){return this._collection.length}get destroyed(){return this._destroyed}set destroyed(t){this._destroyed=t}get initialized(){return this._initialized}set initialized(t){this._initialized=t}get _collection(){if(void 0===this._collectionField)throw new Error("CollectionProxy requires a backing collection.");return this._collectionField}set _collection(t){if(this._collectionField===t)return;const e=this._collectionField;this._handles.remove(s);const i=l(e,t);if(null!=i){for(const t of i.added){const e={item:t,cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},target:this};this.emit("before-add",e)}for(const t of i.removed){const e={item:t,cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},target:this};this.emit("before-remove",e)}this.emit("before-changes",{cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},item:void 0})}if(this._collectionField=t,this._addForwardingEvents(),null!=i){this.emit("change",i);for(const t of i.added)this.emit("after-add",{item:t});for(const t of i.removed)this.emit("after-remove",{item:t});this.emit("after-changes")}o(this,"length")}_destroyed=!1;_initialized=!0;_collectionField;_destroyBackingCollection=!1;constructor(t,e){super(),this._collectionField=t,this._destroyBackingCollection=e?.destroyBackingCollection??!1,this._addForwardingEvents()}*[Symbol.iterator](){for(const t of this._collection)yield t}add(t,e){return this._collection.add(t,e),this}addMany(t,e){if(!t)return this;if(arguments.length>1){let o=e;for(let e=0;e<t.length;e++)"function"==typeof t.getItemAt?this.add(t.getItemAt(e),o++):this.add(t[e],o++)}else for(let e=0;e<t.length;e++)"function"==typeof t.getItemAt?this.add(t.getItemAt(e)):this.add(t[e]);return this}clone(){const t=Object.create(Object.getPrototypeOf(this));return t._collection=this._collection,t._destroyBackingCollection=this._destroyBackingCollection,t}concat(t){return this._collection.concat(t)}destroyAll(){return this._collection.destroyAll()}destroyMany(t){return this._collection.destroyMany(t)}drain(t,e){this._collection.drain(t,e)}destroy(){this._destroyed=!0,this._initialized=!1,super.destroy(),this._destroyBackingCollection&&this._collectionField?.destroy()}every(t){return this._collection.every(t)}filter(t){return this._collection.filter(t)}find(t){return this._collection.find(t)}findIndex(t){return this._collection.findIndex(t)}flatten(t){return this._collection.flatten(t)}forEach(t){return this._collection.forEach(t)}at(t){return this.getItemAt(t)}getItemAt(t){return this._collection.getItemAt(t)}includes(t){return this._collection.includes(t)}indexOf(t,e){return this._collection.indexOf(t,e)}join(t){return this._collection.join(t)}lastIndexOf(t,e){return this._collection.lastIndexOf(t,e)}map(t){return this._collection.map(t)}pop(){return this.removeAt(this.length-1)}push(t){return this.add(t,this.length),this.length}reduce(t,e){return this._collection.reduce(t,e)}reduceRight(t,e){return this._collection.reduceRight(t,e)}remove(t){return this.removeAt(this.indexOf(t))}removeAll(){const t=[];for(;this.length;){const e=this.pop();e&&t.push(e)}return t}removeAt(t){return this._collection.removeAt(t)}removeMany(t){const e=[];for(let o=0;o<t.length;o++){const i="function"==typeof t.getItemAt?t.getItemAt(o):t[o],r=this.indexOf(i);if(r>=0){const t=this.removeAt(r);t&&e.push(t)}}return e}reorder(t,e){return this._collection.reorder(t,e)}reverse(){return this._collection.reverse(),this}shift(){return this.removeAt(0)}slice(t,e){return this._collection.slice(t,e)}some(t){return this._collection.some(t)}sort(t){return this._collection.sort(t),this}splice(t,e,...o){const i=[];for(let o=e;o>0;o--){const e=this.removeAt(t);e&&i.push(e)}let r=t;return o.forEach((t=>{this.add(t,r),r++})),i}toArray(){return this._collection.toArray()}unshift(t){return this.add(t,0),this.length}set(t,e){throw new Error("set is not supported on CollectionProxy.")}get(t){throw new Error("get is not supported on CollectionProxy.")}watch(t,e,o){throw new Error("watch is not supported on CollectionProxy. Use watch from @vertigis/arcgis-extensions/support/observableUtils instead.")}addHandles(t,e){this._handles.add(t,e)}removeHandles(t){this._handles.remove(t)}hasHandles(t){return this._handles.has(t)}notifyChange(t){throw new Error("notifyChange is not supported on CollectionProxy.")}_get(t){const e=t.split(".");let o=this;for(;o&&"object"==typeof o&&e.length;)o=o[e.shift()];return e.length?void 0:o}_set(t,e){const o=t.split(".");let i=this;for(;i&&"object"==typeof i&&o.length>1;)i=i[o.shift()];return i&&"object"==typeof i&&(i[o[0]]=e),this}_addForwardingEvents(){null!=this._collectionField&&this._handles.add([this._collectionField.on("before-add",(t=>this.emit("before-add",t))),this._collectionField.on("before-changes",(t=>this.emit("before-changes",t))),this._collectionField.on("before-remove",(t=>this.emit("before-remove",t))),this._collectionField.on("change",(t=>this.emit("change",t))),this._collectionField.on("after-add",(t=>this.emit("after-add",t))),this._collectionField.on("after-changes",(t=>this.emit("after-changes",t))),this._collectionField.on("after-remove",(t=>this.emit("after-remove",t))),r(this,"length",(()=>n(this._collectionField,"length",(()=>o(this,"length")),{sync:!0})))],s)}}
|