forked from MapComplete/MapComplete
		
	More refactoring: using a decent, configurable datapipeline now
This commit is contained in:
		
							parent
							
								
									6ac8ec84e4
								
							
						
					
					
						commit
						e42a668c4a
					
				
					 17 changed files with 434 additions and 265 deletions
				
			
		
							
								
								
									
										43
									
								
								State.ts
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								State.ts
									
										
									
									
									
								
							|  | @ -5,8 +5,6 @@ import {Changes} from "./Logic/Osm/Changes"; | |||
| import {OsmConnection} from "./Logic/Osm/OsmConnection"; | ||||
| import Locale from "./UI/i18n/Locale"; | ||||
| import Translations from "./UI/i18n/Translations"; | ||||
| import {FilteredLayer} from "./Logic/FilteredLayer"; | ||||
| import {UpdateFromOverpass} from "./Logic/UpdateFromOverpass"; | ||||
| import {UIEventSource} from "./Logic/UIEventSource"; | ||||
| import {LocalStorageSource} from "./Logic/Web/LocalStorageSource"; | ||||
| import {QueryParameters} from "./Logic/Web/QueryParameters"; | ||||
|  | @ -20,6 +18,8 @@ import Constants from "./Models/Constants"; | |||
| import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers"; | ||||
| import * as L from "leaflet" | ||||
| import LayerResetter from "./Logic/Actors/LayerResetter"; | ||||
| import UpdateFromOverpass from "./Logic/Actors/UpdateFromOverpass"; | ||||
| import LayerConfig from "./Customizations/JSON/LayerConfig"; | ||||
| 
 | ||||
| /** | ||||
|  * Contains the global state: a bunch of UI-event sources | ||||
|  | @ -29,9 +29,9 @@ export default class State { | |||
| 
 | ||||
|     // The singleton of the global state
 | ||||
|     public static state: State; | ||||
|      | ||||
| 
 | ||||
|     public static runningFromConsole: boolean = false; | ||||
|      | ||||
| 
 | ||||
|     public readonly layoutToUse = new UIEventSource<LayoutConfig>(undefined); | ||||
| 
 | ||||
|     /** | ||||
|  | @ -62,7 +62,15 @@ export default class State { | |||
|     public layerUpdater: UpdateFromOverpass; | ||||
| 
 | ||||
| 
 | ||||
|     public filteredLayers: UIEventSource<FilteredLayer[]> = new UIEventSource<FilteredLayer[]>([]) | ||||
|     public filteredLayers: UIEventSource<{ | ||||
|         readonly   name: string | UIElement; | ||||
|         readonly isDisplayed: UIEventSource<boolean>, | ||||
|         readonly  layerDef: LayerConfig; | ||||
|     }[]> = new UIEventSource<{ | ||||
|         readonly   name: string | UIElement; | ||||
|         readonly isDisplayed: UIEventSource<boolean>, | ||||
|         readonly  layerDef: LayerConfig; | ||||
|     }[]>([]) | ||||
| 
 | ||||
|     /** | ||||
|      *  The message that should be shown at the center of the screen | ||||
|  | @ -102,9 +110,9 @@ export default class State { | |||
|      * The location as delivered by the GPS | ||||
|      */ | ||||
|     public currentGPSLocation: UIEventSource<{ | ||||
|         latlng: {lat:number, lng:number}, | ||||
|         latlng: { lat: number, lng: number }, | ||||
|         accuracy: number | ||||
|     }> = new UIEventSource<{ latlng: {lat:number, lng:number}, accuracy: number }>(undefined); | ||||
|     }> = new UIEventSource<{ latlng: { lat: number, lng: number }, accuracy: number }>(undefined); | ||||
|     public layoutDefinition: string; | ||||
|     public installedThemes: UIEventSource<{ layout: LayoutConfig; definition: string }[]>; | ||||
| 
 | ||||
|  | @ -121,7 +129,7 @@ export default class State { | |||
| 
 | ||||
|         const zoom = State.asFloat( | ||||
|             QueryParameters.GetQueryParameter("z", "" + layoutToUse.startZoom, "The initial/current zoom level") | ||||
|             .syncWith(LocalStorageSource.Get("zoom"))); | ||||
|                 .syncWith(LocalStorageSource.Get("zoom"))); | ||||
|         const lat = State.asFloat(QueryParameters.GetQueryParameter("lat", "" + layoutToUse.startLat, "The initial/current latitude") | ||||
|             .syncWith(LocalStorageSource.Get("lat"))); | ||||
|         const lon = State.asFloat(QueryParameters.GetQueryParameter("lon", "" + layoutToUse.startLon, "The initial/current longitude of the app") | ||||
|  | @ -163,11 +171,8 @@ export default class State { | |||
| 
 | ||||
| 
 | ||||
|         new LayerResetter( | ||||
|             this.backgroundLayer,this.locationControl, | ||||
|             this.availableBackgroundLayers, this.layoutToUse.map((layout : LayoutConfig)=> layout.defaultBackgroundId)); | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|             this.backgroundLayer, this.locationControl, | ||||
|             this.availableBackgroundLayers, this.layoutToUse.map((layout: LayoutConfig) => layout.defaultBackgroundId)); | ||||
| 
 | ||||
| 
 | ||||
|         function featSw(key: string, deflt: (layout: LayoutConfig) => boolean, documentation: string): UIEventSource<boolean> { | ||||
|  | @ -192,7 +197,7 @@ export default class State { | |||
|             "Disables/Enables the layer control"); | ||||
|         this.featureSwitchAddNew = featSw("fs-add-new", (layoutToUse) => layoutToUse?.enableAddNewPoints ?? true, | ||||
|             "Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place)"); | ||||
|         this.featureSwitchWelcomeMessage = featSw("fs-welcome-message", () => true,  | ||||
|         this.featureSwitchWelcomeMessage = featSw("fs-welcome-message", () => true, | ||||
|             "Disables/enables the help menu or welcome message"); | ||||
|         this.featureSwitchIframe = featSw("fs-iframe", () => false, | ||||
|             "Disables/Enables the iframe-popup"); | ||||
|  | @ -204,8 +209,6 @@ export default class State { | |||
|             "Disables/Enables the geolocation button"); | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|          | ||||
|         const testParam = QueryParameters.GetQueryParameter("test", "false", | ||||
|             "If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org").data; | ||||
|         this.osmConnection = new OsmConnection( | ||||
|  | @ -231,8 +234,8 @@ export default class State { | |||
|             } | ||||
|         ) | ||||
|         h.addCallbackAndRun(hash => { | ||||
|             if(hash === undefined || hash === ""){ | ||||
|                self.selectedElement.setData(undefined); | ||||
|             if (hash === undefined || hash === "") { | ||||
|                 self.selectedElement.setData(undefined); | ||||
|             } | ||||
|         }) | ||||
| 
 | ||||
|  | @ -284,7 +287,7 @@ export default class State { | |||
| 
 | ||||
|     } | ||||
| 
 | ||||
|    private static asFloat(source: UIEventSource<string>): UIEventSource<number> { | ||||
|     private static asFloat(source: UIEventSource<string>): UIEventSource<number> { | ||||
|         return source.map(str => { | ||||
|             let parsed = parseFloat(str); | ||||
|             return isNaN(parsed) ? undefined : parsed; | ||||
|  | @ -295,5 +298,5 @@ export default class State { | |||
|             return ("" + fl).substr(0, 8); | ||||
|         }) | ||||
|     } | ||||
|      | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue