diff --git a/modules/core/context.js b/modules/core/context.js index 53385070d..7d0fa6eb3 100644 --- a/modules/core/context.js +++ b/modules/core/context.js @@ -13,6 +13,7 @@ import { select as d3_select } from 'd3-selection'; import { t, currentLocale, addTranslation, setLocale } from '../util/locale'; import { coreHistory } from './history'; +import { IssueManager } from '../validations/issueManager'; import { dataLocales, dataEn } from '../../data'; import { geoRawMercator } from '../geo/raw_mercator'; import { modeSelect } from '../modes/select'; @@ -95,10 +96,10 @@ export function coreContext() { /* Straight accessors. Avoid using these if you can. */ - var connection, history; + var connection, history, issueManager; context.connection = function() { return connection; }; context.history = function() { return history; }; - + context.issueManager = function() { return issueManager; }; /* Connection */ context.preauth = function(options) { @@ -446,6 +447,8 @@ export function coreContext() { context.changes = history.changes; context.intersects = history.intersects; + issueManager = IssueManager(context); + // Debounce save, since it's a synchronous localStorage write, // and history changes can happen frequently (e.g. when dragging). context.debouncedSave = _debounce(context.save, 350); diff --git a/modules/ui/commit_warnings.js b/modules/ui/commit_warnings.js index 8b517c9c3..29ecf44a1 100644 --- a/modules/ui/commit_warnings.js +++ b/modules/ui/commit_warnings.js @@ -11,8 +11,8 @@ export function uiCommitWarnings(context) { function commitWarnings(selection) { - var changes = context.history().changes(); - var validations = context.history().validate(changes); + // maybe call these issues now? + var validations = context.issueManager().validate(); validations = _reduce(validations, function(validations, val) { var severity = val.severity; diff --git a/modules/validations/issueManager.js b/modules/validations/issueManager.js new file mode 100644 index 000000000..ae007a3ca --- /dev/null +++ b/modules/validations/issueManager.js @@ -0,0 +1,22 @@ +import * as d3 from 'd3'; +import { utilRebind } from '../util/rebind'; + +export function IssueManager(context) { + var dispatch = d3.dispatch('reload'), + self = {}, + issues = []; + + self.getIssues = function() { + self.validate(); + return issues; + }; + + self.validate = function() { + var changes = context.history().changes(); + issues = context.history().validate(changes); + dispatch.call('reload', self, issues); + return issues; + }; + + return utilRebind(self, dispatch, 'on'); +}