From c680720ce5ead58fdb399e3a356edac18093f5c0 Mon Sep 17 00:00:00 2001 From: Danny Brown Date: Wed, 23 Oct 2019 11:27:22 -0400 Subject: [PATCH] fix: Revert "Revert "fix: MPR initialization"" (#1065) * Revert "Revert "fix: MPR initialization (#1062)" (#1064)" This reverts commit a6c1e6c71702d2635ed992cc05f8f0b0e3e444c8. * fix: MPR Initialization * fix e2e openStudy * add isRequired for numRows and numColumns --- package.json | 2 + .../components/ViewportGrid/ViewportGrid.js | 8 ++ .../src/connectedComponents/ViewerMain.js | 101 ++++++++++-------- yarn.lock | 31 ++++++ 4 files changed, 99 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index 98ee95e56..d879ebcb0 100644 --- a/package.json +++ b/package.json @@ -61,11 +61,13 @@ "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 66f874eca..2708104f8 100644 --- a/platform/viewer/src/components/ViewportGrid/ViewportGrid.js +++ b/platform/viewer/src/components/ViewportGrid/ViewportGrid.js @@ -32,6 +32,11 @@ const ViewportGrid = function(props) { const ViewportPanes = layout.viewports.map((layout, viewportIndex) => { const displaySet = viewportData[viewportIndex]; + + if (!displaySet) { + return null; + } + const data = { displaySet, studies, @@ -108,6 +113,9 @@ ViewportGrid.propTypes = { setViewportData: PropTypes.func.isRequired, studies: PropTypes.array, children: PropTypes.node, + defaultPlugin: PropTypes.string, + numRows: PropTypes.number.isRequired, + numColumns: PropTypes.number.isRequired, }; ViewportGrid.defaultProps = { diff --git a/platform/viewer/src/connectedComponents/ViewerMain.js b/platform/viewer/src/connectedComponents/ViewerMain.js index 073bc6f31..22b58c36b 100644 --- a/platform/viewer/src/connectedComponents/ViewerMain.js +++ b/platform/viewer/src/connectedComponents/ViewerMain.js @@ -22,8 +22,6 @@ class ViewerMain extends Component { this.state = { displaySets: [], }; - - this.cachedViewportData = {}; } getDisplaySets(studies) { @@ -65,63 +63,75 @@ class ViewerMain extends Component { this.setState({ displaySets, }); + + this.fillEmptyViewportPanes(); } } componentDidUpdate(prevProps) { - if (this.props.studies !== prevProps.studies) { + const prevViewportAmount = prevProps.layout.viewports.length; + const viewportAmount = this.props.layout.viewports.length; + const isVtk = this.props.layout.viewports.some(vp => !!vp.vtk); + + if ( + this.props.studies !== prevProps.studies || + (viewportAmount !== prevViewportAmount && !isVtk) + ) { const displaySets = this.getDisplaySets(this.props.studies); this.setState({ displaySets, }); + + this.fillEmptyViewportPanes(); } } - getViewportData = () => { - const viewportData = []; + fillEmptyViewportPanes = () => { + const dirtyViewportPanes = []; const { layout, viewportSpecificData } = this.props; + const { displaySets } = this.state; - for ( - let viewportIndex = 0; - viewportIndex < layout.viewports.length; - viewportIndex++ - ) { - let displaySet = viewportSpecificData[viewportIndex]; - - // Use the cached display set in viewport if the new one is empty - if (displaySet && !displaySet.displaySetInstanceUid) { - displaySet = this.cachedViewportData[viewportIndex]; - } - - 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 => - !viewportData.some( - v => v.displaySetInstanceUid === ds.displaySetInstanceUid - ) - ); - viewportData.push(Object.assign({}, displaySet)); - } + if (!displaySets || !displaySets.length) { + return; } - this.cachedViewportData = viewportData; + for (let i = 0; i < layout.viewports.length; i++) { + const viewportPane = viewportSpecificData[i]; + const isNonEmptyViewport = + viewportPane && + viewportPane.studyInstanceUid && + viewportPane.displaySetInstanceUid; - return viewportData; + if (isNonEmptyViewport) { + dirtyViewportPanes.push({ + studyInstanceUid: viewportPane.studyInstanceUid, + displaySetInstanceUid: viewportPane.displaySetInstanceUid, + }); + + continue; + } + + const foundDisplaySet = + displaySets.find( + ds => + !dirtyViewportPanes.some( + v => v.displaySetInstanceUid === ds.displaySetInstanceUid + ) + ) || displaySets[displaySets.length - 1]; + + dirtyViewportPanes.push(foundDisplaySet); + } + + dirtyViewportPanes.forEach((vp, i) => { + if (vp && vp.studyInstanceUid) { + this.setViewportData({ + viewportIndex: i, + studyInstanceUid: vp.studyInstanceUid, + displaySetInstanceUid: vp.displaySetInstanceUid, + }); + } + }); }; setViewportData = ({ @@ -139,12 +149,17 @@ class ViewerMain extends Component { }; render() { + const { viewportSpecificData } = this.props; + const viewportData = viewportSpecificData + ? Object.values(viewportSpecificData) + : []; + return (
{this.state.displaySets.length && ( {/* Children to add to each viewport that support children */} diff --git a/yarn.lock b/yarn.lock index a9a9b10b1..5e323d742 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7272,6 +7272,13 @@ escodegen@^1.8.1, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz#0a04f147e31d33c6c161b2dd0971418ac52d0477" + integrity sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w== + dependencies: + get-stdin "^6.0.0" + eslint-config-react-app@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-4.0.1.tgz#23fd0fd7ea89442ef1e733f66a7207674b23c8db" @@ -7354,6 +7361,13 @@ eslint-plugin-node@^9.1.0: resolve "^1.10.1" semver "^6.1.0" +eslint-plugin-prettier@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" + integrity sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA== + dependencies: + prettier-linter-helpers "^1.0.0" + eslint-plugin-promise@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" @@ -7829,6 +7843,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^2.0.2, fast-glob@^2.2.2, fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -8519,6 +8538,11 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" @@ -14670,6 +14694,13 @@ prepend-http@^1.0.0, prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@^1.14.2, prettier@^1.17.0, prettier@^1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"