diff --git a/package.json b/package.json index d879ebcb0..98ee95e56 100644 --- a/package.json +++ b/package.json @@ -61,13 +61,11 @@ "css-loader": "^3.2.0", "dotenv": "^8.1.0", "eslint": "5.16.0", - "eslint-config-prettier": "^6.4.0", "eslint-config-react-app": "^4.0.1", "eslint-plugin-flowtype": "2.x", "eslint-plugin-import": "2.x", "eslint-plugin-jsx-a11y": "6.x", "eslint-plugin-node": "^9.1.0", - "eslint-plugin-prettier": "^3.1.1", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-react": "7.x", "eslint-plugin-react-hooks": "1.5.0", diff --git a/platform/viewer/src/components/ViewportGrid/ViewportGrid.js b/platform/viewer/src/components/ViewportGrid/ViewportGrid.js index 75c10521a..66f874eca 100644 --- a/platform/viewer/src/components/ViewportGrid/ViewportGrid.js +++ b/platform/viewer/src/components/ViewportGrid/ViewportGrid.js @@ -32,11 +32,6 @@ const ViewportGrid = function(props) { const ViewportPanes = layout.viewports.map((layout, viewportIndex) => { const displaySet = viewportData[viewportIndex]; - - if (!displaySet) { - return null; - } - const data = { displaySet, studies, @@ -113,9 +108,6 @@ ViewportGrid.propTypes = { setViewportData: PropTypes.func.isRequired, studies: PropTypes.array, children: PropTypes.node, - defaultPlugin: PropTypes.string, - numRows: PropTypes.number, - numColumns: PropTypes.number, }; ViewportGrid.defaultProps = { diff --git a/platform/viewer/src/connectedComponents/ViewerMain.js b/platform/viewer/src/connectedComponents/ViewerMain.js index 0790624da..073bc6f31 100644 --- a/platform/viewer/src/connectedComponents/ViewerMain.js +++ b/platform/viewer/src/connectedComponents/ViewerMain.js @@ -22,6 +22,8 @@ class ViewerMain extends Component { this.state = { displaySets: [], }; + + this.cachedViewportData = {}; } getDisplaySets(studies) { @@ -63,74 +65,63 @@ class ViewerMain extends Component { this.setState({ displaySets, }); - - this.fillEmptyViewportPanes(); } } componentDidUpdate(prevProps) { - const prevViewportAmount = prevProps.layout.viewports.length; - const viewportAmount = this.props.layout.viewports.length; - - if ( - this.props.studies !== prevProps.studies || - viewportAmount !== prevViewportAmount - ) { + if (this.props.studies !== prevProps.studies) { const displaySets = this.getDisplaySets(this.props.studies); this.setState({ displaySets, }); - - this.fillEmptyViewportPanes(); } } - fillEmptyViewportPanes = () => { - const dirtyViewportPanes = []; + getViewportData = () => { + const viewportData = []; const { layout, viewportSpecificData } = this.props; - const { displaySets } = this.state; - if (!displaySets || !displaySets.length) { - return; - } + for ( + let viewportIndex = 0; + viewportIndex < layout.viewports.length; + viewportIndex++ + ) { + let displaySet = viewportSpecificData[viewportIndex]; - for (let i = 0; i < layout.viewports.length; i++) { - const viewportPane = viewportSpecificData[i]; - const isNonEmptyViewport = - viewportPane && - viewportPane.studyInstanceUid && - viewportPane.displaySetInstanceUid; - - if (isNonEmptyViewport) { - dirtyViewportPanes.push({ - studyInstanceUid: viewportPane.studyInstanceUid, - displaySetInstanceUid: viewportPane.displaySetInstanceUid, - }); - - continue; + // Use the cached display set in viewport if the new one is empty + if (displaySet && !displaySet.displaySetInstanceUid) { + displaySet = this.cachedViewportData[viewportIndex]; } - const foundDisplaySet = - displaySets.find( + if ( + displaySet && + displaySet.studyInstanceUid && + displaySet.displaySetInstanceUid + ) { + // Get missing fields from original display set + const originalDisplaySet = this.findDisplaySet( + this.props.studies, + displaySet.studyInstanceUid, + displaySet.displaySetInstanceUid + ); + viewportData.push(Object.assign({}, originalDisplaySet, displaySet)); + } else { + // If the viewport is empty, get one available in study + const { displaySets } = this.state; + displaySet = displaySets.find( ds => - !dirtyViewportPanes.some( + !viewportData.some( v => v.displaySetInstanceUid === ds.displaySetInstanceUid ) - ) || displaySets[displaySets.length - 1]; - - dirtyViewportPanes.push(foundDisplaySet); + ); + viewportData.push(Object.assign({}, displaySet)); + } } - dirtyViewportPanes.forEach((vp, i) => { - if (vp && vp.studyInstanceUid) { - this.setViewportData({ - viewportIndex: i, - studyInstanceUid: vp.studyInstanceUid, - displaySetInstanceUid: vp.displaySetInstanceUid, - }); - } - }); + this.cachedViewportData = viewportData; + + return viewportData; }; setViewportData = ({ @@ -148,17 +139,12 @@ class ViewerMain extends Component { }; render() { - const { viewportSpecificData } = this.props; - const viewportData = viewportSpecificData - ? Object.values(viewportSpecificData) - : []; - return (