From af4acaec79695bfa1702c1dda57f35bda4707262 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Mon, 21 Dec 2020 13:17:18 -0500 Subject: [PATCH] Don't clear power output tag when changing between power presets (close #8159) --- modules/actions/change_preset.js | 3 ++- modules/presets/preset.js | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/actions/change_preset.js b/modules/actions/change_preset.js index 1a193b878..760b7937d 100644 --- a/modules/actions/change_preset.js +++ b/modules/actions/change_preset.js @@ -4,7 +4,8 @@ export function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefa var geometry = entity.geometry(graph); var tags = entity.tags; - if (oldPreset) tags = oldPreset.unsetTags(tags, geometry); + // preserve tags that the new preset might care about, if any + if (oldPreset) tags = oldPreset.unsetTags(tags, geometry, newPreset && newPreset.addTags ? Object.keys(newPreset.addTags) : null); if (newPreset) tags = newPreset.setTags(tags, geometry, skipFieldDefaults); return graph.replace(entity.update({tags: tags})); diff --git a/modules/presets/preset.js b/modules/presets/preset.js index 3fd9a4885..c4d3bb989 100644 --- a/modules/presets/preset.js +++ b/modules/presets/preset.js @@ -172,8 +172,10 @@ export function presetPreset(presetID, preset, addable, allFields, allPresets) { }; - _this.unsetTags = (tags, geometry, skipFieldDefaults) => { - tags = utilObjectOmit(tags, Object.keys(_this.removeTags)); + _this.unsetTags = (tags, geometry, ignoringKeys, skipFieldDefaults) => { + // allow manually keeping some tags + let removeTags = ignoringKeys ? utilObjectOmit(_this.removeTags, ignoringKeys) : _this.removeTags; + tags = utilObjectOmit(tags, Object.keys(removeTags)); if (geometry && !skipFieldDefaults) { _this.fields().forEach(field => { @@ -194,7 +196,10 @@ export function presetPreset(presetID, preset, addable, allFields, allPresets) { for (let k in addTags) { if (addTags[k] === '*') { - tags[k] = 'yes'; + // if this tag is ancillary, don't override an existing value since any value is okay + if (_this.tags[k] || !tags[k] || tags[k] === 'no') { + tags[k] = 'yes'; + } } else { tags[k] = addTags[k]; }