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
This commit is contained in:
Alireza 2021-07-19 08:31:40 -04:00 committed by GitHub
parent 042dbb13b4
commit 3dec7cfcda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 38 additions and 14 deletions

View File

@ -175,7 +175,8 @@ function PanelStudyBrowser({
setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs);
if (!shouldCollapseStudy) { if (!shouldCollapseStudy) {
requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID); const madeInClient = true
requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID, madeInClient);
} }
} }

View File

@ -1,7 +1,8 @@
function requestDisplaySetCreationForStudy( function requestDisplaySetCreationForStudy(
dataSource, dataSource,
DisplaySetService, DisplaySetService,
StudyInstanceUID StudyInstanceUID,
madeInClient,
) { ) {
// TODO: is this already short-circuited by the map of Retrieve promises? // TODO: is this already short-circuited by the map of Retrieve promises?
if ( if (
@ -12,7 +13,7 @@ function requestDisplaySetCreationForStudy(
return; return;
} }
dataSource.retrieveSeriesMetadata({ StudyInstanceUID }); dataSource.retrieveSeriesMetadata({ StudyInstanceUID, madeInClient });
} }
export default requestDisplaySetCreationForStudy; export default requestDisplaySetCreationForStudy;

View File

@ -377,7 +377,7 @@ function OHIFCornerstoneSRViewport({
evt.preventDefault(); evt.preventDefault();
}} }}
onPillClick={() => { onPillClick={() => {
sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', { sendTrackedMeasurementsEvent('RESTORE_PROMPT_HYDRATE_SR', {
displaySetInstanceUID: displaySet.displaySetInstanceUID, displaySetInstanceUID: displaySet.displaySetInstanceUID,
viewportIndex, viewportIndex,
}); });

View File

@ -164,6 +164,7 @@ function TrackedMeasurementsContextProvider(
console.log('sending event...', trackedMeasurements); console.log('sending event...', trackedMeasurements);
sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', { sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', {
displaySetInstanceUID: displaySet.displaySetInstanceUID, displaySetInstanceUID: displaySet.displaySetInstanceUID,
SeriesInstanceUID: displaySet.SeriesInstanceUID,
viewportIndex: activeViewportIndex, viewportIndex: activeViewportIndex,
}); });
} }

View File

