feat(hangingProtocols): added selection of the HangingProtocol stage from the url (#4310)

This commit is contained in:
Sofien-Sellami authored and GitHub committed 2024-10-17 09:41:41 -04:00
1 parent e8f9345b93
commit fa2435d5e9
4 files changed
+26 -6

No files matched your search

+15 -2
View File
@@ -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
);
};
@@ -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 = [];
@@ -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;
}