mirror of
				https://github.com/gpxstudio/gpx.studio.git
				synced 2025-11-04 05:21:09 +00:00 
			
		
		
		
	fix updating overlay opacity
This commit is contained in:
		@@ -758,7 +758,7 @@ export const overpassTree: LayerTreeType = {
 | 
			
		||||
export const defaultBasemap = 'mapboxOutdoors';
 | 
			
		||||
 | 
			
		||||
// Default overlays used (none)
 | 
			
		||||
export const defaultOverlays = {
 | 
			
		||||
export const defaultOverlays: LayerTreeType = {
 | 
			
		||||
    overlays: {
 | 
			
		||||
        world: {
 | 
			
		||||
            waymarked_trails: {
 | 
			
		||||
 
 | 
			
		||||
@@ -84,18 +84,21 @@
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function updateOverlays() {
 | 
			
		||||
		if ($map && $currentOverlays) {
 | 
			
		||||
		if ($map && $currentOverlays && $opacities) {
 | 
			
		||||
			let overlayLayers = getLayers($currentOverlays);
 | 
			
		||||
			try {
 | 
			
		||||
				let activeOverlays = $map
 | 
			
		||||
					.getStyle()
 | 
			
		||||
					.imports.filter((i) => i.id !== 'basemap' && i.id !== 'overlays');
 | 
			
		||||
				let toRemove = activeOverlays.filter((i) => !overlayLayers[i.id]);
 | 
			
		||||
				toRemove.forEach((i) => {
 | 
			
		||||
					$map.removeImport(i.id);
 | 
			
		||||
				let activeOverlays = $map.getStyle().imports.reduce((acc, i) => {
 | 
			
		||||
					if (!['basemap', 'overlays', 'glyphs-and-sprite'].includes(i.id)) {
 | 
			
		||||
						acc[i.id] = i;
 | 
			
		||||
					}
 | 
			
		||||
					return acc;
 | 
			
		||||
				}, {});
 | 
			
		||||
				let toRemove = Object.keys(activeOverlays).filter((id) => !overlayLayers[id]);
 | 
			
		||||
				toRemove.forEach((id) => {
 | 
			
		||||
					$map.removeImport(id);
 | 
			
		||||
				});
 | 
			
		||||
				let toAdd = Object.entries(overlayLayers)
 | 
			
		||||
					.filter(([id, selected]) => selected && !activeOverlays.some((j) => j.id === id))
 | 
			
		||||
					.filter(([id, selected]) => selected && !activeOverlays.hasOwnProperty(id))
 | 
			
		||||
					.map(([id]) => id);
 | 
			
		||||
				toAdd.forEach((id) => {
 | 
			
		||||
					addOverlay(id);
 | 
			
		||||
@@ -106,7 +109,7 @@
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	$: if ($map && $currentOverlays) {
 | 
			
		||||
	$: if ($map && $currentOverlays && $opacities) {
 | 
			
		||||
		updateOverlays();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -157,15 +157,16 @@
 | 
			
		||||
										max={1}
 | 
			
		||||
										step={0.1}
 | 
			
		||||
										disabled={$selectedOverlay === undefined}
 | 
			
		||||
										onValueChange={() => {
 | 
			
		||||
										onValueChange={(value) => {
 | 
			
		||||
											if ($selectedOverlay) {
 | 
			
		||||
												$opacities[$selectedOverlay.value] = $overlayOpacity[0];
 | 
			
		||||
												if ($map) {
 | 
			
		||||
													if ($map.getLayer($selectedOverlay.value)) {
 | 
			
		||||
														$map.removeLayer($selectedOverlay.value);
 | 
			
		||||
														$currentOverlays = $currentOverlays;
 | 
			
		||||
												if ($map && isSelected($currentOverlays, $selectedOverlay.value)) {
 | 
			
		||||
													try {
 | 
			
		||||
														$map.removeImport($selectedOverlay.value);
 | 
			
		||||
													} catch (e) {
 | 
			
		||||
														// No reliable way to check if the map is ready to remove sources and layers
 | 
			
		||||
													}
 | 
			
		||||
												}
 | 
			
		||||
												$opacities[$selectedOverlay.value] = value[0];
 | 
			
		||||
											}
 | 
			
		||||
										}}
 | 
			
		||||
									/>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user