Skip to content

Commit 11417df

Browse files
authored
fix(layout): Fix the layout issue after switching to new display set in a viewport (#15)
- Start listening cornerstone events before displaying the first image - Set missing displaySetInstanceUid and studyInstanceUid in state when display set is changed
1 parent cd4dfe7 commit 11417df

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

src/CornerstoneViewport/CornerstoneViewport.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ class CornerstoneViewport extends Component {
172172

173173
// Skip if image was not changed
174174
if (
175+
stateStack.sopInstanceUid &&
176+
viewportDataStack.sopInstanceUid &&
175177
stateStack.currentImageIdIndex ===
176178
viewportDataStack.currentImageIdIndex &&
177179
stateStack.sopInstanceUid === viewportDataStack.sopInstanceUid
@@ -180,7 +182,12 @@ class CornerstoneViewport extends Component {
180182
}
181183

182184
const stackData = cornerstoneTools.getToolState(this.element, 'stack');
183-
const stack = stackData && stackData.data[0];
185+
let stack = stackData && stackData.data[0];
186+
187+
// Use viewport stack if cornerstone stack is not ready yet
188+
if (!stack) {
189+
stack = viewportDataStack;
190+
}
184191

185192
const imageId = stack.imageIds[stack.currentImageIdIndex];
186193
const sopCommonModule = cornerstone.metaData.get(
@@ -373,6 +380,12 @@ class CornerstoneViewport extends Component {
373380
}
374381
];
375382

383+
this.eventHandlerData.forEach(data => {
384+
const { eventTarget, eventType, handler } = data;
385+
386+
eventTarget.addEventListener(eventType, handler);
387+
});
388+
376389
// Pass ELEMENT_ENABLED event to parent
377390
const onElementEnabledFn = evt => {
378391
const enabledElement = evt.detail.element;
@@ -485,12 +498,6 @@ class CornerstoneViewport extends Component {
485498
isTouchActive: true
486499
});
487500

488-
this.eventHandlerData.forEach(data => {
489-
const { eventTarget, eventType, handler } = data;
490-
491-
eventTarget.addEventListener(eventType, handler);
492-
});
493-
494501
this.setState({
495502
viewportHeight: `${this.element.clientHeight - 20}px`
496503
});
@@ -567,6 +574,8 @@ class CornerstoneViewport extends Component {
567574

568575
if (!currentStack) {
569576
currentStack = {
577+
displaySetInstanceUid,
578+
studyInstanceUid,
570579
currentImageIdIndex,
571580
imageIds: stack.imageIds
572581
};
@@ -575,6 +584,8 @@ class CornerstoneViewport extends Component {
575584
cornerstoneTools.addToolState(this.element, 'stack', currentStack);
576585
} else {
577586
// TODO: we should make something like setToolState by an ID
587+
currentStack.displaySetInstanceUid = displaySetInstanceUid;
588+
currentStack.studyInstanceUid = studyInstanceUid;
578589
currentStack.currentImageIdIndex = currentImageIdIndex;
579590
currentStack.imageIds = stack.imageIds;
580591
}
@@ -637,6 +648,8 @@ class CornerstoneViewport extends Component {
637648

638649
if (!currentStack) {
639650
currentStack = {
651+
displaySetInstanceUid,
652+
studyInstanceUid,
640653
currentImageIdIndex,
641654
imageIds: stack.imageIds
642655
};
@@ -647,6 +660,8 @@ class CornerstoneViewport extends Component {
647660
scrollToIndex(this.element, currentImageIdIndex);
648661

649662
// TODO: we should make something like setToolState by an ID
663+
currentStack.displaySetInstanceUid = displaySetInstanceUid;
664+
currentStack.studyInstanceUid = studyInstanceUid;
650665
currentStack.currentImageIdIndex = currentImageIdIndex;
651666
currentStack.imageIds = stack.imageIds;
652667
}

0 commit comments

Comments
 (0)