forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * Keeps track of a dictionary 'elementID' -> element
 | |
|  */
 | |
| import {UIEventSource} from "./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) : UIEventSource<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);
 | |
|     }
 | |
| } |