forked from MapComplete/MapComplete
		
	Pass dependencies explicitly, decrease dependency on legacy State.state
This commit is contained in:
		
							parent
							
								
									76c84b3972
								
							
						
					
					
						commit
						4f403c4bfc
					
				
					 4 changed files with 20 additions and 17 deletions
				
			
		|  | @ -1,17 +1,19 @@ | |||
| import FeatureSource from "../FeatureSource"; | ||||
| import {UIEventSource} from "../../UIEventSource"; | ||||
| import State from "../../../State"; | ||||
| import ElementsState from "../../State/ElementsState"; | ||||
| import {ElementStorage} from "../../ElementStorage"; | ||||
| 
 | ||||
| export default class RegisteringAllFromFeatureSourceActor { | ||||
|     public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>; | ||||
|     public readonly name; | ||||
| 
 | ||||
|     constructor(source: FeatureSource) { | ||||
|     constructor(source: FeatureSource, allElements: ElementStorage) { | ||||
|         this.features = source.features; | ||||
|         this.name = "RegisteringSource of " + source.name; | ||||
|         this.features.addCallbackAndRunD(features => { | ||||
|             for (const feature of features) { | ||||
|                 State.state.allElements.addOrGetElement(feature.feature) | ||||
|                 allElements.addOrGetElement(feature.feature) | ||||
|             } | ||||
|         }) | ||||
|     } | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ import {Tiles} from "../../Models/TileRange"; | |||
| import TileFreshnessCalculator from "./TileFreshnessCalculator"; | ||||
| import FullNodeDatabaseSource from "./TiledFeatureSource/FullNodeDatabaseSource"; | ||||
| import MapState from "../State/MapState"; | ||||
| import {ElementStorage} from "../ElementStorage"; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  | @ -160,7 +161,7 @@ export default class FeaturePipeline { | |||
|                     state.currentBounds, state.locationControl, | ||||
|                     (tileIndex, freshness) => self.freshnesses.get(id).addTileLoad(tileIndex, freshness), | ||||
|                     (tile) => { | ||||
|                         new RegisteringAllFromFeatureSourceActor(tile) | ||||
|                         new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||
|                         hierarchy.registerTile(tile); | ||||
|                         tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) | ||||
|                     } | ||||
|  | @ -180,13 +181,13 @@ export default class FeaturePipeline { | |||
|                         minZoomLevel: this.osmSourceZoomLevel, | ||||
|                         dontEnforceMinZoom: true, | ||||
|                         registerTile: (tile) => { | ||||
|                             new RegisteringAllFromFeatureSourceActor(tile) | ||||
|                             new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||
|                             perLayerHierarchy.get(id).registerTile(tile) | ||||
|                             tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) | ||||
|                         } | ||||
|                     }) | ||||
|                 } else { | ||||
|                     new RegisteringAllFromFeatureSourceActor(src) | ||||
|                     new RegisteringAllFromFeatureSourceActor(src, state.allElements) | ||||
|                     perLayerHierarchy.get(id).registerTile(src) | ||||
|                     src.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(src)) | ||||
|                 } | ||||
|  | @ -194,7 +195,7 @@ export default class FeaturePipeline { | |||
|                 new DynamicGeoJsonTileSource( | ||||
|                     filteredLayer, | ||||
|                     tile => { | ||||
|                         new RegisteringAllFromFeatureSourceActor(tile) | ||||
|                         new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||
|                         perLayerHierarchy.get(id).registerTile(tile) | ||||
|                         tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) | ||||
|                     }, | ||||
|  | @ -208,7 +209,7 @@ export default class FeaturePipeline { | |||
|             isActive: useOsmApi, | ||||
|             neededTiles: neededTilesFromOsm, | ||||
|             handleTile: tile => { | ||||
|                 new RegisteringAllFromFeatureSourceActor(tile) | ||||
|                 new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||
|                 if (tile.layer.layerDef.maxAgeOfCache > 0) { | ||||
|                     const saver = self.localStorageSavers.get(tile.layer.layerDef.id) | ||||
|                     if(saver === undefined){ | ||||
|  | @ -240,7 +241,7 @@ export default class FeaturePipeline { | |||
|             const fullNodeDb = new FullNodeDatabaseSource( | ||||
|                 state.filteredLayers.data.filter(l => l.layerDef.id === "type_node")[0], | ||||
|                 tile => { | ||||
|                     new RegisteringAllFromFeatureSourceActor(tile) | ||||
|                     new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||
|                     perLayerHierarchy.get(tile.layer.layerDef.id).registerTile(tile) | ||||
|                     tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) | ||||
|                 }) | ||||
|  | @ -273,8 +274,8 @@ export default class FeaturePipeline { | |||
| 
 | ||||
| 
 | ||||
|         // Also load points/lines that are newly added. 
 | ||||
|         const newGeometry = new NewGeometryFromChangesFeatureSource(state.changes) | ||||
|         new RegisteringAllFromFeatureSourceActor(newGeometry) | ||||
|         const newGeometry = new NewGeometryFromChangesFeatureSource(state.changes, state.osmConnection._oauth_config.url) | ||||
|         new RegisteringAllFromFeatureSourceActor(newGeometry, state.allElements) | ||||
|         // A NewGeometryFromChangesFeatureSource does not split per layer, so we do this next
 | ||||
|         new PerLayerFeatureSourceSplitter(state.filteredLayers, | ||||
|             (perLayer) => { | ||||
|  | @ -386,6 +387,7 @@ export default class FeaturePipeline { | |||
|     } | ||||
| 
 | ||||
|     private initOverpassUpdater(state: { | ||||
|         allElements: ElementStorage; | ||||
|         layoutToUse: LayoutConfig, | ||||
|         currentBounds: UIEventSource<BBox>, | ||||
|         locationControl: UIEventSource<Loc>, | ||||
|  | @ -434,7 +436,7 @@ export default class FeaturePipeline { | |||
| 
 | ||||
| 
 | ||||
|         // Register everything in the state' 'AllElements'
 | ||||
|         new RegisteringAllFromFeatureSourceActor(updater) | ||||
|         new RegisteringAllFromFeatureSourceActor(updater, state.allElements) | ||||
|         return updater; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,7 +3,6 @@ import {OsmNode, OsmRelation, OsmWay} from "../../Osm/OsmObject"; | |||
| import FeatureSource from "../FeatureSource"; | ||||
| import {UIEventSource} from "../../UIEventSource"; | ||||
| import {ChangeDescription} from "../../Osm/Actions/ChangeDescription"; | ||||
| import State from "../../../State"; | ||||
| 
 | ||||
| export class NewGeometryFromChangesFeatureSource implements FeatureSource { | ||||
|     // This class name truly puts the 'Java' into 'Javascript'
 | ||||
|  | @ -14,7 +13,7 @@ export class NewGeometryFromChangesFeatureSource implements FeatureSource { | |||
|     public readonly features: UIEventSource<{ feature: any; freshness: Date }[]> = new UIEventSource<{ feature: any; freshness: Date }[]>([]); | ||||
|     public readonly name: string = "newFeatures"; | ||||
| 
 | ||||
|     constructor(changes: Changes) { | ||||
|     constructor(changes: Changes, backendUrl: string) { | ||||
| 
 | ||||
|         const seenChanges = new Set<ChangeDescription>(); | ||||
|         const features = this.features.data; | ||||
|  | @ -55,7 +54,7 @@ export class NewGeometryFromChangesFeatureSource implements FeatureSource { | |||
|                         } | ||||
|                         tags["id"] = change.type + "/" + change.id | ||||
| 
 | ||||
|                         tags["_backend"] = State.state.osmConnection._oauth_config.url | ||||
|                         tags["_backend"] = backendUrl | ||||
| 
 | ||||
|                         switch (change.type) { | ||||
|                             case "node": | ||||
|  |  | |||
|  | @ -105,7 +105,7 @@ export default class MetaTagging { | |||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public static createFunctionsForFeature(calculatedTags: [string, string][]): ((feature: any) => void)[] { | ||||
|     public static createFunctionsForFeature(layerId: string, calculatedTags: [string, string][]): ((feature: any) => void)[] { | ||||
|         const functions: ((feature: any) => void)[] = []; | ||||
|         for (const entry of calculatedTags) { | ||||
|             const key = entry[0] | ||||
|  | @ -139,7 +139,7 @@ export default class MetaTagging { | |||
|                             return result; | ||||
|                         } catch (e) { | ||||
|                             if (MetaTagging.errorPrintCount < MetaTagging.stopErrorOutputAt) { | ||||
|                                 console.warn("Could not calculate a calculated tag defined by " + code + " due to " + e + ". This is code defined in the theme. Are you the theme creator? Doublecheck your code. Note that the metatags might not be stable on new features", e, e.stack) | ||||
|                                 console.warn("Could not calculate a calculated tag for key "+key+" defined by " + code + " (in layer"+layerId+") due to \n" + e + "\n. Are you the theme creator? Doublecheck your code. Note that the metatags might not be stable on new features", e, e.stack) | ||||
|                                 MetaTagging.errorPrintCount++; | ||||
|                                 if (MetaTagging.errorPrintCount == MetaTagging.stopErrorOutputAt) { | ||||
|                                     console.error("Got ", MetaTagging.stopErrorOutputAt, " errors calculating this metatagging - stopping output now") | ||||
|  | @ -173,7 +173,7 @@ export default class MetaTagging { | |||
|             } | ||||
| 
 | ||||
|             try { | ||||
|                 const functions = MetaTagging.createFunctionsForFeature(calculatedTags) | ||||
|                 const functions = MetaTagging.createFunctionsForFeature(layer.id, calculatedTags) | ||||
| 
 | ||||
| 
 | ||||
|                 ExtraFunctions.FullPatchFeature(params, feature); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue