Fix reactivity of SR Viewport when the user scrolls away and then jumps to a measurement on the same slice as the currently active measurement.

This commit is contained in:
James A. Petts 2020-06-17 08:45:40 +01:00
parent 73bb4de140
commit 084697687d

View File

@ -9,9 +9,7 @@ import { ViewportActionBar, useViewportGrid } from '@ohif/ui';
import TOOL_NAMES from './constants/toolNames'; import TOOL_NAMES from './constants/toolNames';
import id from './id'; import id from './id';
const BaseAnnotationTool = cornerstoneTools.importInternal( const scrollToIndex = cornerstoneTools.importInternal('util/scrollToIndex');
'base/BaseAnnotationTool'
);
// const cine = viewportSpecificData.cine; // const cine = viewportSpecificData.cine;
@ -41,11 +39,12 @@ function OHIFCornerstoneSRViewport({
const targetElement = eventData.element; const targetElement = eventData.element;
// TODO -> This will only be temporary until we set a tool on, and isn't very customizable. // TODO -> This will only be temporary until we set a tool on, and isn't very customizable.
// Need to discuss how to deal with tools in general in the redesign, since we
// Previously just had Tool mode state global across the entire viewer.
const globalTools = cornerstoneTools.store.state.globalTools; const globalTools = cornerstoneTools.store.state.globalTools;
const globalToolNames = Object.keys(globalTools);
const toolNames = Object.keys(globalTools); globalToolNames.forEach(globalToolName => {
Object.keys(globalTools).forEach(globalToolName => {
cornerstoneTools.setToolDisabledForElement(targetElement, globalToolName); cornerstoneTools.setToolDisabledForElement(targetElement, globalToolName);
}); });
@ -106,7 +105,7 @@ function OHIFCornerstoneSRViewport({
displaySet.displaySetInstanceUID, displaySet.displaySetInstanceUID,
]); ]);
const updateViewport = () => { const updateViewport = newMeasurementSelected => {
const { const {
StudyInstanceUID, StudyInstanceUID,
displaySetInstanceUID, displaySetInstanceUID,
@ -126,14 +125,16 @@ function OHIFCornerstoneSRViewport({
_getViewportAndActiveDisplaySetData( _getViewportAndActiveDisplaySetData(
dataSource, dataSource,
displaySet, displaySet,
measurementSelected, newMeasurementSelected,
DisplaySetService, DisplaySetService,
element element
).then(({ viewportData, activeDisplaySetData }) => { ).then(({ viewportData, activeDisplaySetData }) => {
setViewportData({ ...viewportData }); setViewportData({ ...viewportData });
setActiveDisplaySetData({ ...activeDisplaySetData }); setActiveDisplaySetData({ ...activeDisplaySetData });
setMeasurementSelected(newMeasurementSelected);
if (element !== null) { if (element !== null) {
scrollToIndex(element, viewportData.stack.currentImageIdIndex);
cornerstone.updateImage(element); cornerstone.updateImage(element);
} }
}); });
@ -151,9 +152,8 @@ function OHIFCornerstoneSRViewport({
]); ]);
useEffect(() => { useEffect(() => {
updateViewport(); updateViewport(measurementSelected);
}, [ }, [
measurementSelected,
dataSource, dataSource,
displaySet, displaySet,
displaySet.StudyInstanceUID, displaySet.StudyInstanceUID,
@ -210,27 +210,27 @@ function OHIFCornerstoneSRViewport({
} = activeDisplaySetData; } = activeDisplaySetData;
const onMeasurementChange = direction => { const onMeasurementChange = direction => {
let newMeausrementSelected = measurementSelected; let newMeasurementSelected = measurementSelected;
if (direction === 'right') { if (direction === 'right') {
newMeausrementSelected++; newMeasurementSelected++;
if (newMeausrementSelected >= measurementCount) { if (newMeasurementSelected >= measurementCount) {
newMeausrementSelected = 0; newMeasurementSelected = 0;
} }
} else { } else {
newMeausrementSelected--; newMeasurementSelected--;
if (newMeausrementSelected < 0) { if (newMeasurementSelected < 0) {
newMeausrementSelected = measurementCount - 1; newMeasurementSelected = measurementCount - 1;
} }
} }
if (newMeausrementSelected === measurementSelected) { if (newMeasurementSelected === measurementSelected) {
// TODO -> Jump to image in this case. // TODO -> Jump to image in this case.
} }
setMeasurementSelected(newMeausrementSelected); updateViewport(newMeasurementSelected);
}; };
console.log(currentImageIdIndex); console.log(currentImageIdIndex);