@@ -413,11 +413,15 @@ export class MapController {
413413 const id = String ( l . sublayerID ? l . sublayerID : l . layerID ) ;
414414 return id === String ( layerObject . id ) ;
415415 } ) ;
416- layerObject . visible = ! ! urlLayer ;
416+
417+ // Only override visibility for non-webmap layers
418+ if ( layerObject . origin !== 'webmap' ) {
419+ layerObject . visible = ! ! urlLayer ;
420+ }
417421 } ) ;
418422
419- //Sync esri map visibility
420- this . syncWebmapLayersWithURL ( layerInfosFromURL ) ;
423+ //Sync esri map visibility (only for non-webmap layers)
424+ this . syncWebmapLayersWithURL ( layerInfosFromURL , allLayerObjects ) ;
421425 }
422426
423427 // if layers fail to load, we add them to the layer list with error message
@@ -2068,11 +2072,28 @@ export class MapController {
20682072 }
20692073
20702074 //Helper to deal with URL params and Webmap loaded layers
2075+ //NOTE: This function should NOT modify webmap layers from ArcGIS Online.
2076+ // Only non-webmap layers (WRI layers) should be controlled via URL parameters.
2077+ syncWebmapLayersWithURL ( layerInfosFromURL : LayerInfo [ ] , allLayerObjects : LayerProps [ ] ) : void {
2078+ this . _map ?. layers . forEach ( ( layer : any ) => {
2079+ // Find the corresponding layer object to check its origin
2080+ const layerObject = allLayerObjects . find ( ( l ) => l . id === layer . id ) ;
2081+
2082+ // Skip if this is a webmap layer - they should maintain their default state from ArcGIS Online
2083+ if ( layerObject && layerObject . origin === 'webmap' ) {
2084+ return ; // Skip - let webmap layers use their ArcGIS Online defaults
2085+ }
2086+
2087+ // For non-webmap layers, apply URL visibility/opacity
2088+ if ( layer . allSublayers && layer . allSublayers . items . length > 0 ) {
2089+ layer . sublayers . items . forEach ( ( sub : __esri . Layer ) => {
2090+ // Check if sublayer is from webmap
2091+ const sublayerObject = allLayerObjects . find ( ( l ) => l . id === sub . id && l . parentID === layer . id ) ;
2092+
2093+ if ( sublayerObject && sublayerObject . origin === 'webmap' ) {
2094+ return ; // Skip - preserve webmap sublayer defaults
2095+ }
20712096
2072- syncWebmapLayersWithURL ( layerInfosFromURL : LayerInfo [ ] ) : void {
2073- this . _map ?. layers . forEach ( ( webmapLayer : any ) => {
2074- if ( webmapLayer . allSublayers && webmapLayer . allSublayers . items . length > 0 ) {
2075- webmapLayer . sublayers . items . forEach ( ( sub : __esri . Layer ) => {
20762097 const layerFromURL = layerInfosFromURL . find ( ( l ) => l . sublayerID && String ( l . sublayerID ) === String ( sub . id ) ) ;
20772098 if ( layerFromURL ) {
20782099 sub . visible = true ;
@@ -2082,12 +2103,12 @@ export class MapController {
20822103 }
20832104 } ) ;
20842105 } else {
2085- const layerFromURL = layerInfosFromURL . find ( ( l ) => l . layerID === webmapLayer . id ) ;
2106+ const layerFromURL = layerInfosFromURL . find ( ( l ) => l . layerID === layer . id ) ;
20862107 if ( layerFromURL ) {
2087- webmapLayer . visible = true ;
2088- webmapLayer . opacity = layerFromURL . opacity ;
2108+ layer . visible = true ;
2109+ layer . opacity = layerFromURL . opacity ;
20892110 } else {
2090- webmapLayer . visible = false ;
2111+ layer . visible = false ;
20912112 }
20922113 }
20932114 } ) ;
0 commit comments