From faef74ab21801841ad6b6a2104bc88a52c5c0b9e Mon Sep 17 00:00:00 2001 From: Ibrahim <93064150+IbrahimCSAE@users.noreply.github.com> Date: Wed, 16 Jul 2025 14:40:47 -0400 Subject: [PATCH] fix(viewportgrid): don't subscribe to duplicate event listeners (#5218) --- extensions/default/src/init.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/extensions/default/src/init.ts b/extensions/default/src/init.ts index 564c6172d..c4be835d7 100644 --- a/extensions/default/src/init.ts +++ b/extensions/default/src/init.ts @@ -3,7 +3,7 @@ import { calculateSUVScalingFactors } from '@cornerstonejs/calculate-suv'; import getPTImageIdInstanceMetadata from './getPTImageIdInstanceMetadata'; import { registerHangingProtocolAttributes } from './hangingprotocols'; -import { HotkeysManager } from '@ohif/core' +import { HotkeysManager } from '@ohif/core'; const metadataProvider = classes.MetadataProvider; @@ -12,7 +12,11 @@ const metadataProvider = classes.MetadataProvider; * @param {Object} servicesManager * @param {Object} configuration */ -export default function init({ servicesManager, commandsManager, hotkeysManager }: withAppTypes): void { +export default function init({ + servicesManager, + commandsManager, + hotkeysManager, +}: withAppTypes): void { const { toolbarService, cineService, viewportGridService } = servicesManager.services; toolbarService.registerEventForToolbarUpdate(cineService, [ @@ -34,6 +38,7 @@ export default function init({ servicesManager, commandsManager, hotkeysManager registerHangingProtocolAttributes({ servicesManager }); // Function to process and subscribe to events for a given set of commands and listeners + const eventSubscriptions = []; const subscribeToEvents = listeners => { Object.entries(listeners).forEach(([event, commands]) => { const supportedEvents = [ @@ -42,11 +47,19 @@ export default function init({ servicesManager, commandsManager, hotkeysManager ]; if (supportedEvents.includes(event)) { + const subscriptionKey = `${event}_${JSON.stringify(commands)}`; + + if (eventSubscriptions.includes(subscriptionKey)) { + return; + } + viewportGridService.subscribe(event, eventData => { const viewportId = eventData?.viewportId ?? viewportGridService.getActiveViewportId(); commandsManager.run(commands, { viewportId }); }); + + eventSubscriptions.push(subscriptionKey); } }); };