forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * Keeps track of a dictionary 'elementID' -> element | ||
|  |  */ | ||
|  | import {UIEventSource} from "../UI/UIEventSource"; | ||
|  | 
 | ||
|  | export class ElementStorage { | ||
|  | 
 | ||
|  |     private _elements = []; | ||
|  | 
 | ||
|  |     constructor() { | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     addElementById(id: string, eventSource: UIEventSource<any>) { | ||
|  |         this._elements[id] = eventSource; | ||
|  |     } | ||
|  | 
 | ||
|  |     addElement(element): UIEventSource<any> { | ||
|  |         const eventSource = new UIEventSource<any>(element.properties); | ||
|  |         this._elements[element.properties.id] = eventSource; | ||
|  |         return eventSource; | ||
|  |     } | ||
|  | 
 | ||
|  |     addOrGetElement(element: any) { | ||
|  |         const elementId = element.properties.id; | ||
|  |         if (elementId in this._elements) { | ||
|  |             const es = this._elements[elementId]; | ||
|  |             const keptKeys = es.data; | ||
|  |             // The element already exists
 | ||
|  |             // We add all the new keys to the old keys
 | ||
|  |             for (const k in element.properties) { | ||
|  |                 const v = element.properties[k]; | ||
|  |                 if (keptKeys[k] !== v) { | ||
|  |                     keptKeys[k] = v; | ||
|  |                     es.ping(); | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |             return es; | ||
|  |         }else{ | ||
|  |             return this.addElement(element); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     getElement(elementId): UIEventSource<any> { | ||
|  |         if (elementId in this._elements) { | ||
|  |             return this._elements[elementId]; | ||
|  |         } | ||
|  |         console.log("Can not find eventsource with id ", elementId); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     removeId(oldId: string) { | ||
|  |         delete this._elements[oldId]; | ||
|  |     } | ||
|  | } |