34 lines
1.2 KiB
TypeScript
34 lines
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()
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|