fix: #1075 Returning to the Study List before all series have finishe… (#1090)

* fix: #1075 Returning to the Study List before all series have finished loading throws multiple errors in console

* fix: 🐛 Addressing review feedback from issue #1075

Adding support for cancelable pattern

Closes: #1075

* fix: 🐛 update unit test for exports

Closes: #1075
This commit is contained in:
Emanuel Fiuza de Oliveira authored and GitHub committed 2019-11-05 16:47:54 -03:00
1 parent d26adf92bd
commit ecaf578f92
5 files changed
+77 -6

No files matched your search

@@ -1,6 +1,7 @@
/* global cornerstone */
import './ImageThumbnail.styl';
import { utils } from '@ohif/core';
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
@@ -32,7 +33,7 @@ export default class ImageThumbnail extends PureComponent {
constructor(props) {
super(props);
this.cancelablePromises = [];
this.canvas = React.createRef();
this.state = {
loading: this.shouldRenderToCanvas(),
@@ -43,10 +44,17 @@ export default class ImageThumbnail extends PureComponent {
return this.props.imageId && !this.props.imageSrc;
}
fetchImage() {
const cancelablePromise = utils.makeCancelable(
cornerstone.loadAndCacheImage(this.props.imageId)
);
this.cancelablePromises.push(cancelablePromise);
return cancelablePromise;
}
componentDidMount() {
if (this.shouldRenderToCanvas()) {
cornerstone
.loadAndCacheImage(this.props.imageId)
this.fetchImage()
.then(image => {
cornerstone.renderToCanvas(this.canvas.current, image);
this.setState({
@@ -54,6 +62,7 @@ export default class ImageThumbnail extends PureComponent {
});
})
.catch(error => {
if (error.isCanceled) return;
this.setState({
loading: false,
error: true,
@@ -63,6 +72,12 @@ export default class ImageThumbnail extends PureComponent {
}
}
componentWillUnmount() {
while (this.cancelablePromises.length > 0) {
this.cancelablePromises.pop().cancel();
}
}
render() {
let loadingOrError;
if (this.props.error) {