From 698e900b85121d3c2a46747c443ef69fb7a8c95b Mon Sep 17 00:00:00 2001 From: Igor Octaviano Date: Mon, 15 Jun 2020 12:41:36 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Disable=20seg=20panel=20w?= =?UTF-8?q?hen=20data=20for=20seg=20unavailable=20(#1732)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add disable state for invalid data * fix: 🐛 Disable seg panel when data for seg unavailable We need to gracefully handle errors if data for segmentation is unavailable and disable the segmentation panel ✅ Closes: #1728 * Bump dcmjs version dcmjs * @ohif/core: ^0.12.2 → ^0.13.0 * @ohif/extension-cornerstone: ^0.12.3 → ^0.13.0 * @ohif/extension-dicom-html: ^0.12.3 → ^0.13.0 * @ohif/extension-dicom-rt: ^0.12.3 → ^0.13.0 * @ohif/extension-dicom-segmentation: ^0.12.2 → ^0.13.0 * @ohif/extension-vtk: ^0.12.2 → ^0.13.0 * @ohif/viewer: ^0.12.2 → ^0.13.0 * Remove error barrier * Fix e2e Co-authored-by: James Petts --- extensions/cornerstone/package.json | 2 +- extensions/dicom-html/package.json | 2 +- extensions/dicom-rt/package.json | 2 +- extensions/dicom-segmentation/package.json | 2 +- .../SegmentationPanel/SegmentationPanel.css | 5 ++ .../SegmentationPanel/SegmentationPanel.js | 75 ++++++++++--------- extensions/dicom-segmentation/src/index.js | 2 +- extensions/vtk/package.json | 2 +- platform/core/package.json | 2 +- .../integration/common/OHIFStudyList.spec.js | 4 +- platform/viewer/package.json | 2 +- yarn.lock | 8 +- 12 files changed, 60 insertions(+), 48 deletions(-) diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index ecf279677..a31fca16b 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -36,7 +36,7 @@ "cornerstone-math": "^0.1.8", "cornerstone-tools": "4.15.1", "cornerstone-wado-image-loader": "^3.1.0", - "dcmjs": "^0.12.3", + "dcmjs": "0.13.0", "dicom-parser": "^1.8.3", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", diff --git a/extensions/dicom-html/package.json b/extensions/dicom-html/package.json index c6349d971..a5a643613 100644 --- a/extensions/dicom-html/package.json +++ b/extensions/dicom-html/package.json @@ -29,7 +29,7 @@ }, "peerDependencies": { "@ohif/core": "^0.50.0", - "dcmjs": "^0.12.3", + "dcmjs": "0.13.0", "prop-types": "^15.6.2", "react": "^16.8.6", "react-dom": "^16.8.6" diff --git a/extensions/dicom-rt/package.json b/extensions/dicom-rt/package.json index 62accb5ab..c4068525a 100644 --- a/extensions/dicom-rt/package.json +++ b/extensions/dicom-rt/package.json @@ -31,7 +31,7 @@ "@ohif/core": "^0.50.0", "cornerstone-core": "^2.2.8", "cornerstone-tools": "4.15.1", - "dcmjs": "^0.12.3", + "dcmjs": "0.13.0", "prop-types": "^15.6.2", "react": "^16.8.6", "react-dom": "^16.8.6" diff --git a/extensions/dicom-segmentation/package.json b/extensions/dicom-segmentation/package.json index a07cbe644..fc1a64e3f 100644 --- a/extensions/dicom-segmentation/package.json +++ b/extensions/dicom-segmentation/package.json @@ -31,7 +31,7 @@ "@ohif/core": "^0.50.0", "cornerstone-core": "^2.2.8", "cornerstone-tools": "4.15.1", - "dcmjs": "^0.12.2", + "dcmjs": "0.13.0", "prop-types": "^15.6.2", "react": "^16.8.6", "react-dom": "^16.8.6" diff --git a/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.css b/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.css index 888067b56..d22eafa19 100644 --- a/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.css +++ b/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.css @@ -8,6 +8,11 @@ flex-direction: column; } +.dcmseg-segmentation-panel.disabled { + opacity: 0.6; + pointer-events: none; +} + .dcmseg-segmentation-panel h3 { padding-left: 20px; margin-top: 0; diff --git a/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js b/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js index 2af848454..5b50ba025 100644 --- a/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js +++ b/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js @@ -77,7 +77,8 @@ const SegmentationPanel = ({ labelmapList: [], segmentList: [], cachedSegmentsProperties: [], - isLoading: false + isLoading: false, + isDisabled: true }); useEffect(() => { @@ -139,39 +140,45 @@ const SegmentationPanel = ({ const refreshSegmentations = useCallback(() => { const module = cornerstoneTools.getModule('segmentation'); const activeViewport = viewports[activeIndex]; - const studyMetadata = studyMetadataManager.get( - activeViewport.StudyInstanceUID - ); - const firstImageId = studyMetadata.getFirstImageId( - activeViewport.displaySetInstanceUID - ); - const brushStackState = module.state.series[firstImageId]; - if (brushStackState) { - const labelmap3D = - brushStackState.labelmaps3D[brushStackState.activeLabelmapIndex]; - const labelmapList = getLabelmapList( - brushStackState, - firstImageId, - activeViewport + + const isDisabled = !activeViewport || !activeViewport.StudyInstanceUID; + if (!isDisabled) { + const studyMetadata = studyMetadataManager.get( + activeViewport.StudyInstanceUID ); - const segmentList = getSegmentList( - labelmap3D, - firstImageId, - brushStackState + const firstImageId = studyMetadata.getFirstImageId( + activeViewport.displaySetInstanceUID ); - setState(state => ({ - ...state, - brushStackState, - selectedSegmentation: brushStackState.activeLabelmapIndex, - labelmapList, - segmentList, - })); - } else { - setState(state => ({ - ...state, - labelmapList: [], - segmentList: [], - })); + const brushStackState = module.state.series[firstImageId]; + if (brushStackState) { + const labelmap3D = + brushStackState.labelmaps3D[brushStackState.activeLabelmapIndex]; + const labelmapList = getLabelmapList( + brushStackState, + firstImageId, + activeViewport + ); + const segmentList = getSegmentList( + labelmap3D, + firstImageId, + brushStackState + ); + setState(state => ({ + ...state, + brushStackState, + selectedSegmentation: brushStackState.activeLabelmapIndex, + labelmapList, + segmentList, + isDisabled + })); + } else { + setState(state => ({ + ...state, + labelmapList: [], + segmentList: [], + isDisabled + })); + } } }, [ viewports, @@ -181,7 +188,7 @@ const SegmentationPanel = ({ useEffect(() => { refreshSegmentations(); - }, [viewports, activeIndex, state.selectedSegmentation, activeContexts, state.isLoading]); + }, [viewports, activeIndex, isOpen, state.selectedSegmentation, activeContexts, state.isLoading]); /* Handle open/closed panel behaviour */ useEffect(() => { @@ -507,7 +514,7 @@ const SegmentationPanel = ({ ); } else { return ( -
+
{ const { activeContexts } = api.hooks.useAppContext(); diff --git a/extensions/vtk/package.json b/extensions/vtk/package.json index 6c25e99d3..23c18ffd4 100644 --- a/extensions/vtk/package.json +++ b/extensions/vtk/package.json @@ -35,7 +35,7 @@ "cornerstone-core": "^2.2.8", "cornerstone-tools": "4.15.1", "cornerstone-wado-image-loader": "^3.1.0", - "dcmjs": "^0.12.2", + "dcmjs": "0.13.0", "dicom-parser": "^1.8.3", "i18next": "^17.0.3", "i18next-browser-languagedetector": "^3.0.1", diff --git a/platform/core/package.json b/platform/core/package.json index 41b1b6a1f..9ff3c6b7b 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -39,7 +39,7 @@ "dependencies": { "@babel/runtime": "^7.5.5", "ajv": "^6.10.0", - "dcmjs": "^0.12.2", + "dcmjs": "0.13.0", "dicomweb-client": "^0.6.0", "immer": "6.0.2", "isomorphic-base64": "^1.0.2", diff --git a/platform/viewer/cypress/integration/common/OHIFStudyList.spec.js b/platform/viewer/cypress/integration/common/OHIFStudyList.spec.js index bdb3092ec..ffe82d552 100644 --- a/platform/viewer/cypress/integration/common/OHIFStudyList.spec.js +++ b/platform/viewer/cypress/integration/common/OHIFStudyList.spec.js @@ -52,7 +52,7 @@ describe('OHIF Study List', function() { //Wait result list to be displayed cy.waitStudyList(); cy.get('@searchResult').should($list => { - expect($list.length).to.be.eq(15); // TODO: Where are you hiding MISTER^MR? + expect($list.length).to.be.eq(16); // TODO: Where are you hiding MISTER^MR? expect($list).to.contain('MR'); }); }); @@ -147,7 +147,7 @@ describe('OHIF Study List', function() { //Wait result list to be displayed cy.waitStudyList(); cy.get('@searchResult').should($list => { - expect($list.length).to.be.eq(15); // TODO: Where are you hiding MISTER^MR? + expect($list.length).to.be.eq(16); // TODO: Where are you hiding MISTER^MR? expect($list).to.contain('MR'); }); }); diff --git a/platform/viewer/package.json b/platform/viewer/package.json index 6b83134f6..50b653195 100644 --- a/platform/viewer/package.json +++ b/platform/viewer/package.json @@ -67,7 +67,7 @@ "cornerstone-math": "^0.1.8", "cornerstone-tools": "4.15.1", "cornerstone-wado-image-loader": "^3.1.0", - "dcmjs": "^0.12.2", + "dcmjs": "0.13.0", "dicom-parser": "^1.8.3", "dicomweb-client": "^0.4.4", "hammerjs": "^2.0.8", diff --git a/yarn.lock b/yarn.lock index 3bd9b1069..8ff61e999 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6534,10 +6534,10 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -dcmjs@^0.12.2: - version "0.12.2" - resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.12.2.tgz#1c16e19c27ff43202abc7cd25c5ecd6d8bf7672e" - integrity sha512-B7cEVCfDi3mOLKoBYUMYy+6COjLZhtKaesNpq5XNA4IbEH4EJYVweJfiI9gsR5hypv9LAPg72xG/xrbqjy8TgQ== +dcmjs@0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.13.0.tgz#16310a137a0fe800ccb2d4751a28cf023765f347" + integrity sha512-U+qGwlnkG8vwDKB4R7ryqQUtWQM1JHMKMBw5+Oy8wcPxS+vDmaRTqIcAItMh1DcZ0ia8RN0VI5TBVCOJl7GVhA== dependencies: "@babel/polyfill" "^7.8.3" "@babel/runtime" "^7.8.4"