From 149a0b43b3aab544a66c92a5eca2f79b359336e6 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Thu, 23 May 2019 19:40:10 -0400 Subject: [PATCH] Use latest entity at time of fix for private_data validation too (re: #6407) --- modules/validations/private_data.js | 42 ++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/modules/validations/private_data.js b/modules/validations/private_data.js index 3996c0c677..c0e6cff63d 100644 --- a/modules/validations/private_data.js +++ b/modules/validations/private_data.js @@ -60,32 +60,48 @@ export function validationPrivateData() { return [new validationIssue({ type: type, severity: 'warning', - message: function() { - var entity = context.hasEntity(this.entityIds[0]); - return entity ? t('issues.private_data.contact.message', { feature: utilDisplayLabel(entity, context) }) : ''; - }, + message: showMessage, reference: showReference, entityIds: [entity.id], - data: { - newTags: keepTags - }, fixes: [ new validationIssueFix({ icon: 'iD-operation-delete', title: t('issues.fix.' + fixID + '.title'), onClick: function() { - var entityID = this.issue.entityIds[0]; - var newTags = this.issue.data.newTags; - context.perform( - actionChangeTags(entityID, newTags), - t('issues.fix.upgrade_tags.annotation') - ); + context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation')); } }) ] })]; + function doUpgrade(graph) { + var currEntity = context.hasEntity(entity.id); + if (!currEntity) return graph; + + var newTags = Object.assign({}, currEntity.tags); // shallow copy + tagDiff.forEach(function(diff) { + if (diff.type === '-') { + delete newTags[diff.key]; + } else if (diff.type === '+') { + newTags[diff.key] = diff.newVal; + } + }); + + return actionChangeTags(currEntity.id, newTags)(graph); + } + + + function showMessage() { + var currEntity = context.hasEntity(this.entityIds[0]); + if (!currEntity) return ''; + + return t('issues.private_data.contact.message', + { feature: utilDisplayLabel(currEntity, context) } + ); + } + + function showReference(selection) { var enter = selection.selectAll('.issue-reference') .data([0])