From 3dec7cfcda45271f7a2fc10a57dc575b2636137a Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 19 Jul 2021 08:31:40 -0400 Subject: [PATCH] fix: Address various layout and prompt bugs (#2472) * fix: layout should not reset when opening a new study in studyBrowser * fix: added state to handle ignored SR series for hydration --- .../default/src/Panels/PanelStudyBrowser.jsx | 3 ++- .../Panels/requestDisplaySetCreationForStudy.js | 5 +++-- .../src/viewports/OHIFCornerstoneSRViewport.js | 2 +- .../TrackedMeasurementsContext.jsx | 1 + .../measurementTrackingMachine.js | 17 ++++++++++++++++- .../promptHydrateStructuredReport.js | 4 +++- .../PanelStudyBrowserTracking.jsx | 3 ++- .../requestDisplaySetCreationForStudy.js | 5 +++-- .../HangingProtocolService.js | 2 +- platform/ui/src/assets/svgs/logo-ohif.svg | 4 ++-- platform/viewer/src/routes/Mode/Mode.jsx | 6 ++++-- 11 files changed, 38 insertions(+), 14 deletions(-) diff --git a/extensions/default/src/Panels/PanelStudyBrowser.jsx b/extensions/default/src/Panels/PanelStudyBrowser.jsx index c5576458f..e1adb583d 100644 --- a/extensions/default/src/Panels/PanelStudyBrowser.jsx +++ b/extensions/default/src/Panels/PanelStudyBrowser.jsx @@ -175,7 +175,8 @@ function PanelStudyBrowser({ setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); if (!shouldCollapseStudy) { - requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID); + const madeInClient = true + requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID, madeInClient); } } diff --git a/extensions/default/src/Panels/requestDisplaySetCreationForStudy.js b/extensions/default/src/Panels/requestDisplaySetCreationForStudy.js index a87184a8e..8c463c1f9 100644 --- a/extensions/default/src/Panels/requestDisplaySetCreationForStudy.js +++ b/extensions/default/src/Panels/requestDisplaySetCreationForStudy.js @@ -1,7 +1,8 @@ function requestDisplaySetCreationForStudy( dataSource, DisplaySetService, - StudyInstanceUID + StudyInstanceUID, + madeInClient, ) { // TODO: is this already short-circuited by the map of Retrieve promises? if ( @@ -12,7 +13,7 @@ function requestDisplaySetCreationForStudy( return; } - dataSource.retrieveSeriesMetadata({ StudyInstanceUID }); + dataSource.retrieveSeriesMetadata({ StudyInstanceUID, madeInClient }); } export default requestDisplaySetCreationForStudy; diff --git a/extensions/dicom-sr/src/viewports/OHIFCornerstoneSRViewport.js b/extensions/dicom-sr/src/viewports/OHIFCornerstoneSRViewport.js index 9d8d4e74d..de7c82785 100644 --- a/extensions/dicom-sr/src/viewports/OHIFCornerstoneSRViewport.js +++ b/extensions/dicom-sr/src/viewports/OHIFCornerstoneSRViewport.js @@ -377,7 +377,7 @@ function OHIFCornerstoneSRViewport({ evt.preventDefault(); }} onPillClick={() => { - sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', { + sendTrackedMeasurementsEvent('RESTORE_PROMPT_HYDRATE_SR', { displaySetInstanceUID: displaySet.displaySetInstanceUID, viewportIndex, }); diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.jsx b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.jsx index 1cce041e0..b9edb4279 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.jsx +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.jsx @@ -164,6 +164,7 @@ function TrackedMeasurementsContextProvider( console.log('sending event...', trackedMeasurements); sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', { displaySetInstanceUID: displaySet.displaySetInstanceUID, + SeriesInstanceUID: displaySet.SeriesInstanceUID, viewportIndex: activeViewportIndex, }); } diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js index 4c2d96776..45382e8a1 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/measurementTrackingMachine.js @@ -22,6 +22,7 @@ const machineConfiguration = { prevTrackedSeries: [], prevIgnoredSeries: [], // + ignoredSRSeriesForHydration: [], isDirty: false, }, states: { @@ -39,7 +40,11 @@ const machineConfiguration = { actions: ['setTrackedStudyAndMultipleSeries', 'setIsDirtyToClean'], }, ], - PROMPT_HYDRATE_SR: 'promptHydrateStructuredReport', + PROMPT_HYDRATE_SR: { + target: 'promptHydrateStructuredReport', + cond: 'hasNotIgnoredSRSeriesForHydration', + }, + RESTORE_PROMPT_HYDRATE_SR: 'promptHydrateStructuredReport' }, }, promptBeginTracking: { @@ -218,6 +223,8 @@ const machineConfiguration = { }, { target: 'idle', + actions: ['ignoreHydrationForSRSeries'], + cond: 'shouldIgnoreHydrationForSR' }, ], onError: { @@ -300,6 +307,9 @@ const defaultOptions = { prevIgnoredSeries: [...ctx.ignoredSeries], ignoredSeries: [...ctx.ignoredSeries, evt.data.SeriesInstanceUID], })), + ignoreHydrationForSRSeries: assign((ctx, evt) => ({ + ignoredSRSeriesForHydration: [...ctx.ignoredSRSeriesForHydration, evt.data.srSeriesInstanceUID], + })), addTrackedSeries: assign((ctx, evt) => ({ prevTrackedSeries: [...ctx.trackedSeries], trackedSeries: [...ctx.trackedSeries, evt.data.SeriesInstanceUID], @@ -348,6 +358,8 @@ const defaultOptions = { evt.data && evt.data.userResponse === RESPONSE.NO_NOT_FOR_SERIES, shouldPromptSaveReport: (ctx, evt) => evt.data && evt.data.userResponse === RESPONSE.CREATE_REPORT, + shouldIgnoreHydrationForSR: (ctx, evt) => + evt.data && evt.data.userResponse === RESPONSE.CANCEL, shouldSaveAndContinueWithSameReport: (ctx, evt) => evt.data && evt.data.userResponse === RESPONSE.CREATE_REPORT && @@ -363,6 +375,9 @@ const defaultOptions = { hasRemainingTrackedSeries: (ctx, evt) => ctx.trackedSeries.length > 1 || !ctx.trackedSeries.includes(evt.SeriesInstanceUID), + hasNotIgnoredSRSeriesForHydration: (ctx, evt) => { + return !ctx.ignoredSRSeriesForHydration.includes(evt.SeriesInstanceUID) + }, isNewStudy: (ctx, evt) => !ctx.ignoredSeries.includes(evt.SeriesInstanceUID) && ctx.trackedStudy !== evt.StudyInstanceUID, diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js index 4d017cf10..f377b3752 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js @@ -11,8 +11,9 @@ const RESPONSE = { }; function promptUser({ servicesManager, extensionManager }, ctx, evt) { - const { UIViewportDialogService } = servicesManager.services; + const { UIViewportDialogService, DisplaySetService } = servicesManager.services; const { viewportIndex, displaySetInstanceUID } = evt; + const srDisplaySet = DisplaySetService.getDisplaySetByUID(displaySetInstanceUID) return new Promise(async function(resolve, reject) { const promptResult = await _askTrackMeasurements( @@ -37,6 +38,7 @@ function promptUser({ servicesManager, extensionManager }, ctx, evt) { resolve({ userResponse: promptResult, displaySetInstanceUID: evt.displaySetInstanceUID, + srSeriesInstanceUID: srDisplaySet.SeriesInstanceUID, viewportIndex, StudyInstanceUID, SeriesInstanceUIDs, diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.jsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.jsx index 8b064d303..03f3e84e0 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.jsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.jsx @@ -260,7 +260,8 @@ function PanelStudyBrowserTracking({ setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); if (!shouldCollapseStudy) { - requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID); + const madeInClient = true + requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID, madeInClient); } } diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/requestDisplaySetCreationForStudy.js b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/requestDisplaySetCreationForStudy.js index 86e63213d..f6ff12b45 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/requestDisplaySetCreationForStudy.js +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/requestDisplaySetCreationForStudy.js @@ -1,7 +1,8 @@ function requestDisplaySetCreationForStudy( dataSource, DisplaySetService, - StudyInstanceUID + StudyInstanceUID, + madeInClient, ) { if ( DisplaySetService.activeDisplaySets.some( @@ -11,7 +12,7 @@ function requestDisplaySetCreationForStudy( return; } - dataSource.retrieveSeriesMetadata({ StudyInstanceUID }); + dataSource.retrieveSeriesMetadata({ StudyInstanceUID, madeInClient }); } export default requestDisplaySetCreationForStudy; diff --git a/platform/core/src/services/HangingProtocolService/HangingProtocolService.js b/platform/core/src/services/HangingProtocolService/HangingProtocolService.js index fd976698b..d00dcb15e 100644 --- a/platform/core/src/services/HangingProtocolService/HangingProtocolService.js +++ b/platform/core/src/services/HangingProtocolService/HangingProtocolService.js @@ -71,7 +71,7 @@ class HangingProtocolService { this.customAttributeRetrievalCallbacks ); - // if there is no pre-defiend protocol + // if there is no pre-defined protocol if (!protocol || protocol.id === undefined) { const matchedProtocol = this.ProtocolEngine.run(metaData); this._setProtocol(matchedProtocol); diff --git a/platform/ui/src/assets/svgs/logo-ohif.svg b/platform/ui/src/assets/svgs/logo-ohif.svg index 2a83a2ada..e828d9b97 100644 --- a/platform/ui/src/assets/svgs/logo-ohif.svg +++ b/platform/ui/src/assets/svgs/logo-ohif.svg @@ -1,7 +1,7 @@ - Artboard - + Open Health Imaging Foundation + diff --git a/platform/viewer/src/routes/Mode/Mode.jsx b/platform/viewer/src/routes/Mode/Mode.jsx index 2dc4ff9b3..939650b90 100644 --- a/platform/viewer/src/routes/Mode/Mode.jsx +++ b/platform/viewer/src/routes/Mode/Mode.jsx @@ -39,9 +39,11 @@ async function defaultRouteInit({ const { unsubscribe: seriesAddedUnsubscribe } = DicomMetadataStore.subscribe( DicomMetadataStore.EVENTS.SERIES_ADDED, - ({ StudyInstanceUID }) => { + ({ StudyInstanceUID, madeInClient }) => { const studyMetadata = DicomMetadataStore.getStudy(StudyInstanceUID); - HangingProtocolService.run(studyMetadata); + if (!madeInClient) { + HangingProtocolService.run(studyMetadata); + } } ); unsubscriptions.push(seriesAddedUnsubscribe);