fix: Performance of panel study browser (#4819)

This commit is contained in:
Bill Wallace 2025-02-28 13:51:43 -05:00 committed by GitHub
parent 6b0bb9402f
commit d25809eed0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -119,7 +119,7 @@ function PanelStudyBrowser({
date: formatDate(qidoStudy.StudyDate), date: formatDate(qidoStudy.StudyDate),
description: qidoStudy.StudyDescription, description: qidoStudy.StudyDescription,
modalities: qidoStudy.ModalitiesInStudy, modalities: qidoStudy.ModalitiesInStudy,
numInstances: qidoStudy.NumInstances, numInstances: Number(qidoStudy.NumInstances),
}; };
}); });
@ -158,13 +158,26 @@ function PanelStudyBrowser({
const imageIds = dataSource.getImageIdsForDisplaySet(displaySet); const imageIds = dataSource.getImageIdsForDisplaySet(displaySet);
const imageId = imageIds[Math.floor(imageIds.length / 2)]; const imageId = imageIds[Math.floor(imageIds.length / 2)];
let { thumbnailSrc } = displaySet;
if (!thumbnailSrc && displaySet.getThumbnailSrc) {
thumbnailSrc = await displaySet.getThumbnailSrc();
}
if (!thumbnailSrc) {
let thumbnailSrc = await getImageSrc(imageId);
displaySet.thumbnailSrc = thumbnailSrc;
}
newImageSrcEntry[dSet.displaySetInstanceUID] = thumbnailSrc;
// TODO: Is it okay that imageIds are not returned here for SR displaySets? // TODO: Is it okay that imageIds are not returned here for SR displaySets?
if (!imageId || displaySet?.unsupported) { if (!imageId || displaySet?.unsupported) {
return; return;
} }
// When the image arrives, render it and store the result in the thumbnailImgSrcMap // When the image arrives, render it and store the result in the thumbnailImgSrcMap
newImageSrcEntry[dSet.displaySetInstanceUID] = await getImageSrc(imageId); try {
newImageSrcEntry[dSet.displaySetInstanceUID] = await getImageSrc(imageId);
} catch (e) {
// This can happen for thumbnails and generate huge log sets if logged.
return;
}
setThumbnailImageSrcMap(prevState => { setThumbnailImageSrcMap(prevState => {
return { ...prevState, ...newImageSrcEntry }; return { ...prevState, ...newImageSrcEntry };
}); });
@ -356,7 +369,7 @@ function _mapDisplaySets(displaySets, thumbnailImageSrcMap) {
displaySets displaySets
.filter(ds => !ds.excludeFromThumbnailBrowser) .filter(ds => !ds.excludeFromThumbnailBrowser)
.forEach(ds => { .forEach(ds => {
const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID]; const { thumbnailSrc, displaySetInstanceUID } = ds; // thumbnailImageSrcMap[ds.displaySetInstanceUID];
const componentType = _getComponentType(ds); const componentType = _getComponentType(ds);
const array = const array =
@ -369,12 +382,12 @@ function _mapDisplaySets(displaySets, thumbnailImageSrcMap) {
modality: ds.Modality, modality: ds.Modality,
seriesDate: ds.SeriesDate, seriesDate: ds.SeriesDate,
seriesTime: ds.SeriesTime, seriesTime: ds.SeriesTime,
numInstances: ds.numImageFrames, numInstances: parseInt(ds.numImageFrames),
countIcon: ds.countIcon, countIcon: ds.countIcon,
StudyInstanceUID: ds.StudyInstanceUID, StudyInstanceUID: ds.StudyInstanceUID,
messages: ds.messages, messages: ds.messages,
componentType, componentType,
imageSrc, imageSrc: thumbnailSrc || thumbnailImageSrcMap[displaySetInstanceUID],
dragData: { dragData: {
type: 'displayset', type: 'displayset',
displaySetInstanceUID: ds.displaySetInstanceUID, displaySetInstanceUID: ds.displaySetInstanceUID,