From b1678ce6399dde37a9878f45ccc7c63286d93fab Mon Sep 17 00:00:00 2001 From: Igor Octaviano Date: Thu, 14 May 2020 11:20:23 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Fix=20race=20condition=20?= =?UTF-8?q?when=20loading=20derived=20display=20sets=20(#1718)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we have multiple SEGs/RTSTRUCTs we intend to load the most recent by default. BREAKING CHANGE: 🧨 However we start to load once the first set of metadata arrives. We need to wait until all series metadata is fetched. ✅ Closes: #1715 Co-authored-by: James Petts --- .../components/ViewportGrid/ViewportGrid.js | 27 ++++++++++--------- .../viewer/src/connectedComponents/Viewer.js | 2 +- .../src/connectedComponents/ViewerMain.js | 1 + .../ViewerRetrieveStudyData.js | 5 ++-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/platform/viewer/src/components/ViewportGrid/ViewportGrid.js b/platform/viewer/src/components/ViewportGrid/ViewportGrid.js index 082ec6eb1..e59449956 100644 --- a/platform/viewer/src/components/ViewportGrid/ViewportGrid.js +++ b/platform/viewer/src/components/ViewportGrid/ViewportGrid.js @@ -12,7 +12,7 @@ import EmptyViewport from './EmptyViewport.js'; const { loadAndCacheDerivedDisplaySets } = utils; -const ViewportGrid = function(props) { +const ViewportGrid = function (props) { const { activeViewportIndex, availablePlugins, @@ -24,6 +24,7 @@ const ViewportGrid = function(props) { studies, viewportData, children, + isStudyLoaded } = props; const rowSize = 100 / numRows; @@ -37,21 +38,23 @@ const ViewportGrid = function(props) { const snackbar = useSnackbarContext(); useEffect(() => { - viewportData.forEach(displaySet => { - const promises = loadAndCacheDerivedDisplaySets(displaySet, studies); + if (isStudyLoaded) { + viewportData.forEach(displaySet => { + const promises = loadAndCacheDerivedDisplaySets(displaySet, studies); - promises.forEach(promise => { - promise.catch(error => { - snackbar.show({ - title: 'Error loading derived display set:', - message: error.message, - type: 'error', - autoClose: false, + promises.forEach(promise => { + promise.catch(error => { + snackbar.show({ + title: 'Error loading derived display set:', + message: error.message, + type: 'error', + autoClose: false, + }); }); }); }); - }); - }, [studies, viewportData]); + } + }, [studies, viewportData, isStudyLoaded]); const getViewportPanes = () => layout.viewports.map((layout, viewportIndex) => { diff --git a/platform/viewer/src/connectedComponents/Viewer.js b/platform/viewer/src/connectedComponents/Viewer.js index f2acea44c..7bb799df6 100644 --- a/platform/viewer/src/connectedComponents/Viewer.js +++ b/platform/viewer/src/connectedComponents/Viewer.js @@ -316,7 +316,7 @@ class Viewer extends Component { {/* MAIN */}
- +
{/* RIGHT */} diff --git a/platform/viewer/src/connectedComponents/ViewerMain.js b/platform/viewer/src/connectedComponents/ViewerMain.js index c55aa4da7..6a9589495 100644 --- a/platform/viewer/src/connectedComponents/ViewerMain.js +++ b/platform/viewer/src/connectedComponents/ViewerMain.js @@ -150,6 +150,7 @@ class ViewerMain extends Component {
{this.state.displaySets.length && ( { return; } - const { show: showUserMessage = () => {} } = dialog; + const { show: showUserMessage = () => { } } = dialog; showUserMessage({ message, }); @@ -269,7 +269,8 @@ function ViewerRetrieveStudyData({ const promises = Array(concurrentRequestsAllowed) .fill(null) .map(loadNextSeries); - await Promise.all(promises); + + return await Promise.all(promises); }; const loadStudies = async () => {