fix: cine scrolling was broken when navigating back to studylist (#2974)

* fix: cine clean up when exited

* fix: make cine work while dragging and dropping another displayset
This commit is contained in:
Alireza 2022-10-07 00:32:28 -04:00 committed by GitHub
parent 1d47f31738
commit 7f770e4fb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,6 +10,7 @@ import {
useViewportDialog,
} from '@ohif/ui';
import { eventTarget, Enums } from '@cornerstonejs/core';
import { annotation } from '@cornerstonejs/tools';
import { useTrackedMeasurements } from './../getContextModule';
@ -64,6 +65,26 @@ function TrackedCornerstoneViewport(props) {
ManufacturerModelName,
} = displaySet.images[0];
const cineHandler = () => {
if (!cines || !cines[viewportIndex] || !element) {
return;
}
const cine = cines[viewportIndex];
const isPlaying = cine.isPlaying || false;
const frameRate = cine.frameRate || 24;
const validFrameRate = Math.max(frameRate, 1);
if (isPlaying) {
cineService.playClip(element, {
framesPerSecond: validFrameRate,
});
} else {
cineService.stopClip(element);
}
};
useEffect(() => {
if (isTracked) {
annotation.config.style.setViewportToolStyles(viewportId, {
@ -92,25 +113,33 @@ function TrackedCornerstoneViewport(props) {
};
}, [isTracked]);
// unmount cleanup
useEffect(() => {
if (!cines || !cines[viewportIndex]) {
eventTarget.addEventListener(
Enums.Events.STACK_VIEWPORT_NEW_STACK,
cineHandler
);
return () => {
cineService.setCine({ id: viewportIndex, isPlaying: false });
eventTarget.removeEventListener(
Enums.Events.STACK_VIEWPORT_NEW_STACK,
cineHandler
);
};
}, [element]);
useEffect(() => {
if (!cines || !cines[viewportIndex] || !element) {
return;
}
const cine = cines[viewportIndex];
const isPlaying = (cine && cine.isPlaying) || false;
const frameRate = (cine && cine.frameRate) || 24;
cineHandler();
const validFrameRate = Math.max(frameRate, 1);
if (isPlaying) {
cineService.playClip(element, {
framesPerSecond: validFrameRate,
});
} else {
return () => {
cineService.stopClip(element);
}
}, [cines, viewportIndex, cineService, element, displaySet]);
};
}, [cines, viewportIndex, cineService, element]);
if (trackedSeries.includes(SeriesInstanceUID) !== isTracked) {
setIsTracked(!isTracked);