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 FeatureSource from "../FeatureSource"; | ||||||
| import {UIEventSource} from "../../UIEventSource"; | import {UIEventSource} from "../../UIEventSource"; | ||||||
| import State from "../../../State"; | import State from "../../../State"; | ||||||
|  | import ElementsState from "../../State/ElementsState"; | ||||||
|  | import {ElementStorage} from "../../ElementStorage"; | ||||||
| 
 | 
 | ||||||
| export default class RegisteringAllFromFeatureSourceActor { | export default class RegisteringAllFromFeatureSourceActor { | ||||||
|     public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>; |     public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>; | ||||||
|     public readonly name; |     public readonly name; | ||||||
| 
 | 
 | ||||||
|     constructor(source: FeatureSource) { |     constructor(source: FeatureSource, allElements: ElementStorage) { | ||||||
|         this.features = source.features; |         this.features = source.features; | ||||||
|         this.name = "RegisteringSource of " + source.name; |         this.name = "RegisteringSource of " + source.name; | ||||||
|         this.features.addCallbackAndRunD(features => { |         this.features.addCallbackAndRunD(features => { | ||||||
|             for (const feature of 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 TileFreshnessCalculator from "./TileFreshnessCalculator"; | ||||||
| import FullNodeDatabaseSource from "./TiledFeatureSource/FullNodeDatabaseSource"; | import FullNodeDatabaseSource from "./TiledFeatureSource/FullNodeDatabaseSource"; | ||||||
| import MapState from "../State/MapState"; | import MapState from "../State/MapState"; | ||||||
|  | import {ElementStorage} from "../ElementStorage"; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  | @ -160,7 +161,7 @@ export default class FeaturePipeline { | ||||||
|                     state.currentBounds, state.locationControl, |                     state.currentBounds, state.locationControl, | ||||||
|                     (tileIndex, freshness) => self.freshnesses.get(id).addTileLoad(tileIndex, freshness), |                     (tileIndex, freshness) => self.freshnesses.get(id).addTileLoad(tileIndex, freshness), | ||||||
|                     (tile) => { |                     (tile) => { | ||||||
|                         new RegisteringAllFromFeatureSourceActor(tile) |                         new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||||
|                         hierarchy.registerTile(tile); |                         hierarchy.registerTile(tile); | ||||||
|                         tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) |                         tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) | ||||||
|                     } |                     } | ||||||
|  | @ -180,13 +181,13 @@ export default class FeaturePipeline { | ||||||
|                         minZoomLevel: this.osmSourceZoomLevel, |                         minZoomLevel: this.osmSourceZoomLevel, | ||||||
|                         dontEnforceMinZoom: true, |                         dontEnforceMinZoom: true, | ||||||
|                         registerTile: (tile) => { |                         registerTile: (tile) => { | ||||||
|                             new RegisteringAllFromFeatureSourceActor(tile) |                             new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||||
|                             perLayerHierarchy.get(id).registerTile(tile) |                             perLayerHierarchy.get(id).registerTile(tile) | ||||||
|                             tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) |                             tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) | ||||||
|                         } |                         } | ||||||
|                     }) |                     }) | ||||||
|                 } else { |                 } else { | ||||||
|                     new RegisteringAllFromFeatureSourceActor(src) |                     new RegisteringAllFromFeatureSourceActor(src, state.allElements) | ||||||
|                     perLayerHierarchy.get(id).registerTile(src) |                     perLayerHierarchy.get(id).registerTile(src) | ||||||
|                     src.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(src)) |                     src.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(src)) | ||||||
|                 } |                 } | ||||||
|  | @ -194,7 +195,7 @@ export default class FeaturePipeline { | ||||||
|                 new DynamicGeoJsonTileSource( |                 new DynamicGeoJsonTileSource( | ||||||
|                     filteredLayer, |                     filteredLayer, | ||||||
|                     tile => { |                     tile => { | ||||||
|                         new RegisteringAllFromFeatureSourceActor(tile) |                         new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||||
|                         perLayerHierarchy.get(id).registerTile(tile) |                         perLayerHierarchy.get(id).registerTile(tile) | ||||||
|                         tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) |                         tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) | ||||||
|                     }, |                     }, | ||||||
|  | @ -208,7 +209,7 @@ export default class FeaturePipeline { | ||||||
|             isActive: useOsmApi, |             isActive: useOsmApi, | ||||||
|             neededTiles: neededTilesFromOsm, |             neededTiles: neededTilesFromOsm, | ||||||
|             handleTile: tile => { |             handleTile: tile => { | ||||||
|                 new RegisteringAllFromFeatureSourceActor(tile) |                 new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||||
|                 if (tile.layer.layerDef.maxAgeOfCache > 0) { |                 if (tile.layer.layerDef.maxAgeOfCache > 0) { | ||||||
|                     const saver = self.localStorageSavers.get(tile.layer.layerDef.id) |                     const saver = self.localStorageSavers.get(tile.layer.layerDef.id) | ||||||
|                     if(saver === undefined){ |                     if(saver === undefined){ | ||||||
|  | @ -240,7 +241,7 @@ export default class FeaturePipeline { | ||||||
|             const fullNodeDb = new FullNodeDatabaseSource( |             const fullNodeDb = new FullNodeDatabaseSource( | ||||||
|                 state.filteredLayers.data.filter(l => l.layerDef.id === "type_node")[0], |                 state.filteredLayers.data.filter(l => l.layerDef.id === "type_node")[0], | ||||||
|                 tile => { |                 tile => { | ||||||
|                     new RegisteringAllFromFeatureSourceActor(tile) |                     new RegisteringAllFromFeatureSourceActor(tile, state.allElements) | ||||||
|                     perLayerHierarchy.get(tile.layer.layerDef.id).registerTile(tile) |                     perLayerHierarchy.get(tile.layer.layerDef.id).registerTile(tile) | ||||||
|                     tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) |                     tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile)) | ||||||
|                 }) |                 }) | ||||||
|  | @ -273,8 +274,8 @@ export default class FeaturePipeline { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         // Also load points/lines that are newly added. 
 |         // Also load points/lines that are newly added. 
 | ||||||
|         const newGeometry = new NewGeometryFromChangesFeatureSource(state.changes) |         const newGeometry = new NewGeometryFromChangesFeatureSource(state.changes, state.osmConnection._oauth_config.url) | ||||||
|         new RegisteringAllFromFeatureSourceActor(newGeometry) |         new RegisteringAllFromFeatureSourceActor(newGeometry, state.allElements) | ||||||
|         // A NewGeometryFromChangesFeatureSource does not split per layer, so we do this next
 |         // A NewGeometryFromChangesFeatureSource does not split per layer, so we do this next
 | ||||||
|         new PerLayerFeatureSourceSplitter(state.filteredLayers, |         new PerLayerFeatureSourceSplitter(state.filteredLayers, | ||||||
|             (perLayer) => { |             (perLayer) => { | ||||||
|  | @ -386,6 +387,7 @@ export default class FeaturePipeline { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private initOverpassUpdater(state: { |     private initOverpassUpdater(state: { | ||||||
|  |         allElements: ElementStorage; | ||||||
|         layoutToUse: LayoutConfig, |         layoutToUse: LayoutConfig, | ||||||
|         currentBounds: UIEventSource<BBox>, |         currentBounds: UIEventSource<BBox>, | ||||||
|         locationControl: UIEventSource<Loc>, |         locationControl: UIEventSource<Loc>, | ||||||
|  | @ -434,7 +436,7 @@ export default class FeaturePipeline { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         // Register everything in the state' 'AllElements'
 |         // Register everything in the state' 'AllElements'
 | ||||||
|         new RegisteringAllFromFeatureSourceActor(updater) |         new RegisteringAllFromFeatureSourceActor(updater, state.allElements) | ||||||
|         return updater; |         return updater; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,6 @@ import {OsmNode, OsmRelation, OsmWay} from "../../Osm/OsmObject"; | ||||||
| import FeatureSource from "../FeatureSource"; | import FeatureSource from "../FeatureSource"; | ||||||
| import {UIEventSource} from "../../UIEventSource"; | import {UIEventSource} from "../../UIEventSource"; | ||||||
| import {ChangeDescription} from "../../Osm/Actions/ChangeDescription"; | import {ChangeDescription} from "../../Osm/Actions/ChangeDescription"; | ||||||
| import State from "../../../State"; |  | ||||||
| 
 | 
 | ||||||
| export class NewGeometryFromChangesFeatureSource implements FeatureSource { | export class NewGeometryFromChangesFeatureSource implements FeatureSource { | ||||||
|     // This class name truly puts the 'Java' into 'Javascript'
 |     // 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 features: UIEventSource<{ feature: any; freshness: Date }[]> = new UIEventSource<{ feature: any; freshness: Date }[]>([]); | ||||||
|     public readonly name: string = "newFeatures"; |     public readonly name: string = "newFeatures"; | ||||||
| 
 | 
 | ||||||
|     constructor(changes: Changes) { |     constructor(changes: Changes, backendUrl: string) { | ||||||
| 
 | 
 | ||||||
|         const seenChanges = new Set<ChangeDescription>(); |         const seenChanges = new Set<ChangeDescription>(); | ||||||
|         const features = this.features.data; |         const features = this.features.data; | ||||||
|  | @ -55,7 +54,7 @@ export class NewGeometryFromChangesFeatureSource implements FeatureSource { | ||||||
|                         } |                         } | ||||||
|                         tags["id"] = change.type + "/" + change.id |                         tags["id"] = change.type + "/" + change.id | ||||||
| 
 | 
 | ||||||
|                         tags["_backend"] = State.state.osmConnection._oauth_config.url |                         tags["_backend"] = backendUrl | ||||||
| 
 | 
 | ||||||
|                         switch (change.type) { |                         switch (change.type) { | ||||||
|                             case "node": |                             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)[] = []; |         const functions: ((feature: any) => void)[] = []; | ||||||
|         for (const entry of calculatedTags) { |         for (const entry of calculatedTags) { | ||||||
|             const key = entry[0] |             const key = entry[0] | ||||||
|  | @ -139,7 +139,7 @@ export default class MetaTagging { | ||||||
|                             return result; |                             return result; | ||||||
|                         } catch (e) { |                         } catch (e) { | ||||||
|                             if (MetaTagging.errorPrintCount < MetaTagging.stopErrorOutputAt) { |                             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++; |                                 MetaTagging.errorPrintCount++; | ||||||
|                                 if (MetaTagging.errorPrintCount == MetaTagging.stopErrorOutputAt) { |                                 if (MetaTagging.errorPrintCount == MetaTagging.stopErrorOutputAt) { | ||||||
|                                     console.error("Got ", MetaTagging.stopErrorOutputAt, " errors calculating this metatagging - stopping output now") |                                     console.error("Got ", MetaTagging.stopErrorOutputAt, " errors calculating this metatagging - stopping output now") | ||||||
|  | @ -173,7 +173,7 @@ export default class MetaTagging { | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             try { |             try { | ||||||
|                 const functions = MetaTagging.createFunctionsForFeature(calculatedTags) |                 const functions = MetaTagging.createFunctionsForFeature(layer.id, calculatedTags) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|                 ExtraFunctions.FullPatchFeature(params, feature); |                 ExtraFunctions.FullPatchFeature(params, feature); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue