From d25809eed073d3f308f6af8244ceae7df8c2ee35 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 28 Feb 2025 13:51:43 -0500 Subject: [PATCH] fix: Performance of panel study browser (#4819) --- .../Panels/StudyBrowser/PanelStudyBrowser.tsx | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx b/extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx index f6ae36733..2052dd874 100644 --- a/extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx +++ b/extensions/default/src/Panels/StudyBrowser/PanelStudyBrowser.tsx @@ -119,7 +119,7 @@ function PanelStudyBrowser({ date: formatDate(qidoStudy.StudyDate), description: qidoStudy.StudyDescription, modalities: qidoStudy.ModalitiesInStudy, - numInstances: qidoStudy.NumInstances, + numInstances: Number(qidoStudy.NumInstances), }; }); @@ -158,13 +158,26 @@ function PanelStudyBrowser({ const imageIds = dataSource.getImageIdsForDisplaySet(displaySet); 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? if (!imageId || displaySet?.unsupported) { return; } // 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 => { return { ...prevState, ...newImageSrcEntry }; }); @@ -356,7 +369,7 @@ function _mapDisplaySets(displaySets, thumbnailImageSrcMap) { displaySets .filter(ds => !ds.excludeFromThumbnailBrowser) .forEach(ds => { - const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID]; + const { thumbnailSrc, displaySetInstanceUID } = ds; // thumbnailImageSrcMap[ds.displaySetInstanceUID]; const componentType = _getComponentType(ds); const array = @@ -369,12 +382,12 @@ function _mapDisplaySets(displaySets, thumbnailImageSrcMap) { modality: ds.Modality, seriesDate: ds.SeriesDate, seriesTime: ds.SeriesTime, - numInstances: ds.numImageFrames, + numInstances: parseInt(ds.numImageFrames), countIcon: ds.countIcon, StudyInstanceUID: ds.StudyInstanceUID, messages: ds.messages, componentType, - imageSrc, + imageSrc: thumbnailSrc || thumbnailImageSrcMap[displaySetInstanceUID], dragData: { type: 'displayset', displaySetInstanceUID: ds.displaySetInstanceUID,