From d5c5951e5733c3008c2769b94382153c43e4fa3a Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Mon, 15 May 2023 08:23:13 -0400 Subject: [PATCH] fix(SR): KO series being displayed in browser list (#3382) * fix: KO series being displayed in browser list * fix sr for volume viewports * move highlight labelmap to RAF * remove commented code * fix the hydration bug for the SR * apply review comments * revert the key images for sr * Remove some obsolete changes * set initial image for sr instead of jump * Remove viewportType stack --------- Co-authored-by: Alireza --- extensions/cornerstone-dicom-rt/package.json | 10 +- .../viewports/OHIFCornerstoneRTViewport.tsx | 1 - extensions/cornerstone-dicom-seg/package.json | 8 +- .../src/getSopClassHandlerModule.ts | 7 - .../utils/createReferencedImageDisplaySet.ts | 3 +- .../viewports/OHIFCornerstoneSRViewport.tsx | 37 +-- .../src/Viewport/OHIFCornerstoneViewport.tsx | 3 +- .../SegmentationService.ts | 28 ++- .../default/src/Panels/PanelStudyBrowser.tsx | 54 ++-- extensions/dicom-microscopy/package.json | 8 +- .../TrackedMeasurementsContext.tsx | 49 +++- .../PanelStudyBrowserTracking.tsx | 230 +++++++++--------- modes/microscopy/package.json | 2 +- package.json | 3 +- platform/cli/package.json | 2 +- .../cli/templates/extension/dependencies.json | 2 +- platform/cli/templates/mode/dependencies.json | 2 +- .../DisplaySetService/DisplaySetService.ts | 2 +- .../viewer/src/components/ViewportGrid.tsx | 17 -- yarn.lock | 10 +- 20 files changed, 249 insertions(+), 229 deletions(-) diff --git a/extensions/cornerstone-dicom-rt/package.json b/extensions/cornerstone-dicom-rt/package.json index cd4bcdb6c7a..89f8071a9d7 100644 --- a/extensions/cornerstone-dicom-rt/package.json +++ b/extensions/cornerstone-dicom-rt/package.json @@ -42,20 +42,20 @@ "webpack-merge": "^5.7.3" }, "dependencies": { - "@babel/runtime": "7.7.6", + "@babel/runtime": "^7.20.13", "react-color": "^2.19.3" }, "devDependencies": { - "@babel/core": "^7.5.0", + "@babel/core": "^7.21.4", "@babel/plugin-proposal-class-properties": "^7.5.0", "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-runtime": "^7.5.0", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-runtime": "^7.17.0", "babel-plugin-inline-react-svg": "^2.0.1", "@babel/preset-env": "^7.5.0", - "@babel/preset-react": "^7.0.0", + "@babel/preset-react": "^7.16.7", "babel-eslint": "^8.0.3", "babel-loader": "^8.0.0-beta.4", "clean-webpack-plugin": "^4.0.0", diff --git a/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx b/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx index b7708968c98..58d190f5a86 100644 --- a/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx +++ b/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx @@ -113,7 +113,6 @@ function OHIFCornerstoneRTViewport(props) { }} onElementEnabled={onElementEnabled} onElementDisabled={onElementDisabled} - // initialImageIndex={initialImageIndex} > ); }, [viewportIndex, rtDisplaySet, toolGroupId]); diff --git a/extensions/cornerstone-dicom-seg/package.json b/extensions/cornerstone-dicom-seg/package.json index d0cae55b5ef..577f9dc942e 100644 --- a/extensions/cornerstone-dicom-seg/package.json +++ b/extensions/cornerstone-dicom-seg/package.json @@ -46,16 +46,16 @@ "react-color": "^2.19.3" }, "devDependencies": { - "@babel/core": "^7.5.0", + "@babel/core": "^7.21.4", "@babel/plugin-proposal-class-properties": "^7.5.0", "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-runtime": "^7.5.0", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-runtime": "^7.17.0", "babel-plugin-inline-react-svg": "^2.0.1", "@babel/preset-env": "^7.5.0", - "@babel/preset-react": "^7.0.0", + "@babel/preset-react": "^7.16.7", "babel-eslint": "^8.0.3", "babel-loader": "^8.0.0-beta.4", "clean-webpack-plugin": "^4.0.0", diff --git a/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.ts b/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.ts index 775da7e8abc..e0209447127 100644 --- a/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.ts +++ b/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.ts @@ -82,13 +82,6 @@ function addInstances( // gets loaded, and to navigate among them. this.instance = this.instances[this.instances.length - 1]; this.isLoaded = false; - if (this.keyImageDisplaySet) { - this.load(); - this.keyImageDisplaySet.updateInstances(); - displaySetService.setDisplaySetMetadataInvalidated( - this.keyImageDisplaySet.displaySetInstanceUID - ); - } return this; } diff --git a/extensions/cornerstone-dicom-sr/src/utils/createReferencedImageDisplaySet.ts b/extensions/cornerstone-dicom-sr/src/utils/createReferencedImageDisplaySet.ts index 03744c26d22..a1dd42d2c23 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/createReferencedImageDisplaySet.ts +++ b/extensions/cornerstone-dicom-sr/src/utils/createReferencedImageDisplaySet.ts @@ -50,7 +50,7 @@ const findReferencedInstances = ( const createReferencedImageDisplaySet = (displaySetService, displaySet) => { const instances = findReferencedInstances(displaySetService, displaySet); // This will be a member function of the created image set - const updateInstances = function () { + const updateInstances = function() { this.images.splice( 0, this.images.length, @@ -78,6 +78,7 @@ const createReferencedImageDisplaySet = (displaySetService, displaySet) => { // This object is made of multiple instances from other series isCompositeStack: true, madeInClient: true, + excludeFromThumbnailBrowser: true, updateInstances, }); diff --git a/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx b/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx index 0223ffbc9c8..8d56f400d39 100644 --- a/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx +++ b/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx @@ -7,7 +7,6 @@ import { setTrackingUniqueIdentifiersForElement } from '../tools/modules/dicomSR import { Icon, Tooltip, useViewportGrid, ViewportActionBar } from '@ohif/ui'; import hydrateStructuredReport from '../utils/hydrateStructuredReport'; -import createReferencedImageDisplaySet from '../utils/createReferencedImageDisplaySet'; const { formatDate } = utils; @@ -22,8 +21,8 @@ function OHIFCornerstoneSRViewport(props) { dataSource, displaySets, viewportIndex, - viewportOptions, viewportLabel, + viewportOptions, servicesManager, extensionManager, } = props; @@ -80,9 +79,9 @@ function OHIFCornerstoneSRViewport(props) { { servicesManager, extensionManager }, displaySetInstanceUID ); - const displaySets = srDisplaySet.keyImageDisplaySet - ? [srDisplaySet.keyImageDisplaySet] - : displaySetService.getDisplaySetsForSeries(SeriesInstanceUIDs[0]); + const displaySets = displaySetService.getDisplaySetsForSeries( + SeriesInstanceUIDs[0] + ); if (displaySets.length) { viewportGridService.setDisplaySetsForViewports([ { @@ -210,9 +209,19 @@ function OHIFCornerstoneSRViewport(props) { // should be passed second since we don't want SR displaySet to // override the activeImageDisplaySetData displaySets={[activeImageDisplaySetData]} + // It is possible that there is a hanging protocol applying viewportOptions + // for the SR, so inherit the viewport options + // TODO: Ensure the viewport options are set correctly with respect to + // stack etc, in the incoming viewport options. viewportOptions={{ ...viewportOptions, toolGroupId: `${SR_TOOLGROUP_BASE_NAME}`, + // viewportType should not be required, as the stack type should be + // required already in order to view SR, but sometimes segmentation + // views set the viewport type without fixing the allowed display + viewportType: 'stack', + // The positionIds for the viewport aren't meaningful for the child display sets + positionIds: null, }} onElementEnabled={onElementEnabled} initialImageIndex={initialImageIndex} @@ -420,18 +429,14 @@ async function _getViewportReferencedDisplaySetData( measurementSelected, displaySetService ) { - if (!displaySet.keyImageDisplaySet) { - // Create a new display set, and preserve a reference to it here, - // so that it can be re-displayed and shown inside the SR viewport. - // This is only for ease of redisplay - the display set is stored in the - // usual manner in the display set service. - displaySet.keyImageDisplaySet = createReferencedImageDisplaySet( - displaySetService, - displaySet - ); - } + const { measurements } = displaySet; + const measurement = measurements[measurementSelected]; + + const { displaySetInstanceUID } = measurement; - const referencedDisplaySet = displaySet.keyImageDisplaySet; + const referencedDisplaySet = displaySetService.getDisplaySetByUID( + displaySetInstanceUID + ); const image0 = referencedDisplaySet.images[0]; const referencedDisplaySetMetadata = { diff --git a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx index a55d74edde2..17a4f2a0063 100644 --- a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx +++ b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx @@ -567,8 +567,9 @@ function _subscribeToJumpToMeasurementEvents( { referencedImageId: measurement.referencedImageId } ); } - if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportIndex) + if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportIndex) { return; + } _jumpToMeasurement( measurement, elementRef, diff --git a/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts b/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts index 5e5642727c9..26d47b3f731 100644 --- a/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts +++ b/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts @@ -1247,37 +1247,39 @@ class SegmentationService extends PubSubService { const { fillAlpha } = this.getConfiguration(toolGroupId); - let count = 0; - const intervalTime = 16; - const numberOfFrames = Math.ceil(animationLength / intervalTime); + let startTime: number = null; + const animation = (timestamp: number) => { + if (startTime === null) { + startTime = timestamp; + } + + const elapsed = timestamp - startTime; + const progress = Math.min(elapsed / animationLength, 1); - this.highlightIntervalId = setInterval(() => { - const x = (count * intervalTime) / animationLength; cstSegmentation.config.setSegmentSpecificConfig( toolGroupId, segmentationRepresentation.segmentationRepresentationUID, { [segmentIndex]: { LABELMAP: { - fillAlpha: easeInOutBell(x, fillAlpha), + fillAlpha: easeInOutBell(progress, fillAlpha), }, }, } ); - count++; - - if (count === numberOfFrames) { - clearInterval(this.highlightIntervalId); + if (progress < 1) { + requestAnimationFrame(animation); + } else { cstSegmentation.config.setSegmentSpecificConfig( toolGroupId, segmentationRepresentation.segmentationRepresentationUID, {} ); - - this.highlightIntervalId = null; } - }, intervalTime); + }; + + requestAnimationFrame(animation); } private _highlightContour( diff --git a/extensions/default/src/Panels/PanelStudyBrowser.tsx b/extensions/default/src/Panels/PanelStudyBrowser.tsx index 63a614f7946..5ad698850f2 100644 --- a/extensions/default/src/Panels/PanelStudyBrowser.tsx +++ b/extensions/default/src/Panels/PanelStudyBrowser.tsx @@ -296,34 +296,36 @@ function _mapDisplaySets(displaySets, thumbnailImageSrcMap) { const thumbnailDisplaySets = []; const thumbnailNoImageDisplaySets = []; - displaySets.forEach(ds => { - const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID]; - const componentType = _getComponentType(ds.Modality); - - const array = - componentType === 'thumbnail' - ? thumbnailDisplaySets - : thumbnailNoImageDisplaySets; - - array.push({ - displaySetInstanceUID: ds.displaySetInstanceUID, - description: ds.SeriesDescription || '', - seriesNumber: ds.SeriesNumber, - modality: ds.Modality, - seriesDate: ds.SeriesDate, - seriesTime: ds.SeriesTime, - numInstances: ds.numImageFrames, - countIcon: ds.countIcon, - StudyInstanceUID: ds.StudyInstanceUID, - componentType, - imageSrc, - dragData: { - type: 'displayset', + displaySets + .filter(ds => !ds.excludeFromThumbnailBrowser) + .forEach(ds => { + const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID]; + const componentType = _getComponentType(ds.Modality); + + const array = + componentType === 'thumbnail' + ? thumbnailDisplaySets + : thumbnailNoImageDisplaySets; + + array.push({ displaySetInstanceUID: ds.displaySetInstanceUID, - // .. Any other data to pass - }, + description: ds.SeriesDescription || '', + seriesNumber: ds.SeriesNumber, + modality: ds.Modality, + seriesDate: ds.SeriesDate, + seriesTime: ds.SeriesTime, + numInstances: ds.numImageFrames, + countIcon: ds.countIcon, + StudyInstanceUID: ds.StudyInstanceUID, + componentType, + imageSrc, + dragData: { + type: 'displayset', + displaySetInstanceUID: ds.displaySetInstanceUID, + // .. Any other data to pass + }, + }); }); - }); return [...thumbnailDisplaySets, ...thumbnailNoImageDisplaySets]; } diff --git a/extensions/dicom-microscopy/package.json b/extensions/dicom-microscopy/package.json index d08fd1523b6..d3b3fc02c7b 100644 --- a/extensions/dicom-microscopy/package.json +++ b/extensions/dicom-microscopy/package.json @@ -43,15 +43,15 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/codec-charls": "^0.1.1", - "@cornerstonejs/codec-libjpeg-turbo-8bit": "^0.0.7", - "@cornerstonejs/codec-openjpeg": "^0.1.1", + "@cornerstonejs/codec-charls": "^1.2.3", + "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", + "@cornerstonejs/codec-openjpeg": "^1.2.2", "colormap": "^2.3", "dicom-microscopy-viewer": "^0.44.0", "dicomicc": "^0.1" }, "devDependencies": { - "@babel/core": "^7.17.8", + "@babel/core": "^7.21.4", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.17.3", "@babel/plugin-proposal-private-methods": "^7.18.6", diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx index 2a5b0a72d50..ccb95cb2e9a 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx @@ -31,12 +31,11 @@ function TrackedMeasurementsContextProvider( ) { const [viewportGrid, viewportGridService] = useViewportGrid(); const { activeViewportIndex, viewports } = viewportGrid; + const { measurementService, displaySetService } = servicesManager.services; const machineOptions = Object.assign({}, defaultOptions); machineOptions.actions = Object.assign({}, machineOptions.actions, { jumpToFirstMeasurementInActiveViewport: (ctx, evt) => { - const { measurementService } = servicesManager.services; - const { trackedStudy, trackedSeries } = ctx; const measurements = measurementService.getMeasurements(); const trackedMeasurements = measurements.filter( @@ -45,21 +44,51 @@ function TrackedMeasurementsContextProvider( trackedSeries.includes(m.referenceSeriesUID) ); - const uid = trackedMeasurements[0].uid; - console.log( 'jumping to measurement reset viewport', viewportGrid.activeViewportIndex, trackedMeasurements[0] ); + + const referencedDisplaySetUID = + trackedMeasurements[0].displaySetInstanceUID; + const referencedDisplaySet = displaySetService.getDisplaySetByUID( + referencedDisplaySetUID + ); + + const referencedImages = referencedDisplaySet.images; + const isVolumeIdReferenced = referencedImages[0].imageId.startsWith( + 'volumeId' + ); + + const measurementData = trackedMeasurements[0].data; + + let imageIndex = 0; + if (!isVolumeIdReferenced && measurementData) { + // if it is imageId referenced find the index of the imageId, we don't have + // support for volumeId referenced images yet + imageIndex = referencedImages.findIndex(image => { + const imageIdToUse = Object.keys(measurementData)[0].substring(8); + return image.imageId === imageIdToUse; + }); + + if (imageIndex === -1) { + console.warn( + 'Could not find image index for tracked measurement, using 0' + ); + imageIndex = 0; + } + } + viewportGridService.setDisplaySetsForViewport({ viewportIndex: viewportGrid.activeViewportIndex, - displaySetInstanceUIDs: [trackedMeasurements[0].displaySetInstanceUID], + displaySetInstanceUIDs: [referencedDisplaySetUID], + viewportOptions: { + initialImageOptions: { + index: imageIndex, + }, + }, }); - measurementService.jumpToMeasurement( - viewportGrid.activeViewportIndex, - uid - ); }, showStructuredReportDisplaySetInActiveViewport: (ctx, evt) => { if (evt.data.createdDisplaySetInstanceUIDs.length > 0) { @@ -73,7 +102,6 @@ function TrackedMeasurementsContextProvider( } }, discardPreviouslyTrackedMeasurements: (ctx, evt) => { - const { measurementService } = servicesManager.services; const measurements = measurementService.getMeasurements(); const filteredMeasurements = measurements.filter(ms => ctx.prevTrackedSeries.includes(ms.referenceSeriesUID) @@ -85,7 +113,6 @@ function TrackedMeasurementsContextProvider( } }, clearAllMeasurements: (ctx, evt) => { - const { measurementService } = servicesManager.services; const measurements = measurementService.getMeasurements(); const measurementIds = measurements.map(fm => fm.uid); diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx index e45dbaa6467..9cc9ab2a78c 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx @@ -439,124 +439,130 @@ function _mapDisplaySets( ) { const thumbnailDisplaySets = []; const thumbnailNoImageDisplaySets = []; - displaySets.forEach(ds => { - const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID]; - const componentType = _getComponentType(ds.Modality); - const numPanes = viewportGridService.getNumViewportPanes(); - const viewportIdentificator = - numPanes === 1 - ? [] - : viewports.reduce((acc, viewportData, index) => { - if ( - index < numPanes && - viewportData?.displaySetInstanceUIDs?.includes( - ds.displaySetInstanceUID - ) - ) { - acc.push(viewportData.viewportLabel); - } - return acc; - }, []); - - const array = - componentType === 'thumbnailTracked' - ? thumbnailDisplaySets - : thumbnailNoImageDisplaySets; - - const { displaySetInstanceUID } = ds; - - const thumbnailProps = { - displaySetInstanceUID, - description: ds.SeriesDescription, - seriesNumber: ds.SeriesNumber, - modality: ds.Modality, - seriesDate: formatDate(ds.SeriesDate), - numInstances: ds.numImageFrames, - countIcon: ds.countIcon, - StudyInstanceUID: ds.StudyInstanceUID, - componentType, - imageSrc, - dragData: { - type: 'displayset', + displaySets + .filter(ds => !ds.excludeFromThumbnailBrowser) + .forEach(ds => { + const imageSrc = thumbnailImageSrcMap[ds.displaySetInstanceUID]; + const componentType = _getComponentType(ds.Modality); + const numPanes = viewportGridService.getNumViewportPanes(); + const viewportIdentificator = + numPanes === 1 + ? [] + : viewports.reduce((acc, viewportData, index) => { + if ( + index < numPanes && + viewportData?.displaySetInstanceUIDs?.includes( + ds.displaySetInstanceUID + ) + ) { + acc.push(viewportData.viewportLabel); + } + return acc; + }, []); + + const array = + componentType === 'thumbnailTracked' + ? thumbnailDisplaySets + : thumbnailNoImageDisplaySets; + + const { displaySetInstanceUID } = ds; + + const thumbnailProps = { displaySetInstanceUID, - // .. Any other data to pass - }, - isTracked: trackedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID), - viewportIdentificator, - }; - - if (componentType === 'thumbnailNoImage') { - if (dataSource.reject && dataSource.reject.series) { - thumbnailProps.canReject = true; - thumbnailProps.onReject = () => { - uiDialogService.create({ - id: 'ds-reject-sr', - centralize: true, - isDraggable: false, - showOverlay: true, - content: Dialog, - contentProps: { - title: 'Delete Report', - body: () => ( -
-

Are you sure you want to delete this report?

-

This action cannot be undone.

-
- ), - actions: [ - { id: 'cancel', text: 'Cancel', type: 'secondary' }, - { - id: 'yes', - text: 'Yes', - type: 'primary', - classes: ['reject-yes-button'], + description: ds.SeriesDescription, + seriesNumber: ds.SeriesNumber, + modality: ds.Modality, + seriesDate: formatDate(ds.SeriesDate), + numInstances: ds.numImageFrames, + countIcon: ds.countIcon, + StudyInstanceUID: ds.StudyInstanceUID, + componentType, + imageSrc, + dragData: { + type: 'displayset', + displaySetInstanceUID, + // .. Any other data to pass + }, + isTracked: trackedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID), + viewportIdentificator, + }; + + if (componentType === 'thumbnailNoImage') { + if (dataSource.reject && dataSource.reject.series) { + thumbnailProps.canReject = true; + thumbnailProps.onReject = () => { + uiDialogService.create({ + id: 'ds-reject-sr', + centralize: true, + isDraggable: false, + showOverlay: true, + content: Dialog, + contentProps: { + title: 'Delete Report', + body: () => ( +
+

Are you sure you want to delete this report?

+

This action cannot be undone.

+
+ ), + actions: [ + { id: 'cancel', text: 'Cancel', type: 'secondary' }, + { + id: 'yes', + text: 'Yes', + type: 'primary', + classes: ['reject-yes-button'], + }, + ], + onClose: () => uiDialogService.dismiss({ id: 'ds-reject-sr' }), + onShow: () => { + const yesButton = document.querySelector( + '.reject-yes-button' + ); + + yesButton.focus(); }, - ], - onClose: () => uiDialogService.dismiss({ id: 'ds-reject-sr' }), - onShow: () => { - const yesButton = document.querySelector('.reject-yes-button'); - - yesButton.focus(); - }, - onSubmit: async ({ action }) => { - switch (action.id) { - case 'yes': - try { - await dataSource.reject.series( - ds.StudyInstanceUID, - ds.SeriesInstanceUID - ); - displaySetService.deleteDisplaySet(displaySetInstanceUID); + onSubmit: async ({ action }) => { + switch (action.id) { + case 'yes': + try { + await dataSource.reject.series( + ds.StudyInstanceUID, + ds.SeriesInstanceUID + ); + displaySetService.deleteDisplaySet( + displaySetInstanceUID + ); + uiDialogService.dismiss({ id: 'ds-reject-sr' }); + uiNotificationService.show({ + title: 'Delete Report', + message: 'Report deleted successfully', + type: 'success', + }); + } catch (error) { + uiDialogService.dismiss({ id: 'ds-reject-sr' }); + uiNotificationService.show({ + title: 'Delete Report', + message: 'Failed to delete report', + type: 'error', + }); + } + break; + case 'cancel': uiDialogService.dismiss({ id: 'ds-reject-sr' }); - uiNotificationService.show({ - title: 'Delete Report', - message: 'Report deleted successfully', - type: 'success', - }); - } catch (error) { - uiDialogService.dismiss({ id: 'ds-reject-sr' }); - uiNotificationService.show({ - title: 'Delete Report', - message: 'Failed to delete report', - type: 'error', - }); - } - break; - case 'cancel': - uiDialogService.dismiss({ id: 'ds-reject-sr' }); - break; - } + break; + } + }, }, - }, - }); - }; - } else { - thumbnailProps.canReject = false; + }); + }; + } else { + thumbnailProps.canReject = false; + } } - } - array.push(thumbnailProps); - }); + array.push(thumbnailProps); + }); return [...thumbnailDisplaySets, ...thumbnailNoImageDisplaySets]; } diff --git a/modes/microscopy/package.json b/modes/microscopy/package.json index 8a8443e42fc..5490a3de54b 100644 --- a/modes/microscopy/package.json +++ b/modes/microscopy/package.json @@ -37,7 +37,7 @@ "@babel/runtime": "^7.20.13" }, "devDependencies": { - "@babel/core": "^7.17.8", + "@babel/core": "^7.21.4", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.17.3", "@babel/plugin-proposal-private-methods": "^7.18.6", diff --git a/package.json b/package.json index 39e4d6631b9..dcf5a0e78a1 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "react-dom": "17.0.2" }, "devDependencies": { - "@babel/core": "^7.17.8", + "@babel/core": "^7.21.4", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.17.3", "@babel/plugin-proposal-private-methods": "^7.18.6", @@ -147,6 +147,7 @@ ] }, "resolutions": { + "@cornerstonejs/core": "^0.46.2", "**/@babel/runtime": "^7.20.13", "nth-check": "^2.1.1", "trim-newlines": "^5.0.0", diff --git a/platform/cli/package.json b/platform/cli/package.json index b13709ecce7..848e769923f 100644 --- a/platform/cli/package.json +++ b/platform/cli/package.json @@ -18,7 +18,7 @@ "author": "OHIF Contributors", "license": "MIT", "dependencies": { - "@babel/core": "^7.13.10", + "@babel/core": "^7.21.4", "chalk": "^5.0.0", "commander": "^8.3.0", "axios": "^0.26.1", diff --git a/platform/cli/templates/extension/dependencies.json b/platform/cli/templates/extension/dependencies.json index f371fd72f18..72442cf6f3d 100644 --- a/platform/cli/templates/extension/dependencies.json +++ b/platform/cli/templates/extension/dependencies.json @@ -32,7 +32,7 @@ "@babel/runtime": "^7.20.13" }, "devDependencies": { - "@babel/core": "^7.17.8", + "@babel/core": "^7.21.4", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.17.3", "@babel/plugin-proposal-private-methods": "^7.18.6", diff --git a/platform/cli/templates/mode/dependencies.json b/platform/cli/templates/mode/dependencies.json index 3a0c1b72f00..ef5c884a61a 100644 --- a/platform/cli/templates/mode/dependencies.json +++ b/platform/cli/templates/mode/dependencies.json @@ -23,7 +23,7 @@ "@babel/runtime": "^7.20.13" }, "devDependencies": { - "@babel/core": "^7.17.8", + "@babel/core": "^7.21.4", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.17.3", "@babel/plugin-proposal-private-methods": "^7.18.6", diff --git a/platform/core/src/services/DisplaySetService/DisplaySetService.ts b/platform/core/src/services/DisplaySetService/DisplaySetService.ts index b77322b2c2a..5796afa9030 100644 --- a/platform/core/src/services/DisplaySetService/DisplaySetService.ts +++ b/platform/core/src/services/DisplaySetService/DisplaySetService.ts @@ -78,7 +78,7 @@ export default class DisplaySetService extends PubSubService { if (!activeDisplaySetsMap.has(displaySet.displaySetInstanceUID)) { this.activeDisplaySetsChanged = true; activeDisplaySets.push(displaySet); - activeDisplaySetsMap.set(displaySet.displayInstanceUID, displaySet); + activeDisplaySetsMap.set(displaySet.displaySetInstanceUID, displaySet); } }); } diff --git a/platform/viewer/src/components/ViewportGrid.tsx b/platform/viewer/src/components/ViewportGrid.tsx index dea53511c9c..e77a4abb7f3 100644 --- a/platform/viewer/src/components/ViewportGrid.tsx +++ b/platform/viewer/src/components/ViewportGrid.tsx @@ -2,26 +2,9 @@ import React, { useEffect, useCallback } from 'react'; import PropTypes from 'prop-types'; import { ServicesManager, Types, MeasurementService } from '@ohif/core'; import { ViewportGrid, ViewportPane, useViewportGrid } from '@ohif/ui'; -import { utils } from '@ohif/core'; import EmptyViewport from './EmptyViewport'; import classNames from 'classnames'; -const { isEqualWithin } = utils; - -const ORIENTATION_MAP = { - axial: { - viewPlaneNormal: [0, 0, -1], - viewUp: [0, -1, 0], - }, - sagittal: { - viewPlaneNormal: [1, 0, 0], - viewUp: [0, 0, 1], - }, - coronal: { - viewPlaneNormal: [0, 1, 0], - viewUp: [0, 0, 1], - }, -}; function ViewerViewportGrid(props) { const { servicesManager, viewportComponents, dataSource } = props; diff --git a/yarn.lock b/yarn.lock index 427d83b88f0..f0dd609f326 100644 --- a/yarn.lock +++ b/yarn.lock @@ -202,7 +202,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.13.10", "@babel/core@^7.13.16", "@babel/core@^7.17.8", "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.20.2", "@babel/core@^7.21.4", "@babel/core@^7.5.0", "@babel/core@^7.7.5", "@babel/core@~7.21.0": +"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.20.2", "@babel/core@^7.21.4", "@babel/core@^7.7.5", "@babel/core@~7.21.0": version "7.21.4" resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== @@ -1058,7 +1058,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.16.7", "@babel/plugin-transform-regenerator@^7.20.5", "@babel/plugin-transform-regenerator@^7.4.5": +"@babel/plugin-transform-regenerator@^7.16.7", "@babel/plugin-transform-regenerator@^7.20.5": version "7.20.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== @@ -1073,7 +1073,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.17.0", "@babel/plugin-transform-runtime@^7.18.6", "@babel/plugin-transform-runtime@^7.5.0": +"@babel/plugin-transform-runtime@^7.17.0", "@babel/plugin-transform-runtime@^7.18.6": version "7.21.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== @@ -1247,7 +1247,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.0.0", "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.7", "@babel/preset-react@^7.18.6": +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.7", "@babel/preset-react@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== @@ -1302,7 +1302,7 @@ core-js-pure "^3.25.1" regenerator-runtime "^0.13.11" -"@babel/runtime@7.17.9", "@babel/runtime@7.7.6", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@7.17.9", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.21.0" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==