diff --git a/extensions/tmtv/src/getHangingProtocolModule.js b/extensions/tmtv/src/getHangingProtocolModule.js index e123a791766..cfe5d65fe97 100644 --- a/extensions/tmtv/src/getHangingProtocolModule.js +++ b/extensions/tmtv/src/getHangingProtocolModule.js @@ -20,6 +20,7 @@ import { */ const stage1 = { name: 'default', + id: 'default', viewportStructure: { layoutType: 'grid', properties: { @@ -112,6 +113,7 @@ const stage1 = { */ const stage2 = { name: 'Fusion 2x2', + id: 'Fusion-2x2', viewportStructure: { layoutType: 'grid', properties: { @@ -131,6 +133,7 @@ const stage2 = { */ const stage3 = { name: '2x3-layout', + id: '2x3-layout', viewportStructure: { layoutType: 'grid', properties: { @@ -152,6 +155,7 @@ const stage3 = { */ const stage4 = { name: '2x4-layout', + id: '2x4-layout', viewportStructure: { layoutType: 'grid', properties: { diff --git a/platform/app/src/routes/Mode/Mode.tsx b/platform/app/src/routes/Mode/Mode.tsx index 6d945eaaf7c..bf6cc9052f9 100644 --- a/platform/app/src/routes/Mode/Mode.tsx +++ b/platform/app/src/routes/Mode/Mode.tsx @@ -66,6 +66,7 @@ export default function ModeRoute({ const { extensions, sopClassHandlers, hotkeys: hotkeyObj, hangingProtocol } = mode; const runTimeHangingProtocolId = lowerCaseSearchParams.get('hangingprotocolid'); + const runTimeStageId = lowerCaseSearchParams.get('stageid'); const token = lowerCaseSearchParams.get('token'); if (token) { @@ -216,6 +217,16 @@ export default function ModeRoute({ ? runTimeHangingProtocolId : hangingProtocol; + // Determine the index of the stageId if the hangingProtocolIdToUse is defined + const stageIndex = hangingProtocolIdToUse + ? hangingProtocolService.getStageIndex(hangingProtocolIdToUse, { + stageId: runTimeStageId || undefined, + }) + : -1; + // Ensure that the stage index is never negative + // If stageIndex is negative (e.g., if stage wasn't found), use 0 as the default + const stageIndexToUse = Math.max(0, stageIndex); + // Sets the active hanging protocols - if hangingProtocol is undefined, // resets to default. Done before the onModeEnter to allow the onModeEnter // to perform custom hanging protocol actions @@ -265,7 +276,8 @@ export default function ModeRoute({ dataSource, filters, }, - hangingProtocolIdToUse + hangingProtocolIdToUse, + stageIndexToUse ); } @@ -277,7 +289,8 @@ export default function ModeRoute({ filters, appConfig, }, - hangingProtocolIdToUse + hangingProtocolIdToUse, + stageIndexToUse ); }; diff --git a/platform/app/src/routes/Mode/defaultRouteInit.ts b/platform/app/src/routes/Mode/defaultRouteInit.ts index 4a29201d1b0..c6af8d14bcb 100644 --- a/platform/app/src/routes/Mode/defaultRouteInit.ts +++ b/platform/app/src/routes/Mode/defaultRouteInit.ts @@ -17,7 +17,8 @@ const { sortingCriteria, getSplitParam } = utils; */ export async function defaultRouteInit( { servicesManager, studyInstanceUIDs, dataSource, filters, appConfig }: withAppTypes, - hangingProtocolId + hangingProtocolId, + stageIndex ) { const { displaySetService, hangingProtocolService, uiNotificationService, customizationService } = servicesManager.services; @@ -41,7 +42,9 @@ export async function defaultRouteInit( // run the hanging protocol matching on the displaySets with the predefined // hanging protocol in the mode configuration - hangingProtocolService.run({ studies, activeStudy, displaySets }, hangingProtocolId); + hangingProtocolService.run({ studies, activeStudy, displaySets }, hangingProtocolId, { + stageIndex, + }); } const unsubscriptions = []; diff --git a/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts b/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts index f6be07e2708..929f31100cb 100644 --- a/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts +++ b/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts @@ -394,7 +394,7 @@ export default class HangingProtocolService extends PubSubService { * the studies to display in viewports. * @param protocol is a specific protocol to apply. */ - public run({ studies, displaySets, activeStudy }, protocolId) { + public run({ studies, displaySets, activeStudy }, protocolId, options = {}) { this.studies = [...(studies || this.studies)]; this.displaySets = displaySets; this.setActiveStudyUID((activeStudy || studies[0])?.StudyInstanceUID); @@ -406,7 +406,7 @@ export default class HangingProtocolService extends PubSubService { if (protocolId && typeof protocolId === 'string') { const protocol = this.getProtocolById(protocolId); - this._setProtocol(protocol); + this._setProtocol(protocol, options); return; }