| 
									
										
										
										
											2021-10-15 05:20:02 +02:00
										 |  |  | import FeatureSwitchState from "./FeatureSwitchState"; | 
					
						
							|  |  |  | import {ElementStorage} from "../ElementStorage"; | 
					
						
							|  |  |  | import {Changes} from "../Osm/Changes"; | 
					
						
							|  |  |  | import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; | 
					
						
							|  |  |  | import {UIEventSource} from "../UIEventSource"; | 
					
						
							|  |  |  | import Loc from "../../Models/Loc"; | 
					
						
							|  |  |  | import {BBox} from "../BBox"; | 
					
						
							|  |  |  | import {QueryParameters} from "../Web/QueryParameters"; | 
					
						
							|  |  |  | import {LocalStorageSource} from "../Web/LocalStorageSource"; | 
					
						
							|  |  |  | import {Utils} from "../../Utils"; | 
					
						
							|  |  |  | import ChangeToElementsActor from "../Actors/ChangeToElementsActor"; | 
					
						
							|  |  |  | import PendingChangesUploader from "../Actors/PendingChangesUploader"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * The part of the state keeping track of where the elements, loading them, configuring the feature pipeline etc | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-10-22 14:01:40 +02:00
										 |  |  | export default class ElementsState extends FeatureSwitchState { | 
					
						
							| 
									
										
										
										
											2021-10-15 05:20:02 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      The mapping from id -> UIEventSource<properties> | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public allElements: ElementStorage = new ElementStorage(); | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      THe change handler | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-10-22 14:01:40 +02:00
										 |  |  |     public changes: Changes; | 
					
						
							| 
									
										
										
										
											2021-10-15 05:20:02 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      The latest element that was selected | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public readonly selectedElement = new UIEventSource<any>( | 
					
						
							|  |  |  |         undefined, | 
					
						
							|  |  |  |         "Selected element" | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-22 14:01:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-15 05:20:02 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * The map location: currently centered lat, lon and zoom | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public readonly locationControl = new UIEventSource<Loc>(undefined, "locationControl"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * The current visible extent of the screen | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public readonly currentBounds = new UIEventSource<BBox>(undefined) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     constructor(layoutToUse: LayoutConfig) { | 
					
						
							|  |  |  |         super(layoutToUse); | 
					
						
							| 
									
										
										
										
											2021-10-22 14:01:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-13 02:05:34 +01:00
										 |  |  |         // @ts-ignore
 | 
					
						
							|  |  |  |         this.changes = new Changes(this,layoutToUse?.isLeftRightSensitive() ?? false) | 
					
						
							| 
									
										
										
										
											2021-10-15 05:20:02 +02:00
										 |  |  |         { | 
					
						
							|  |  |  |             // -- Location control initialization
 | 
					
						
							|  |  |  |             const zoom = UIEventSource.asFloat( | 
					
						
							|  |  |  |                 QueryParameters.GetQueryParameter( | 
					
						
							|  |  |  |                     "z", | 
					
						
							|  |  |  |                     "" + (layoutToUse?.startZoom ?? 1), | 
					
						
							|  |  |  |                     "The initial/current zoom level" | 
					
						
							|  |  |  |                 ).syncWith(LocalStorageSource.Get("zoom")) | 
					
						
							|  |  |  |             ); | 
					
						
							|  |  |  |             const lat = UIEventSource.asFloat( | 
					
						
							|  |  |  |                 QueryParameters.GetQueryParameter( | 
					
						
							|  |  |  |                     "lat", | 
					
						
							|  |  |  |                     "" + (layoutToUse?.startLat ?? 0), | 
					
						
							|  |  |  |                     "The initial/current latitude" | 
					
						
							|  |  |  |                 ).syncWith(LocalStorageSource.Get("lat")) | 
					
						
							|  |  |  |             ); | 
					
						
							|  |  |  |             const lon = UIEventSource.asFloat( | 
					
						
							|  |  |  |                 QueryParameters.GetQueryParameter( | 
					
						
							|  |  |  |                     "lon", | 
					
						
							|  |  |  |                     "" + (layoutToUse?.startLon ?? 0), | 
					
						
							|  |  |  |                     "The initial/current longitude of the app" | 
					
						
							|  |  |  |                 ).syncWith(LocalStorageSource.Get("lon")) | 
					
						
							|  |  |  |             ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             this.locationControl.setData({ | 
					
						
							|  |  |  |                 zoom: Utils.asFloat(zoom.data), | 
					
						
							|  |  |  |                 lat: Utils.asFloat(lat.data), | 
					
						
							|  |  |  |                 lon: Utils.asFloat(lon.data), | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |             this.locationControl.addCallback((latlonz) => { | 
					
						
							|  |  |  |                 // Sync th location controls
 | 
					
						
							|  |  |  |                 zoom.setData(latlonz.zoom); | 
					
						
							|  |  |  |                 lat.setData(latlonz.lat); | 
					
						
							|  |  |  |                 lon.setData(latlonz.lon); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-10-22 14:01:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-15 05:20:02 +02:00
										 |  |  |         new ChangeToElementsActor(this.changes, this.allElements) | 
					
						
							|  |  |  |         new PendingChangesUploader(this.changes, this.selectedElement); | 
					
						
							| 
									
										
										
										
											2021-10-22 14:01:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-15 05:20:02 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | } |