Skip to content

Commit e1c0376

Browse files
authored
fix: runaway debounce (#37)
* Bump version and publish * Catch-up to deployed * Fixing runaway debounces?
1 parent f80fc11 commit e1c0376

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-cornerstone-viewport",
3-
"version": "0.2.0",
3+
"version": "0.2.2",
44
"description": "Cornerstone medical image viewport component for React",
55
"author": "Cornerstone Contributors",
66
"license": "MIT",

src/CornerstoneViewport/CornerstoneViewport.js

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,27 @@ function initializeTools(cornerstoneTools, tools, element) {
4444
});
4545
}
4646

47-
function layoutsEqual(a, b) {
48-
if (
49-
!a ||
50-
!b ||
51-
(!a.viewports && !b.viewports) ||
52-
a.viewports.length !== b.viewports.length
53-
) {
54-
return false;
47+
function areLayoutsEqual(a, b, viewportIndex = 0) {
48+
const notEqual = false;
49+
const viewportsExist =
50+
a &&
51+
b &&
52+
a.viewports &&
53+
b.viewports &&
54+
a.viewports.length > 0 &&
55+
b.viewports.length > 0;
56+
const wasNotSetAndNowIs = (!a && b) || (!a.viewports && !b.viewports);
57+
const hasNumViewportsChanged =
58+
viewportsExist && a.viewports.length !== b.viewports.length;
59+
60+
if (wasNotSetAndNowIs || hasNumViewportsChanged) {
61+
return notEqual;
5562
}
5663

57-
return a.viewports.every((aViewport, index) => {
58-
return viewportsEqual(aViewport, b.viewports[index]);
59-
});
64+
const aViewport = a.viewports[viewportIndex];
65+
const bViewport = b.viewports[viewportIndex];
66+
67+
return viewportsEqual(aViewport, bViewport);
6068
}
6169

6270
function viewportsEqual(a, b) {
@@ -131,7 +139,8 @@ class CornerstoneViewport extends Component {
131139
PropTypes.string,
132140
PropTypes.func
133141
]),
134-
shouldFitToWindowOnResize: PropTypes.bool
142+
shouldFitToWindowOnResize: PropTypes.bool,
143+
viewportIndex: PropTypes.number
135144
};
136145

137146
static loadIndicatorDelay = 45;
@@ -527,6 +536,15 @@ class CornerstoneViewport extends Component {
527536
this.setState({
528537
viewportHeight: `${this.element.clientHeight - 20}px`
529538
});
539+
540+
// Our `doneLoadingHandler` isn't firing for the initial image load
541+
// Dropping this here, as the image should definitely be loaded at this point,
542+
// and we can force the loading state off. TODO: investigate
543+
setTimeout(() => {
544+
this.setState({
545+
isLoading: false
546+
});
547+
}, CornerstoneViewport.loadIndicatorDelay);
530548
},
531549
error => {
532550
console.error(error);
@@ -707,7 +725,10 @@ class CornerstoneViewport extends Component {
707725
});
708726
}
709727

710-
if (!layoutsEqual(this.props.layout, prevProps.layout)) {
728+
if (
729+
this.props.layout &&
730+
!areLayoutsEqual(this.props.layout, prevProps.layout)
731+
) {
711732
this.debouncedResize();
712733
}
713734

0 commit comments

Comments
 (0)