Skip to content

Commit

Permalink
fix: runaway debounce (#37)
Browse files Browse the repository at this point in the history
* Bump version and publish

* Catch-up to deployed

* Fixing runaway debounces?
  • Loading branch information
dannyrb authored Aug 19, 2019
1 parent f80fc11 commit e1c0376
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 14 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-cornerstone-viewport",
"version": "0.2.0",
"version": "0.2.2",
"description": "Cornerstone medical image viewport component for React",
"author": "Cornerstone Contributors",
"license": "MIT",
Expand Down
47 changes: 34 additions & 13 deletions src/CornerstoneViewport/CornerstoneViewport.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,19 +44,27 @@ function initializeTools(cornerstoneTools, tools, element) {
});
}

function layoutsEqual(a, b) {
if (
!a ||
!b ||
(!a.viewports && !b.viewports) ||
a.viewports.length !== b.viewports.length
) {
return false;
function areLayoutsEqual(a, b, viewportIndex = 0) {
const notEqual = false;
const viewportsExist =
a &&
b &&
a.viewports &&
b.viewports &&
a.viewports.length > 0 &&
b.viewports.length > 0;
const wasNotSetAndNowIs = (!a && b) || (!a.viewports && !b.viewports);
const hasNumViewportsChanged =
viewportsExist && a.viewports.length !== b.viewports.length;

if (wasNotSetAndNowIs || hasNumViewportsChanged) {
return notEqual;
}

return a.viewports.every((aViewport, index) => {
return viewportsEqual(aViewport, b.viewports[index]);
});
const aViewport = a.viewports[viewportIndex];
const bViewport = b.viewports[viewportIndex];

return viewportsEqual(aViewport, bViewport);
}

function viewportsEqual(a, b) {
Expand Down Expand Up @@ -131,7 +139,8 @@ class CornerstoneViewport extends Component {
PropTypes.string,
PropTypes.func
]),
shouldFitToWindowOnResize: PropTypes.bool
shouldFitToWindowOnResize: PropTypes.bool,
viewportIndex: PropTypes.number
};

static loadIndicatorDelay = 45;
Expand Down Expand Up @@ -527,6 +536,15 @@ class CornerstoneViewport extends Component {
this.setState({
viewportHeight: `${this.element.clientHeight - 20}px`
});

// Our `doneLoadingHandler` isn't firing for the initial image load
// Dropping this here, as the image should definitely be loaded at this point,
// and we can force the loading state off. TODO: investigate
setTimeout(() => {
this.setState({
isLoading: false
});
}, CornerstoneViewport.loadIndicatorDelay);
},
error => {
console.error(error);
Expand Down Expand Up @@ -707,7 +725,10 @@ class CornerstoneViewport extends Component {
});
}

if (!layoutsEqual(this.props.layout, prevProps.layout)) {
if (
this.props.layout &&
!areLayoutsEqual(this.props.layout, prevProps.layout)
) {
this.debouncedResize();
}

Expand Down

0 comments on commit e1c0376

Please sign in to comment.