Skip to content

Commit 9d91186

Browse files
sedghiswederik
andauthoredOct 1, 2021
fix: imageLoadPoolManager should be used for loading (#127)
* fix: imageLoadPoolManager should be used for loading * bump dependency versions Co-authored-by: swederik <[email protected]>
1 parent 95e9fb1 commit 9d91186

File tree

3 files changed

+83
-178
lines changed

3 files changed

+83
-178
lines changed
 

‎package-lock.json

+20-144
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
"prepublishOnly": "npm run build && npm run build:release"
2424
},
2525
"peerDependencies": {
26-
"cornerstone-core": "^2.5.0",
26+
"cornerstone-core": "^2.6.0",
2727
"cornerstone-math": "^0.1.9",
28-
"cornerstone-tools": "^6.0.0",
29-
"cornerstone-wado-image-loader": "^4.0.0",
28+
"cornerstone-tools": "^6.0.1",
29+
"cornerstone-wado-image-loader": "^4.0.4",
3030
"dicom-parser": "^1.8.8",
3131
"hammerjs": "^2.0.8",
3232
"react": "^17.0.2",
@@ -49,10 +49,10 @@
4949
"babel-eslint": "10.1.0",
5050
"babel-loader": "^8.2.2",
5151
"commitizen": "4.2.x",
52-
"cornerstone-core": "^2.5.0",
52+
"cornerstone-core": "^2.6.0",
5353
"cornerstone-math": "^0.1.9",
54-
"cornerstone-tools": "^6.0.0",
55-
"cornerstone-wado-image-loader": "^4.0.0",
54+
"cornerstone-tools": "^6.0.1",
55+
"cornerstone-wado-image-loader": "^4.0.4",
5656
"cross-env": "^7.0.3",
5757
"css-loader": "^6.2.0",
5858
"dicom-parser": "^1.8.8",

‎src/CornerstoneViewport/CornerstoneViewport.js

+57-28
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import areStringArraysEqual from './../helpers/areStringArraysEqual.js';
1515

1616
import './CornerstoneViewport.css';
1717

18+
const addToBeginning = true;
19+
const priority = -5;
20+
const requestType = 'interaction';
21+
1822
const scrollToIndex = cornerstoneTools.importInternal('util/scrollToIndex');
1923
const { loadHandlerManager } = cornerstoneTools;
2024

@@ -186,11 +190,27 @@ class CornerstoneViewport extends Component {
186190
});
187191

188192
// Load first image in stack
189-
const image = await cornerstone.loadAndCacheImage(imageId);
190-
191-
// Display
192-
193-
cornerstone.displayImage(this.element, image, initialViewport);
193+
const options = {
194+
addToBeginning,
195+
priority,
196+
};
197+
198+
const requestFn = (imageId, options) => {
199+
return cornerstone.loadAndCacheImage(imageId, options).then((image) => {
200+
cornerstone.displayImage(this.element, image, initialViewport);
201+
});
202+
};
203+
204+
// 1. Load the image using the ImageLoadingPool
205+
cornerstone.imageLoadPoolManager.addRequest(
206+
requestFn.bind(this, imageId, options),
207+
requestType,
208+
{
209+
imageId,
210+
},
211+
priority,
212+
addToBeginning
213+
);
194214

