don't preserve preset's field tags if presets are sub-presets of each other

fixes #0372
This commit is contained in:
Martin Raifer
2022-11-14 18:03:00 +01:00
parent ec7e884ae9
commit 21e54f956d
3 changed files with 85 additions and 4 deletions
+9 -4
View File
@@ -11,10 +11,15 @@ export function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefa
if (newPreset.addTags) {
preserveKeys = preserveKeys.concat(Object.keys(newPreset.addTags));
}
newPreset.fields().concat(newPreset.moreFields())
.filter(f => f.matchGeometry(geometry))
.map(f => f.key).filter(Boolean)
.forEach(key => preserveKeys.push(key));
if (oldPreset && !oldPreset.id.startsWith(newPreset.id)) {
// only if old preset is not a sub-preset of the new one:
// preserve tags for which the new preset has a field
// https://github.com/openstreetmap/iD/issues/9372
newPreset.fields().concat(newPreset.moreFields())
.filter(f => f.matchGeometry(geometry))
.map(f => f.key).filter(Boolean)
.forEach(key => preserveKeys.push(key));
}
}
if (oldPreset) tags = oldPreset.unsetTags(tags, geometry, preserveKeys);
if (newPreset) tags = newPreset.setTags(tags, geometry, skipFieldDefaults);