fix: 🐛 Fix race condition when loading derived display sets (#1718)

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 <jamesapetts@gmail.com>
This commit is contained in:
Igor Octaviano 2020-05-14 11:20:23 -03:00 committed by GitHub
parent 39937cca08
commit b1678ce639
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 15 deletions

View File

@ -24,6 +24,7 @@ const ViewportGrid = function(props) {
studies,
viewportData,
children,
isStudyLoaded
} = props;
const rowSize = 100 / numRows;
@ -37,6 +38,7 @@ const ViewportGrid = function(props) {
const snackbar = useSnackbarContext();
useEffect(() => {
if (isStudyLoaded) {
viewportData.forEach(displaySet => {
const promises = loadAndCacheDerivedDisplaySets(displaySet, studies);
@ -51,7 +53,8 @@ const ViewportGrid = function(props) {
});
});
});
}, [studies, viewportData]);
}
}, [studies, viewportData, isStudyLoaded]);
const getViewportPanes = () =>
layout.viewports.map((layout, viewportIndex) => {

View File

@ -316,7 +316,7 @@ class Viewer extends Component {
{/* MAIN */}
<div className={classNames('main-content')}>
<ConnectedViewerMain studies={this.props.studies} />
<ConnectedViewerMain studies={this.props.studies} isStudyLoaded={this.props.isStudyLoaded} />
</div>
{/* RIGHT */}

View File

@ -150,6 +150,7 @@ class ViewerMain extends Component {
<div className="ViewerMain">
{this.state.displaySets.length && (
<ConnectedViewportGrid
isStudyLoaded={this.props.isStudyLoaded}
studies={this.props.studies}
viewportData={viewportData}
setViewportData={this.setViewportData}

View File

@ -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 () => {