195215
if (isStackPrefetchEnabled) {
196216
cornerstoneTools.stackPrefetch.enable(this.element);
@@ -243,10 +263,24 @@ class CornerstoneViewport extends Component {
243263
// load + display image
244264
const imageId = stack[imageIndex || 0];
245265
cornerstoneTools.stopClip(this.element);
246-
const image = await cornerstone.loadAndCacheImage(imageId);
247-
248-
cornerstone.displayImage(this.element, image, initialViewport);
249-
cornerstone.reset(this.element);
266+
const requestFn = (imageId, options) => {
267+
return cornerstone
268+
.loadAndCacheImage(imageId, options)
269+
.then((image) => {
270+
cornerstone.displayImage(this.element, image, initialViewport);
271+
cornerstone.reset(this.element);
272+
});
273+
};
274+
275+
cornerstone.imageLoadPoolManager.addRequest(
276+
requestFn.bind(this, imageId, { addToBeginning, priority }),
277+
requestType,
278+
{
279+
imageId,
280+
},
281+
priority,
282+
addToBeginning
283+
);
250284
} catch (err) {
251285
// :wave:
252286
// What if user kills component before `displayImage`?
@@ -350,13 +384,8 @@ class CornerstoneViewport extends Component {
350384
*/
351385
getOverlay() {
352386
const { viewportOverlayComponent: Component, imageIds } = this.props;
353-
const {
354-
imageIdIndex,
355-
scale,
356-
windowWidth,
357-
windowCenter,
358-
isOverlayVisible,
359-
} = this.state;
387+
const { imageIdIndex, scale, windowWidth, windowCenter, isOverlayVisible } =
388+
this.state;
360389
const imageId = imageIds[imageIdIndex];
361390
return (
362391
imageId &&
@@ -586,7 +615,7 @@ class CornerstoneViewport extends Component {
586615
* @returns {undefined}
587616
*/
588617
_handleOnElementEnabledEvent = (clear = false) => {
589-
const handler = evt => {
618+
const handler = (evt) => {
590619
const elementThatWasEnabled = evt.detail.element;
591620
if (elementThatWasEnabled === this.element) {
592621
// Pass Event
@@ -633,7 +662,7 @@ class CornerstoneViewport extends Component {
633662

634663
// We use this to "flip" `isLoading` to true, if our startLoading request
635664
// takes longer than our "loadIndicatorDelay"
636-
const startLoadHandler = element => {
665+
const startLoadHandler = (element) => {
637666
clearTimeout(this.loadHandlerTimeout);
638667

639668
// Call user defined loadHandler
@@ -669,7 +698,7 @@ class CornerstoneViewport extends Component {
669698
}
670699

671700
// TODO: May need to throttle?
672-
onImageRendered = event => {
701+
onImageRendered = (event) => {
673702
const viewport = event.detail.viewport;
674703

675704
this.setState({
@@ -697,9 +726,9 @@ class CornerstoneViewport extends Component {
697726
}
698727
};
699728

700-
onNewImage = event => this.onNewImageHandler(event, this.props.onNewImage);
729+
onNewImage = (event) => this.onNewImageHandler(event, this.props.onNewImage);
701730

702-
onNewImageDebounced = debounce(event => {
731+
onNewImageDebounced = debounce((event) => {
703732
this.onNewImageHandler(event, this.props.onNewImageDebounced);
704733
}, this.props.onNewImageDebounceTime);
705734

@@ -709,13 +738,13 @@ class CornerstoneViewport extends Component {
709738
this.numImagesLoaded++;
710739
};
711740

712-
onImageProgress = e => {
741+
onImageProgress = (e) => {
713742
this.setState({
714743
imageProgress: e.detail.percentComplete,
715744
});
716745
};
717746

718-
imageSliderOnInputCallback = value => {
747+
imageSliderOnInputCallback = (value) => {
719748
this.setViewportActive();
720749

721750
scrollToIndex(this.element, value);
@@ -757,9 +786,9 @@ class CornerstoneViewport extends Component {
757786
)}
758787
<div
759788
className="viewport-element"
760-
onContextMenu={e => e.preventDefault()}
761-
onMouseDown={e => e.preventDefault()}
762-
ref={input => {
789+
onContextMenu={(e) => e.preventDefault()}
790+
onMouseDown={(e) => e.preventDefault()}
791+
ref={(input) => {
763792
this.element = input;
764793
}}
765794
>
@@ -796,9 +825,9 @@ function _trySetActiveTool(element, activeToolName) {
796825
}
797826

798827
const validTools = cornerstoneTools.store.state.tools.filter(
799-
tool => tool.element === element
828+
(tool) => tool.element === element
800829
);
801-
const validToolNames = validTools.map(tool => tool.name);
830+
const validToolNames = validTools.map((tool) => tool.name);
802831

803832
if (!validToolNames.includes(activeToolName)) {
804833
console.warn(

0 commit comments

Comments
 (0)
Please sign in to comment.