From b5a106eab7eb3642df6caa99fc8df0ba682d8b30 Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Fri, 25 Jan 2019 11:29:57 -0500 Subject: [PATCH] Validate paths for edited nodes and relations for edited geometry --- modules/validations/issue_manager.js | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/modules/validations/issue_manager.js b/modules/validations/issue_manager.js index e09948320..88638cac4 100644 --- a/modules/validations/issue_manager.js +++ b/modules/validations/issue_manager.js @@ -1,6 +1,8 @@ import { dispatch as d3_dispatch } from 'd3-dispatch'; -import _filter from 'lodash-es/filter'; +import _map from 'lodash-es/map'; +import _flattenDeep from 'lodash-es/flattenDeep'; +import _uniq from 'lodash-es/uniq'; import _uniqWith from 'lodash-es/uniqWith'; import { utilRebind } from '../util/rebind'; @@ -40,10 +42,28 @@ export function IssueManager(context) { }; self.validate = function() { - var changes = context.history().changes(); - var entitiesToCheck = changes.created.concat(changes.modified); + // clear cached issues issuesByEntityId = {}; issues = []; + + var changes = context.history().changes(); + var entitiesToCheck = changes.created.concat(changes.modified); + entitiesToCheck = _uniq(_flattenDeep(_map(entitiesToCheck, function(entity) { + var entities = [entity]; + if (entity.type === 'node') { + // validate ways if their nodes have changed + entities = entities.concat(context.graph().parentWays(entity)); + } + entities = _map(entities, function(entity) { + if (entity.type !== 'relation') { + // validate relations if their geometries have changed + return [entity].concat(context.graph().parentRelations(entity)); + } + return entity; + }); + return entities; + }))); + for (var entityIndex in entitiesToCheck) { var entity = entitiesToCheck[entityIndex]; var entityIssues = context.history().validate([entity]);