fix(viewportgrid): don't subscribe to duplicate event listeners (#5218)
This commit is contained in:
parent
3ff9a65ef3
commit
faef74ab21
@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user