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

View File

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

View File

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

View File

@ -269,7 +269,8 @@ function ViewerRetrieveStudyData({
const promises = Array(concurrentRequestsAllowed) const promises = Array(concurrentRequestsAllowed)
.fill(null) .fill(null)
.map(loadNextSeries); .map(loadNextSeries);
await Promise.all(promises);
return await Promise.all(promises);
}; };
const loadStudies = async () => { const loadStudies = async () => {