diff --git a/platform/core/src/redux/reducers/viewports.js b/platform/core/src/redux/reducers/viewports.js index e08166bf6..3bc0e740b 100644 --- a/platform/core/src/redux/reducers/viewports.js +++ b/platform/core/src/redux/reducers/viewports.js @@ -34,7 +34,6 @@ const defaultState = { * @param {Object} [action.viewportSpecificData] */ const viewports = (state = defaultState, action) => { - let currentData; let viewportSpecificData; let useActiveViewport = false; switch (action.type) { @@ -85,14 +84,24 @@ const viewports = (state = defaultState, action) => { // Allow fall-through // eslint-disable-next-line case SET_SPECIFIC_DATA: { + const layout = cloneDeep(state.layout); + const hasPlugin = action.data && action.data.plugin; const viewportIndex = useActiveViewport ? state.activeViewportIndex : action.viewportIndex; - currentData = cloneDeep(state.viewportSpecificData[viewportIndex]) || {}; - viewportSpecificData = cloneDeep(state.viewportSpecificData); - viewportSpecificData[viewportIndex] = merge({}, currentData, action.data); + const { dom } = state.viewportSpecificData[viewportIndex]; - return Object.assign({}, state, { viewportSpecificData }); + viewportSpecificData = cloneDeep(state.viewportSpecificData); + viewportSpecificData[viewportIndex] = { + dom, + ...action.data, + }; + + if (hasPlugin) { + layout.viewports[viewportIndex].plugin = action.data.plugin; + } + + return Object.assign({}, state, { layout, viewportSpecificData }); } case CLEAR_VIEWPORT: viewportSpecificData = cloneDeep(state.viewportSpecificData); diff --git a/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js b/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js index e7d14ebf8..c1c7e5c67 100644 --- a/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js +++ b/platform/viewer/src/connectedComponents/ConnectedStudyBrowser.js @@ -35,14 +35,14 @@ const mapStateToProps = (state, ownProps) => { }; }; -const mapDispatchToProps = dispatch => { +const mapDispatchToProps = (dispatch, ownProps) => { return { onThumbnailClick: displaySetInstanceUid => { - dispatch( - setActiveViewportSpecificData({ - displaySetInstanceUid, - }) + const displaySet = ownProps.studyMetadata[0].displaySets.find( + ds => ds.displaySetInstanceUid === displaySetInstanceUid ); + + dispatch(setActiveViewportSpecificData(displaySet)); }, }; }; diff --git a/platform/viewer/src/connectedComponents/Viewer.js b/platform/viewer/src/connectedComponents/Viewer.js index 827939802..3cc112c63 100644 --- a/platform/viewer/src/connectedComponents/Viewer.js +++ b/platform/viewer/src/connectedComponents/Viewer.js @@ -295,7 +295,10 @@ class Viewer extends Component { activeIndex={this.props.activeViewportIndex} /> ) : ( - + )}