| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | import {UIEventSource} from "../UIEventSource"; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:36:21 +01:00
										 |  |  | import BaseLayer from "../../Models/BaseLayer"; | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | import AvailableBaseLayers from "./AvailableBaseLayers"; | 
					
						
							|  |  |  | import Loc from "../../Models/Loc"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Sets the current background layer to a layer that is actually available | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-09-21 02:10:42 +02:00
										 |  |  | export default class BackgroundLayerResetter { | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     constructor(currentBackgroundLayer: UIEventSource<BaseLayer>, | 
					
						
							|  |  |  |                 location: UIEventSource<Loc>, | 
					
						
							|  |  |  |                 availableLayers: UIEventSource<BaseLayer[]>, | 
					
						
							|  |  |  |                 defaultLayerId: UIEventSource<string> = undefined) { | 
					
						
							|  |  |  |         defaultLayerId = defaultLayerId ?? new UIEventSource<string>(AvailableBaseLayers.osmCarto.id); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         // Change the baselayer back to OSM if we go out of the current range of the layer
 | 
					
						
							|  |  |  |         availableLayers.addCallbackAndRun(availableLayers => { | 
					
						
							|  |  |  |             let defaultLayer = undefined; | 
					
						
							|  |  |  |             const currentLayer = currentBackgroundLayer.data.id; | 
					
						
							|  |  |  |             for (const availableLayer of availableLayers) { | 
					
						
							|  |  |  |                 if (availableLayer.id === currentLayer) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     if (availableLayer.max_zoom < location.data.zoom) { | 
					
						
							|  |  |  |                         break; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     if (availableLayer.min_zoom > location.data.zoom) { | 
					
						
							|  |  |  |                         break; | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |                     if (availableLayer.id === defaultLayerId.data) { | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |                         defaultLayer = availableLayer; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     return; // All good - the current layer still works!
 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             // Oops, we panned out of range for this layer!
 | 
					
						
							|  |  |  |             console.log("AvailableBaseLayers-actor: detected that the current bounds aren't sufficient anymore - reverting to OSM standard") | 
					
						
							|  |  |  |             currentBackgroundLayer.setData(defaultLayer ?? AvailableBaseLayers.osmCarto); | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | } |