From 920d317b3f57483f2a746bf2690e22fc7938a437 Mon Sep 17 00:00:00 2001 From: Erik Ziegler Date: Tue, 20 Jul 2021 10:35:15 +0200 Subject: [PATCH] fix: do deep check when adding sources/targets to synchronizers (#193) --- .../store/SynchronizerManager/Synchronizer.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/cornerstone-tools/src/store/SynchronizerManager/Synchronizer.ts b/packages/cornerstone-tools/src/store/SynchronizerManager/Synchronizer.ts index 31c51af96..e888baa27 100644 --- a/packages/cornerstone-tools/src/store/SynchronizerManager/Synchronizer.ts +++ b/packages/cornerstone-tools/src/store/SynchronizerManager/Synchronizer.ts @@ -57,9 +57,10 @@ class Synchronizer { } public addSource(viewport: Types.IViewportUID): void { - if (this._sourceViewports.includes(viewport)) { + if (_containsViewport(this._sourceViewports, viewport)) { return } + const { renderingEngineUID, viewportUID } = viewport const canvas = getRenderingEngine(renderingEngineUID) @@ -74,7 +75,7 @@ class Synchronizer { } public addTarget(viewport: Types.IViewportUID): void { - if (this._targetViewports.includes(viewport)) { + if (_containsViewport(this._targetViewports, viewport)) { return } @@ -124,11 +125,7 @@ class Synchronizer { } public hasSourceViewport(renderingEngineUID: string, viewportUID: string): boolean { - return this._sourceViewports.some( - (vp) => - vp.renderingEngineUID === renderingEngineUID && - vp.viewportUID === viewportUID - ) + return _containsViewport(this._sourceViewports, { renderingEngineUID, viewportUID}) } public fireEvent(sourceViewport: Types.IViewportUID, sourceEvent: any): void { @@ -238,6 +235,14 @@ function _getViewportIndex( ) } +function _containsViewport(arr: Array, vp: Types.IViewportUID) { + return arr.some( + (ar) => + ar.renderingEngineUID === vp.renderingEngineUID && + ar.viewportUID === vp.viewportUID + ) +} + function _getViewportCanvas(vp: Types.IViewportUID): HTMLCanvasElement { const renderingEngine = getRenderingEngine(vp.renderingEngineUID); if (!renderingEngine) {