forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			No EOL
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			No EOL
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {ElementStorage} from "../ElementStorage";
 | |
| import {Changes} from "../Osm/Changes";
 | |
| 
 | |
| export default class ChangeToElementsActor {
 | |
|     constructor(changes: Changes, allElements: ElementStorage) {
 | |
|         changes.pendingChanges.addCallbackAndRun(changes => {
 | |
|             for (const change of changes) {
 | |
|                 const id = change.type + "/" + change.id;
 | |
|                 if (!allElements.has(id)) {
 | |
|                     continue; // Ignored as the geometryFixer will introduce this
 | |
|                 }
 | |
|                 const src = allElements.getEventSourceById(id)
 | |
| 
 | |
|                 let changed = false;
 | |
|                 for (const kv of change.tags ?? []) {
 | |
|                     // Apply tag changes and ping the consumers
 | |
|                     const k = kv.k
 | |
|                     let v = kv.v
 | |
|                     if (v === "") {
 | |
|                         v = undefined;
 | |
|                     }
 | |
|                     if (src.data[k] === v) {
 | |
|                         continue
 | |
|                     }
 | |
|                     changed = true;
 | |
|                     src.data[k] = v;
 | |
|                 }
 | |
|                 if (changed) {
 | |
|                     src.ping()
 | |
|                 }
 | |
| 
 | |
| 
 | |
|             }
 | |
|         })
 | |
|     }
 | |
| } |