forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {UIEventSource} from "../UIEventSource";
 | 
						|
 | 
						|
/**
 | 
						|
 * UIEventsource-wrapper around localStorage
 | 
						|
 */
 | 
						|
export class LocalStorageSource {
 | 
						|
    
 | 
						|
    static GetParsed<T>(key: string, defaultValue : T) : UIEventSource<T>{
 | 
						|
        return LocalStorageSource.Get(key).map(
 | 
						|
            str => {
 | 
						|
                if(str === undefined){
 | 
						|
                    return defaultValue
 | 
						|
                }
 | 
						|
                try{
 | 
						|
                    return JSON.parse(str)
 | 
						|
                }catch{
 | 
						|
                    return defaultValue
 | 
						|
                }
 | 
						|
            }, [], 
 | 
						|
            value => JSON.stringify(value)
 | 
						|
        )
 | 
						|
    }
 | 
						|
 | 
						|
    static Get(key: string, defaultValue: string = undefined): UIEventSource<string> {
 | 
						|
        try {
 | 
						|
            const saved = localStorage.getItem(key);
 | 
						|
            const source = new UIEventSource<string>(saved ?? defaultValue, "localstorage:"+key);
 | 
						|
 | 
						|
            source.addCallback((data) => {
 | 
						|
                try{
 | 
						|
                    localStorage.setItem(key, data);
 | 
						|
                }catch(e){
 | 
						|
                    // Probably exceeded the quota with this item!
 | 
						|
                    // Lets nuke everything
 | 
						|
                    localStorage.clear()
 | 
						|
                }
 | 
						|
                
 | 
						|
            });
 | 
						|
            return source;
 | 
						|
        } catch (e) {
 | 
						|
            return new UIEventSource<string>(defaultValue);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |