forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			No EOL
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			No EOL
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/***
 | 
						|
 * Saves all the features that are passed in to localstorage, so they can be retrieved on the next run
 | 
						|
 *
 | 
						|
 * Technically, more an Actor then a featuresource, but it fits more neatly this ay
 | 
						|
 */
 | 
						|
import FeatureSource from "./FeatureSource";
 | 
						|
import {UIEventSource} from "../UIEventSource";
 | 
						|
import LayoutConfig from "../../Customizations/JSON/LayoutConfig";
 | 
						|
 | 
						|
export default class LocalStorageSaver implements FeatureSource {
 | 
						|
    public static readonly storageKey: string = "cached-features";
 | 
						|
    public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>;
 | 
						|
 | 
						|
    public readonly name = "LocalStorageSaver";
 | 
						|
    
 | 
						|
    constructor(source: FeatureSource, layout: UIEventSource<LayoutConfig>) {
 | 
						|
        this.features = source.features;
 | 
						|
 | 
						|
        this.features.addCallbackAndRun(features => {
 | 
						|
            if (features === undefined) {
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            
 | 
						|
            const now = new Date().getTime()
 | 
						|
            features = features.filter(f => layout.data.cacheTimeout > Math.abs(now - f.freshness.getTime())/1000) 
 | 
						|
            
 | 
						|
       
 | 
						|
            if(features.length == 0){
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            try {
 | 
						|
                const key = LocalStorageSaver.storageKey+layout.data.id
 | 
						|
                localStorage.setItem(key, JSON.stringify(features));
 | 
						|
                console.log("Saved ",features.length, "elements to",key)
 | 
						|
            } catch (e) {
 | 
						|
                console.warn("Could not save the features to local storage:", e)
 | 
						|
            }
 | 
						|
        })
 | 
						|
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} |