Skip to content

Commit a547e34

Browse files
Merge pull request #1445 from wri/MAPB-165
fix: bug for arcgis layer displaying default symbology
2 parents 89331a7 + 75a7730 commit a547e34

5 files changed

Lines changed: 38 additions & 13 deletions

File tree

.env.examples

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
REACT_APP_PLANET_API_KEY=planet api key
1+
REACT_APP_PLANET_API_KEY=planet api key

src/js/controllers/mapController.ts

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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
});

src/js/helpers/shareFunctionality.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,10 @@ export async function getShareableURL(props: ShareURLProps): Promise<string> {
9595
urlParams.push(`ty=${timeSlider[0]}%2C${timeSlider[1]}`);
9696

9797
//Visible Layer IDS Opacity
98+
//NOTE: Only include non-webmap layers (WRI custom layers) in the URL.
99+
// Webmap layers from ArcGIS Online should maintain their default state.
98100
const { allAvailableLayers } = mapviewState;
99-
const visibleLayers = allAvailableLayers.filter((l) => l.visible);
101+
const visibleLayers = allAvailableLayers.filter((l) => l.visible && l.origin !== 'webmap');
100102
const layerIDS: string[] = [];
101103
const layerOpacities: number[] = [];
102104
visibleLayers.forEach((l) => {

webpack.common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module.exports = {
1010
index: ['./src/css/index.scss', './src/js/index.tsx'],
1111
},
1212
output: {
13+
path: path.resolve(__dirname, 'dist'),
1314
filename: '[name].[chunkhash].js',
1415
publicPath: '',
1516
},

webpack.development.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//@ts-ignore
22

3+
const path = require('path');
34
const merge = require('webpack-merge');
45
const common = require('./webpack.common.js');
56

0 commit comments

Comments
 (0)