@vertigis/arcgis-extensions 37.7.0 → 38.0.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 +24 -11
- package/data/Feature.js +1 -1
- package/data/FeatureList.d.ts +1 -1
- package/data/FeatureList.js +1 -1
- package/data/FeatureSettings.js +1 -1
- package/data/FeatureSourceBase.d.ts +1 -1
- package/data/FeatureSourceBase.js +1 -1
- package/data/PopupContentExtension.js +1 -1
- package/data/Schema.js +1 -1
- package/declarations/arcgis-js-api-extensions/index.d.ts +12 -10
- package/docs/html/assets/search.js +1 -1
- package/docs/html/classes/data_FeatureList.FeatureList.html +8 -8
- package/docs/html/classes/data_FeatureSourceBase.RelationshipCollection.html +8 -8
- package/docs/html/classes/data_FeatureStream.FeatureStream.html +1 -1
- package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerRelationshipCollection.html +8 -8
- package/docs/html/classes/mapping_GroupLayerExtension.GroupLayerExtensionCollection.html +8 -8
- package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerRelationshipCollection.html +8 -8
- package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerRelationshipCollection.html +8 -8
- package/docs/html/classes/mapping__SublayerExtension.SubSublayerExtensionCollection.html +8 -8
- package/docs/html/classes/mapping_support_ArrayWrappedCollection.ArrayWrappedCollection.html +8 -8
- package/docs/html/classes/mapping_support__LayerExtensionCollection.LayerExtensionCollectionBase.html +8 -8
- package/docs/html/classes/mapping_support__SublayerExtensionCollection.SublayerExtensionCollectionBase.html +8 -8
- package/docs/html/classes/support_InitializableCollectionProxy.InitializableCollectionProxy.html +8 -8
- package/docs/html/classes/support_ReadOnlyInitializableCollection.ReadOnlyInitializableCollection.html +8 -8
- package/docs/html/classes/support__ArcGISRelationshipCollection.ArcGISRelationshipCollection.html +8 -8
- package/docs/html/classes/utilities_CollectionProxy.CollectionProxy.html +8 -8
- package/docs/html/classes/utilities_CopyOnWriteCollection.CopyOnWriteCollection.html +8 -8
- package/docs/html/classes/utilities_MapTransformCollection.MapTransformCollection.html +8 -8
- package/docs/html/classes/utilities_ReadOnlyCollection.ReadOnlyCollection.html +8 -8
- package/docs/html/classes/utilities_asyncIterable.AsyncQueue.html +1 -1
- package/docs/html/functions/portal_ElevationInfo.ElevationInfo.fromEsriApiElevationInfo.html +2 -2
- package/docs/html/functions/portal_Lighting.Lighting.fromEsriApiLighting.html +2 -2
- package/docs/html/functions/utilities_esri.getAllFieldInfos.html +1 -0
- package/docs/html/functions/utilities_esri.getAllReferencedFieldNames.html +1 -0
- package/docs/html/functions/utilities_esri.isAttachmentsContent.html +1 -0
- package/docs/html/functions/utilities_esri.isCodedValueDomain.html +1 -0
- package/docs/html/functions/utilities_esri.isColor.html +1 -0
- package/docs/html/functions/utilities_esri.isCustomContent.html +1 -0
- package/docs/html/functions/utilities_esri.isEsriObject.html +1 -0
- package/docs/html/functions/utilities_esri.isExpressionContent.html +1 -0
- package/docs/html/functions/utilities_esri.isFeatureSet.html +1 -0
- package/docs/html/functions/utilities_esri.isFeatureType.html +1 -0
- package/docs/html/functions/utilities_esri.isField.html +1 -0
- package/docs/html/functions/utilities_esri.isFieldsContent.html +1 -0
- package/docs/html/functions/utilities_esri.isGraphic.html +1 -0
- package/docs/html/functions/utilities_esri.isImageMediaInfo.html +1 -0
- package/docs/html/functions/utilities_esri.isMediaContent.html +1 -0
- package/docs/html/functions/utilities_esri.isPopupContent.html +1 -0
- package/docs/html/functions/utilities_esri.isPopupTemplate.html +1 -0
- package/docs/html/functions/utilities_esri.isPortalItem.html +1 -0
- package/docs/html/functions/utilities_esri.isRelationshipContent.html +626 -0
- package/docs/html/functions/utilities_esri.isSpatialReference.html +1 -0
- package/docs/html/functions/utilities_esri.isTextContent.html +1 -0
- package/docs/html/functions/utilities_esri.isViewpoint.html +1 -0
- package/docs/html/functions/utilities_esri.load.html +1 -0
- package/docs/html/functions/utilities_esri.ready.html +1 -0
- package/docs/html/interfaces/data_PopupContentExtension.ContentProperties.html +33 -3
- package/docs/html/interfaces/data_support_attachments.AttachmentEnabledLayer.html +1 -13
- package/docs/html/interfaces/portal_PopupInfo.PopupElement.html +30 -3
- package/docs/html/interfaces/portal_SubtypeGroupLayer.SubtypeGroupLayer-1.html +1 -1
- package/docs/html/interfaces/portal_SubtypeGroupLayer.SubtypeSubtypeGroupLayer.html +1 -1
- package/docs/html/interfaces/portal_WMSLayer.WMSLayer-1.html +1 -1
- package/docs/html/modules/utilities_esri.html +2 -0
- package/docs/html/types/portal_PopupInfo.PopupElementType.html +1 -1
- package/docs/html/types/portal__LayerBase.LayerType.html +1 -1
- package/docs/html/types/support_esri.FeatureLayerElevationInfo.html +1 -1
- package/docs/html/variables/version.version.html +1 -1
- package/mapping/BasemapExtension.js +1 -1
- package/mapping/BuildingGroupSublayerExtension.js +1 -1
- package/mapping/BuildingSceneLayerExtension.js +1 -1
- package/mapping/GroundExtension.js +1 -1
- package/mapping/GroupLayerExtension.d.ts +1 -1
- package/mapping/GroupLayerExtension.js +1 -1
- package/mapping/ImageryLayerExtension.js +1 -1
- package/mapping/KMLLayerExtension.js +1 -1
- package/mapping/KMLSublayerExtension.js +1 -1
- package/mapping/MapExtension.js +1 -1
- package/mapping/SubtypeGroupLayerExtension.js +1 -1
- package/mapping/SubtypeSublayerExtension.js +1 -1
- package/mapping/WMSLayerExtension.js +1 -1
- package/mapping/WMSSublayerExtension.js +1 -1
- package/mapping/WMTSLayerExtension.js +1 -1
- package/mapping/_LayerExtension.js +1 -1
- package/mapping/_SublayerExtension.d.ts +1 -1
- package/mapping/_SublayerExtension.js +1 -1
- package/mapping/support/ArrayWrappedCollection.d.ts +1 -1
- package/mapping/support/ArrayWrappedCollection.js +1 -1
- package/mapping/support/DefaultLayerExtensionFactory.js +1 -1
- package/mapping/support/_LayerExtensionCollection.d.ts +2 -2
- package/mapping/support/_LayerExtensionCollection.js +1 -1
- package/mapping/support/_SublayerExtensionCollection.d.ts +2 -2
- package/mapping/support/_SublayerExtensionCollection.js +1 -1
- package/menus/Menu.js +1 -1
- package/package.json +3 -3
- package/portal/LayerBase.js +1 -1
- package/portal/PopupInfo.d.ts +22 -4
- package/portal/PopupInfo.js +1 -1
- package/portal/SubtypeGroupLayer.d.ts +2 -2
- package/portal/SubtypeGroupLayer.js +1 -1
- package/portal/SubtypeSublayer.js +1 -1
- package/portal/WMSLayer.d.ts +1 -1
- package/portal/WMSLayer.js +1 -1
- package/portal/_LayerBase.d.ts +1 -1
- package/support/esri.d.ts +1 -1
- package/tasks/identify/CSVLayerClientSideQueryIdentifyProvider.js +1 -1
- package/tasks/identify/ImageryLayerIdentifyProvider.js +1 -1
- package/utilities/CollectionProxy.d.ts +4 -4
- package/utilities/CollectionProxy.js +1 -1
- package/utilities/CopyOnWriteCollection.d.ts +2 -2
- package/utilities/CopyOnWriteCollection.js +1 -1
- package/utilities/ReadOnlyCollection.d.ts +3 -4
- package/utilities/esri.d.ts +7 -0
- package/utilities/esri.js +1 -1
- package/utilities/extensions.js +1 -1
- package/utilities/geometry.js +1 -1
- package/utilities/symbol.js +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
var GroundExtension_1;import{__decorate}from"tslib";import EsriGround from"@arcgis/core/Ground";import{ArgumentError}from"../ArgumentError.js";import{EntityBase}from"../Entity.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{TaskSettings}from"../data/TaskSettings.js";import{Ground as PortalGround}from"../portal/Ground.js";import{serializable}from"../support/Serializable.js";import{checkArg}from"../utilities/checkArg.js";import{load}from"../utilities/esri.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{onCollectionPropertyChange}from"../utilities/watch.js";import{_assignLayerExtensions}from"./_LayerExtension.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("GroundExtension");function isGround(e){return"esri.Ground"===e?.declaredClass}let GroundExtension=GroundExtension_1=class extends EntityBase{constructor(e){super(e),this._itemType=ItemType.GROUND_EXTENSION,this._watchHandles=[],this._onLayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(r){log.error({message:`Error occurred while initializing layer extension for layer '${e.title??e.layer.id??e.id}'.`,error:r})}},this._layerExtensions=new LayerExtensionCollectionImpl(this),this.taskSettings=this._createTaskSettings(),this.taskSettings.enableSearch=!1,this.taskSettings.enableQuery=!1,this.taskSettings.enableIdentify=!1;const{ground:r}=e??{};isGround(r)?this._setGround(r):r?this._deferredGroundProperties=r:this._setGround(new EsriGround)}get ground(){return this._ground}get mapExtension(){return this._mapExtension}get layerExtensions(){return this._layerExtensions}static isDefaultGround(e){if(!e.layers.length)return!0;if(1!==e.layers.length)return!1;const r=e.layers.getItemAt(0);return r.url===PortalGround.DEFAULT_ELEVATION_URL&&r.id===PortalGround.DEFAULT_ELEVATION_ID&&r.title===PortalGround.DEFAULT_ELEVATION_TITLE}_setMapExtension(e){this._mapExtension=e,this.notifyChange("mapExtension"),this._layerExtensions.onMapExtensionChanged()}_resolveGround(){if(this._ground||!this._deferredGroundProperties||!this.mapExtension)return;const{ground:e}=this.mapExtension.map;this._setGround(e),this.assignProperties({ground:this._deferredGroundProperties}),this._deferredGroundProperties=void 0}_createTaskSettings(){return new TaskSettings}_getSerializableProperties(){return{...super._getSerializableProperties(),ground:{serializeModes:["initial"],serialize:e=>this.ground&&("all"===e||!GroundExtension_1.isDefaultGround(this.ground)&&this.ground.layers.length)?this.mapExtension?{$ref:"map.ground"}:PortalGround.fromEsriApiGround(this.ground):this._deferredGroundProperties?deepClone(this._deferredGroundProperties):void 0,isDefault:e=>!(e&&(e.layers&&e.layers.length||e.$ref)),deserialize:e=>{if(isGround(e)){if(e!==this.ground)throw new ArgumentError("properties.ground","Property 'ground' is read-only.")}else if("world-elevation"===e){if(!this._ground||!GroundExtension_1.isDefaultGround(this._ground))throw new ArgumentError("properties.ground","Property 'ground' is read-only.")}else this._ground&&e&&PortalGround.applyToEsriApiGround(e,this._ground)}},layerExtensions:{serialize:!1,deserialize:e=>{_assignLayerExtensions(this.layerExtensions,e)}},taskSettings:{serialize:!1}}}async _onInitialize(){if(this.ground||this._deferredGroundProperties&&("world-elevation"===this._deferredGroundProperties?this._setGround(new EsriGround({layers:[await PortalGround.createDefaultElevationService()]})):this._deferredGroundProperties.$ref||this._setGround(await PortalGround.toEsriApiGround(this._deferredGroundProperties))),this._resolveGround(),!this._ground&&!this._mapExtension)throw new InvalidOperationError("Cannot resolve Ground reference: missing parent map extension.");await load(this.ground),this._layerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.layers",(async e=>{const r=(e.added??[]).map((e=>this.layerExtensions.forLayer(e)));await Promise.all(r.map(this._onLayerAddedPostInitialize))})))}async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),await super._onDestroy()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.layerExtensions}_setGround(e){this._ground=e,this.mapExtension&&(this.mapExtension.map.ground=e),this.notifyChange("ground")}};GroundExtension=GroundExtension_1=__decorate([serializable],GroundExtension);export{GroundExtension};class LayerExtensionCollectionImpl extends LayerExtensionCollectionBase{constructor(e){super(e,"ground.layers")}get _mapExtension(){return this._parent.mapExtension}add(e,r){checkArg("layerX",e).isNotMissing(),e.groundExtension&&e.groundExtension!==this._parent&&e.groundExtension.layerExtensions.remove(e),e._setGroundExtension(this._parent),super.add(e,r)}_onRemoved(e){super._onRemoved(e),e._setGroundExtension(void 0)}}
|
|
1
|
+
var GroundExtension_1;import{__decorate}from"tslib";import EsriGround from"@arcgis/core/Ground";import{ArgumentError}from"../ArgumentError.js";import{EntityBase}from"../Entity.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{TaskSettings}from"../data/TaskSettings.js";import{Ground as PortalGround}from"../portal/Ground.js";import{serializable}from"../support/Serializable.js";import{checkArg}from"../utilities/checkArg.js";import{load}from"../utilities/esri.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{onCollectionPropertyChange}from"../utilities/watch.js";import{_assignLayerExtensions}from"./_LayerExtension.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("GroundExtension");function isGround(e){return"esri.Ground"===e?.declaredClass}let GroundExtension=GroundExtension_1=class extends EntityBase{constructor(e){super(e),this._itemType=ItemType.GROUND_EXTENSION,this._watchHandles=[],this._onLayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(r){log.error({message:`Error occurred while initializing layer extension for layer '${e.title??e.layer.id??e.id}'.`,error:r})}},this._layerExtensions=new LayerExtensionCollectionImpl(this),this.taskSettings=this._createTaskSettings(),this.taskSettings.enableSearch=!1,this.taskSettings.enableQuery=!1,this.taskSettings.enableIdentify=!1;const{ground:r}=e??{};isGround(r)?this._setGround(r):r?this._deferredGroundProperties=r:this._setGround(new EsriGround)}get ground(){return this._ground}get mapExtension(){return this._mapExtension}get layerExtensions(){return this._layerExtensions}static isDefaultGround(e){if(!e.layers.length)return!0;if(1!==e.layers.length)return!1;const r=e.layers.getItemAt(0);return r.url===PortalGround.DEFAULT_ELEVATION_URL&&r.id===PortalGround.DEFAULT_ELEVATION_ID&&r.title===PortalGround.DEFAULT_ELEVATION_TITLE}_setMapExtension(e){this._mapExtension=e,this.notifyChange("mapExtension"),this._layerExtensions.onMapExtensionChanged()}_resolveGround(){if(this._ground||!this._deferredGroundProperties||!this.mapExtension)return;const{ground:e}=this.mapExtension.map;this._setGround(e),this.assignProperties({ground:this._deferredGroundProperties}),this._deferredGroundProperties=void 0}_createTaskSettings(){return new TaskSettings}_getSerializableProperties(){return{...super._getSerializableProperties(),ground:{serializeModes:["initial"],serialize:e=>this.ground&&("all"===e||!GroundExtension_1.isDefaultGround(this.ground)&&this.ground.layers.length)?this.mapExtension?{$ref:"map.ground"}:PortalGround.fromEsriApiGround(this.ground):this._deferredGroundProperties?deepClone(this._deferredGroundProperties):void 0,isDefault:e=>!(e&&(e.layers&&e.layers.length||e.$ref)),deserialize:e=>{if(isGround(e)){if(e!==this.ground)throw new ArgumentError("properties.ground","Property 'ground' is read-only.")}else if("world-elevation"===e){if(!this._ground||!GroundExtension_1.isDefaultGround(this._ground))throw new ArgumentError("properties.ground","Property 'ground' is read-only.")}else this._ground&&e&&PortalGround.applyToEsriApiGround(e,this._ground)}},layerExtensions:{serialize:!1,deserialize:e=>{_assignLayerExtensions(this.layerExtensions,e)}},taskSettings:{serialize:!1}}}async _onInitialize(){if(this.ground||this._deferredGroundProperties&&("world-elevation"===this._deferredGroundProperties?this._setGround(new EsriGround({layers:[await PortalGround.createDefaultElevationService()]})):this._deferredGroundProperties.$ref||this._setGround(await PortalGround.toEsriApiGround(this._deferredGroundProperties))),this._resolveGround(),!this._ground&&!this._mapExtension)throw new InvalidOperationError("Cannot resolve Ground reference: missing parent map extension.");await load(this.ground),this._layerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.layers",(async e=>{const r=(e.added??[]).map((e=>this.layerExtensions.forLayer(e)));await Promise.all(r.map(this._onLayerAddedPostInitialize))})))}async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),await super._onDestroy()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.layerExtensions}_setGround(e){this._ground=e,this.mapExtension&&(this.mapExtension.map.ground=e),this.notifyChange("ground")}};GroundExtension=GroundExtension_1=__decorate([serializable],GroundExtension);export{GroundExtension};class LayerExtensionCollectionImpl extends LayerExtensionCollectionBase{constructor(e){super(e,"ground.layers")}get _mapExtension(){return this._parent.mapExtension}add(e,r){return checkArg("layerX",e).isNotMissing(),e.groundExtension&&e.groundExtension!==this._parent&&e.groundExtension.layerExtensions.remove(e),e._setGroundExtension(this._parent),super.add(e,r)}_onRemoved(e){super._onRemoved(e),e._setGroundExtension(void 0)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{serializable}from"../support/Serializable.js";import{isGroupLayer,layersAreEquivalent}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection}from"../utilities/collection.js";import{find}from"../utilities/iterable.js";import{getLogger}from"../utilities/log.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignLayerExtensions,LayerExtension}from"./_LayerExtension.js";import{ExtensionBaseLayerListSettings}from"./support/LayerListSettings.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("GroupLayerExtension");let GroupLayerExtension=class extends LayerExtension{constructor(e){super(e),this._onLayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(i){log.error({message:`Error occurred while initializing layer extension for layer '${e.title??e.layer.id??e.id}'.`,error:i})}},this._layerExtensions=this._createLayerExtensionCollection(),watchEach(this.layerExtensions,"effectiveMinScale",(()=>this.notifyChange("effectiveMinScale"))),watchEach(this.layerExtensions,"effectiveMaxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.watch("layer",(()=>{this.layer&&void 0!==this._visibilityModeField&&(this.layer.visibilityMode=this._visibilityModeField)}))}get layer(){return super.layer}get layerExtensions(){return this._layerExtensions}get supportsSublayers(){return!0}get visibilityMode(){return this.layer?this.layer.visibilityMode:this._visibilityModeField||"independent"}set visibilityMode(e){this._visibilityModeField=e,this.layer&&(this.layer.visibilityMode=e)}get effectiveFullExtent(){return this.layerExtensions.initializedItems.length?this.layerExtensions.initializedItems.toArray().map((e=>e.layer.fullExtent)).reduce(((e,i)=>e?e.clone().union(i):i)):void 0}get effectiveMinScale(){const e=this.layerExtensions.initializedItems.map((e=>e.effectiveMinScale||1/0)).toArray(),i=Math.max(...e);return isFinite(i)?i:0}get effectiveMaxScale(){const e=this.layerExtensions.initializedItems.map((e=>e.effectiveMaxScale)).toArray(),i=Math.min(...e);return isFinite(i)?i:0}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return!e||this.dynamicallyAddedLayer||(e.layers=this.layerExtensions.toArray().map((e=>e._getProjectWebmapJSON()))),e}_setMapExtension(e){super._setMapExtension(e),this._layerExtensions.onMapExtensionChanged()}async _switchLayer(e){const i=new Map;this.layer&&this.layer.layers.forEach((e=>{i.set(e,this.layerExtensions.forLayer(e))})),await super._switchLayer(e);const t=[];if(this.layer)for(const e of this.layer.layers.toArray()){const s=find(i.entries(),(([i])=>layersAreEquivalent(i,e)));s&&t.push((async()=>{const i=s[1];await i._switchLayer(e),this.layerExtensions._register(i)})())}this.isInitialized&&t.push(this._initializeChildren()),await Promise.all(t)}_getSerializableProperties(){const e=super._getSerializableProperties(),i={...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"GroupLayer"}},layerExtensions:{serializeModes:["initial","project"],deserialize:e=>{_assignLayerExtensions(this.layerExtensions,e)}},visibilityMode:{...this._toPropertyDef(e.visibilityMode),isDefault:()=>void 0===this._visibilityModeField}};return delete i.visibilityMode.default,i}async _onInitialize(){await super._onInitialize(),this.layer.layers||(this.layer.layers=new Collection),this._layerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.layers",(async e=>{const i=(e.added??[]).map((e=>this.layerExtensions.forLayer(e)));await Promise.all(i.map(this._onLayerAddedPostInitialize))})))}async _onDestroy(){await Promise.all(this.layerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.layerExtensions}_isSupportedLayer(e){return isGroupLayer(e)}_createLayerExtensionCollection(){return new GroupLayerExtensionCollection(this)}_createLayerListSettings(e){return new GroupLayerExtensionLayerListSettings(e,this)}};GroupLayerExtension=__decorate([serializable],GroupLayerExtension);export{GroupLayerExtension};let GroupLayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _layerSupportsHideChildren(){return!0}get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return!0}};GroupLayerExtensionLayerListSettings=__decorate([serializable],GroupLayerExtensionLayerListSettings);export class GroupLayerExtensionCollection extends LayerExtensionCollectionBase{constructor(e){super(e,"layer.layers")}get _mapExtension(){return this._parent.mapExtension}add(e,i){checkArg("layerX",e).isNotMissing(),e.parentLayerExtension&&e.parentLayerExtension!==this._parent&&e.parentLayerExtension.layerExtensions.remove(e),e._setParentLayerExtension(this._parent),super.add(e,i)}_onAdded(e){super._onAdded(e),e._setParentLayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentLayerExtension(void 0)}}
|
|
1
|
+
import{__decorate}from"tslib";import{serializable}from"../support/Serializable.js";import{isGroupLayer,layersAreEquivalent}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection}from"../utilities/collection.js";import{find}from"../utilities/iterable.js";import{getLogger}from"../utilities/log.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignLayerExtensions,LayerExtension}from"./_LayerExtension.js";import{ExtensionBaseLayerListSettings}from"./support/LayerListSettings.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("GroupLayerExtension");let GroupLayerExtension=class extends LayerExtension{constructor(e){super(e),this._onLayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(i){log.error({message:`Error occurred while initializing layer extension for layer '${e.title??e.layer.id??e.id}'.`,error:i})}},this._layerExtensions=this._createLayerExtensionCollection(),watchEach(this.layerExtensions,"effectiveMinScale",(()=>this.notifyChange("effectiveMinScale"))),watchEach(this.layerExtensions,"effectiveMaxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.watch("layer",(()=>{this.layer&&void 0!==this._visibilityModeField&&(this.layer.visibilityMode=this._visibilityModeField)}))}get layer(){return super.layer}get layerExtensions(){return this._layerExtensions}get supportsSublayers(){return!0}get visibilityMode(){return this.layer?this.layer.visibilityMode:this._visibilityModeField||"independent"}set visibilityMode(e){this._visibilityModeField=e,this.layer&&(this.layer.visibilityMode=e)}get effectiveFullExtent(){return this.layerExtensions.initializedItems.length?this.layerExtensions.initializedItems.toArray().map((e=>e.layer.fullExtent)).reduce(((e,i)=>e?e.clone().union(i):i)):void 0}get effectiveMinScale(){const e=this.layerExtensions.initializedItems.map((e=>e.effectiveMinScale||1/0)).toArray(),i=Math.max(...e);return isFinite(i)?i:0}get effectiveMaxScale(){const e=this.layerExtensions.initializedItems.map((e=>e.effectiveMaxScale)).toArray(),i=Math.min(...e);return isFinite(i)?i:0}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return!e||this.dynamicallyAddedLayer||(e.layers=this.layerExtensions.toArray().map((e=>e._getProjectWebmapJSON()))),e}_setMapExtension(e){super._setMapExtension(e),this._layerExtensions.onMapExtensionChanged()}async _switchLayer(e){const i=new Map;this.layer&&this.layer.layers.forEach((e=>{i.set(e,this.layerExtensions.forLayer(e))})),await super._switchLayer(e);const t=[];if(this.layer)for(const e of this.layer.layers.toArray()){const s=find(i.entries(),(([i])=>layersAreEquivalent(i,e)));s&&t.push((async()=>{const i=s[1];await i._switchLayer(e),this.layerExtensions._register(i)})())}this.isInitialized&&t.push(this._initializeChildren()),await Promise.all(t)}_getSerializableProperties(){const e=super._getSerializableProperties(),i={...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"GroupLayer"}},layerExtensions:{serializeModes:["initial","project"],deserialize:e=>{_assignLayerExtensions(this.layerExtensions,e)}},visibilityMode:{...this._toPropertyDef(e.visibilityMode),isDefault:()=>void 0===this._visibilityModeField}};return delete i.visibilityMode.default,i}async _onInitialize(){await super._onInitialize(),this.layer.layers||(this.layer.layers=new Collection),this._layerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.layers",(async e=>{const i=(e.added??[]).map((e=>this.layerExtensions.forLayer(e)));await Promise.all(i.map(this._onLayerAddedPostInitialize))})))}async _onDestroy(){await Promise.all(this.layerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.layerExtensions}_isSupportedLayer(e){return isGroupLayer(e)}_createLayerExtensionCollection(){return new GroupLayerExtensionCollection(this)}_createLayerListSettings(e){return new GroupLayerExtensionLayerListSettings(e,this)}};GroupLayerExtension=__decorate([serializable],GroupLayerExtension);export{GroupLayerExtension};let GroupLayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _layerSupportsHideChildren(){return!0}get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return!0}};GroupLayerExtensionLayerListSettings=__decorate([serializable],GroupLayerExtensionLayerListSettings);export class GroupLayerExtensionCollection extends LayerExtensionCollectionBase{constructor(e){super(e,"layer.layers")}get _mapExtension(){return this._parent.mapExtension}add(e,i){return checkArg("layerX",e).isNotMissing(),e.parentLayerExtension&&e.parentLayerExtension!==this._parent&&e.parentLayerExtension.layerExtensions.remove(e),e._setParentLayerExtension(this._parent),super.add(e,i)}_onAdded(e){super._onAdded(e),e._setParentLayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentLayerExtension(void 0)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import Collection from"@arcgis/core/core/Collection";import{ImageServiceLayer as PortalImageServiceLayer}from"../portal/ImageServiceLayer.js";import{serializable}from"../support/Serializable.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isImageryLayer}from"../utilities/_layers.js";import{getAllFieldInfos}from"../utilities/esri.js";import{LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";import{ArrayWrappedCollection}from"./support/ArrayWrappedCollection.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";let ImageryLayerExtension=class extends LayerExtension{constructor(){super(...arguments),this.includeCatalogItems=!0}get hasFeatures(){return!0}get capabilities(){return this._layerCapabilities?this._layerCapabilities:this._capabilities()}get layer(){return super.layer}get hasRasterAttributeTable(){return this._hasRasterAttributeTable}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();if(!e||this.dynamicallyAddedLayer)return e;const{layerDefinition:r}=PortalImageServiceLayer.fromEsriApiImageryLayer(this.layer),{definitionExpression:t,drawingInfo:a}=r??{};return t&&(e.layerDefinition={...e.layerDefinition,definitionExpression:t}),a&&(e.layerDefinition={...e.layerDefinition,drawingInfo:a}),e}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"ArcGISImageServiceLayer"}},includeCatalogItems:{serializeModes:["initial"],default:!0}}}async _onInitialize(){await super._onInitialize();const e=await this.requestHelper.request(this.layer.url,{query:{f:"json"}});if(!e||!e.data)throw new Error(`Response to request for url ${this.layer.url} was invalid`);const{data:r}=e;if(r.capabilities){const e=r.capabilities.split(",").map((e=>e.trim()));this._layerCapabilities={supportsAdd:e.includes("Create"),supportsUpdate:e.includes("Update"),supportsDelete:e.includes("Delete"),supportsEditing:e.includes("Editing"),supportsQuery:e.includes("Catalog"),supportsAttachmentEditing:!1}}this._hasRasterAttributeTable=r.hasRasterAttributeTable}async _applyPortalItemProperties(e){if("Image Service"!==e.type)throw new Error(`Cannot create Imagery Layer from Portal item that has type: ${e.type}`);if(e.typeKeywords.includes("Elevation 3D Layer"))throw new Error("Cannot create Imagery Layer from Portal item that references an Elevation layer");const r={layerType:"ArcGISImageServiceLayer",url:e.url};return PortalImageServiceLayer.applyToEsriApiLayer(r,this.layer)}_isSupportedLayer(e){return isImageryLayer(e)}_createSchema(){return new ImageryLayerSchema(this)}_createFeatureSettings(){return new ImageryLayerFeatureSettings(this)}};ImageryLayerExtension=__decorate([serializable],ImageryLayerExtension);export{ImageryLayerExtension};let ImageryLayerFeatureSettings=class extends PopupTemplateFeatureSettings{get _defaultOutFields(){const e=getAllFieldInfos(this.popupTemplate),r=this.featureSource?.schema?.primaryKeyField;if(e&&r){const{layer:e}=this._layerExtension;return super._defaultOutFields.filter((r=>!r.startsWith(`${e?.
|
|
1
|
+
import{__decorate}from"tslib";import Collection from"@arcgis/core/core/Collection";import{ImageServiceLayer as PortalImageServiceLayer}from"../portal/ImageServiceLayer.js";import{serializable}from"../support/Serializable.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isImageryLayer}from"../utilities/_layers.js";import{getAllFieldInfos}from"../utilities/esri.js";import{LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";import{ArrayWrappedCollection}from"./support/ArrayWrappedCollection.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";let ImageryLayerExtension=class extends LayerExtension{constructor(){super(...arguments),this.includeCatalogItems=!0}get hasFeatures(){return!0}get capabilities(){return this._layerCapabilities?this._layerCapabilities:this._capabilities()}get layer(){return super.layer}get hasRasterAttributeTable(){return this._hasRasterAttributeTable}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();if(!e||this.dynamicallyAddedLayer)return e;const{layerDefinition:r}=PortalImageServiceLayer.fromEsriApiImageryLayer(this.layer),{definitionExpression:t,drawingInfo:a}=r??{};return t&&(e.layerDefinition={...e.layerDefinition,definitionExpression:t}),a&&(e.layerDefinition={...e.layerDefinition,drawingInfo:a}),e}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"ArcGISImageServiceLayer"}},includeCatalogItems:{serializeModes:["initial"],default:!0}}}async _onInitialize(){await super._onInitialize();const e=await this.requestHelper.request(this.layer.url,{query:{f:"json"}});if(!e||!e.data)throw new Error(`Response to request for url ${this.layer.url} was invalid`);const{data:r}=e;if(r.capabilities){const e=r.capabilities.split(",").map((e=>e.trim()));this._layerCapabilities={supportsAdd:e.includes("Create"),supportsUpdate:e.includes("Update"),supportsDelete:e.includes("Delete"),supportsEditing:e.includes("Editing"),supportsQuery:e.includes("Catalog"),supportsAttachmentEditing:!1}}this._hasRasterAttributeTable=r.hasRasterAttributeTable}async _applyPortalItemProperties(e){if("Image Service"!==e.type)throw new Error(`Cannot create Imagery Layer from Portal item that has type: ${e.type}`);if(e.typeKeywords.includes("Elevation 3D Layer"))throw new Error("Cannot create Imagery Layer from Portal item that references an Elevation layer");const r={layerType:"ArcGISImageServiceLayer",url:e.url};return PortalImageServiceLayer.applyToEsriApiLayer(r,this.layer)}_isSupportedLayer(e){return isImageryLayer(e)}_createSchema(){return new ImageryLayerSchema(this)}_createFeatureSettings(){return new ImageryLayerFeatureSettings(this)}};ImageryLayerExtension=__decorate([serializable],ImageryLayerExtension);export{ImageryLayerExtension};let ImageryLayerFeatureSettings=class extends PopupTemplateFeatureSettings{get _defaultOutFields(){const e=getAllFieldInfos(this.popupTemplate),r=this.featureSource?.schema?.primaryKeyField;if(e&&r){const{layer:e}=this._layerExtension;return super._defaultOutFields.filter((r=>!r.startsWith(`${e?._rasterAttributeTableFieldPrefix}`)))}return["*"]}};ImageryLayerFeatureSettings=__decorate([serializable],ImageryLayerFeatureSettings);let ImageryLayerSchema=class extends LayerExtensionSchema{constructor(e){super(e),this._fieldsCollection=new ReadOnlyCollection(new ArrayWrappedCollection({parent:e,targetProperty:"layer",arrayProperty:"fields"}))}get _fields(){return new ReadOnlyCollection(this._fieldsCollection?.concat(this._rasterFields)??new Collection)}get _rasterFields(){const{layer:e}=this._layerExtension;return"loaded"!==this._layerExtension.layer?.loadStatus?new Collection:new Collection(e?.rasterFields?.filter((r=>r.name.startsWith(e?._rasterAttributeTableFieldPrefix))))}_getPropertyBindings(){return{primaryKeyField:{property:"objectIdField",readonly:!0},spatialReference:{property:"spatialReference",readonly:!0},geometryType:{value:"polygon"}}}};ImageryLayerSchema=__decorate([serializable],ImageryLayerSchema);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import esriConfig from"@arcgis/core/config";import Collection from"@arcgis/core/core/Collection";import SpatialReference from"@arcgis/core/geometry/SpatialReference";import Field from"@arcgis/core/layers/support/Field";import{InvalidOperationError}from"../InvalidOperationError.js";import{Schema}from"../data/Schema.js";import{translate}from"../locale/language.js";import{KMLLayer as PortalKMLLayer}from"../portal/KMLLayer.js";import{serializable}from"../support/Serializable.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isKMLLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{toAbsoluteUri}from"../utilities/uri.js";import{KMLSublayerExtension}from"./KMLSublayerExtension.js";import{LayerExtension}from"./_LayerExtension.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";export const DEFAULT_KML_UTILITY="https://utility.arcgis.com/sharing/kml";const ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for KMLLayerExtension is readonly";let KMLLayerExtension=class extends LayerExtension{get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get hasFeatures(){return!0}get _layerView(){return this.layer&&this.mapExtension?._allLayerViews.find((e=>e.layer===this.layer))}get _layerSupportsHideChildren(){return!1}get _graphics(){return this._layerView?this._layerView.allVisiblePoints.concat(this._layerView.allVisiblePolygons).concat(this._layerView.allVisiblePolylines).toArray():[]}_createSublayerExtension(e){return new KMLSublayerExtension(e)}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();if(!e||this.dynamicallyAddedLayer)return e;const{visibleFolders:r}=PortalKMLLayer.fromEsriApiKMLLayer(this.layer);return e.visibleFolders=r,e}async _applyPortalItemProperties(e){if("KML"!==e.type)throw new Error(`Cannot create KML Layer from Portal item that has type: ${e.type}`);const r={layerType:"KML",url:e.url??toAbsoluteUri("data",`${e.itemUrl}/`)};return PortalKMLLayer.applyToEsriApiKMLLayer(r,this.layer)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"KML"}}}}_createSchema(){return new KMLLayerSchema}_isSupportedLayer(e){return isKMLLayer(e)}async _initializeLayer(){esriConfig.kmlServiceUrl||(esriConfig.kmlServiceUrl=DEFAULT_KML_UTILITY)}_createSublayerExtensionCollection(){return new KMLSublayerExtensionCollectionImpl(this)}};KMLLayerExtension=__decorate([serializable],KMLLayerExtension);export{KMLLayerExtension};class KMLSublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"layer.sublayers"),this._layerExtension=e}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.layer.sublayers&&!this._parent.layer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...t){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createClone(){return new KMLSublayerExtensionCollectionImpl(this._layerExtension)}_createSublayerExtension(e){return this._parent._createSublayerExtension(e)}}const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";let KMLLayerSchema=class extends Schema{constructor(){super(),this._fieldCollection=this._createFieldCollection()}get spatialReference(){return SpatialReference.WGS84}set spatialReference(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get primaryKeyField(){return"id"}set primaryKeyField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get _fields(){return this._fieldCollection}_createFieldCollection(){const e=new Collection;return e.add(new Field({name:"id",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.id"),editable:!1,type:"oid"})),e.add(new Field({name:"name",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.name"),editable:!1,type:"string"})),e.add(new Field({name:"description",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.description"),editable:!1,type:"string"})),e.add(new Field({name:"visibility",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.visibility"),editable:!1,type:"integer"})),e.add(new Field({name:"balloonStyleText",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.balloonStyleText"),editable:!1,type:"string"})),e.add(new Field({name:"styleUrl",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.styleUrl"),editable:!1,type:"string"})),new ReadOnlyCollection(e)}};KMLLayerSchema=__decorate([serializable],KMLLayerSchema);
|
|
1
|
+
import{__decorate}from"tslib";import esriConfig from"@arcgis/core/config";import Collection from"@arcgis/core/core/Collection";import SpatialReference from"@arcgis/core/geometry/SpatialReference";import Field from"@arcgis/core/layers/support/Field";import{InvalidOperationError}from"../InvalidOperationError.js";import{Schema}from"../data/Schema.js";import{translate}from"../locale/language.js";import{KMLLayer as PortalKMLLayer}from"../portal/KMLLayer.js";import{serializable}from"../support/Serializable.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isKMLLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{toAbsoluteUri}from"../utilities/uri.js";import{KMLSublayerExtension}from"./KMLSublayerExtension.js";import{LayerExtension}from"./_LayerExtension.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";export const DEFAULT_KML_UTILITY="https://utility.arcgis.com/sharing/kml";const ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for KMLLayerExtension is readonly";let KMLLayerExtension=class extends LayerExtension{get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get hasFeatures(){return!0}get _layerView(){return this.layer&&this.mapExtension?._allLayerViews.find((e=>e.layer===this.layer))}get _layerSupportsHideChildren(){return!1}get _graphics(){return this._layerView?this._layerView.allVisiblePoints.concat(this._layerView.allVisiblePolygons).concat(this._layerView.allVisiblePolylines).toArray():[]}_createSublayerExtension(e){return new KMLSublayerExtension(e)}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();if(!e||this.dynamicallyAddedLayer)return e;const{visibleFolders:r}=PortalKMLLayer.fromEsriApiKMLLayer(this.layer);return e.visibleFolders=r,e}async _applyPortalItemProperties(e){if("KML"!==e.type)throw new Error(`Cannot create KML Layer from Portal item that has type: ${e.type}`);const r={layerType:"KML",url:e.url??toAbsoluteUri("data",`${e.itemUrl}/`)};return PortalKMLLayer.applyToEsriApiKMLLayer(r,this.layer)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"KML"}}}}_createSchema(){return new KMLLayerSchema}_isSupportedLayer(e){return isKMLLayer(e)}async _initializeLayer(){esriConfig.kmlServiceUrl||(esriConfig.kmlServiceUrl=DEFAULT_KML_UTILITY)}_createSublayerExtensionCollection(){return new KMLSublayerExtensionCollectionImpl(this)}};KMLLayerExtension=__decorate([serializable],KMLLayerExtension);export{KMLLayerExtension};class KMLSublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"layer.sublayers"),this._layerExtension=e}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.layer.sublayers&&!this._parent.layer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);return super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...t){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createClone(){return new KMLSublayerExtensionCollectionImpl(this._layerExtension)}_createSublayerExtension(e){return this._parent._createSublayerExtension(e)}}const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";let KMLLayerSchema=class extends Schema{constructor(){super(),this._fieldCollection=this._createFieldCollection()}get spatialReference(){return SpatialReference.WGS84}set spatialReference(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get primaryKeyField(){return"id"}set primaryKeyField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get _fields(){return this._fieldCollection}_createFieldCollection(){const e=new Collection;return e.add(new Field({name:"id",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.id"),editable:!1,type:"oid"})),e.add(new Field({name:"name",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.name"),editable:!1,type:"string"})),e.add(new Field({name:"description",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.description"),editable:!1,type:"string"})),e.add(new Field({name:"visibility",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.visibility"),editable:!1,type:"integer"})),e.add(new Field({name:"balloonStyleText",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.balloonStyleText"),editable:!1,type:"string"})),e.add(new Field({name:"styleUrl",alias:translate("gcx.api.mapping.kml-sublayer-extension.schema.styleUrl"),editable:!1,type:"string"})),new ReadOnlyCollection(e)}};KMLLayerSchema=__decorate([serializable],KMLLayerSchema);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var KMLSublayerExtension_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{serializable}from"../support/Serializable.js";import{isKMLSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{SublayerExtension,SubSublayerExtensionCollection}from"./_SublayerExtension.js";const ERR_CREATE_SUBLAYER_NOT_SUPPORTED="KML sublayers cannot be created or configured from JSON. They must be created with an ESRI KMLSublayer object.",ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for KMLLayerExtension is readonly";let KMLSublayerExtension=KMLSublayerExtension_1=class extends SublayerExtension{get sublayer(){return super.sublayer}get layerExtension(){return super.layerExtension}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get hasFeatures(){return!1}get canChangeScale(){return!1}constructor(e){super(e);const r=e?.sublayer;if(!this.sublayer&&!r?.$ref)throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}_isSupportedSublayer(e){return isKMLSublayer(e)}_createSublayerExtension(e){return new KMLSublayerExtension_1(e)}_createSublayer(e){throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}async _applySublayerProperties(e,r){}_createSublayerExtensionCollection(){return new KMLSublayerExtensionCollectionImpl(this)}_serializeSublayer(e){return this._createSublayerRef()}};KMLSublayerExtension=KMLSublayerExtension_1=__decorate([serializable],KMLSublayerExtension);export{KMLSublayerExtension};class KMLSublayerExtensionCollectionImpl extends SubSublayerExtensionCollection{get _layerExtension(){return super._layerExtension}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.sublayer.sublayers&&!this._parent.sublayer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...n){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createClone(){return new KMLSublayerExtensionCollectionImpl(this._parent)}_createSublayerExtension(e){return this._layerExtension._createSublayerExtension(e)}}
|
|
1
|
+
var KMLSublayerExtension_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{serializable}from"../support/Serializable.js";import{isKMLSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{SublayerExtension,SubSublayerExtensionCollection}from"./_SublayerExtension.js";const ERR_CREATE_SUBLAYER_NOT_SUPPORTED="KML sublayers cannot be created or configured from JSON. They must be created with an ESRI KMLSublayer object.",ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for KMLLayerExtension is readonly";let KMLSublayerExtension=KMLSublayerExtension_1=class extends SublayerExtension{get sublayer(){return super.sublayer}get layerExtension(){return super.layerExtension}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get hasFeatures(){return!1}get canChangeScale(){return!1}constructor(e){super(e);const r=e?.sublayer;if(!this.sublayer&&!r?.$ref)throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}_isSupportedSublayer(e){return isKMLSublayer(e)}_createSublayerExtension(e){return new KMLSublayerExtension_1(e)}_createSublayer(e){throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}async _applySublayerProperties(e,r){}_createSublayerExtensionCollection(){return new KMLSublayerExtensionCollectionImpl(this)}_serializeSublayer(e){return this._createSublayerRef()}};KMLSublayerExtension=KMLSublayerExtension_1=__decorate([serializable],KMLSublayerExtension);export{KMLSublayerExtension};class KMLSublayerExtensionCollectionImpl extends SubSublayerExtensionCollection{get _layerExtension(){return super._layerExtension}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.sublayer.sublayers&&!this._parent.sublayer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);return super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...n){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createClone(){return new KMLSublayerExtensionCollectionImpl(this._parent)}_createSublayerExtension(e){return this._layerExtension._createSublayerExtension(e)}}
|
package/mapping/MapExtension.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{EntityBase}from"../Entity.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{isBasemapExtension,isBookmark,isGroundExtension,isLayerPreset,isMenu,isTableExtension,ItemType}from"../ItemType.js";import{TableExtension}from"../data/TableExtension.js";import{LayerPreset}from"../layer-preset/LayerPreset.js";import{Menu}from"../menus/Menu.js";import{WebMap as WebMapJson}from"../portal/WebMap.js";import{WebScene as WebSceneJson}from"../portal/WebScene.js";import{resolveRelativeHrefs}from"../portal/_utils.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{FormatSettings}from"../support/FormatSettings.js";import{InitializableCollectionProxy}from"../support/InitializableCollectionProxy.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{WellKnownBasemap}from"../support/esri.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{basemapsAreEquivalent,createStandardBasemap,isStandardBasemap}from"../utilities/basemaps.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{project}from"../utilities/geometry.js";import{find}from"../utilities/iterable.js";import{layersAreEquivalent}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{getMapSpatialReference,isMap,isWebMap,isWebScene}from"../utilities/mapping.js";import{toPortalItem as toPortalItemBase}from"../utilities/portal.js";import{parallelEach}from"../utilities/promise.js";import{onCollectionPropertyChange,onEach}from"../utilities/watch.js";import{BasemapExtension}from"./BasemapExtension.js";import{Bookmark}from"./Bookmark.js";import{GroundExtension}from"./GroundExtension.js";import{MapConstraints}from"./MapConstraints.js";import{UnsupportedLayerExtension}from"./UnsupportedLayerExtension.js";import{_assignLayerExtensions,LayerExtension}from"./_LayerExtension.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("MapExtension");let MapExtension=class extends EntityBase{constructor(e){super(e),this.isSwitchingMap=!1,this._layerViews=new Collection,this._itemType=ItemType.MAP_EXTENSION,this._skipBasemapOptions=!1;let t={...e};this._basemapOptions=new BasemapExtensionCollection(this),this._groundExtensions=new WeakMap,this._layerExtensions=this._createLayerExtensionCollection(),this.tableExtensions=this._createTableExtensionCollection(),this.formatSettings=this._createFormatSettings(),this._bookmarks=new Collection,this.constraints=new MapConstraints,this.watch(["_map","_scene"],(e=>{e&&(onEach(e.layers,"layerview-create",(e=>{this._layerViews.add(e.layerView)})),onEach(e.layers,"layerview-destroy",(e=>{this._layerViews.remove(e.layerView)})))}));const{webMap:i,webScene:s,initialViewMode:a,map:n,basemapOptions:r}=t;if(this._webMap=i,this._webScene=s,this._webMapItem=toPortalItem(i),this._webSceneItem=toPortalItem(s),this.initialViewMode=a,isWebScene(n)&&s)throw new ArgumentError("Cannot specify webScene property if map is initialized to a WebScene instance.");if(isMap(n)&&i)throw new ArgumentError("Cannot specify webMap property if map is initialized to a 2D Map instance.");if(isWebScene(n)||isWebMap(n)||isMap(n))this.assignProperties({basemapOptions:r}),this._skipBasemapOptions=!!r;else{const{map:e,layerExtensions:i,tableExtensions:s,groundExtension:a,basemapOptions:n,basemapExtension:r,...o}=t;this._deferredProperties={map:e,layerExtensions:i,tableExtensions:s,groundExtension:a,basemapOptions:n,basemapExtension:r},t=o,n&&(this._skipBasemapOptions=!0)}this._initMapFromProperties(t),this.watch("map.basemap",(()=>this._onBasemapChange()),!0),this.watch("map.ground",(()=>this._onGroundChange()),!0),this.allLayerExtensions=new AllLayerExtensionCollectionImpl(this),this.map?.basemap&&this._onBasemapChange()}get webMap(){return this._webMap}get webScene(){return this._webScene}get map(){return this._currentMap}get viewMode(){return this.map?isWebScene(this.map)?"scene":"map":this.initialViewMode}get initialViewMode(){return this.webMap&&this.webScene?this._initialViewMode||"map":isWebScene(this.map)||this.webScene&&!this.webMap?"scene":"map"}set initialViewMode(e){this._initialViewMode=e}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get basemapExtension(){return this._basemapExtension}set basemapExtension(e){const t=this._basemapExtension;if(t!==e)if(t&&t._setMapExtension(void 0),e){if(e._setMapExtension(this),this.isInitialized&&!e.basemap){if(e.isInitialized)throw e._setMapExtension(void 0),new InvalidOperationError("Cannot set MapExtension.basemapExtension without a valid Esri Basemap object");e.initialize()}this._ensureIsBasemapOption(e),this.map&&e.basemap&&e.basemap!==this.map.basemap?this.map.basemap=e.basemap:this._basemapExtension=e}else this.map.basemap=void 0,this._basemapExtension=void 0}get groundExtension(){return this._groundExtension||(this.groundExtension=new GroundExtension({ground:this.map?.ground})),this._groundExtension}set groundExtension(e){if(!e)throw new InvalidOperationError("Cannot set map.ground to undefined");const t=this._groundExtension;t!==e&&(t&&t._setMapExtension(void 0),e._setMapExtension(this),e._resolveGround(),e.ground?(this._groundExtensions.set(e.ground,e),this.map&&e.ground!==this.map.ground?this.map.ground=e.ground:this._groundExtension=e):this._groundExtension=e)}get basemapOptions(){return this._basemapOptions}get bookmarks(){return this._bookmarks}get initialBasemapExtension(){return this._initialBasemapExtension}get initialLayerPreset(){return this._initialLayerPreset}set initialLayerPreset(e){if(!e)return void(this._initialLayerPreset=void 0);const t=isLayerPreset(e)?e:new LayerPreset(e);this._initialLayerPreset=t}get _spatialReference(){return getMapSpatialReference(this.map)}get webMapItemTitle(){if(this._webMapItem)return this._webMapItem.title}get webSceneItemTitle(){if(this._webSceneItem)return this._webSceneItem.title}get title(){return this._title?this._title:this._webMapItem&&"map"===this.viewMode?this.webMapItemTitle:this._webSceneItem&&"scene"===this.viewMode?this.webSceneItemTitle:void 0}set title(e){this._title=e}get contextMenu(){return this._contextMenu}set contextMenu(e){this._contextMenu=e,e&&this.isInitialized&&!e.isInitialized&&(async()=>{try{await e.initialize()}catch(e){e instanceof Error&&log.error({message:"An error occurred while initializing context menu.",error:e})}})()}get _allLayerViews(){const e=t=>{const i=[t];return Collection.isCollection(t.sublayerViews)?i.push(...t.sublayerViews.toArray().flatMap(e)):Collection.isCollection(t.layerViews)&&i.push(...t.layerViews.toArray().flatMap(e)),i};return this._layerViews.toArray().flatMap(e)}get layerExtensions(){return this._layerExtensions}getAllFeatureSources(e=(()=>!0)){const t=[],i=a=>{a.hasFeatures&&t.push(a);for(const t of a.sublayerExtensions.initializedItems.filter(e).toArray())s(t);if(isGroupLayerExtension(a))for(const t of a.layerExtensions.initializedItems.filter(e).toArray())i(t)},s=i=>{t.push(i);for(const t of i.sublayerExtensions.initializedItems.filter(e).toArray())s(t)};for(const t of this.layerExtensions.initializedItems.filter(e).toArray())i(t);for(const i of this.tableExtensions.initializedItems.filter(e).toArray())t.push(i);if(this.basemapExtension){for(const t of this.basemapExtension.baseLayerExtensions.initializedItems.filter(e).toArray())i(t);for(const t of this.basemapExtension.referenceLayerExtensions.initializedItems.filter(e).toArray())i(t)}return t}isSupportedViewMode(e){return e===this.viewMode||!(!this.webMap&&!this.webScene)&&("scene"===e?!!this.webScene:!!this.webMap)}async switchViewMode(e){if(checkArg("viewMode",e).isNotMissing().satisfies((e=>this.isSupportedViewMode(e)),"Unsupported view mode."),this.viewMode===e)return;let t;"scene"===e?(await this._createScene(),t=this._scene):(await this._createMap(),t=this._map),t.basemap=this.map.basemap,await this.switchMap(t),this.notifyChange("viewMode"),this.notifyChange("title")}async switchMap(e){if(checkArg("newMap",e).isNotMissing(),e===this.map)return;if(!this.map)return void this._setMap(e);this.isSwitchingMap=!0,this.isInitialized&&await load(e);const t=new Map;this.map.layers.forEach((e=>t.set(e,this.layerExtensions.forLayer(e))));const{basemapExtension:i}=this;this._setMap(e),this._updateBookmarks();const s=[];for(const e of this.map.layers.toArray()){const i=find(t.entries(),(([t])=>layersAreEquivalent(t,e)));if(i)s.push((async()=>{const t=i[1];await t._switchLayer(e),this._layerExtensions._register(t)})());else{const t=this._layerExtensions._forLayer(e);t?.layer!==e&&s.push(t._switchLayer(e))}}this.map.basemap&&i&&basemapsAreEquivalent(this.map.basemap,i.basemap)&&s.push((async()=>{await i._switchBasemap(this.map.basemap),this.basemapExtension=i})()),this.isInitialized&&s.push(this._initializeChildren()),await Promise.all(s),this.isSwitchingMap=!1}async setWebMap(e){if(!e&&this.webMap&&!this.webScene)throw new InvalidOperationError("Cannot unset both webMap and webScene.");this._webMap=e,this._map=void 0,this._createMapPromise=void 0,this._webMapItem=toPortalItem(e),await load(this._webMapItem),"map"===this.viewMode&&(e?(this._basemapOptions.isExplicitlyModified||this._basemapOptions.removeAllInternal(),await this._createMap(),await this.switchMap(this._map),await this._createStandardBasemapOptions(),this._basemapOptions.reorderInternal(this.basemapExtension,0),this._initialBasemapExtension=this.basemapExtension):await this.switchViewMode("scene")),this.notifyChange("webMap"),this.notifyChange("initialViewMode"),this.notifyChange("title")}async setWebScene(e){if(!e&&this.webScene&&!this.webMap)throw new InvalidOperationError("Cannot unset both webMap and webScene.");this._webScene=e,this._scene=void 0,this._createScenePromise=void 0,this._webSceneItem=toPortalItem(e),await load(this._webSceneItem),"scene"===this.viewMode&&(e?(this._basemapOptions.isExplicitlyModified||this._basemapOptions.removeAllInternal(),await this._createScene(),await this.switchMap(this._scene),await this._createStandardBasemapOptions(),this._basemapOptions.reorderInternal(this.basemapExtension,0),this._initialBasemapExtension=this.basemapExtension):await this.switchViewMode("map")),this.notifyChange("webScene"),this.notifyChange("initialViewMode"),this.notifyChange("title")}getDefaults(){const e=super.getDefaults();return e.initialViewMode="map",e}async _createScene(){if(!this._scene&&this.webScene)return this._createScenePromise=this._createScenePromise??(async()=>{if(isPortalItem(this.webScene)){const e=new((await import("@arcgis/core/WebScene")).default);await this._loadAndApplyPortalItemData(this._webSceneItem,e),this._scene=e}else this._scene=await WebSceneJson.toEsriApiWebScene(this.webScene)})()}async _createMap(){if(!this._map&&this.webMap)return this._createMapPromise=this._createMapPromise??(async()=>{if(isPortalItem(this.webMap)){const e=new((await import("@arcgis/core/WebMap")).default);await this._loadAndApplyPortalItemData(this._webMapItem,e),this._map=e}else this._map=await WebMapJson.toEsriApiWebMap(this.webMap)})()}_getSerializableProperties(){return{...super._getSerializableProperties(),layerExtensions:{serializeModes:["initial","project"],deserialize:e=>{if(this.map&&e){const t=("map"===this.viewMode?this._scene:this._map)?.layers.toArray()??[],i=e.filter((e=>!t.includes(e.layer)&&!t.some((t=>e.layer&&(LayerExtension._matchesRef(t,e.layer)||layersAreEquivalent(t,e.layer))))));_assignLayerExtensions(this.layerExtensions,i)}},serialize:e=>{if(this._deferredProperties?.layerExtensions)return this._deferredProperties.layerExtensions;{const t="map"===this.viewMode,i=(t?this._map:this._scene)?.layers.toArray();let s=(t?this._scene:this._map)?.layers.toArray()??[];return s=s.filter((e=>!i.find((t=>layersAreEquivalent(t,e))))),this.layerExtensions.concat(s.map((e=>this._layerExtensions._forLayer(e)))).filter((t=>!(t instanceof UnsupportedLayerExtension||"initial"===e)||!t.dynamicallyAddedLayer)).toArray()}}},tableExtensions:{serializeModes:["initial","project"],deserialize:e=>{this.map?compare(this.tableExtensions,e,{onNew:(e,t)=>{this.tableExtensions.add(isTableExtension(e)?e:TableExtension.create(e),t)},onMatch:(e,t,i,s)=>{isTableExtension(t)||e.assignProperties(t),i!==s&&this.tableExtensions.reorder(e,s)},equals:(e,t)=>isTableExtension(t)?t===e:!!TableExtension._matchesRef(e,t.table)||e.id===t.id}):this._deferredProperties={...this._deferredProperties,tableExtensions:e}},serialize:()=>this._deferredProperties?.tableExtensions?this._deferredProperties?.tableExtensions:this.tableExtensions.toArray()},basemapExtension:{serializeModes:["project"],deserialize:e=>{this.map?e?isBasemapExtension(e)?this.basemapExtension=e:this.basemapExtension?this.basemapExtension.assignProperties(e):this.basemapExtension=BasemapExtension.create(e):this.basemapExtension=void 0:this._deferredProperties={...this._deferredProperties,basemapExtension:e}},serialize:()=>this._deferredProperties?.basemapExtension?this._deferredProperties?.basemapExtension:this.basemapExtension},basemapOptions:{serializeModes:["initial"],deserialize:e=>{this._skipBasemapOptions?this._skipBasemapOptions=!1:(compare(this.basemapOptions,e,{onNew:(e,t)=>{this.basemapOptions.add(isBasemapExtension(e)?e:BasemapExtension.create(e),t)},onMatch:(e,t,i,s)=>{isBasemapExtension(t)||e.assignProperties(t),i!==s&&this.basemapOptions.reorder(e,s)},onMissing:e=>{this.basemapOptions.remove(e)},equals:(e,t)=>{if(isBasemapExtension(t))return t===e;if(e.id&&t.id)return e.id===t.id;{const i=e.toJSON();return basemapsAreEquivalent(i.basemap,t.basemap||t.baseMap)}}}),this.basemapExtension&&this._ensureIsBasemapOption(this.basemapExtension),this.isInitialized&¶llelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap())))},serialize:()=>this._deferredProperties?.basemapOptions?this._deferredProperties?.basemapOptions:this.basemapOptions.toArray()},groundExtension:{serializeModes:["initial"],deserialize:e=>{this.map?isGroundExtension(e)?this.groundExtension=e:this.groundExtension.assignProperties(e):this._deferredProperties={...this._deferredProperties,groundExtension:e}},serialize:()=>this._deferredProperties?.groundExtension?this._deferredProperties?.groundExtension:this.groundExtension},bookmarks:{serialize:()=>this.bookmarks.map((e=>e.toJSON())).toArray(),deserialize:e=>{this.bookmarks.addMany(e.map((e=>isBookmark(e)?e:new Bookmark(e))))}},webMap:{serializeModes:["initial"],deserialize:!1},webScene:{serializeModes:["initial"],deserialize:!1},initialLayerPreset:"initial",initialViewMode:{serializeModes:["initial","project"],serialize:e=>"project"===e?this.viewMode:"scene"!==this.initialViewMode||!this.webScene&&this.webMap?"map":"scene",deserialize:e=>{this.viewMode!==e&&(this._deserializedViewMode=e),this._initialViewMode=e},isDefault:(e,t)=>"project"!==t&&"map"===e},formatSettings:"initial",constraints:"initial",title:"initial",onClick:"initial",onHover:"initial",onHoverEnd:"initial",onInitialized:"initial",onViewpointChanged:"initial",contextMenu:{serializeModes:["initial"],deserialize:e=>{e?isMenu(e)?this.contextMenu=e:this.contextMenu?this.contextMenu.assignProperties(e):this.contextMenu=Menu.create(e):this.contextMenu=void 0}},map:{serializeModes:["project"],serialize:()=>({operationalLayers:this.layerExtensions.toArray().filter((e=>e.layer)).map((e=>e._getProjectWebmapJSON())),tables:this.tableExtensions.toArray().filter((e=>e.table)).map((e=>({id:e.table.id,title:e.table.title})))}),deserialize:e=>{if(this.map)if(isMap(e)||isWebMap(e)||isWebScene(e)){if(e!==this.map)throw new ArgumentError("properties.map","Property 'map' is read-only.")}else this._deserializedMapPromise=(async()=>{this._deserializedViewMode&&this.webMap&&this.webScene&&(this._deserializedViewModePromise=this.switchViewMode(this._deserializedViewMode),await this._deserializedViewModePromise,this._deserializedViewMode=void 0,this._deserializedViewModePromise=void 0),await this._applyMapProperties(e,this.map),this._deserializedMapPromise=void 0})();else this._deferredProperties={...this._deferredProperties,map:e}}},requestHelper:{serialize:!1}}}async _applyMapProperties(e,t,i){await parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap()));let s=e;const a=this.basemapOptions.find((e=>basemapsAreEquivalent(e.basemap,s.baseMap)));a&&(t.basemap=a.basemap,s={...s,baseMap:{...s.baseMap,title:t.basemap.title}}),isWebScene(t)?await WebSceneJson.applyToEsriApiWebScene(s,t,i):await WebMapJson.applyToEsriApiMap(s,t,i)}_createFormatSettings(){return new FormatSettings}_createLayerExtensionCollection(){return new LayerExtensionCollectionImpl(this)}_createTableExtensionCollection(){return new TableExtensionCollectionImpl(this)}async _onInitialize(){await super._onInitialize();const{basemapExtension:e,basemapOptions:t,groundExtension:i,webMap:s,webScene:a,map:n,...r}=this._deferredProperties??{};if(t&&this.assignProperties({basemapOptions:t}),this.map||("scene"===this.initialViewMode?this._setMap(new((await import("@arcgis/core/WebScene")).default)):this._setMap(new((await import("@arcgis/core/WebMap")).default))),this.map.basemap&&this._onBasemapChange(),(s||a)&&await this._applyMapProperties("scene"===this.initialViewMode?a:s,this.map),e&&(this.assignProperties({basemapExtension:e}),await this.basemapExtension._createBackingBasemap()),i&&this.assignProperties({groundExtension:i}),this._webMapItem||this._webSceneItem){await Promise.all([load(this.map),load(this._webMapItem),load(this._webSceneItem)]),validatePortalItem(this._webMapItem,"webMap","Web Map"),validatePortalItem(this._webSceneItem,"webScene","Web Scene");const e=isWebScene(this.map)?this._webSceneItem:this._webMapItem;await this._loadAndApplyPortalItemData(e)}else await load(this.map);n&&await this._applyMapProperties(n,this.map),this.assignProperties(r),this._deferredProperties=void 0,this._initialBasemapExtension=this.basemapExtension,this._updateBookmarks(),this.contextMenu&&await this.contextMenu.initialize();for(const e of this.layerExtensions.toArray())await e._createBackingLayer();await Promise.all(this.tableExtensions.map((e=>e._createBackingTable())).toArray())}async _postInitialize(){await super._postInitialize(),await this._createStandardBasemapOptions(),await parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap())),this.initialLayerPreset&&await this.initialLayerPreset.applyTo(this)}*_initializableChildCollections(){yield*super._initializableChildCollections();const e=new Collection(this.layerExtensions.filter((e=>!!e.layer)));e.remove=e=>{this.layerExtensions.remove(e)};const t=new Collection(this.tableExtensions.filter((e=>!!e.table)));if(t.remove=e=>{this.tableExtensions.remove(e)},yield e,yield t,this.basemapExtension){const e=new Collection;e.add(this.basemapExtension),yield e}const i=new Collection;i.add(this.groundExtension),yield i}_initMapFromProperties(e){const t=e.map;isMap(t)||isWebMap(t)||isWebScene(t)?this._setMap(t):"scene"===this.initialViewMode?e.webScene&&!isPortalItem(e.webScene)&&(this._deferredProperties={webScene:e.webScene,...this._deferredProperties}):e.webMap&&!isPortalItem(e.webMap)&&(this._deferredProperties={webMap:e.webMap,...this._deferredProperties})}_setMap(e){isWebScene(e)?this._scene=e:this._map=e,this._currentMap=e,this.basemapExtension?.basemap&&!e.basemap&&(e.basemap=this.basemapExtension.basemap),this.groundExtension?.ground&&!e.ground&&(e.ground=this.groundExtension.ground),this.notifyChange("map")}async _loadAndApplyPortalItemData(e,t){await load(e);const i=await e.fetchData();resolveRelativeHrefs(i,e),await this._inferLayerTypes(i),this.basemapExtension?.basemap&&!t&&delete i.baseMap,GroundExtension.isDefaultGround(this.groundExtension.ground)||t||delete i.ground;const s=t||this.map;await load(s),await this._applyMapProperties(i,s,e),s.portalItem=e;const{viewpoint:a,spatialReference:n}=s.initialViewProperties;a&&a.targetGeometry&&!a.targetGeometry.spatialReference.equals(n)&&(s.initialViewProperties.viewpoint.targetGeometry=(await project([a.targetGeometry],n))[0]),a&&a.camera&&(a.camera.position.spatialReference=n.clone())}_onBasemapChange(){if(this._basemapExtension){if(this.basemapExtension.basemap==this.map.basemap)return;this._basemapExtension._setMapExtension(void 0)}if(this.map.basemap){let e=this.basemapOptions.find((e=>e.basemap===this.map.basemap));e||(e=BasemapExtension.create({basemap:this.map.basemap}),this._basemapOptions.addInternal(e,0)),e.mapExtension!==this&&e._setMapExtension(this),this._basemapExtension=e}else this._basemapExtension=void 0;this.notifyChange("basemapExtension")}_onGroundChange(){if(this._groundExtension){if(this.groundExtension.ground===this.map.ground)return void(this._groundExtensions.has(this.map.ground)||this._groundExtensions.set(this.map.ground,this.groundExtension));this.groundExtension._setMapExtension(void 0)}this._groundExtensions.has(this.map.ground)||this._groundExtensions.set(this.map.ground,new GroundExtension({ground:this.map.ground}));const e=this._groundExtensions.get(this.map.ground);e.mapExtension!==this&&e._setMapExtension(this),this._groundExtension=e,this.notifyChange("groundExtension")}async _inferLayerTypes(e){const t=[];if(e.operationalLayers)for(const i of e.operationalLayers)t.push(this._inferLayerType(i));if(e.baseMap&&t.push(this._inferBasemapLayerTypes(e.baseMap)),e.hasOwnProperty("ground")&&t.push(this._inferGroundLayerTypes(e.ground)),e.presentation?.slides)for(const i of e.presentation.slides)i.baseMap&&"string"!=typeof i.baseMap&&t.push(this._inferBasemapLayerTypes(i.baseMap));await Promise.all(t)}async _inferBasemapLayerTypes(e){const t=[];if(e.baseMapLayers)for(const i of e.baseMapLayers)t.push(this._inferLayerType(i));await Promise.all(t)}async _inferGroundLayerTypes(e){const t=[];if(e.layers)for(const i of e.layers)t.push(this._inferLayerType(i));await Promise.all(t)}async _inferLayerType(e){if(!e.layerType)if(e.type)e.layerType=e.type;else if(e.url){const t=e.url;if(t.match(".*MapServer/\\d{1,}/?$")||t.match(".*FeatureServer/\\d{1,}/?$"))e.layerType="ArcGISFeatureLayer";else if(t.match(".*StreamServer/?$"))e.layerType="ArcGISStreamLayer";else if(t.match(".*ImageServer/?$")){const i=await this._getLayerData(t);i.cacheType?"Map"===i.cacheType?e.layerType="ArcGISTiledImageServiceLayer":"Elevation"===i.cacheType&&(e.layerType="ArcGISTiledElevationServiceLayer"):e.layerType="ArcGISImageServiceLayer"}else if(t.match(".*MapServer/?$")){const i=await this._getLayerData(t);e.layerType=i.tileInfo?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer"}else if(t.match(".*\\.(csv|txt)$"))e.layerType="CSV";else if(t.match(".*\\.kml$"))e.layerType="KML";else if(t.match(".*SceneServer/layers/\\d{1,}/?$")){const i=await this._getLayerData(t);"3DObject"===i.layerType?e.layerType="ArcGISSceneServiceLayer":"IntegratedMesh"===i.layerType?e.layerType="IntegratedMeshLayer":"PointCloud"===i.layerType&&(e.layerType="PointCloudLayer")}else t.match(".*(\\.xml|rss/?)$")&&(e.layerType="GeoRSS")}else if(e.layers){e.layerType="GroupLayer";const t=[];for(const i of e.layers)t.push(this._inferLayerType(i));await Promise.all(t)}else e.templateUrl&&e.tileInfo?e.layerType="WebTiledLayer":e.featureCollection?e.layerType="ArcGISFeatureLayer":e.styleUrl?e.layerType="VectorTileLayer":e.mapUrl&&(e.layerType="WMS")}async _getLayerData(e){const t=await this.requestHelper.request(e,{query:{f:"json"}});if(!t||!t.data)throw new Error(`Response to request for url ${e} was invalid.`);return t.data}async _createStandardBasemapOptions(){const e=this._spatialReference;!this._basemapOptions.isExplicitlyModified&&e&&e.isWebMercator&&await parallelEach([WellKnownBasemap.SATELLITE,WellKnownBasemap.HYBRID_VECTOR,WellKnownBasemap.STREETS_VECTOR,WellKnownBasemap.TOPO_VECTOR,WellKnownBasemap.STREETS_NAVIGATION_VECTOR,WellKnownBasemap.STREETS_NIGHT_VECTOR,WellKnownBasemap.TERRAIN_VECTOR,WellKnownBasemap.DARK_GRAY_VECTOR,WellKnownBasemap.GRAY_VECTOR,WellKnownBasemap.OCEANS_VECTOR,WellKnownBasemap.OPEN_STREET_MAP_VECTOR],(async e=>{const t=await createStandardBasemap(e);basemapsAreEquivalent(this.map.basemap,t)?this._basemapOptions.addInternal(this.basemapExtension):this._basemapOptions.addInternal(BasemapExtension.create({basemap:t}),void 0,!1)}))}_ensureIsBasemapOption(e){const t=this.basemapOptions.findIndex((t=>t.basemap===e.basemap));t>=0?this._basemapOptions.getItemAt(t)!==e&&(this._basemapOptions.removeAtInternal(t),this._basemapOptions.addInternal(e,t)):this._basemapOptions.addInternal(e,0)}_updateBookmarks(){this.bookmarks.removeMany(this.bookmarks.filter((e=>"map"===e.source))),isWebMap(this.map)&&this.map.bookmarks?.length>0?this.map.bookmarks.forEach((e=>{this.bookmarks.add(new Bookmark({source:"map",title:e.name,viewpoint:e.viewpoint}))})):isWebScene(this.map)&&this.map.presentation?.slides?.length>0&&this.map.presentation.slides.forEach((e=>{const t={source:"map",title:e.title.text,viewpoint:e.viewpoint},i=new Bookmark(t);this.bookmarks.add(i)}))}};MapExtension=__decorate([serializable],MapExtension);export{MapExtension};class LayerExtensionCollectionImpl extends LayerExtensionCollectionBase{constructor(e){super(e,"map.layers")}get _mapExtension(){return this._parent}toJSON(){const e=[];return this.forEach((t=>{e.push(`item://${encodeURIComponent(ItemType.LAYER_EXTENSION)}/${encodeURIComponent(t.id)}`)})),e}}class BasemapExtensionCollection extends InitializableCollectionProxy{constructor(e){super(new Collection),this.isExplicitlyModified=!1,this._mapExtension=e}add(e,t){super.add(e,t),this.isExplicitlyModified=!0,1===this.length&&this._mapExtension.map&&!this._mapExtension.basemapExtension&&(this._mapExtension.basemapExtension=e)}addMany(e,t){super.addMany(e,t),this.isExplicitlyModified=!0}addInternal(e,t,i=!0){const s=e=>{const t="-vector";return e?.endsWith(t)?e.substring(0,e.length-t.length):e};let a;if(e.basemap){const t=s(e.basemap.id);if(a=this.findIndex((e=>s(e.basemap?.id)===t)),isStandardBasemap(e.basemap)&&a>=0){if(!i)return;super.removeAt(a)}}super.add(e,t??(a>=0?a:void 0))}removeAt(e){const t=super.removeAt(e);return t&&(this.isExplicitlyModified=!0,t===this._mapExtension.basemapExtension&&(e<this.length?this._mapExtension.basemapExtension=this.getItemAt(e):this.length?this._mapExtension.basemapExtension=this.getItemAt(e-1):this._mapExtension.basemapExtension=void 0)),t}removeAll(){this._mapExtension.basemapExtension=void 0,super.removeAll()}removeAtInternal(e){return super.removeAt(e)}removeAllInternal(){for(;this.length;)this.removeAtInternal(this.length-1)}reorder(e,t){return super.reorder(e,t),this.isExplicitlyModified=!0,e}reorderInternal(e,t){return super.reorder(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.basemap}}class TableExtensionCollectionImpl extends InitializableCollectionProxy{constructor(e){super(),this._tableExtensionMap=new WeakMap,this._uninitializedTableExtensions=new Set,this._mapExtension=e,onCollectionPropertyChange(this._mapExtension,"map.tables",(e=>{const t={added:(e.added||[]).map((e=>this._forTable(e))),moved:(e.moved||[]).map((e=>this._forTable(e))),removed:(e.removed||[]).map((e=>this._forTable(e))),target:this};this.emit("change",t)})),this._mapExtension.watch("map.tables.length",(()=>this.notifyChange("length")))}get _collection(){return this._tables.map((e=>this._forTable(e))).concat(Array.from(this._uninitializedTableExtensions))}get _tables(){return this._mapExtension.map?.tables??new ReadOnlyCollection(new Collection)}toJSON(){const e=[];return this.forEach((t=>{e.push(`item://${encodeURIComponent(ItemType.TABLE_EXTENSION)}/${encodeURIComponent(t.id)}`)})),e}clone(){const e=new TableExtensionCollectionImpl(this._mapExtension);return e._tableExtensionMap=this._tableExtensionMap,e}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findByTableId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.table.id===e))}forTable(e){if(checkArg("table",e).isNotMissing(),this._tables.includes(e))return this._forTable(e)}add(e,t){if(checkArg("tableX",e).isNotMissing(),e.mapExtension&&e.mapExtension.tableExtensions.remove(e),e._setMapExtension(this._mapExtension),e.table){const i=this._tableExtensionMap.get(e.table);if(this._tableExtensionMap.set(e.table,e),i&&i!==e&&this._onRemoved(i),this._tables.includes(e.table))if(void 0===t){const t={added:[e],moved:[],removed:i?[i]:[],target:this};this.emit("change",t)}else this._tables.reorder(e.table,t);else this._tables.add(e.table,t)}else{this._uninitializedTableExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("change",t)}this._onAdded(e)}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedTableExtensions.has(t)){this._uninitializedTableExtensions.delete(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("change",e)}else this._tables.remove(t.table);return this._onRemoved(t),t}}reorder(e,t){if(e&&this._tables.includes(e.table))return this._tables.reorder(e.table,t),e}sort(e){this._tables.sort(((t,i)=>e(this._forTable(t),this._forTable(i))))}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.table}_onAdded(e){}_onRemoved(e){e._setMapExtension(void 0)}_forTable(e){for(const e of this._uninitializedTableExtensions)e._resolveTable(),e.table&&(this._tableExtensionMap.set(e.table,e),this._uninitializedTableExtensions.delete(e));if(!this._tableExtensionMap.has(e)){const t=TableExtension.create({table:e});this._tableExtensionMap.set(e,t),t._setMapExtension(this._mapExtension),this._onAdded(t)}return this._tableExtensionMap.get(e)}}class AllLayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._mapExtension=e}get _collection(){let e=this._mapExtension.layerExtensions.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[]));return this._mapExtension.basemapExtension&&(e=e.concat(this._mapExtension.basemapExtension.baseLayerExtensions.toArray()).concat(this._mapExtension.basemapExtension.referenceLayerExtensions.toArray())),e=e.concat(this._mapExtension.groundExtension.layerExtensions.toArray()),e}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findByLayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.layer.id===e))}forLayer(e){return checkArg("layer",e).isNotMissing(),this.findByLayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const s=i.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray(),a=new Collection;a.addMany(t.removed);const n=a.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray(),r=new Collection;r.addMany(t.moved);const o=r.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray();super.emit(e,{added:s,removed:n,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.layer}}function toPortalItem(e){if("object"!=typeof e||!e||!e.baseMap)return toPortalItemBase(e)}function isPortalItem(e){return"object"!=typeof e||e&&!e.baseMap}function validatePortalItem(e,t,i){if(e?.type&&e.type!==i)throw new Error(`Invalid portal item type "${e.type}" for property ${t}.`)}
|
|
1
|
+
import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{EntityBase}from"../Entity.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{isBasemapExtension,isBookmark,isGroundExtension,isLayerPreset,isMenu,isTableExtension,ItemType}from"../ItemType.js";import{TableExtension}from"../data/TableExtension.js";import{LayerPreset}from"../layer-preset/LayerPreset.js";import{Menu}from"../menus/Menu.js";import{WebMap as WebMapJson}from"../portal/WebMap.js";import{WebScene as WebSceneJson}from"../portal/WebScene.js";import{resolveRelativeHrefs}from"../portal/_utils.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{FormatSettings}from"../support/FormatSettings.js";import{InitializableCollectionProxy}from"../support/InitializableCollectionProxy.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{WellKnownBasemap}from"../support/esri.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{basemapsAreEquivalent,createStandardBasemap,isStandardBasemap}from"../utilities/basemaps.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{project}from"../utilities/geometry.js";import{find}from"../utilities/iterable.js";import{layersAreEquivalent}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{getMapSpatialReference,isMap,isWebMap,isWebScene}from"../utilities/mapping.js";import{toPortalItem as toPortalItemBase}from"../utilities/portal.js";import{parallelEach}from"../utilities/promise.js";import{onCollectionPropertyChange,onEach}from"../utilities/watch.js";import{BasemapExtension}from"./BasemapExtension.js";import{Bookmark}from"./Bookmark.js";import{GroundExtension}from"./GroundExtension.js";import{MapConstraints}from"./MapConstraints.js";import{UnsupportedLayerExtension}from"./UnsupportedLayerExtension.js";import{_assignLayerExtensions,LayerExtension}from"./_LayerExtension.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("MapExtension");let MapExtension=class extends EntityBase{constructor(e){super(e),this.isSwitchingMap=!1,this._layerViews=new Collection,this._itemType=ItemType.MAP_EXTENSION,this._skipBasemapOptions=!1;let t={...e};this._basemapOptions=new BasemapExtensionCollection(this),this._groundExtensions=new WeakMap,this._layerExtensions=this._createLayerExtensionCollection(),this.tableExtensions=this._createTableExtensionCollection(),this.formatSettings=this._createFormatSettings(),this._bookmarks=new Collection,this.constraints=new MapConstraints,this.watch(["_map","_scene"],(e=>{e&&(onEach(e.layers,"layerview-create",(e=>{this._layerViews.add(e.layerView)})),onEach(e.layers,"layerview-destroy",(e=>{this._layerViews.remove(e.layerView)})))}));const{webMap:i,webScene:s,initialViewMode:a,map:n,basemapOptions:r}=t;if(this._webMap=i,this._webScene=s,this._webMapItem=toPortalItem(i),this._webSceneItem=toPortalItem(s),this.initialViewMode=a,isWebScene(n)&&s)throw new ArgumentError("Cannot specify webScene property if map is initialized to a WebScene instance.");if(isMap(n)&&i)throw new ArgumentError("Cannot specify webMap property if map is initialized to a 2D Map instance.");if(isWebScene(n)||isWebMap(n)||isMap(n))this.assignProperties({basemapOptions:r}),this._skipBasemapOptions=!!r;else{const{map:e,layerExtensions:i,tableExtensions:s,groundExtension:a,basemapOptions:n,basemapExtension:r,...o}=t;this._deferredProperties={map:e,layerExtensions:i,tableExtensions:s,groundExtension:a,basemapOptions:n,basemapExtension:r},t=o,n&&(this._skipBasemapOptions=!0)}this._initMapFromProperties(t),this.watch("map.basemap",(()=>this._onBasemapChange()),!0),this.watch("map.ground",(()=>this._onGroundChange()),!0),this.allLayerExtensions=new AllLayerExtensionCollectionImpl(this),this.map?.basemap&&this._onBasemapChange()}get webMap(){return this._webMap}get webScene(){return this._webScene}get map(){return this._currentMap}get viewMode(){return this.map?isWebScene(this.map)?"scene":"map":this.initialViewMode}get initialViewMode(){return this.webMap&&this.webScene?this._initialViewMode||"map":isWebScene(this.map)||this.webScene&&!this.webMap?"scene":"map"}set initialViewMode(e){this._initialViewMode=e}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get basemapExtension(){return this._basemapExtension}set basemapExtension(e){const t=this._basemapExtension;if(t!==e)if(t&&t._setMapExtension(void 0),e){if(e._setMapExtension(this),this.isInitialized&&!e.basemap){if(e.isInitialized)throw e._setMapExtension(void 0),new InvalidOperationError("Cannot set MapExtension.basemapExtension without a valid Esri Basemap object");e.initialize()}this._ensureIsBasemapOption(e),this.map&&e.basemap&&e.basemap!==this.map.basemap?this.map.basemap=e.basemap:this._basemapExtension=e}else this.map.basemap=void 0,this._basemapExtension=void 0}get groundExtension(){return this._groundExtension||(this.groundExtension=new GroundExtension({ground:this.map?.ground})),this._groundExtension}set groundExtension(e){if(!e)throw new InvalidOperationError("Cannot set map.ground to undefined");const t=this._groundExtension;t!==e&&(t&&t._setMapExtension(void 0),e._setMapExtension(this),e._resolveGround(),e.ground?(this._groundExtensions.set(e.ground,e),this.map&&e.ground!==this.map.ground?this.map.ground=e.ground:this._groundExtension=e):this._groundExtension=e)}get basemapOptions(){return this._basemapOptions}get bookmarks(){return this._bookmarks}get initialBasemapExtension(){return this._initialBasemapExtension}get initialLayerPreset(){return this._initialLayerPreset}set initialLayerPreset(e){if(!e)return void(this._initialLayerPreset=void 0);const t=isLayerPreset(e)?e:new LayerPreset(e);this._initialLayerPreset=t}get _spatialReference(){return getMapSpatialReference(this.map)}get webMapItemTitle(){if(this._webMapItem)return this._webMapItem.title}get webSceneItemTitle(){if(this._webSceneItem)return this._webSceneItem.title}get title(){return this._title?this._title:this._webMapItem&&"map"===this.viewMode?this.webMapItemTitle:this._webSceneItem&&"scene"===this.viewMode?this.webSceneItemTitle:void 0}set title(e){this._title=e}get contextMenu(){return this._contextMenu}set contextMenu(e){this._contextMenu=e,e&&this.isInitialized&&!e.isInitialized&&(async()=>{try{await e.initialize()}catch(e){e instanceof Error&&log.error({message:"An error occurred while initializing context menu.",error:e})}})()}get _allLayerViews(){const e=t=>{const i=[t];return Collection.isCollection(t.sublayerViews)?i.push(...t.sublayerViews.toArray().flatMap(e)):Collection.isCollection(t.layerViews)&&i.push(...t.layerViews.toArray().flatMap(e)),i};return this._layerViews.toArray().flatMap(e)}get layerExtensions(){return this._layerExtensions}getAllFeatureSources(e=(()=>!0)){const t=[],i=a=>{a.hasFeatures&&t.push(a);for(const t of a.sublayerExtensions.initializedItems.filter(e).toArray())s(t);if(isGroupLayerExtension(a))for(const t of a.layerExtensions.initializedItems.filter(e).toArray())i(t)},s=i=>{t.push(i);for(const t of i.sublayerExtensions.initializedItems.filter(e).toArray())s(t)};for(const t of this.layerExtensions.initializedItems.filter(e).toArray())i(t);for(const i of this.tableExtensions.initializedItems.filter(e).toArray())t.push(i);if(this.basemapExtension){for(const t of this.basemapExtension.baseLayerExtensions.initializedItems.filter(e).toArray())i(t);for(const t of this.basemapExtension.referenceLayerExtensions.initializedItems.filter(e).toArray())i(t)}return t}isSupportedViewMode(e){return e===this.viewMode||!(!this.webMap&&!this.webScene)&&("scene"===e?!!this.webScene:!!this.webMap)}async switchViewMode(e){if(checkArg("viewMode",e).isNotMissing().satisfies((e=>this.isSupportedViewMode(e)),"Unsupported view mode."),this.viewMode===e)return;let t;"scene"===e?(await this._createScene(),t=this._scene):(await this._createMap(),t=this._map),t.basemap=this.map.basemap,await this.switchMap(t),this.notifyChange("viewMode"),this.notifyChange("title")}async switchMap(e){if(checkArg("newMap",e).isNotMissing(),e===this.map)return;if(!this.map)return void this._setMap(e);this.isSwitchingMap=!0,this.isInitialized&&await load(e);const t=new Map;this.map.layers.forEach((e=>t.set(e,this.layerExtensions.forLayer(e))));const{basemapExtension:i}=this;this._setMap(e),this._updateBookmarks();const s=[];for(const e of this.map.layers.toArray()){const i=find(t.entries(),(([t])=>layersAreEquivalent(t,e)));if(i)s.push((async()=>{const t=i[1];await t._switchLayer(e),this._layerExtensions._register(t)})());else{const t=this._layerExtensions._forLayer(e);t?.layer!==e&&s.push(t._switchLayer(e))}}this.map.basemap&&i&&basemapsAreEquivalent(this.map.basemap,i.basemap)&&s.push((async()=>{await i._switchBasemap(this.map.basemap),this.basemapExtension=i})()),this.isInitialized&&s.push(this._initializeChildren()),await Promise.all(s),this.isSwitchingMap=!1}async setWebMap(e){if(!e&&this.webMap&&!this.webScene)throw new InvalidOperationError("Cannot unset both webMap and webScene.");this._webMap=e,this._map=void 0,this._createMapPromise=void 0,this._webMapItem=toPortalItem(e),await load(this._webMapItem),"map"===this.viewMode&&(e?(this._basemapOptions.isExplicitlyModified||this._basemapOptions.removeAllInternal(),await this._createMap(),await this.switchMap(this._map),await this._createStandardBasemapOptions(),this._basemapOptions.reorderInternal(this.basemapExtension,0),this._initialBasemapExtension=this.basemapExtension):await this.switchViewMode("scene")),this.notifyChange("webMap"),this.notifyChange("initialViewMode"),this.notifyChange("title")}async setWebScene(e){if(!e&&this.webScene&&!this.webMap)throw new InvalidOperationError("Cannot unset both webMap and webScene.");this._webScene=e,this._scene=void 0,this._createScenePromise=void 0,this._webSceneItem=toPortalItem(e),await load(this._webSceneItem),"scene"===this.viewMode&&(e?(this._basemapOptions.isExplicitlyModified||this._basemapOptions.removeAllInternal(),await this._createScene(),await this.switchMap(this._scene),await this._createStandardBasemapOptions(),this._basemapOptions.reorderInternal(this.basemapExtension,0),this._initialBasemapExtension=this.basemapExtension):await this.switchViewMode("map")),this.notifyChange("webScene"),this.notifyChange("initialViewMode"),this.notifyChange("title")}getDefaults(){const e=super.getDefaults();return e.initialViewMode="map",e}async _createScene(){if(!this._scene&&this.webScene)return this._createScenePromise=this._createScenePromise??(async()=>{if(isPortalItem(this.webScene)){const e=new((await import("@arcgis/core/WebScene")).default);await this._loadAndApplyPortalItemData(this._webSceneItem,e),this._scene=e}else this._scene=await WebSceneJson.toEsriApiWebScene(this.webScene)})()}async _createMap(){if(!this._map&&this.webMap)return this._createMapPromise=this._createMapPromise??(async()=>{if(isPortalItem(this.webMap)){const e=new((await import("@arcgis/core/WebMap")).default);await this._loadAndApplyPortalItemData(this._webMapItem,e),this._map=e}else this._map=await WebMapJson.toEsriApiWebMap(this.webMap)})()}_getSerializableProperties(){return{...super._getSerializableProperties(),layerExtensions:{serializeModes:["initial","project"],deserialize:e=>{if(this.map&&e){const t=("map"===this.viewMode?this._scene:this._map)?.layers.toArray()??[],i=e.filter((e=>!t.includes(e.layer)&&!t.some((t=>e.layer&&(LayerExtension._matchesRef(t,e.layer)||layersAreEquivalent(t,e.layer))))));_assignLayerExtensions(this.layerExtensions,i)}},serialize:e=>{if(this._deferredProperties?.layerExtensions)return this._deferredProperties.layerExtensions;{const t="map"===this.viewMode,i=(t?this._map:this._scene)?.layers.toArray();let s=(t?this._scene:this._map)?.layers.toArray()??[];return s=s.filter((e=>!i.find((t=>layersAreEquivalent(t,e))))),this.layerExtensions.concat(s.map((e=>this._layerExtensions._forLayer(e)))).filter((t=>!(t instanceof UnsupportedLayerExtension||"initial"===e)||!t.dynamicallyAddedLayer)).toArray()}}},tableExtensions:{serializeModes:["initial","project"],deserialize:e=>{this.map?compare(this.tableExtensions,e,{onNew:(e,t)=>{this.tableExtensions.add(isTableExtension(e)?e:TableExtension.create(e),t)},onMatch:(e,t,i,s)=>{isTableExtension(t)||e.assignProperties(t),i!==s&&this.tableExtensions.reorder(e,s)},equals:(e,t)=>isTableExtension(t)?t===e:!!TableExtension._matchesRef(e,t.table)||e.id===t.id}):this._deferredProperties={...this._deferredProperties,tableExtensions:e}},serialize:()=>this._deferredProperties?.tableExtensions?this._deferredProperties?.tableExtensions:this.tableExtensions.toArray()},basemapExtension:{serializeModes:["project"],deserialize:e=>{this.map?e?isBasemapExtension(e)?this.basemapExtension=e:this.basemapExtension?this.basemapExtension.assignProperties(e):this.basemapExtension=BasemapExtension.create(e):this.basemapExtension=void 0:this._deferredProperties={...this._deferredProperties,basemapExtension:e}},serialize:()=>this._deferredProperties?.basemapExtension?this._deferredProperties?.basemapExtension:this.basemapExtension},basemapOptions:{serializeModes:["initial"],deserialize:e=>{this._skipBasemapOptions?this._skipBasemapOptions=!1:(compare(this.basemapOptions,e,{onNew:(e,t)=>{this.basemapOptions.add(isBasemapExtension(e)?e:BasemapExtension.create(e),t)},onMatch:(e,t,i,s)=>{isBasemapExtension(t)||e.assignProperties(t),i!==s&&this.basemapOptions.reorder(e,s)},onMissing:e=>{this.basemapOptions.remove(e)},equals:(e,t)=>{if(isBasemapExtension(t))return t===e;if(e.id&&t.id)return e.id===t.id;{const i=e.toJSON();return basemapsAreEquivalent(i.basemap,t.basemap||t.baseMap)}}}),this.basemapExtension&&this._ensureIsBasemapOption(this.basemapExtension),this.isInitialized&¶llelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap())))},serialize:()=>this._deferredProperties?.basemapOptions?this._deferredProperties?.basemapOptions:this.basemapOptions.toArray()},groundExtension:{serializeModes:["initial"],deserialize:e=>{this.map?isGroundExtension(e)?this.groundExtension=e:this.groundExtension.assignProperties(e):this._deferredProperties={...this._deferredProperties,groundExtension:e}},serialize:()=>this._deferredProperties?.groundExtension?this._deferredProperties?.groundExtension:this.groundExtension},bookmarks:{serialize:()=>this.bookmarks.map((e=>e.toJSON())).toArray(),deserialize:e=>{this.bookmarks.addMany(e.map((e=>isBookmark(e)?e:new Bookmark(e))))}},webMap:{serializeModes:["initial"],deserialize:!1},webScene:{serializeModes:["initial"],deserialize:!1},initialLayerPreset:"initial",initialViewMode:{serializeModes:["initial","project"],serialize:e=>"project"===e?this.viewMode:"scene"!==this.initialViewMode||!this.webScene&&this.webMap?"map":"scene",deserialize:e=>{this.viewMode!==e&&(this._deserializedViewMode=e),this._initialViewMode=e},isDefault:(e,t)=>"project"!==t&&"map"===e},formatSettings:"initial",constraints:"initial",title:"initial",onClick:"initial",onHover:"initial",onHoverEnd:"initial",onInitialized:"initial",onViewpointChanged:"initial",contextMenu:{serializeModes:["initial"],deserialize:e=>{e?isMenu(e)?this.contextMenu=e:this.contextMenu?this.contextMenu.assignProperties(e):this.contextMenu=Menu.create(e):this.contextMenu=void 0}},map:{serializeModes:["project"],serialize:()=>({operationalLayers:this.layerExtensions.toArray().filter((e=>e.layer)).map((e=>e._getProjectWebmapJSON())),tables:this.tableExtensions.toArray().filter((e=>e.table)).map((e=>({id:e.table.id,title:e.table.title})))}),deserialize:e=>{if(this.map)if(isMap(e)||isWebMap(e)||isWebScene(e)){if(e!==this.map)throw new ArgumentError("properties.map","Property 'map' is read-only.")}else this._deserializedMapPromise=(async()=>{this._deserializedViewMode&&this.webMap&&this.webScene&&(this._deserializedViewModePromise=this.switchViewMode(this._deserializedViewMode),await this._deserializedViewModePromise,this._deserializedViewMode=void 0,this._deserializedViewModePromise=void 0),await this._applyMapProperties(e,this.map),this._deserializedMapPromise=void 0})();else this._deferredProperties={...this._deferredProperties,map:e}}},requestHelper:{serialize:!1}}}async _applyMapProperties(e,t,i){await parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap()));let s=e;const a=this.basemapOptions.find((e=>basemapsAreEquivalent(e.basemap,s.baseMap)));a&&(t.basemap=a.basemap,s={...s,baseMap:{...s.baseMap,title:t.basemap.title}}),isWebScene(t)?await WebSceneJson.applyToEsriApiWebScene(s,t,i):await WebMapJson.applyToEsriApiMap(s,t,i)}_createFormatSettings(){return new FormatSettings}_createLayerExtensionCollection(){return new LayerExtensionCollectionImpl(this)}_createTableExtensionCollection(){return new TableExtensionCollectionImpl(this)}async _onInitialize(){await super._onInitialize();const{basemapExtension:e,basemapOptions:t,groundExtension:i,webMap:s,webScene:a,map:n,...r}=this._deferredProperties??{};if(t&&this.assignProperties({basemapOptions:t}),this.map||("scene"===this.initialViewMode?this._setMap(new((await import("@arcgis/core/WebScene")).default)):this._setMap(new((await import("@arcgis/core/WebMap")).default))),this.map.basemap&&this._onBasemapChange(),(s||a)&&await this._applyMapProperties("scene"===this.initialViewMode?a:s,this.map),e&&(this.assignProperties({basemapExtension:e}),await this.basemapExtension._createBackingBasemap()),i&&this.assignProperties({groundExtension:i}),this._webMapItem||this._webSceneItem){await Promise.all([load(this.map),load(this._webMapItem),load(this._webSceneItem)]),validatePortalItem(this._webMapItem,"webMap","Web Map"),validatePortalItem(this._webSceneItem,"webScene","Web Scene");const e=isWebScene(this.map)?this._webSceneItem:this._webMapItem;await this._loadAndApplyPortalItemData(e)}else await load(this.map);n&&await this._applyMapProperties(n,this.map),this.assignProperties(r),this._deferredProperties=void 0,this._initialBasemapExtension=this.basemapExtension,this._updateBookmarks(),this.contextMenu&&await this.contextMenu.initialize();for(const e of this.layerExtensions.toArray())await e._createBackingLayer();await Promise.all(this.tableExtensions.map((e=>e._createBackingTable())).toArray())}async _postInitialize(){await super._postInitialize(),await this._createStandardBasemapOptions(),await parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap())),this.initialLayerPreset&&await this.initialLayerPreset.applyTo(this)}*_initializableChildCollections(){yield*super._initializableChildCollections();const e=new Collection(this.layerExtensions.filter((e=>!!e.layer)));e.remove=e=>{this.layerExtensions.remove(e)};const t=new Collection(this.tableExtensions.filter((e=>!!e.table)));if(t.remove=e=>{this.tableExtensions.remove(e)},yield e,yield t,this.basemapExtension){const e=new Collection;e.add(this.basemapExtension),yield e}const i=new Collection;i.add(this.groundExtension),yield i}_initMapFromProperties(e){const t=e.map;isMap(t)||isWebMap(t)||isWebScene(t)?this._setMap(t):"scene"===this.initialViewMode?e.webScene&&!isPortalItem(e.webScene)&&(this._deferredProperties={webScene:e.webScene,...this._deferredProperties}):e.webMap&&!isPortalItem(e.webMap)&&(this._deferredProperties={webMap:e.webMap,...this._deferredProperties})}_setMap(e){isWebScene(e)?this._scene=e:this._map=e,this._currentMap=e,this.basemapExtension?.basemap&&!e.basemap&&(e.basemap=this.basemapExtension.basemap),this.groundExtension?.ground&&!e.ground&&(e.ground=this.groundExtension.ground),this.notifyChange("map")}async _loadAndApplyPortalItemData(e,t){await load(e);const i=await e.fetchData();resolveRelativeHrefs(i,e),await this._inferLayerTypes(i),this.basemapExtension?.basemap&&!t&&delete i.baseMap,GroundExtension.isDefaultGround(this.groundExtension.ground)||t||delete i.ground;const s=t||this.map;await load(s),await this._applyMapProperties(i,s,e),s.portalItem=e;const{viewpoint:a,spatialReference:n}=s.initialViewProperties;a&&a.targetGeometry&&!a.targetGeometry.spatialReference.equals(n)&&(s.initialViewProperties.viewpoint.targetGeometry=(await project([a.targetGeometry],n))[0]),a&&a.camera&&(a.camera.position.spatialReference=n.clone())}_onBasemapChange(){if(this._basemapExtension){if(this.basemapExtension.basemap==this.map.basemap)return;this._basemapExtension._setMapExtension(void 0)}if(this.map.basemap){let e=this.basemapOptions.find((e=>e.basemap===this.map.basemap));e||(e=BasemapExtension.create({basemap:this.map.basemap}),this._basemapOptions.addInternal(e,0)),e.mapExtension!==this&&e._setMapExtension(this),this._basemapExtension=e}else this._basemapExtension=void 0;this.notifyChange("basemapExtension")}_onGroundChange(){if(this._groundExtension){if(this.groundExtension.ground===this.map.ground)return void(this._groundExtensions.has(this.map.ground)||this._groundExtensions.set(this.map.ground,this.groundExtension));this.groundExtension._setMapExtension(void 0)}this._groundExtensions.has(this.map.ground)||this._groundExtensions.set(this.map.ground,new GroundExtension({ground:this.map.ground}));const e=this._groundExtensions.get(this.map.ground);e.mapExtension!==this&&e._setMapExtension(this),this._groundExtension=e,this.notifyChange("groundExtension")}async _inferLayerTypes(e){const t=[];if(e.operationalLayers)for(const i of e.operationalLayers)t.push(this._inferLayerType(i));if(e.baseMap&&t.push(this._inferBasemapLayerTypes(e.baseMap)),e.hasOwnProperty("ground")&&t.push(this._inferGroundLayerTypes(e.ground)),e.presentation?.slides)for(const i of e.presentation.slides)i.baseMap&&"string"!=typeof i.baseMap&&t.push(this._inferBasemapLayerTypes(i.baseMap));await Promise.all(t)}async _inferBasemapLayerTypes(e){const t=[];if(e.baseMapLayers)for(const i of e.baseMapLayers)t.push(this._inferLayerType(i));await Promise.all(t)}async _inferGroundLayerTypes(e){const t=[];if(e.layers)for(const i of e.layers)t.push(this._inferLayerType(i));await Promise.all(t)}async _inferLayerType(e){if(!e.layerType)if(e.type)e.layerType=e.type;else if(e.url){const t=e.url;if(t.match(".*MapServer/\\d{1,}/?$")||t.match(".*FeatureServer/\\d{1,}/?$"))e.layerType="ArcGISFeatureLayer";else if(t.match(".*StreamServer/?$"))e.layerType="ArcGISStreamLayer";else if(t.match(".*ImageServer/?$")){const i=await this._getLayerData(t);i.cacheType?"Map"===i.cacheType?e.layerType="ArcGISTiledImageServiceLayer":"Elevation"===i.cacheType&&(e.layerType="ArcGISTiledElevationServiceLayer"):e.layerType="ArcGISImageServiceLayer"}else if(t.match(".*MapServer/?$")){const i=await this._getLayerData(t);e.layerType=i.tileInfo?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer"}else if(t.match(".*\\.(csv|txt)$"))e.layerType="CSV";else if(t.match(".*\\.kml$"))e.layerType="KML";else if(t.match(".*SceneServer/layers/\\d{1,}/?$")){const i=await this._getLayerData(t);"3DObject"===i.layerType?e.layerType="ArcGISSceneServiceLayer":"IntegratedMesh"===i.layerType?e.layerType="IntegratedMeshLayer":"PointCloud"===i.layerType&&(e.layerType="PointCloudLayer")}else t.match(".*(\\.xml|rss/?)$")&&(e.layerType="GeoRSS")}else if(e.layers){e.layerType="GroupLayer";const t=[];for(const i of e.layers)t.push(this._inferLayerType(i));await Promise.all(t)}else e.templateUrl&&e.tileInfo?e.layerType="WebTiledLayer":e.featureCollection?e.layerType="ArcGISFeatureLayer":e.styleUrl?e.layerType="VectorTileLayer":e.mapUrl&&(e.layerType="WMS")}async _getLayerData(e){const t=await this.requestHelper.request(e,{query:{f:"json"}});if(!t||!t.data)throw new Error(`Response to request for url ${e} was invalid.`);return t.data}async _createStandardBasemapOptions(){const e=this._spatialReference;!this._basemapOptions.isExplicitlyModified&&e&&e.isWebMercator&&await parallelEach([WellKnownBasemap.SATELLITE,WellKnownBasemap.HYBRID_VECTOR,WellKnownBasemap.STREETS_VECTOR,WellKnownBasemap.TOPO_VECTOR,WellKnownBasemap.STREETS_NAVIGATION_VECTOR,WellKnownBasemap.STREETS_NIGHT_VECTOR,WellKnownBasemap.TERRAIN_VECTOR,WellKnownBasemap.DARK_GRAY_VECTOR,WellKnownBasemap.GRAY_VECTOR,WellKnownBasemap.OCEANS_VECTOR,WellKnownBasemap.OPEN_STREET_MAP_VECTOR],(async e=>{const t=await createStandardBasemap(e);basemapsAreEquivalent(this.map.basemap,t)?this._basemapOptions.addInternal(this.basemapExtension):this._basemapOptions.addInternal(BasemapExtension.create({basemap:t}),void 0,!1)}))}_ensureIsBasemapOption(e){const t=this.basemapOptions.findIndex((t=>t.basemap===e.basemap));t>=0?this._basemapOptions.getItemAt(t)!==e&&(this._basemapOptions.removeAtInternal(t),this._basemapOptions.addInternal(e,t)):this._basemapOptions.addInternal(e,0)}_updateBookmarks(){this.bookmarks.removeMany(this.bookmarks.filter((e=>"map"===e.source))),isWebMap(this.map)&&this.map.bookmarks?.length>0?this.map.bookmarks.forEach((e=>{this.bookmarks.add(new Bookmark({source:"map",title:e.name,viewpoint:e.viewpoint}))})):isWebScene(this.map)&&this.map.presentation?.slides?.length>0&&this.map.presentation.slides.forEach((e=>{const t={source:"map",title:e.title.text,viewpoint:e.viewpoint},i=new Bookmark(t);this.bookmarks.add(i)}))}};MapExtension=__decorate([serializable],MapExtension);export{MapExtension};class LayerExtensionCollectionImpl extends LayerExtensionCollectionBase{constructor(e){super(e,"map.layers")}get _mapExtension(){return this._parent}toJSON(){const e=[];return this.forEach((t=>{e.push(`item://${encodeURIComponent(ItemType.LAYER_EXTENSION)}/${encodeURIComponent(t.id)}`)})),e}}class BasemapExtensionCollection extends InitializableCollectionProxy{constructor(e){super(new Collection),this.isExplicitlyModified=!1,this._mapExtension=e}add(e,t){return super.add(e,t),this.isExplicitlyModified=!0,1===this.length&&this._mapExtension.map&&!this._mapExtension.basemapExtension&&(this._mapExtension.basemapExtension=e),this}addMany(e,t){return super.addMany(e,t),this.isExplicitlyModified=!0,this}addInternal(e,t,i=!0){const s=e=>{const t="-vector";return e?.endsWith(t)?e.substring(0,e.length-t.length):e};let a;if(e.basemap){const t=s(e.basemap.id);if(a=this.findIndex((e=>s(e.basemap?.id)===t)),isStandardBasemap(e.basemap)&&a>=0){if(!i)return;super.removeAt(a)}}super.add(e,t??(a>=0?a:void 0))}removeAt(e){const t=super.removeAt(e);return t&&(this.isExplicitlyModified=!0,t===this._mapExtension.basemapExtension&&(e<this.length?this._mapExtension.basemapExtension=this.getItemAt(e):this.length?this._mapExtension.basemapExtension=this.getItemAt(e-1):this._mapExtension.basemapExtension=void 0)),t}removeAll(){this._mapExtension.basemapExtension=void 0,super.removeAll()}removeAtInternal(e){return super.removeAt(e)}removeAllInternal(){for(;this.length;)this.removeAtInternal(this.length-1)}reorder(e,t){return super.reorder(e,t),this.isExplicitlyModified=!0,e}reorderInternal(e,t){return super.reorder(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.basemap}}class TableExtensionCollectionImpl extends InitializableCollectionProxy{constructor(e){super(),this._tableExtensionMap=new WeakMap,this._uninitializedTableExtensions=new Set,this._mapExtension=e,onCollectionPropertyChange(this._mapExtension,"map.tables",(e=>{const t={added:(e.added||[]).map((e=>this._forTable(e))),moved:(e.moved||[]).map((e=>this._forTable(e))),removed:(e.removed||[]).map((e=>this._forTable(e))),target:this};this.emit("change",t)})),this._mapExtension.watch("map.tables.length",(()=>this.notifyChange("length")))}get _collection(){return this._tables.map((e=>this._forTable(e))).concat(Array.from(this._uninitializedTableExtensions))}get _tables(){return this._mapExtension.map?.tables??new ReadOnlyCollection(new Collection)}toJSON(){const e=[];return this.forEach((t=>{e.push(`item://${encodeURIComponent(ItemType.TABLE_EXTENSION)}/${encodeURIComponent(t.id)}`)})),e}clone(){const e=new TableExtensionCollectionImpl(this._mapExtension);return e._tableExtensionMap=this._tableExtensionMap,e}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findByTableId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.table.id===e))}forTable(e){if(checkArg("table",e).isNotMissing(),this._tables.includes(e))return this._forTable(e)}add(e,t){if(checkArg("tableX",e).isNotMissing(),e.mapExtension&&e.mapExtension.tableExtensions.remove(e),e._setMapExtension(this._mapExtension),e.table){const i=this._tableExtensionMap.get(e.table);if(this._tableExtensionMap.set(e.table,e),i&&i!==e&&this._onRemoved(i),this._tables.includes(e.table))if(void 0===t){const t={added:[e],moved:[],removed:i?[i]:[],target:this};this.emit("change",t)}else this._tables.reorder(e.table,t);else this._tables.add(e.table,t)}else{this._uninitializedTableExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("change",t)}return this._onAdded(e),this}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedTableExtensions.has(t)){this._uninitializedTableExtensions.delete(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("change",e)}else this._tables.remove(t.table);return this._onRemoved(t),t}}reorder(e,t){if(e&&this._tables.includes(e.table))return this._tables.reorder(e.table,t),e}sort(e){return this._tables.sort(((t,i)=>e(this._forTable(t),this._forTable(i)))),this}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.table}_onAdded(e){}_onRemoved(e){e._setMapExtension(void 0)}_forTable(e){for(const e of this._uninitializedTableExtensions)e._resolveTable(),e.table&&(this._tableExtensionMap.set(e.table,e),this._uninitializedTableExtensions.delete(e));if(!this._tableExtensionMap.has(e)){const t=TableExtension.create({table:e});this._tableExtensionMap.set(e,t),t._setMapExtension(this._mapExtension),this._onAdded(t)}return this._tableExtensionMap.get(e)}}class AllLayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._mapExtension=e}get _collection(){let e=this._mapExtension.layerExtensions.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[]));return this._mapExtension.basemapExtension&&(e=e.concat(this._mapExtension.basemapExtension.baseLayerExtensions.toArray()).concat(this._mapExtension.basemapExtension.referenceLayerExtensions.toArray())),e=e.concat(this._mapExtension.groundExtension.layerExtensions.toArray()),e}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findByLayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.layer.id===e))}forLayer(e){return checkArg("layer",e).isNotMissing(),this.findByLayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const s=i.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray(),a=new Collection;a.addMany(t.removed);const n=a.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray(),r=new Collection;r.addMany(t.moved);const o=r.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray();super.emit(e,{added:s,removed:n,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.layer}}function toPortalItem(e){if("object"!=typeof e||!e||!e.baseMap)return toPortalItemBase(e)}function isPortalItem(e){return"object"!=typeof e||e&&!e.baseMap}function validatePortalItem(e,t,i){if(e?.type&&e.type!==i)throw new Error(`Invalid portal item type "${e.type}" for property ${t}.`)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import
|
|
1
|
+
import{__decorate}from"tslib";import FeatureType from"@arcgis/core/layers/support/FeatureType.js";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery";import{toAttachment}from"../data/Attachment.js";import{toGraphic}from"../data/Feature.js";import{FeatureSaveError}from"../data/FeatureSaveError.js";import{addAttachment,deleteAttachments,supportsAttachmentEditing as layerSupportsAttachmentEditing}from"../data/support/attachments.js";import{SubtypeGroupLayer as SubtypeGroupLayerProperties}from"../portal/SubtypeGroupLayer.js";import{SubtypeSublayer}from"../portal/SubtypeSublayer.js";import{Template}from"../portal/Template.js";import{cancelify}from"../support/Cancellable.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{executeQuery}from"../support/_query.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isFeatureLayer,isSubtypeGroupLayer}from"../utilities/_layers.js";import{parse}from"../utilities/number.js";import{ArrayWrappedCollection}from"./LayerExtension.js";import{SubtypeSublayerExtension}from"./SubtypeSublayerExtension.js";import{LayerExtension,LayerExtensionReadOnlySchema}from"./_LayerExtension.js";import{addOutFields,getGlobalIdField,isGlobalIdUsed}from"./support/layers.js";let SubtypeGroupLayerExtension=class extends LayerExtension{get enableClientSideData(){return this._enableClientSideData}set enableClientSideData(e){this._enableClientSideData=e,this._updateClientSideFields()}get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get sublayersAreReadOnly(){return!1}get hasFeatures(){return!0}get _layerView(){return this.layer&&this.mapExtension?._allLayerViews.find((e=>e.layer===this.layer))}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return!e||this.dynamicallyAddedLayer||(e.layers=this.sublayerExtensions.toArray().map((e=>{const{layerDefinition:t,visibility:r,subtypeCode:a,layerType:s}=SubtypeSublayer.fromEsriApiSubtypeSublayer(e.sublayer),i={layerType:s,visibility:r,subtypeCode:a};return t?.drawingInfo&&(i.layerDefinition={drawingInfo:t.drawingInfo}),i}))),e}_createRelationships(){return new SubtypeGroupLayerRelationshipCollection(this)}async _onInitialize(){await super._onInitialize(),await this.relationships.initialize();const e=this.layer.sourceJSON?.templates?.map((e=>Template.toEsriApiFeatureTemplate(e)));if(this.sublayerExtensions.filter((e=>!!e.sublayer)).forEach((t=>{let r=e;1!==e.length||1===this.sublayerExtensions.length||t.sublayer.templates?usesEsriDefaultTemplate(t)&&(t.sublayer.templates[0].name=t.sublayer.title):(r=e.map((e=>{const r=Template.toEsriApiFeatureTemplate(Template.fromEsriApiFeatureTemplate(e));r.name=t.title;const a=r.prototype?.attributes;return"number"==typeof a?.[this.layer.subtypeField]&&(a[this.layer.subtypeField]=t.sublayer.subtypeCode),r})),t.sublayer.templates=r)})),this.layer.subtypes){this._subtypes=this.layer.subtypes.map((e=>new FeatureType({id:e.code,name:e.name,domains:e.domains??{},templates:this.sublayerExtensions.map((e=>e.sublayer)).find((t=>t.subtypeCode===e.code)).templates})));for(const e of this._subtypes)for(const[t,r]of Object.entries(e.domains)){const e=this.layer.fields.find((e=>e.name===t));e&&!e.domain&&(e.domain=r)}}}async _postInitialize(){await super._postInitialize(),this._updateClientSideFields(),this._watchHandles.push(this.watch("layer",(()=>{this._updateClientSideFields()}),!0))}_capabilities(){const e=layerSupportsAttachmentEditing(this.layer);return this.layer?.capabilities?.operations?{...this.layer.capabilities.operations,supportsAttachmentEditing:e}:{...super._capabilities(),supportsAttachmentEditing:e}}_createSublayerExtension(e){return new SubtypeSublayerExtension(e)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"SubtypeGroupLayer"}},enableClientSideData:{serializeModes:["initial"],default:!1},attachmentTypes:["initial"]}}_isSupportedLayer(e){return isSubtypeGroupLayer(e)}_createSchema(){return new SubtypeGroupLayerSchema(this)}async _getAttachments(e){if(!this.layer?.capabilities?.data?.supportsAttachment)return[];const t=+e.primaryKey,r=new AttachmentQuery({objectIds:[t]}),a=await this.layer.queryAttachments(r);return a?.[t]?.length?a[t].map((e=>toAttachment(e,e.url))):[]}async _addAttachment(e,t){return addAttachment(e,this.layer,t,{attachmentTypes:this.attachmentTypes})}async _deleteAttachments(e,t){return deleteAttachments(e,this.layer,t)}async _applyPortalItemProperties(e){if("Feature Service"!==e.type)throw new Error(`Cannot create SubtypeGroupLayer from Portal item that has type: ${e.type}`);const t={layerType:"SubtypeGroupLayer"};let{url:r}=e;r.match(".*MapServer/\\d{1,}/?$")||r.match(".*FeatureServer/\\d{1,}/?$")||(r=`${r}/0`),t.url=r,await SubtypeGroupLayerProperties.applyToEsriApiLayer(t,this.layer);const a=await e.fetchData();a&&await SubtypeGroupLayerProperties.applyToEsriApiLayer(a,this.layer)}_getFeatures(e,t){if(!this.layer)return super._getFeatures(e,t);const r=this.layer.createQuery();return r.objectIds=e.map((e=>parse(e))),r.where=void 0,r.outFields=t.outFields,r.returnGeometry=t.returnGeometry,executeQuery(r,this,this.layer,t.cancelToken)}async _addFeatures(e,t){const r=Array.from(e);if(0===r.length||!this.layer)return;const a=await this._applyEdits({addFeatures:r.map(toGraphic)},t);if(!a.addFeatureResults||a.addFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.addFeatureResults.forEach(((e,t)=>{const{objectId:a,globalId:i,error:l}=e,o=r[t];if(l){s=s||new FeatureSaveError("Errors encountered when adding features.");const{title:r}=o;s.errors.set(`${r}-${t}`,new Error(`Failed to add feature '${r}'. ${e.error.name} : ${e.error.message}`))}else{const{primaryKeyField:e}=o.schema;o.attributes.set(e,a);const t=getGlobalIdField(this.layer);t&&i&&o.attributes.set(t,i)}})),s)throw s}async _updateFeatures(e,t){const r=Array.from(e);if(0===r.length)return;const a=await this._applyEdits({updateFeatures:Array.from(e).map(toGraphic)},t);if(!a.updateFeatureResults||a.updateFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.updateFeatureResults.forEach(((e,t)=>{if(e.error){s=s||new FeatureSaveError("Errors encountered when updating features.");const{primaryKey:a}=r[t];s.errors.set(a,new Error(`Failed to update feature with id ${a}. ${e.error.name} : ${e.error.message}`))}})),s)throw s}async _deleteFeatures(e,t){if(0===e.length)return;const r=await this._applyEdits({deleteFeatures:e.map((e=>({objectId:e})))},t);if(!r.deleteFeatureResults)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let a;if(r.deleteFeatureResults.forEach(((t,r)=>{if(t.error){a=a||new FeatureSaveError("Errors encountered when deleting features.");const s=e[r];a.errors.set(s,new Error(`Failed to delete feature with id ${s}. ${t.error.name} : ${t.error.message}`))}})),a)throw a}async _applyEdits(e,t={}){const r=isGlobalIdUsed(this.layer,e),a=this.layer.applyEdits(e,{globalIdUsed:r}),s=await cancelify(a,t.cancelToken);if(!s)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");return s}_updateClientSideFields(){this.layer&&this._enableClientSideData&&(addOutFields(this.layer,this.featureSettings.outFields),this.allSublayerExtensions.forEach((e=>addOutFields(this.layer,e.featureSettings.outFields))))}};SubtypeGroupLayerExtension=__decorate([serializable],SubtypeGroupLayerExtension);export{SubtypeGroupLayerExtension};let SubtypeGroupLayerSchema=class extends LayerExtensionReadOnlySchema{constructor(e){super(e),this._fieldCollection=this._createFieldCollection(),this._typesCollection=this._createTypesCollection()}get types(){return this._typesCollection}get _types(){return this._typesCollection}get _fields(){return this._fieldCollection}_createFieldCollection(){return new ReadOnlyCollection(new ArrayWrappedCollection({parent:this._layerExtension,targetProperty:"layer",arrayProperty:"fields"}))}_createTypesCollection(){return new ReadOnlyCollection(new ArrayWrappedCollection({parent:this._layerExtension,arrayProperty:"_subtypes"}))}_getPropertyBindings(){return{primaryKeyField:"objectIdField",geometryType:"geometryType",spatialReference:"spatialReference",displayField:"displayField",typeIdField:"subtypeField"}}};SubtypeGroupLayerSchema=__decorate([serializable],SubtypeGroupLayerSchema);export{SubtypeGroupLayerSchema};export class SubtypeGroupLayerRelationshipCollection extends ArcGISRelationshipCollection{get _sourceUrl(){const e=this._source.layer;if(e)return`${e.url}/${e.layerId}`}get _sourceLayerId(){return this._source.layer?.layerId}_findRelatedSource(e){if(!this._source.mapExtension||!this._source.layer||!this._sourceUrl)return;const t=this._sourceUrl.slice(0,this._sourceUrl.length-`${this._sourceLayerId}`.length-1),r=this._source.mapExtension.allLayerExtensions.initializedItems.find((r=>(isFeatureLayer(r.layer)||isSubtypeGroupLayer(r.layer))&&r.layer.url===t&&r.layer.layerId===e));return r||this._source.mapExtension.tableExtensions.initializedItems.find((r=>isFeatureLayer(r.table)&&r.table.url===t&&r.table.layerId===e))}}function usesEsriDefaultTemplate(e){return 1===e.sublayer.templates.length&&"New Feature"===e.sublayer.templates[0].name}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery";import{InvalidOperationError}from"../InvalidOperationError.js";import{toAttachment}from"../data/Attachment.js";import{toGraphic}from"../data/Feature.js";import{FeatureSaveError}from"../data/FeatureSaveError.js";import{addAttachment,deleteAttachments}from"../data/support/attachments.js";import{Layer as PortalLayer}from"../portal/Layer.js";import{cancelify}from"../support/Cancellable.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{executeQuery}from"../support/_query.js";import{Collection}from"../support/esri.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isFeatureLayer,isSubtypeGroupLayer,isSubtypeSublayer}from"../utilities/layers.js";import{parse}from"../utilities/number.js";import{SublayerExtension,SublayerSchema}from"./_SublayerExtension.js";import{ArrayWrappedCollection}from"./support/ArrayWrappedCollection.js";import{ExtensionBaseLayerListSettings}from"./support/LayerListSettings.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";import{getGlobalIdField,isGlobalIdUsed}from"./support/layers.js";let SubtypeSublayerExtension=class extends SublayerExtension{get supportsSublayers(){return!1}get layerExtension(){return super.layerExtension}get renderer(){return this.sublayer?.renderer}get hasFeatures(){return!0}get sublayer(){return super.sublayer}get sublayerExtensions(){return super.sublayerExtensions}get attachmentTypes(){return this.layerExtension?.attachmentTypes}get canChangeRenderer(){return!0}get canChangeOpacity(){return!1}async _addAttachment(e,t){return addAttachment(e,this.sublayer.layer,t,{attachmentTypes:this.layerExtension?.attachmentTypes})}async _deleteAttachments(e,t){return deleteAttachments(e,this.sublayer.layer,t)}_isSupportedSublayer(e){return isSubtypeSublayer(e)}_createLayerListSettings(e){return new SubtypeSublayerExtensionLayerListSettings(e,this)}_createFeatureSettings(){return new SubtypeSublayerFeatureSettings(this)}_createSublayer(e){return PortalLayer.toEsriApiSublayer(e,"
|
|
1
|
+
import{__decorate}from"tslib";import AttachmentQuery from"@arcgis/core/rest/support/AttachmentQuery";import{InvalidOperationError}from"../InvalidOperationError.js";import{toAttachment}from"../data/Attachment.js";import{toGraphic}from"../data/Feature.js";import{FeatureSaveError}from"../data/FeatureSaveError.js";import{addAttachment,deleteAttachments}from"../data/support/attachments.js";import{Layer as PortalLayer}from"../portal/Layer.js";import{cancelify}from"../support/Cancellable.js";import{serializable}from"../support/Serializable.js";import{ArcGISRelationshipCollection}from"../support/_ArcGISRelationshipCollection.js";import{executeQuery}from"../support/_query.js";import{Collection}from"../support/esri.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isFeatureLayer,isSubtypeGroupLayer,isSubtypeSublayer}from"../utilities/layers.js";import{parse}from"../utilities/number.js";import{SublayerExtension,SublayerSchema}from"./_SublayerExtension.js";import{ArrayWrappedCollection}from"./support/ArrayWrappedCollection.js";import{ExtensionBaseLayerListSettings}from"./support/LayerListSettings.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";import{getGlobalIdField,isGlobalIdUsed}from"./support/layers.js";let SubtypeSublayerExtension=class extends SublayerExtension{get supportsSublayers(){return!1}get layerExtension(){return super.layerExtension}get renderer(){return this.sublayer?.renderer}get hasFeatures(){return!0}get sublayer(){return super.sublayer}get sublayerExtensions(){return super.sublayerExtensions}get attachmentTypes(){return this.layerExtension?.attachmentTypes}get canChangeRenderer(){return!0}get canChangeOpacity(){return!1}async _addAttachment(e,t){return addAttachment(e,this.sublayer.layer,t,{attachmentTypes:this.layerExtension?.attachmentTypes})}async _deleteAttachments(e,t){return deleteAttachments(e,this.sublayer.layer,t)}_isSupportedSublayer(e){return isSubtypeSublayer(e)}_createLayerListSettings(e){return new SubtypeSublayerExtensionLayerListSettings(e,this)}_createFeatureSettings(){return new SubtypeSublayerFeatureSettings(this)}_createSublayer(e){return PortalLayer.toEsriApiSublayer(e,"SubtypeGroupLayer")}_createSchema(){return new SubtypeSublayerSchema(this)}_createRelationships(){return new SubtypeSublayerRelationshipCollection(this)}async _applySublayerProperties(e,t){return PortalLayer.applyToEsriApiSublayer(e,t)}_capabilities(){return this.layerExtension?.capabilities}async _onInitialize(){await super._onInitialize(),await this.relationships.initialize(),this._watchHandles.push(this.watch("layerExtension.attachmentTypes",(()=>this.notifyChange("attachmentTypes"))))}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized()}_getFeatures(e,t){if(!this.sublayer?.layer)return super._getFeatures(e,t);const r=this.sublayer?.layer.createQuery();return r.objectIds=e.map((e=>parse(e))),r.where=void 0,r.outFields=t.outFields,r.returnGeometry=t.returnGeometry,executeQuery(r,this,this.sublayer.layer,t.cancelToken)}async _getAttachments(e){if(!this.sublayer?.layer?.capabilities?.data?.supportsAttachment)return[];const t=+e.primaryKey,r=new AttachmentQuery({objectIds:[t]}),a=await this.sublayer.layer.queryAttachments(r);return a?.[t]?.length?a[t].map((e=>toAttachment(e,e.url))):[]}async _addFeatures(e,t){const r=Array.from(e);if(0===r.length||!this.sublayer?.layer)return;const a=await this._applyEdits({addFeatures:r.map(toGraphic)},t);if(!a.addFeatureResults||a.addFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.addFeatureResults.forEach(((e,t)=>{const{objectId:a,globalId:i,error:n}=e,l=r[t];if(n){s=s||new FeatureSaveError("Errors encountered when adding features.");const{title:r}=l;s.errors.set(`${r}-${t}`,new Error(`Failed to add feature '${r}'. ${e.error.name} : ${e.error.message}`))}else{const{primaryKeyField:e}=l.schema;l.attributes.set(e,a);const t=getGlobalIdField(this.sublayer.layer);t&&i&&l.attributes.set(t,i)}})),s)throw s}async _updateFeatures(e,t){const r=Array.from(e);if(0===r.length)return;const a=await this._applyEdits({updateFeatures:Array.from(e).map(toGraphic)},t);if(!a.updateFeatureResults||a.updateFeatureResults.length!==r.length)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let s;if(a.updateFeatureResults.forEach(((e,t)=>{if(e.error){s=s||new FeatureSaveError("Errors encountered when updating features.");const{primaryKey:a}=r[t];s.errors.set(a,new Error(`Failed to update feature with id ${a}. ${e.error.name} : ${e.error.message}`))}})),s)throw s}async _deleteFeatures(e,t){if(0===e.length)return;const r=await this._applyEdits({deleteFeatures:e.map((e=>({objectId:e})))},t);if(!r.deleteFeatureResults)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");let a;if(r.deleteFeatureResults.forEach(((t,r)=>{if(t.error){a=a||new FeatureSaveError("Errors encountered when deleting features.");const s=e[r];a.errors.set(s,new Error(`Failed to delete feature with id ${s}. ${t.error.name} : ${t.error.message}`))}})),a)throw a}_serializeSublayer(e){return PortalLayer.fromEsriApiSublayer(e)}async _applyEdits(e,t={}){const r=isGlobalIdUsed(this.sublayer.layer,e),a=this.sublayer.layer.applyEdits(e,{globalIdUsed:r}),s=await cancelify(a,t.cancelToken);if(!s)throw new FeatureSaveError("Received malformed response from server while saving feature(s).");return s}};SubtypeSublayerExtension=__decorate([serializable],SubtypeSublayerExtension);export{SubtypeSublayerExtension};const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";let SubtypeSublayerSchema=class extends SublayerSchema{constructor(e){super(e),this._fieldCollection=this._createFieldCollection(),this._typesCollection=new Collection,this._readonlyTypesCollection=new ReadOnlyCollection(this._typesCollection);const t=()=>this._sublayerExtension.sublayer?.subtypeCode,r=()=>{const e=this._sublayerExtension.layerExtension?._subtypes?.find((e=>e.id===t()));return!!e&&(this._typesCollection.add(e),!0)};if(this._sublayerExtension.layerExtension?._subtypes?.some((e=>e.id===t())))r();else{const e=this._sublayerExtension.watch("layerExtension._subtypes",(()=>{r()&&e.remove()}),!0)}}get primaryKeyField(){return this._sublayerExtension.sublayer?.layer?.objectIdField}set primaryKeyField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get geometryType(){return this._sublayerExtension.sublayer?.layer?.geometryType}set geometryType(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get displayField(){return this._sublayerExtension.sublayer?.layer?.displayField}set displayField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get typeIdField(){return this._sublayerExtension.sublayer?.layer?.subtypeField}set typeIdField(e){throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY)}get types(){return this._readonlyTypesCollection}get _fields(){return this._fieldCollection}_createFieldCollection(){return new ReadOnlyCollection(new ArrayWrappedCollection({parent:this._sublayerExtension,targetProperty:"sublayer",arrayProperty:"layer.fields"}))}_getPropertyBindings(){return{primaryKeyField:"layer.objectIdField",geometryType:"layer.geometryType",spatialReference:"layer.spatialReference",displayField:"layer.displayField",typeIdField:"layer.typeIdField"}}};SubtypeSublayerSchema=__decorate([serializable],SubtypeSublayerSchema);export{SubtypeSublayerSchema};let SubtypeSublayerFeatureSettings=class extends PopupTemplateFeatureSettings{get zoomScale(){const e="point"===this._layerExtension.schema.geometryType?this._layerExtension.sublayer.maxScale:void 0;return this._getSetting("zoomScale",e)}set zoomScale(e){this._setSetting("zoomScale",e)}};SubtypeSublayerFeatureSettings=__decorate([serializable],SubtypeSublayerFeatureSettings);let SubtypeSublayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _layerSupportsHideChildren(){return!1}get _esriLayer(){return this._extension.sublayer}get _listModePath(){return"sublayer.listMode"}get _supportsChildren(){return!1}};SubtypeSublayerExtensionLayerListSettings=__decorate([serializable],SubtypeSublayerExtensionLayerListSettings);export class SubtypeSublayerRelationshipCollection extends ArcGISRelationshipCollection{get _sourceUrl(){const e=this._source.sublayer?.layer;if(e)return`${e.url}/${e.layerId}`}get _sourceLayerId(){const e=this._source.sublayer?.layer;return e?.layerId}_findRelatedSource(e){if(!this._source.layerExtension?.mapExtension||!this._source.sublayer||!this._sourceUrl)return;const t=this._sourceUrl.slice(0,this._sourceUrl.length-`${this._sourceLayerId}`.length-1),r=this._source.layerExtension.mapExtension.allLayerExtensions.initializedItems.find((r=>(isFeatureLayer(r.layer)||isSubtypeGroupLayer(r.layer))&&r.layer.url===t&&r.layer.layerId===e));return r||this._source.layerExtension.mapExtension.tableExtensions.initializedItems.find((r=>isFeatureLayer(r.table)&&r.table.url===t&&r.table.layerId===e))}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{WMSLayer as WMSLayerJson}from"../portal/WMSLayer.js";import{serializable}from"../support/Serializable.js";import{isWMSLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{WMSSublayerExtension}from"./WMSSublayerExtension.js";import{LayerExtension}from"./_LayerExtension.js";import{WfsCapabilities}from"./support/WfsCapabilities.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for WMSLayerExtension is readonly";let WMSLayerExtension=class extends LayerExtension{get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get wfsUrl(){return this._wfsUrl}set wfsUrl(e){this._wfsUrl=e,this.wfsCapabilities=new WfsCapabilities({url:this._wfsUrl})}_createSublayerExtension(e){return new WMSSublayerExtension(e)}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();if(!e||this.dynamicallyAddedLayer)return e;const{visibleLayers:r}=WMSLayerJson.fromEsriApiLayer(this.layer);return e.visibleLayers=r,e}async _onInitialize(){await super._onInitialize(),this._deferredSublayerProperties&&(this.assignProperties({layer:{layerType:"WMS",layers:this._deferredSublayerProperties}}),this._deferredSublayerProperties=void 0)}_isSupportedLayer(e){return isWMSLayer(e)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,wfsUrl:"initial",layer:{...this._toPropertyDef(e.layer),default:{layerType:"WMS"},deserialize:r=>{if(this._toPropertyDef(e.layer).deserialize(r),r&&!isWMSLayer(r)&&r.layers&&(!this.layer||!this.layer.sublayers)){this._deferredSublayerProperties=this._deferredSublayerProperties||[];for(const e of r.layers){const r=this._deferredSublayerProperties.findIndex((r=>r.name===e.name));r>=0?this._deferredSublayerProperties[r]={...this._deferredSublayerProperties[r],...e}:this._deferredSublayerProperties.push({...e})}}}}}}async _applyPortalItemProperties(e){if("WMS"!==e.type)throw new Error(`Cannot create WMS layer from Portal item that has type: ${e.type}`);const r={layerType:"WMS",...await e.fetchData()};return WMSLayerJson.applyToEsriApiLayer(r,this.layer)}};WMSLayerExtension=__decorate([serializable],WMSLayerExtension);export{WMSLayerExtension};class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"layer.sublayers"),this._layerExtension=e}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.layer.sublayers&&!this._parent.layer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...t){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createSublayerExtension(e){return this._parent._createSublayerExtension(e)}}
|
|
1
|
+
import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{WMSLayer as WMSLayerJson}from"../portal/WMSLayer.js";import{serializable}from"../support/Serializable.js";import{isWMSLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{WMSSublayerExtension}from"./WMSSublayerExtension.js";import{LayerExtension}from"./_LayerExtension.js";import{WfsCapabilities}from"./support/WfsCapabilities.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for WMSLayerExtension is readonly";let WMSLayerExtension=class extends LayerExtension{get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get wfsUrl(){return this._wfsUrl}set wfsUrl(e){this._wfsUrl=e,this.wfsCapabilities=new WfsCapabilities({url:this._wfsUrl})}_createSublayerExtension(e){return new WMSSublayerExtension(e)}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();if(!e||this.dynamicallyAddedLayer)return e;const{visibleLayers:r}=WMSLayerJson.fromEsriApiLayer(this.layer);return e.visibleLayers=r,e}async _onInitialize(){await super._onInitialize(),this._deferredSublayerProperties&&(this.assignProperties({layer:{layerType:"WMS",layers:this._deferredSublayerProperties}}),this._deferredSublayerProperties=void 0)}_isSupportedLayer(e){return isWMSLayer(e)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,wfsUrl:"initial",layer:{...this._toPropertyDef(e.layer),default:{layerType:"WMS"},deserialize:r=>{if(this._toPropertyDef(e.layer).deserialize(r),r&&!isWMSLayer(r)&&r.layers&&(!this.layer||!this.layer.sublayers)){this._deferredSublayerProperties=this._deferredSublayerProperties||[];for(const e of r.layers){const r=this._deferredSublayerProperties.findIndex((r=>r.name===e.name));r>=0?this._deferredSublayerProperties[r]={...this._deferredSublayerProperties[r],...e}:this._deferredSublayerProperties.push({...e})}}}}}}async _applyPortalItemProperties(e){if("WMS"!==e.type)throw new Error(`Cannot create WMS layer from Portal item that has type: ${e.type}`);const r={layerType:"WMS",...await e.fetchData()};return WMSLayerJson.applyToEsriApiLayer(r,this.layer)}};WMSLayerExtension=__decorate([serializable],WMSLayerExtension);export{WMSLayerExtension};class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"layer.sublayers"),this._layerExtension=e}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.layer.sublayers&&!this._parent.layer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);return super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...t){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createSublayerExtension(e){return this._parent._createSublayerExtension(e)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var WMSSublayerExtension_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{WMSSublayer as PortalWMSSublayer}from"../portal/WMSSublayer.js";import{serializable}from"../support/Serializable.js";import{isWMSSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{SublayerExtension,SubSublayerExtensionCollection}from"./_SublayerExtension.js";const ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for WMSLayerExtension is readonly";let WMSSublayerExtension=WMSSublayerExtension_1=class extends SublayerExtension{get sublayer(){return super.sublayer}get sublayerExtensions(){return super.sublayerExtensions}get layerExtension(){return super.layerExtension}get supportsSublayers(){return!0}get effectiveFullExtent(){return this.sublayer?this.sublayer.fullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}get hasFeatures(){return!0}get canChangeOpacity(){return!1}_createSublayerExtension(e){return new WMSSublayerExtension_1(e)}_isSupportedSublayer(e){return isWMSSublayer(e)}_createSublayer(e){return PortalWMSSublayer.toEsriApiWMSSublayer({...e})}async _applySublayerProperties(e,r){return PortalWMSSublayer.applyToEsriApiWMSSublayer(e,r)}_serializeSublayer(e){return PortalWMSSublayer.fromEsriApiWMSSublayer(e)}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollectionImpl(this)}};WMSSublayerExtension=WMSSublayerExtension_1=__decorate([serializable],WMSSublayerExtension);export{WMSSublayerExtension};class SubSublayerExtensionCollectionImpl extends SubSublayerExtensionCollection{add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.sublayer.sublayers&&!this._parent.sublayer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}}
|
|
1
|
+
var WMSSublayerExtension_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{WMSSublayer as PortalWMSSublayer}from"../portal/WMSSublayer.js";import{serializable}from"../support/Serializable.js";import{isWMSSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{SublayerExtension,SubSublayerExtensionCollection}from"./_SublayerExtension.js";const ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for WMSLayerExtension is readonly";let WMSSublayerExtension=WMSSublayerExtension_1=class extends SublayerExtension{get sublayer(){return super.sublayer}get sublayerExtensions(){return super.sublayerExtensions}get layerExtension(){return super.layerExtension}get supportsSublayers(){return!0}get effectiveFullExtent(){return this.sublayer?this.sublayer.fullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}get hasFeatures(){return!0}get canChangeOpacity(){return!1}_createSublayerExtension(e){return new WMSSublayerExtension_1(e)}_isSupportedSublayer(e){return isWMSSublayer(e)}_createSublayer(e){return PortalWMSSublayer.toEsriApiWMSSublayer({...e})}async _applySublayerProperties(e,r){return PortalWMSSublayer.applyToEsriApiWMSSublayer(e,r)}_serializeSublayer(e){return PortalWMSSublayer.fromEsriApiWMSSublayer(e)}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollectionImpl(this)}};WMSSublayerExtension=WMSSublayerExtension_1=__decorate([serializable],WMSSublayerExtension);export{WMSSublayerExtension};class SubSublayerExtensionCollectionImpl extends SubSublayerExtensionCollection{add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.sublayer.sublayers&&!this._parent.sublayer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);return super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{WebTileLayer as WebTileLayerJson}from"../portal/WebTileLayer.js";import{serializable}from"../support/Serializable.js";import{isWMTSLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{getLogger}from"../utilities/log.js";import{WMTSSublayerExtension}from"./WMTSSublayerExtension.js";import{LayerExtension,LayerExtensionLayerListSettings}from"./_LayerExtension.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const log=getLogger("WMTSLayerExtension"),ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for WMTSLayerExtension is readonly";let WMTSLayerExtension=class extends LayerExtension{get supportsSublayers(){return!0}get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get _layerSupportsHideChildren(){return!1}_createSublayerExtension(e){return new WMTSSublayerExtension(e)}toJSON(e="all"){const r=super.toJSON(e);return r.layer.$ref&&(r.layer.wmtsInfo={}),r}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"WebTiledLayer",wmtsInfo:{}}}}}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this,!1)}async _onInitialize(){try{await super._onInitialize()}catch(e){if("RESTful"!==this.layer.serviceMode)throw e;{log.warn(`WMTS Layer '${this.id}' failed to load with the 'RESTful' service mode. Now attempting to load the layer with the 'KVP' service mode...`);const{fromEsriApiLayer:e,toEsriApiLayer:r}=WebTileLayerJson,t=this.layer;await this._switchLayer(await r(e(t))),this.mapExtension?.map?.layers.remove(t),this.layer.serviceMode="KVP",this.mapExtension?.map?.layers.add(this.layer),await super._onInitialize()}}this.layer.watch("activeLayer",(e=>{this.layer.title=e.title,this.notifyChange("title")}),!0)}_isSupportedLayer(e){return isWMTSLayer(e)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}async _applyPortalItemProperties(e){if("WMTS"!==e.type)throw new Error(`Cannot create WMTS layer from Portal item that has type: ${e.type}`);const r={layerType:"WebTiledLayer",...await e.fetchData()};return WebTileLayerJson.applyToEsriApiLayer(r,this.layer)}};WMTSLayerExtension=__decorate([serializable],WMTSLayerExtension);export{WMTSLayerExtension};class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"layer.sublayers"),this._layerExtension=e}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.layer.sublayers&&!this._parent.layer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...t){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createSublayerExtension(e){return this._parent._createSublayerExtension(e)}}
|
|
1
|
+
import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{WebTileLayer as WebTileLayerJson}from"../portal/WebTileLayer.js";import{serializable}from"../support/Serializable.js";import{isWMTSLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{getLogger}from"../utilities/log.js";import{WMTSSublayerExtension}from"./WMTSSublayerExtension.js";import{LayerExtension,LayerExtensionLayerListSettings}from"./_LayerExtension.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const log=getLogger("WMTSLayerExtension"),ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for WMTSLayerExtension is readonly";let WMTSLayerExtension=class extends LayerExtension{get supportsSublayers(){return!0}get layer(){return super.layer}get sublayerExtensions(){return super.sublayerExtensions}get _layerSupportsHideChildren(){return!1}_createSublayerExtension(e){return new WMTSSublayerExtension(e)}toJSON(e="all"){const r=super.toJSON(e);return r.layer.$ref&&(r.layer.wmtsInfo={}),r}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"WebTiledLayer",wmtsInfo:{}}}}}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this,!1)}async _onInitialize(){try{await super._onInitialize()}catch(e){if("RESTful"!==this.layer.serviceMode)throw e;{log.warn(`WMTS Layer '${this.id}' failed to load with the 'RESTful' service mode. Now attempting to load the layer with the 'KVP' service mode...`);const{fromEsriApiLayer:e,toEsriApiLayer:r}=WebTileLayerJson,t=this.layer;await this._switchLayer(await r(e(t))),this.mapExtension?.map?.layers.remove(t),this.layer.serviceMode="KVP",this.mapExtension?.map?.layers.add(this.layer),await super._onInitialize()}}this.layer.watch("activeLayer",(e=>{this.layer.title=e.title,this.notifyChange("title")}),!0)}_isSupportedLayer(e){return isWMTSLayer(e)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}async _applyPortalItemProperties(e){if("WMTS"!==e.type)throw new Error(`Cannot create WMTS layer from Portal item that has type: ${e.type}`);const r={layerType:"WebTiledLayer",...await e.fetchData()};return WebTileLayerJson.applyToEsriApiLayer(r,this.layer)}};WMTSLayerExtension=__decorate([serializable],WMTSLayerExtension);export{WMTSLayerExtension};class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"layer.sublayers"),this._layerExtension=e}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.layer.sublayers&&!this._parent.layer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);return super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...t){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createSublayerExtension(e){return this._parent._createSublayerExtension(e)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(t){getLayerXLogger().error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}},this._onVisibleChanged=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")},this._onSublayersSublayerVisibleChanged=(e,t,i,r)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)},this._onSublayersChange=e=>{e.added?.length&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if(i?.hasOwnProperty("listMode")&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?.title??this._deferredLayerProperties?.title??("string"==typeof this._deferredLayerProperties?.$ref?this._deferredLayerProperties?.$ref:this._deferredLayerProperties?.$ref?.title??this._deferredLayerProperties?.$ref?.id)??"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get canChangeLabels(){return!1}get initialVisibility(){return this._initialVisibility??this.layer?.visible??!1}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}get sublayersAreReadOnly(){return!0}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){checkArg("portalItemLike",e).isNotMissing();const i=t??{};checkArg("layerExtensionProperties.layer",i.layer).satisfies((e=>!isLayer(e)));const r={...i.layer};checkArg("layerExtensionProperties.layer.$ref",r.$ref).satisfies((e=>null==e));const s=new DefaultArcGISRequestHelper,a=toPortalItem(e);let n;await load(a);const o=a.typeKeywords??"";if("Map Service"===a.type)n=o.includes("Tiled")||o.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===a.type)n="ArcGISFeatureLayer";else if("Image Service"===a.type){const e=await LayerExtension._getLayerData(a.url,s);e.cacheType?"Map"===e.cacheType?n="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||o.includes("Elevation 3D Layer"))&&(n="ArcGISTiledElevationServiceLayer"):n=e.singleFusedMapCache||e.tileInfo||o.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===a.type)n="CSV";else if("KML"===a.type)n="KML";else if("Scene Service"===a.type)o.includes("3DObject")||o.includes("Point")?n="ArcGISSceneServiceLayer":o.includes("IntegratedMesh")?n="IntegratedMeshLayer":o.includes("PointCloud")?n="PointCloudLayer":o.includes("Building")&&(n="BuildingSceneLayer");else if("Stream Service"===a.type)n="ArcGISStreamLayer";else if("Vector Tile Service"===a.type)n="VectorTileLayer";else if("Feature Collection"===a.type){n="ArcGISFeatureLayer";const e=await a.fetchData();r.featureCollection=e}else if("WMTS"===a.type){n="WebTiledLayer";const e=await a.fetchData();Object.assign(r,e)}else if("WMS"===a.type){n="WMS";const e=await a.fetchData();Object.assign(r,e)}if(!n)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(r.layerType&&r.layerType!==n)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return r.layerType=n,r.$portalItem=a,i.layer=r,LayerExtension.create(i)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){if(this.layer||!this._deferredLayerProperties)return;const t=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let i;e?i=e.find(t):this.basemapExtension?.basemap?(i=this.basemapExtension.basemap.baseLayers.find(t),i=i||this.basemapExtension.basemap.referenceLayers.find(t)):this.groundExtension?.ground?i=this.groundExtension.ground.layers.find(t):this.parentLayerExtension?.layer?i=this.parentLayerExtension.layer.layers.find(t):this.mapExtension&&(i=this.mapExtension.map.layers.find(t)),i&&this._isSupportedLayer(i)&&(this._setLayer(i),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,e.hasOwnProperty("labelsVisible")&&this.layer.hasOwnProperty("labelsVisible")&&(e.labelsVisible=this.layer.labelsVisible),this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._initialVisibility=this.layer.visible,this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>!e||e===this.getDefault("layer")?.layerType),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged)}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);export{LayerExtensionLayerListSettings};let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){return e instanceof LayerExtension?!!e._deferredLayerProperties?.$ref:!isLayer(e.layer)&&!!e.layer?.$ref}let LayerExtensionReadOnlySchema=class extends LayerExtensionSchema{_setSetting(e,t){if(this._layerBindings.has(e))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);super._setSetting(e,t)}};LayerExtensionReadOnlySchema=__decorate([serializable],LayerExtensionReadOnlySchema);export{LayerExtensionReadOnlySchema};export const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";
|
|
1
|
+
import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(t){getLayerXLogger().error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}},this._onVisibleChanged=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")},this._onSublayersSublayerVisibleChanged=(e,t,i,r)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)},this._onSublayersChange=e=>{e.added?.length&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if(i?.hasOwnProperty("listMode")&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?.title??this._deferredLayerProperties?.title??("string"==typeof this._deferredLayerProperties?.$ref?this._deferredLayerProperties?.$ref:this._deferredLayerProperties?.$ref?.title??this._deferredLayerProperties?.$ref?.id)??"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get canChangeLabels(){return!1}get initialVisibility(){return this._initialVisibility??this.layer?.visible??!1}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}get sublayersAreReadOnly(){return!0}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){checkArg("portalItemLike",e).isNotMissing();const i=t??{};checkArg("layerExtensionProperties.layer",i.layer).satisfies((e=>!isLayer(e)));const r={...i.layer};checkArg("layerExtensionProperties.layer.$ref",r.$ref).satisfies((e=>null==e));const s=new DefaultArcGISRequestHelper,a=toPortalItem(e);let n;await load(a);const o=a.typeKeywords??"";if("Map Service"===a.type)n=o.includes("Tiled")||o.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===a.type)n="ArcGISFeatureLayer";else if("Image Service"===a.type){const e=await LayerExtension._getLayerData(a.url,s);e.cacheType?"Map"===e.cacheType?n="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||o.includes("Elevation 3D Layer"))&&(n="ArcGISTiledElevationServiceLayer"):n=e.singleFusedMapCache||e.tileInfo||o.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===a.type)n="CSV";else if("KML"===a.type)n="KML";else if("Scene Service"===a.type)o.includes("3DObject")||o.includes("Point")?n="ArcGISSceneServiceLayer":o.includes("IntegratedMesh")?n="IntegratedMeshLayer":o.includes("PointCloud")?n="PointCloudLayer":o.includes("Building")&&(n="BuildingSceneLayer");else if("Stream Service"===a.type)n="ArcGISStreamLayer";else if("Vector Tile Service"===a.type)n="VectorTileLayer";else if("Feature Collection"===a.type){n="ArcGISFeatureLayer";const e=await a.fetchData();r.featureCollection=e}else if("WMTS"===a.type){n="WebTiledLayer";const e=await a.fetchData();Object.assign(r,e)}else if("WMS"===a.type){n="WMS";const e=await a.fetchData();Object.assign(r,e)}if(!n)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(r.layerType&&r.layerType!==n)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return r.layerType=n,r.$portalItem=a,i.layer=r,LayerExtension.create(i)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){if(this.layer||!this._deferredLayerProperties)return;const t=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let i;e?i=e.find(t):this.basemapExtension?.basemap?(i=this.basemapExtension.basemap.baseLayers.find(t),i=i||this.basemapExtension.basemap.referenceLayers.find(t)):this.groundExtension?.ground?i=this.groundExtension.ground.layers.find(t):this.parentLayerExtension?.layer?i=this.parentLayerExtension.layer.layers.find(t):this.mapExtension&&(i=this.mapExtension.map.layers.find(t)),i&&this._isSupportedLayer(i)&&(this._setLayer(i),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,e.hasOwnProperty("labelsVisible")&&this.layer.hasOwnProperty("labelsVisible")&&(e.labelsVisible=this.layer.labelsVisible),this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._initialVisibility=this.layer.visible,this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>!e||e===this.getDefault("layer")?.layerType),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged)}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;return i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);export{LayerExtensionLayerListSettings};let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){return e instanceof LayerExtension?!!e._deferredLayerProperties?.$ref:!isLayer(e.layer)&&!!e.layer?.$ref}let LayerExtensionReadOnlySchema=class extends LayerExtensionSchema{_setSetting(e,t){if(this._layerBindings.has(e))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);super._setSetting(e,t)}};LayerExtensionReadOnlySchema=__decorate([serializable],LayerExtensionReadOnlySchema);export{LayerExtensionReadOnlySchema};export const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";
|
|
@@ -436,7 +436,7 @@ export declare class SubSublayerExtensionCollection extends SublayerExtensionCol
|
|
|
436
436
|
/**
|
|
437
437
|
* @inheritDoc
|
|
438
438
|
*/
|
|
439
|
-
add(sublayerX: SublayerExtension, index?: number):
|
|
439
|
+
add(sublayerX: SublayerExtension, index?: number): this;
|
|
440
440
|
/**
|
|
441
441
|
* @inheritDoc
|
|
442
442
|
*/
|