| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2021-10-20 00:09:40 +02:00
										 |  |  | import { Utils } from "../../Utils" | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 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[]>, | 
					
						
							| 
									
										
										
										
											2021-09-28 18:00:44 +02:00
										 |  |  |         defaultLayerId: string = undefined | 
					
						
							|  |  |  |     ) { | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  |         if (Utils.runningFromConsole) { | 
					
						
							| 
									
										
										
										
											2021-10-20 00:09:40 +02:00
										 |  |  |             return | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-28 18:00:44 +02:00
										 |  |  |         defaultLayerId = defaultLayerId ?? AvailableBaseLayers.osmCarto.id | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-28 18:00:44 +02:00
										 |  |  |                     if (availableLayer.id === defaultLayerId) { | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |