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