diff --git a/Packages/ohif-core/client/components/bootstrap/dialog/unsavedChangesDialog.js b/Packages/ohif-core/client/components/bootstrap/dialog/unsavedChangesDialog.js index df3e1b665..0ae2f4e1b 100644 --- a/Packages/ohif-core/client/components/bootstrap/dialog/unsavedChangesDialog.js +++ b/Packages/ohif-core/client/components/bootstrap/dialog/unsavedChangesDialog.js @@ -1,6 +1,5 @@ import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; -import { OHIF } from 'meteor/ohif:core'; import { _ } from 'meteor/underscore'; import { $ } from 'meteor/jquery'; diff --git a/Packages/ohif-core/client/ui/unsavedChanges/unsavedChanges.js b/Packages/ohif-core/client/ui/unsavedChanges/unsavedChanges.js index 7a672a79a..f7bbb4269 100644 --- a/Packages/ohif-core/client/ui/unsavedChanges/unsavedChanges.js +++ b/Packages/ohif-core/client/ui/unsavedChanges/unsavedChanges.js @@ -1,3 +1,4 @@ +import { Tracker } from 'meteor/tracker'; import { OHIF } from 'meteor/ohif:core'; import { _ } from 'meteor/underscore'; @@ -315,13 +316,24 @@ export const unsavedChanges = { rootNode: rootNode, + observer: new Tracker.Dependency(), + + /** + * Register a reactive dependency on every change any path suffers + */ + depend: function() { + return this.observer.depend(); + }, + /** * Signal an unsaved change for a given namespace. * @param {String} path A string (e.g., "viewer.studyViewer.measurements.targets") that identifies the namespace of the signaled changes. * @return {Boolean} Returns false if the signal could not be saved or the supplied namespace is invalid. Otherwise, true is returned. */ set: function(path) { - return rootNode.appendPath(path, 1); + const result = rootNode.appendPath(path, 1); + this.observer.changed(); + return result; }, /** @@ -334,7 +346,9 @@ export const unsavedChanges = { * @return {Boolean} Returns false if the signal could not be removed or the supplied namespace is invalid. Otherwise, true is returned. */ clear: function(path, recursively) { - return rootNode.clearPath(path, typeof recursively === UNDEFINED ? true : recursively); + const result = rootNode.clearPath(path, typeof recursively === UNDEFINED ? true : recursively); + this.observer.changed(); + return result; }, /** diff --git a/Packages/ohif-measurements/client/components/caseProgress/caseProgress.html b/Packages/ohif-measurements/client/components/caseProgress/caseProgress.html index e359e6586..1ffdc2358 100644 --- a/Packages/ohif-measurements/client/components/caseProgress/caseProgress.html +++ b/Packages/ohif-measurements/client/components/caseProgress/caseProgress.html @@ -1,5 +1,5 @@ diff --git a/Packages/ohif-measurements/client/components/caseProgress/caseProgress.js b/Packages/ohif-measurements/client/components/caseProgress/caseProgress.js index 972a70b64..f557d7de2 100644 --- a/Packages/ohif-measurements/client/components/caseProgress/caseProgress.js +++ b/Packages/ohif-measurements/client/components/caseProgress/caseProgress.js @@ -13,30 +13,32 @@ Template.caseProgress.onCreated(() => { instance.path = 'viewer.studyViewer.measurements'; instance.saveObserver = new Tracker.Dependency(); - instance.saveData = () => { - // Clear signaled unsaved changes... - const successHandler = () => { - OHIF.ui.unsavedChanges.clear(`${instance.path}.*`); - instance.saveObserver.changed(); - }; + instance.api = { + save() { + // Clear signaled unsaved changes... + const successHandler = () => { + OHIF.ui.unsavedChanges.clear(`${instance.path}.*`); + instance.saveObserver.changed(); + }; - // Display the error messages - const errorHandler = data => OHIF.ui.showDialog('dialogInfo', data); + // Display the error messages + const errorHandler = data => OHIF.ui.showDialog('dialogInfo', data); - const promise = instance.data.measurementApi.storeMeasurements(); - promise.then(successHandler).catch(errorHandler); - OHIF.ui.showDialog('dialogLoading', { - promise, - text: 'Saving measurement data' - }); + const promise = instance.data.measurementApi.storeMeasurements(); + promise.then(successHandler).catch(errorHandler); + OHIF.ui.showDialog('dialogLoading', { + promise, + text: 'Saving measurement data' + }); - return promise; + return promise; + } }; instance.unsavedChangesHandler = () => { const isNotDisabled = !instance.$('.js-finish-case').hasClass('disabled'); if (isNotDisabled && instance.progressPercent.get() === 100) { - instance.saveData(); + instance.api.save(); } }; @@ -171,22 +173,10 @@ Template.caseProgress.helpers({ const instance = Template.instance(); // Run this computation on save or every time any measurement / timepoint suffer changes + OHIF.ui.unsavedChanges.depend(); instance.saveObserver.depend(); Session.get('LayoutManagerUpdated'); return OHIF.ui.unsavedChanges.probe('viewer.*') === 0; } }); - -Template.caseProgress.events({ - 'click .js-finish-case'(event, instance) { - const $this = $(event.currentTarget); - - // Stop here if the tool is disabled - if ($this.hasClass('disabled')) { - return; - } - - instance.saveData(); - } -}); diff --git a/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js b/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js index 75c71a045..8844c5266 100644 --- a/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js +++ b/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js @@ -88,6 +88,9 @@ Template.measurementTableRow.events({ // Repaint the images on all viewports without the removed measurements _.each($('.imageViewerViewport'), element => cornerstone.updateImage(element)); + + // Notify that viewer suffered changes + OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.deleted'); }); } }); diff --git a/Packages/ohif-measurements/client/lib/toggleLabelButton.js b/Packages/ohif-measurements/client/lib/toggleLabelButton.js index 4f4af31f1..be2e1365d 100644 --- a/Packages/ohif-measurements/client/lib/toggleLabelButton.js +++ b/Packages/ohif-measurements/client/lib/toggleLabelButton.js @@ -52,6 +52,9 @@ OHIF.measurements.toggleLabelButton = options => { }); options.measurement.location = location; options.measurement.description = description; + + // Notify that viewer suffered changes + OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.renamed'); } }; buttonView = Blaze.renderWithData(Template.measureFlow, data, options.element);