@ -22,6 +22,7 @@ const machineConfiguration = {
prevTrackedSeries: [], prevTrackedSeries: [],
prevIgnoredSeries: [], prevIgnoredSeries: [],
// //
ignoredSRSeriesForHydration: [],
isDirty: false, isDirty: false,
}, },
states: { states: {
@ -39,7 +40,11 @@ const machineConfiguration = {
actions: ['setTrackedStudyAndMultipleSeries', 'setIsDirtyToClean'], actions: ['setTrackedStudyAndMultipleSeries', 'setIsDirtyToClean'],
}, },
], ],
PROMPT_HYDRATE_SR: 'promptHydrateStructuredReport', PROMPT_HYDRATE_SR: {
target: 'promptHydrateStructuredReport',
cond: 'hasNotIgnoredSRSeriesForHydration',
},
RESTORE_PROMPT_HYDRATE_SR: 'promptHydrateStructuredReport'
}, },
}, },
promptBeginTracking: { promptBeginTracking: {
@ -218,6 +223,8 @@ const machineConfiguration = {
}, },
{ {
target: 'idle', target: 'idle',
actions: ['ignoreHydrationForSRSeries'],
cond: 'shouldIgnoreHydrationForSR'
}, },
], ],
onError: { onError: {
@ -300,6 +307,9 @@ const defaultOptions = {
prevIgnoredSeries: [...ctx.ignoredSeries], prevIgnoredSeries: [...ctx.ignoredSeries],
ignoredSeries: [...ctx.ignoredSeries, evt.data.SeriesInstanceUID], ignoredSeries: [...ctx.ignoredSeries, evt.data.SeriesInstanceUID],
})), })),
ignoreHydrationForSRSeries: assign((ctx, evt) => ({
ignoredSRSeriesForHydration: [...ctx.ignoredSRSeriesForHydration, evt.data.srSeriesInstanceUID],
})),
addTrackedSeries: assign((ctx, evt) => ({ addTrackedSeries: assign((ctx, evt) => ({
prevTrackedSeries: [...ctx.trackedSeries], prevTrackedSeries: [...ctx.trackedSeries],
trackedSeries: [...ctx.trackedSeries, evt.data.SeriesInstanceUID], trackedSeries: [...ctx.trackedSeries, evt.data.SeriesInstanceUID],
@ -348,6 +358,8 @@ const defaultOptions = {
evt.data && evt.data.userResponse === RESPONSE.NO_NOT_FOR_SERIES, evt.data && evt.data.userResponse === RESPONSE.NO_NOT_FOR_SERIES,
shouldPromptSaveReport: (ctx, evt) => shouldPromptSaveReport: (ctx, evt) =>
evt.data && evt.data.userResponse === RESPONSE.CREATE_REPORT, evt.data && evt.data.userResponse === RESPONSE.CREATE_REPORT,
shouldIgnoreHydrationForSR: (ctx, evt) =>
evt.data && evt.data.userResponse === RESPONSE.CANCEL,
shouldSaveAndContinueWithSameReport: (ctx, evt) => shouldSaveAndContinueWithSameReport: (ctx, evt) =>
evt.data && evt.data &&
evt.data.userResponse === RESPONSE.CREATE_REPORT && evt.data.userResponse === RESPONSE.CREATE_REPORT &&
@ -363,6 +375,9 @@ const defaultOptions = {
hasRemainingTrackedSeries: (ctx, evt) => hasRemainingTrackedSeries: (ctx, evt) =>
ctx.trackedSeries.length > 1 || ctx.trackedSeries.length > 1 ||
!ctx.trackedSeries.includes(evt.SeriesInstanceUID), !ctx.trackedSeries.includes(evt.SeriesInstanceUID),
hasNotIgnoredSRSeriesForHydration: (ctx, evt) => {
return !ctx.ignoredSRSeriesForHydration.includes(evt.SeriesInstanceUID)
},
isNewStudy: (ctx, evt) => isNewStudy: (ctx, evt) =>
!ctx.ignoredSeries.includes(evt.SeriesInstanceUID) && !ctx.ignoredSeries.includes(evt.SeriesInstanceUID) &&
ctx.trackedStudy !== evt.StudyInstanceUID, ctx.trackedStudy !== evt.StudyInstanceUID,

View File

@ -11,8 +11,9 @@ const RESPONSE = {
}; };
function promptUser({ servicesManager, extensionManager }, ctx, evt) { function promptUser({ servicesManager, extensionManager }, ctx, evt) {
const { UIViewportDialogService } = servicesManager.services; const { UIViewportDialogService, DisplaySetService } = servicesManager.services;
const { viewportIndex, displaySetInstanceUID } = evt; const { viewportIndex, displaySetInstanceUID } = evt;
const srDisplaySet = DisplaySetService.getDisplaySetByUID(displaySetInstanceUID)
return new Promise(async function(resolve, reject) { return new Promise(async function(resolve, reject) {
const promptResult = await _askTrackMeasurements( const promptResult = await _askTrackMeasurements(
@ -37,6 +38,7 @@ function promptUser({ servicesManager, extensionManager }, ctx, evt) {
resolve({ resolve({
userResponse: promptResult, userResponse: promptResult,
displaySetInstanceUID: evt.displaySetInstanceUID, displaySetInstanceUID: evt.displaySetInstanceUID,
srSeriesInstanceUID: srDisplaySet.SeriesInstanceUID,
viewportIndex, viewportIndex,
StudyInstanceUID, StudyInstanceUID,
SeriesInstanceUIDs, SeriesInstanceUIDs,

View File

@ -260,7 +260,8 @@ function PanelStudyBrowserTracking({
setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs);
if (!shouldCollapseStudy) { if (!shouldCollapseStudy) {
requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID); const madeInClient = true
requestDisplaySetCreationForStudy(DisplaySetService, StudyInstanceUID, madeInClient);
} }
} }

View File

@ -1,7 +1,8 @@
function requestDisplaySetCreationForStudy( function requestDisplaySetCreationForStudy(
dataSource, dataSource,
DisplaySetService, DisplaySetService,
StudyInstanceUID StudyInstanceUID,
madeInClient,
) { ) {
if ( if (
DisplaySetService.activeDisplaySets.some( DisplaySetService.activeDisplaySets.some(
@ -11,7 +12,7 @@ function requestDisplaySetCreationForStudy(
return; return;
} }
dataSource.retrieveSeriesMetadata({ StudyInstanceUID }); dataSource.retrieveSeriesMetadata({ StudyInstanceUID, madeInClient });
} }
export default requestDisplaySetCreationForStudy; export default requestDisplaySetCreationForStudy;

View File

@ -71,7 +71,7 @@ class HangingProtocolService {
this.customAttributeRetrievalCallbacks this.customAttributeRetrievalCallbacks
); );
// if there is no pre-defiend protocol // if there is no pre-defined protocol
if (!protocol || protocol.id === undefined) { if (!protocol || protocol.id === undefined) {
const matchedProtocol = this.ProtocolEngine.run(metaData); const matchedProtocol = this.ProtocolEngine.run(metaData);
this._setProtocol(matchedProtocol); this._setProtocol(matchedProtocol);

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -39,9 +39,11 @@ async function defaultRouteInit({
const { unsubscribe: seriesAddedUnsubscribe } = DicomMetadataStore.subscribe( const { unsubscribe: seriesAddedUnsubscribe } = DicomMetadataStore.subscribe(
DicomMetadataStore.EVENTS.SERIES_ADDED, DicomMetadataStore.EVENTS.SERIES_ADDED,
({ StudyInstanceUID }) => { ({ StudyInstanceUID, madeInClient }) => {
const studyMetadata = DicomMetadataStore.getStudy(StudyInstanceUID); const studyMetadata = DicomMetadataStore.getStudy(StudyInstanceUID);
HangingProtocolService.run(studyMetadata); if (!madeInClient) {
HangingProtocolService.run(studyMetadata);
}
} }
); );
unsubscriptions.push(seriesAddedUnsubscribe); unsubscriptions.push(seriesAddedUnsubscribe);