From a9c30e840c024cd1a0066eb4f085732c17bfe5ea Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Tue, 14 May 2019 14:41:07 -0400 Subject: [PATCH] Revalidate immediately after running most fixes (close #6354) Allow individual fixes to control revalidation Don't allow fixes to run within a second of running any fix for that issue --- modules/ui/entity_issues.js | 28 ++++++++++++++++++++++------ modules/validations/unsquare_way.js | 4 +++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/modules/ui/entity_issues.js b/modules/ui/entity_issues.js index 074079a7f..2fa6bd357 100644 --- a/modules/ui/entity_issues.js +++ b/modules/ui/entity_issues.js @@ -202,12 +202,28 @@ export function uiEntityIssues(context) { return 'issue-fix-item ' + (d.onClick ? 'actionable' : ''); }) .on('click', function(d) { - if (d.onClick) { - var issueEntityIDs = d.issue.entityIds; - utilHighlightEntities(issueEntityIDs.concat(d.entityIds), false, context); - d.onClick(); - window.setTimeout(function() { context.validator().validate(); }, 300); // after any transition - } + // not all fixes are actionable + if (!d.onClick) return; + + // Don't run another fix for this issue within a second of running one + // (Necessary for "Select a feature type" fix. Most fixes should only ever run once) + if (d.issue.dateLastRanFix && new Date() - d.issue.dateLastRanFix < 1000) return; + d.issue.dateLastRanFix = new Date(); + + // remove hover-highlighting + utilHighlightEntities(d.issue.entityIds.concat(d.entityIds), false, context); + + new Promise(function(resolve, reject) { + d.onClick(resolve, reject); + if (!d.onClick.length) { + // if the fix doesn't take any completion parameters then consider it resolved + resolve(); + } + }) + .then(function() { + // revalidate whenever the fix has finished running successfully + context.validator().validate(); + }); }) .on('mouseover.highlight', function(d) { utilHighlightEntities(d.entityIds, true, context); diff --git a/modules/validations/unsquare_way.js b/modules/validations/unsquare_way.js index 1450e1ce4..c888df9fe 100644 --- a/modules/validations/unsquare_way.js +++ b/modules/validations/unsquare_way.js @@ -83,13 +83,15 @@ export function validationUnsquareWay() { icon: 'iD-operation-orthogonalize', title: t('issues.fix.square_feature.title'), autoArgs: autoArgs, - onClick: function() { + onClick: function(completionHandler) { var entityId = this.issue.entityIds[0]; // note: use default params for actionOrthogonalize, not relaxed epsilon context.perform( actionOrthogonalize(entityId, context.projection), t('operations.orthogonalize.annotation.area') ); + // run after the squaring transition (currently 150ms) + window.setTimeout(function() { completionHandler(); }, 175); } }), new validationIssueFix({