| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | import { ElementStorage } from "../ElementStorage" | 
					
						
							|  |  |  | import { Changes } from "../Osm/Changes" | 
					
						
							| 
									
										
										
										
											2021-07-15 20:47:28 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default class ChangeToElementsActor { | 
					
						
							|  |  |  |     constructor(changes: Changes, allElements: ElementStorage) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         changes.pendingChanges.addCallbackAndRun((changes) => { | 
					
						
							| 
									
										
										
										
											2021-07-15 20:47:28 +02:00
										 |  |  |             for (const change of changes) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 const id = change.type + "/" + change.id | 
					
						
							| 
									
										
										
										
											2021-07-15 20:47:28 +02:00
										 |  |  |                 if (!allElements.has(id)) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     continue // Ignored as the geometryFixer will introduce this
 | 
					
						
							| 
									
										
										
										
											2021-07-15 20:47:28 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |                 const src = allElements.getEventSourceById(id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 let changed = false | 
					
						
							| 
									
										
										
										
											2021-07-15 20:47:28 +02:00
										 |  |  |                 for (const kv of change.tags ?? []) { | 
					
						
							|  |  |  |                     // Apply tag changes and ping the consumers
 | 
					
						
							|  |  |  |                     const k = kv.k | 
					
						
							|  |  |  |                     let v = kv.v | 
					
						
							|  |  |  |                     if (v === "") { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                         v = undefined | 
					
						
							| 
									
										
										
										
											2021-07-15 20:47:28 +02:00
										 |  |  |                     } | 
					
						
							|  |  |  |                     if (src.data[k] === v) { | 
					
						
							|  |  |  |                         continue | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     changed = true | 
					
						
							|  |  |  |                     src.data[k] = v | 
					
						
							| 
									
										
										
										
											2021-07-15 20:47:28 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |                 if (changed) { | 
					
						
							|  |  |  |                     src.ping() | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | } |