From 6e723ebced58852007ca553792c740976cfc4201 Mon Sep 17 00:00:00 2001 From: Igor Octaviano Date: Thu, 25 Mar 2021 13:12:20 -0300 Subject: [PATCH] fix: IDC-2288: Update toolbar tabs after derived displayset loaded (#2307) * Update toolbar tabs after derived displayset loaded * trigger CI Co-authored-by: Davide Punzo --- .../utils/loadAndCacheDerivedDisplaySets.js | 12 ++++++-- .../src/connectedComponents/ToolbarRow.js | 29 +++++++++++++++++++ .../viewer/src/connectedComponents/Viewer.js | 1 + 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/platform/core/src/utils/loadAndCacheDerivedDisplaySets.js b/platform/core/src/utils/loadAndCacheDerivedDisplaySets.js index e11462c7b..4fcf10db1 100644 --- a/platform/core/src/utils/loadAndCacheDerivedDisplaySets.js +++ b/platform/core/src/utils/loadAndCacheDerivedDisplaySets.js @@ -49,9 +49,7 @@ import studyMetadataManager from './studyMetadataManager'; */ const loadAndCacheDerivedDisplaySets = (referencedDisplaySet, studies) => { const { StudyInstanceUID, SeriesInstanceUID } = referencedDisplaySet; - const promises = []; - const studyMetadata = studyMetadataManager.get(StudyInstanceUID); if (!studyMetadata) { @@ -112,6 +110,16 @@ const loadAndCacheDerivedDisplaySets = (referencedDisplaySet, studies) => { promises.push(recentDisplaySet.load(referencedDisplaySet, studies)); }); + Promise.all(promises).then(() => { + /* + * TODO: Improve the way we notify parts of the app + * that depends on derived display sets to be loaded. + * (Implement pubsub for better tracking of derived display sets) + */ + const event = new CustomEvent('deriveddisplaysetsloadedandcached'); + document.dispatchEvent(event); + }); + return promises; }; diff --git a/platform/viewer/src/connectedComponents/ToolbarRow.js b/platform/viewer/src/connectedComponents/ToolbarRow.js index d2022e3f5..9d4745248 100644 --- a/platform/viewer/src/connectedComponents/ToolbarRow.js +++ b/platform/viewer/src/connectedComponents/ToolbarRow.js @@ -59,6 +59,9 @@ class ToolbarRow extends Component { this.seriesPerStudyCount = []; this._handleBuiltIn = _handleBuiltIn.bind(this); + this._onDerivedDisplaySetsLoadedAndCached = this._onDerivedDisplaySetsLoadedAndCached.bind( + this + ); this.updateButtonGroups(); } @@ -109,6 +112,32 @@ class ToolbarRow extends Component { }); } + componentDidMount() { + /* + * TODO: Improve the way we notify parts of the app + * that depends on derived display sets to be loaded. + * (Implement pubsub for better tracking of derived display sets) + */ + document.addEventListener( + 'deriveddisplaysetsloadedandcached', + this._onDerivedDisplaySetsLoadedAndCached + ); + } + + componentWillUnmount() { + document.removeEventListener( + 'deriveddisplaysetsloadedandcached', + this._onDerivedDisplaySetsLoadedAndCached + ); + } + + _onDerivedDisplaySetsLoadedAndCached() { + this.updateButtonGroups(); + this.setState({ + toolbarButtons: _getVisibleToolbarButtons.call(this), + }); + } + componentDidUpdate(prevProps) { const activeContextsChanged = prevProps.activeContexts !== this.props.activeContexts; diff --git a/platform/viewer/src/connectedComponents/Viewer.js b/platform/viewer/src/connectedComponents/Viewer.js index 9e349f3ca..141195949 100644 --- a/platform/viewer/src/connectedComponents/Viewer.js +++ b/platform/viewer/src/connectedComponents/Viewer.js @@ -271,6 +271,7 @@ class Viewer extends Component { activeViewport={ this.props.viewports[this.props.activeViewportIndex] } + isDerivedDisplaySetsLoaded={this.props.isDerivedDisplaySetsLoaded} isLeftSidePanelOpen={this.state.isLeftSidePanelOpen} isRightSidePanelOpen={this.state.isRightSidePanelOpen} selectedLeftSidePanel={