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()
|
|
}
|
|
|
|
|
|
}
|
|
})
|
|
}
|
|
} |