From 5a66920d1d826c816452361e62c4ab1f018a9c68 Mon Sep 17 00:00:00 2001 From: Danny Brown Date: Wed, 16 Sep 2020 21:56:51 -0400 Subject: [PATCH] fix: Misc. workflow fixes [OHIF-363] (#2040) * fix: "Adding measurements to existing report" portion of issue * fix: notes from investigation to fix "Creating a new report while tracking measurements" * fix: "Measurements spanning multiple studies" * chore: comments explaining isDirty behavior --- .../measurementTrackingMachine.js | 28 ++++++++++++++----- .../promptTrackNewSeries.js | 11 +++----- .../promptTrackNewStudy.js | 11 +++----- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js index 525581e3b..5300317e8 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js @@ -292,12 +292,9 @@ const defaultOptions = { setIsDirtyToClean: assign((ctx, evt) => ({ isDirty: false, })), - setIsDirty: assign((ctx, evt) => { - debugger; - return { - isDirty: true, - }; - }), + setIsDirty: assign((ctx, evt) => ({ + isDirty: true, + })), ignoreSeries: assign((ctx, evt) => ({ prevIgnoredSeries: [...ctx.ignoredSeries], ignoredSeries: [...ctx.ignoredSeries, evt.data.SeriesInstanceUID], @@ -316,9 +313,26 @@ const defaultOptions = { })), }, guards: { + // We set dirty any time we performan an action that: + // - Tracks a new study + // - Tracks a new series + // - Adds a measurement to an already tracked study/series + // + // We set clean any time we restore from an SR + // + // This guard/condition is specific to "new measurements" + // to make sure we only track dirty when the new measurement is specific + // to a series we're already tracking + // + // tl;dr + // Any report change, that is not a hydration of an existing report, should + // result in a "dirty" report + // + // Where dirty means there would be "loss of data" if we blew away measurements + // without creating a new SR. shouldSetDirty: (ctx, evt) => { - debugger; return ( + // When would this happen? evt.SeriesInstanceUID === undefined || ctx.trackedSeries.includes(evt.SeriesInstanceUID) ); diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewSeries.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewSeries.js index 23cfe4ff1..564efc8ad 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewSeries.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewSeries.js @@ -17,13 +17,10 @@ function promptUser({ servicesManager, extensionManager }, ctx, evt) { viewportIndex ); - if (ctx.isDirty && promptResult === RESPONSE.CREATE_REPORT) { - promptResult = await _askSaveDiscardOrCancel( - UIViewportDialogService, - viewportIndex - ); - } else { - promptResult = RESPONSE.SET_STUDY_AND_SERIES; + if (promptResult === RESPONSE.CREATE_REPORT) { + promptResult = ctx.isDirty + ? await _askSaveDiscardOrCancel(UIViewportDialogService, viewportIndex) + : RESPONSE.SET_STUDY_AND_SERIES; } resolve({ diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js index f74e48adc..cd904437c 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js @@ -17,13 +17,10 @@ function promptUser({ servicesManager, extensionManager }, ctx, evt) { viewportIndex ); - if (ctx.isDirty && promptResult === RESPONSE.SET_STUDY_AND_SERIES) { - promptResult = await _askSaveDiscardOrCancel( - UIViewportDialogService, - viewportIndex - ); - } else { - promptResult = RESPONSE.SET_STUDY_AND_SERIES; + if (promptResult === RESPONSE.SET_STUDY_AND_SERIES) { + promptResult = ctx.isDirty + ? await _askSaveDiscardOrCancel(UIViewportDialogService, viewportIndex) + : RESPONSE.SET_STUDY_AND_SERIES; } resolve({