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