fix(viewportgrid): don't subscribe to duplicate event listeners (#5218)

This commit is contained in:
Ibrahim 2025-07-16 14:40:47 -04:00 committed by GitHub
parent 3ff9a65ef3
commit faef74ab21
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3,7 +3,7 @@ import { calculateSUVScalingFactors } from '@cornerstonejs/calculate-suv';
import getPTImageIdInstanceMetadata from './getPTImageIdInstanceMetadata'; import getPTImageIdInstanceMetadata from './getPTImageIdInstanceMetadata';
import { registerHangingProtocolAttributes } from './hangingprotocols'; import { registerHangingProtocolAttributes } from './hangingprotocols';
import { HotkeysManager } from '@ohif/core' import { HotkeysManager } from '@ohif/core';
const metadataProvider = classes.MetadataProvider; const metadataProvider = classes.MetadataProvider;
@ -12,7 +12,11 @@ const metadataProvider = classes.MetadataProvider;
* @param {Object} servicesManager * @param {Object} servicesManager
* @param {Object} configuration * @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; const { toolbarService, cineService, viewportGridService } = servicesManager.services;
toolbarService.registerEventForToolbarUpdate(cineService, [ toolbarService.registerEventForToolbarUpdate(cineService, [
@ -34,6 +38,7 @@ export default function init({ servicesManager, commandsManager, hotkeysManager
registerHangingProtocolAttributes({ servicesManager }); registerHangingProtocolAttributes({ servicesManager });
// Function to process and subscribe to events for a given set of commands and listeners // Function to process and subscribe to events for a given set of commands and listeners
const eventSubscriptions = [];
const subscribeToEvents = listeners => { const subscribeToEvents = listeners => {
Object.entries(listeners).forEach(([event, commands]) => { Object.entries(listeners).forEach(([event, commands]) => {
const supportedEvents = [ const supportedEvents = [
@ -42,11 +47,19 @@ export default function init({ servicesManager, commandsManager, hotkeysManager
]; ];
if (supportedEvents.includes(event)) { if (supportedEvents.includes(event)) {
const subscriptionKey = `${event}_${JSON.stringify(commands)}`;
if (eventSubscriptions.includes(subscriptionKey)) {
return;
}
viewportGridService.subscribe(event, eventData => { viewportGridService.subscribe(event, eventData => {
const viewportId = eventData?.viewportId ?? viewportGridService.getActiveViewportId(); const viewportId = eventData?.viewportId ?? viewportGridService.getActiveViewportId();
commandsManager.run(commands, { viewportId }); commandsManager.run(commands, { viewportId });
}); });
eventSubscriptions.push(subscriptionKey);
} }
}); });
}; };