forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			No EOL
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			No EOL
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import FilteringFeatureSource from "../FeatureSource/FilteringFeatureSource";
 | 
						|
import FeatureSourceMerger from "../FeatureSource/FeatureSourceMerger";
 | 
						|
import RememberingSource from "../FeatureSource/RememberingSource";
 | 
						|
import WayHandlingApplyingFeatureSource from "../FeatureSource/WayHandlingApplyingFeatureSource";
 | 
						|
import FeatureDuplicatorPerLayer from "../FeatureSource/FeatureDuplicatorPerLayer";
 | 
						|
import FeatureSource from "../FeatureSource/FeatureSource";
 | 
						|
import {UIEventSource} from "../UIEventSource";
 | 
						|
import LocalStorageSaver from "./LocalStorageSaver";
 | 
						|
import LayerConfig from "../../Customizations/JSON/LayerConfig";
 | 
						|
import LocalStorageSource from "./LocalStorageSource";
 | 
						|
import LayoutConfig from "../../Customizations/JSON/LayoutConfig";
 | 
						|
import Loc from "../../Models/Loc";
 | 
						|
import GeoJsonSource from "./GeoJsonSource";
 | 
						|
import MetaTaggingFeatureSource from "./MetaTaggingFeatureSource";
 | 
						|
 | 
						|
export default class FeaturePipeline implements FeatureSource {
 | 
						|
 | 
						|
    public features: UIEventSource<{ feature: any; freshness: Date }[]>;
 | 
						|
 | 
						|
    constructor(flayers: UIEventSource<{ isDisplayed: UIEventSource<boolean>, layerDef: LayerConfig }[]>,
 | 
						|
                updater: FeatureSource,
 | 
						|
                layout: UIEventSource<LayoutConfig>,
 | 
						|
                newPoints: FeatureSource,
 | 
						|
                locationControl: UIEventSource<Loc>) {
 | 
						|
 | 
						|
        const amendedOverpassSource =
 | 
						|
            new RememberingSource(new FeatureDuplicatorPerLayer(flayers,
 | 
						|
                new LocalStorageSaver(updater, layout))
 | 
						|
            );
 | 
						|
 | 
						|
        const geojsonSources: GeoJsonSource [] = []
 | 
						|
        for (const flayer of flayers.data) {
 | 
						|
            const sourceUrl = flayer.layerDef.source.geojsonSource
 | 
						|
            if (sourceUrl !== undefined) {
 | 
						|
                geojsonSources.push(
 | 
						|
                    new GeoJsonSource(flayer.layerDef.id, sourceUrl))
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        const amendedLocalStorageSource =
 | 
						|
            new RememberingSource(new FeatureDuplicatorPerLayer(flayers, new LocalStorageSource(layout))
 | 
						|
            );
 | 
						|
 | 
						|
        newPoints = new FeatureDuplicatorPerLayer(flayers, newPoints);
 | 
						|
 | 
						|
        const merged =
 | 
						|
            new MetaTaggingFeatureSource(
 | 
						|
                new FeatureSourceMerger([
 | 
						|
                    amendedOverpassSource,
 | 
						|
                    amendedLocalStorageSource,
 | 
						|
                    newPoints,
 | 
						|
                    ...geojsonSources
 | 
						|
                ]));
 | 
						|
 | 
						|
        const source =
 | 
						|
            new WayHandlingApplyingFeatureSource(flayers,
 | 
						|
                new FilteringFeatureSource(
 | 
						|
                    flayers,
 | 
						|
                    locationControl,
 | 
						|
                    merged
 | 
						|
                ));
 | 
						|
        this.features = source.features;
 | 
						|
    }
 | 
						|
 | 
						|
} |