diff --git a/extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.js b/extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.js index a0303f076..774294332 100644 --- a/extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.js +++ b/extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.js @@ -71,8 +71,8 @@ function _getDisplaySetsFromSeries( displaySet.referencedSeriesInstanceUID = referencedSeries.SeriesInstanceUID; displaySet.getReferenceDisplaySet = () => { - const { DisplaySetService } = servicesManager.services; - const referencedDisplaySets = DisplaySetService.getDisplaySetsForSeries( + const { displaySetService } = servicesManager.services; + const referencedDisplaySets = displaySetService.getDisplaySetsForSeries( displaySet.referencedSeriesInstanceUID ); @@ -113,9 +113,9 @@ function _load(segDisplaySet, servicesManager, extensionManager, headers) { // We don't want to fire multiple loads, so we'll wait for the first to finish // and also return the same promise to any other callers. loadPromises[SOPInstanceUID] = new Promise(async (resolve, reject) => { - const { SegmentationService } = servicesManager.services; + const { segmentationService } = servicesManager.services; - if (_segmentationExistsInCache(segDisplaySet, SegmentationService)) { + if (_segmentationExistsInCache(segDisplaySet, segmentationService)) { return; } @@ -133,7 +133,7 @@ function _load(segDisplaySet, servicesManager, extensionManager, headers) { } const suppressEvents = true; - SegmentationService.createSegmentationForSEGDisplaySet( + segmentationService.createSegmentationForSEGDisplaySet( segDisplaySet, null, suppressEvents @@ -175,10 +175,10 @@ async function _loadSegments(extensionManager, segDisplaySet, headers) { return segments; } -function _segmentationExistsInCache(segDisplaySet, SegmentationService) { +function _segmentationExistsInCache(segDisplaySet, segmentationService) { // This should be abstracted with the CornerstoneCacheService const labelmapVolumeId = segDisplaySet.displaySetInstanceUID; - const segVolume = SegmentationService.getLabelmapVolume(labelmapVolumeId); + const segVolume = segmentationService.getLabelmapVolume(labelmapVolumeId); return segVolume !== undefined; } diff --git a/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx b/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx index ff81fd12d..cbdcfbf6e 100644 --- a/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx +++ b/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx @@ -11,11 +11,11 @@ export default function PanelSegmentation({ commandsManager, }) { const { - SegmentationService, - UIDialogService, - ViewportGridService, - ToolGroupService, - CornerstoneViewportService, + segmentationService, + uiDialogService, + viewportGridService, + toolGroupService, + cornerstoneViewportService, } = servicesManager.services; const { t } = useTranslation('PanelSegmentation'); @@ -23,10 +23,10 @@ export default function PanelSegmentation({ const [ initialSegmentationConfigurations, setInitialSegmentationConfigurations, - ] = useState(SegmentationService.getConfiguration()); + ] = useState(segmentationService.getConfiguration()); const [segmentations, setSegmentations] = useState(() => - SegmentationService.getSegmentations() + segmentationService.getSegmentations() ); const [isMinimized, setIsMinimized] = useState({}); @@ -54,14 +54,14 @@ export default function PanelSegmentation({ useEffect(() => { // ~~ Subscription - const added = SegmentationService.EVENTS.SEGMENTATION_ADDED; - const updated = SegmentationService.EVENTS.SEGMENTATION_UPDATED; - const removed = SegmentationService.EVENTS.SEGMENTATION_REMOVED; + const added = segmentationService.EVENTS.SEGMENTATION_ADDED; + const updated = segmentationService.EVENTS.SEGMENTATION_UPDATED; + const removed = segmentationService.EVENTS.SEGMENTATION_REMOVED; const subscriptions = []; [added, updated, removed].forEach(evt => { - const { unsubscribe } = SegmentationService.subscribe(evt, () => { - const segmentations = SegmentationService.getSegmentations(); + const { unsubscribe } = segmentationService.subscribe(evt, () => { + const segmentations = segmentationService.getSegmentations(); setSegmentations(segmentations); }); subscriptions.push(unsubscribe); @@ -75,15 +75,15 @@ export default function PanelSegmentation({ }, []); const onSegmentationClick = (segmentationId: string) => { - SegmentationService.setActiveSegmentationForToolGroup(segmentationId); + segmentationService.setActiveSegmentationForToolGroup(segmentationId); }; const onSegmentationDelete = (segmentationId: string) => { - SegmentationService.remove(segmentationId); + segmentationService.remove(segmentationId); }; const getToolGroupIds = segmentationId => { - const toolGroupIds = SegmentationService.getToolGroupIdsWithSegmentation( + const toolGroupIds = segmentationService.getToolGroupIdsWithSegmentation( segmentationId ); @@ -91,7 +91,7 @@ export default function PanelSegmentation({ }; const onSegmentClick = (segmentationId, segmentIndex) => { - SegmentationService.setActiveSegmentForSegmentation( + segmentationService.setActiveSegmentForSegmentation( segmentationId, segmentIndex ); @@ -100,11 +100,11 @@ export default function PanelSegmentation({ toolGroupIds.forEach(toolGroupId => { // const toolGroupId = - SegmentationService.setActiveSegmentationForToolGroup( + segmentationService.setActiveSegmentationForToolGroup( segmentationId, toolGroupId ); - SegmentationService.jumpToSegmentCenter( + segmentationService.jumpToSegmentCenter( segmentationId, segmentIndex, toolGroupId @@ -113,17 +113,17 @@ export default function PanelSegmentation({ }; const onSegmentEdit = (segmentationId, segmentIndex) => { - const segmentation = SegmentationService.getSegmentation(segmentationId); + const segmentation = segmentationService.getSegmentation(segmentationId); const segment = segmentation.segments[segmentIndex]; const { label } = segment; - callInputDialog(UIDialogService, label, (label, actionId) => { + callInputDialog(uiDialogService, label, (label, actionId) => { if (label === '') { return; } - SegmentationService.setSegmentLabelForSegmentation( + segmentationService.setSegmentLabelForSegmentation( segmentationId, segmentIndex, label @@ -132,15 +132,15 @@ export default function PanelSegmentation({ }; const onSegmentationEdit = segmentationId => { - const segmentation = SegmentationService.getSegmentation(segmentationId); + const segmentation = segmentationService.getSegmentation(segmentationId); const { label } = segmentation; - callInputDialog(UIDialogService, label, (label, actionId) => { + callInputDialog(uiDialogService, label, (label, actionId) => { if (label === '') { return; } - SegmentationService.addOrUpdateSegmentation( + segmentationService.addOrUpdateSegmentation( { id: segmentationId, label, @@ -157,7 +157,7 @@ export default function PanelSegmentation({ }; const onSegmentDelete = (segmentationId, segmentIndex) => { - // SegmentationService.removeSegmentFromSegmentation( + // segmentationService.removeSegmentFromSegmentation( // segmentationId, // segmentIndex // ); @@ -165,14 +165,14 @@ export default function PanelSegmentation({ }; const onToggleSegmentVisibility = (segmentationId, segmentIndex) => { - const segmentation = SegmentationService.getSegmentation(segmentationId); + const segmentation = segmentationService.getSegmentation(segmentationId); const segmentInfo = segmentation.segments[segmentIndex]; const isVisible = !segmentInfo.isVisible; const toolGroupIds = getToolGroupIds(segmentationId); // Todo: right now we apply the visibility to all tool groups toolGroupIds.forEach(toolGroupId => { - SegmentationService.setSegmentVisibility( + segmentationService.setSegmentVisibility( segmentationId, segmentIndex, isVisible, @@ -182,17 +182,17 @@ export default function PanelSegmentation({ }; const onToggleSegmentationVisibility = segmentationId => { - SegmentationService.toggleSegmentationVisibility(segmentationId); + segmentationService.toggleSegmentationVisibility(segmentationId); }; const setSegmentationConfiguration = useCallback( (segmentationId, key, value) => { - SegmentationService.setConfiguration({ + segmentationService.setConfiguration({ segmentationId, [key]: value, }); }, - [SegmentationService] + [segmentationService] ); return ( @@ -280,7 +280,7 @@ PanelSegmentation.propTypes = { }), servicesManager: PropTypes.shape({ services: PropTypes.shape({ - SegmentationService: PropTypes.shape({ + segmentationService: PropTypes.shape({ getSegmentation: PropTypes.func.isRequired, getSegmentations: PropTypes.func.isRequired, toggleSegmentationVisibility: PropTypes.func.isRequired, diff --git a/extensions/cornerstone-dicom-seg/src/panels/callInputDialog.tsx b/extensions/cornerstone-dicom-seg/src/panels/callInputDialog.tsx index 9ae8e5eb8..f8d521008 100644 --- a/extensions/cornerstone-dicom-seg/src/panels/callInputDialog.tsx +++ b/extensions/cornerstone-dicom-seg/src/panels/callInputDialog.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Input, Dialog } from '@ohif/ui'; -function callInputDialog(UIDialogService, label, callback) { +function callInputDialog(uiDialogService, label, callback) { const dialogId = 'enter-segment-label'; const onSubmitHandler = ({ action, value }) => { @@ -13,11 +13,11 @@ function callInputDialog(UIDialogService, label, callback) { callback('', action.id); break; } - UIDialogService.dismiss({ id: dialogId }); + uiDialogService.dismiss({ id: dialogId }); }; - if (UIDialogService) { - UIDialogService.create({ + if (uiDialogService) { + uiDialogService.create({ id: dialogId, centralize: true, isDraggable: false, @@ -27,7 +27,7 @@ function callInputDialog(UIDialogService, label, callback) { title: 'Enter Segment Label', value: { label }, noCloseButton: true, - onClose: () => UIDialogService.dismiss({ id: dialogId }), + onClose: () => uiDialogService.dismiss({ id: dialogId }), actions: [ { id: 'cancel', text: 'Cancel', type: 'primary' }, { id: 'save', text: 'Confirm', type: 'secondary' }, diff --git a/extensions/cornerstone-dicom-seg/src/utils/_hydrateSEG.ts b/extensions/cornerstone-dicom-seg/src/utils/_hydrateSEG.ts index c27439fcd..ac0f04892 100644 --- a/extensions/cornerstone-dicom-seg/src/utils/_hydrateSEG.ts +++ b/extensions/cornerstone-dicom-seg/src/utils/_hydrateSEG.ts @@ -5,9 +5,9 @@ async function _hydrateSEGDisplaySet({ servicesManager, }) { const { - SegmentationService, - HangingProtocolService, - ViewportGridService, + segmentationService, + hangingProtocolService, + viewportGridService, } = servicesManager.services; const displaySetInstanceUID = segDisplaySet.referencedDisplaySetInstanceUID; @@ -17,22 +17,22 @@ async function _hydrateSEGDisplaySet({ // We need the hydration to notify panels about the new segmentation added const suppressEvents = false; - segmentationId = await SegmentationService.createSegmentationForSEGDisplaySet( + segmentationId = await segmentationService.createSegmentationForSEGDisplaySet( segDisplaySet, segmentationId, suppressEvents ); - SegmentationService.hydrateSegmentation(segDisplaySet.displaySetInstanceUID); + segmentationService.hydrateSegmentation(segDisplaySet.displaySetInstanceUID); - const { viewports } = ViewportGridService.getState(); + const { viewports } = viewportGridService.getState(); - const updatedViewports = HangingProtocolService.getViewportsRequireUpdate( + const updatedViewports = hangingProtocolService.getViewportsRequireUpdate( viewportIndex, displaySetInstanceUID ); - ViewportGridService.setDisplaySetsForViewports(updatedViewports); + viewportGridService.setDisplaySetsForViewports(updatedViewports); // Todo: fix this after we have a better way for stack viewport segmentations @@ -45,13 +45,13 @@ async function _hydrateSEGDisplaySet({ return; } - const shouldDisplaySeg = SegmentationService.shouldRenderSegmentation( + const shouldDisplaySeg = segmentationService.shouldRenderSegmentation( viewport.displaySetInstanceUIDs, segDisplaySet.displaySetInstanceUID ); if (shouldDisplaySeg) { - ViewportGridService.setDisplaySetsForViewport({ + viewportGridService.setDisplaySetsForViewport({ viewportIndex: index, displaySetInstanceUIDs: viewport.displaySetInstanceUIDs, viewportOptions: { diff --git a/extensions/cornerstone-dicom-seg/src/utils/initSEGToolGroup.ts b/extensions/cornerstone-dicom-seg/src/utils/initSEGToolGroup.ts index e4c15df9b..fe114dbcd 100644 --- a/extensions/cornerstone-dicom-seg/src/utils/initSEGToolGroup.ts +++ b/extensions/cornerstone-dicom-seg/src/utils/initSEGToolGroup.ts @@ -1,5 +1,5 @@ function createSEGToolGroupAndAddTools( - ToolGroupService, + toolGroupService, toolGroupId, extensionManager ) { @@ -28,7 +28,7 @@ function createSEGToolGroupAndAddTools( enabled: [{ toolName: toolNames.SegmentationDisplay }], }; - return ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, {}); + return toolGroupService.createToolGroupAndAddTools(toolGroupId, tools, {}); } export default createSEGToolGroupAndAddTools; diff --git a/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx b/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx index ad6376803..7644aa045 100644 --- a/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx +++ b/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx @@ -33,10 +33,10 @@ function OHIFCornerstoneSEGViewport(props) { const { t } = useTranslation('SEGViewport'); const { - DisplaySetService, - ToolGroupService, - SegmentationService, - UINotificationService, + displaySetService, + toolGroupService, + segmentationService, + uiNotificationService, } = servicesManager.services; const toolGroupId = `${SEG_TOOLGROUP_BASE_NAME}-${viewportIndex}`; @@ -127,7 +127,7 @@ function OHIFCornerstoneSEGViewport(props) { direction => { direction = direction === 'left' ? -1 : 1; const segmentationId = segDisplaySet.displaySetInstanceUID; - const segmentation = SegmentationService.getSegmentation(segmentationId); + const segmentation = segmentationService.getSegmentation(segmentationId); const { segments } = segmentation; @@ -141,7 +141,7 @@ function OHIFCornerstoneSEGViewport(props) { newSelectedSegmentIndex = numberOfSegments - 1; } - SegmentationService.jumpToSegmentCenter( + segmentationService.jumpToSegmentCenter( segmentationId, newSelectedSegmentIndex, toolGroupId @@ -168,8 +168,8 @@ function OHIFCornerstoneSEGViewport(props) { }, [servicesManager, viewportIndex, segDisplaySet, segIsLoading]); useEffect(() => { - const { unsubscribe } = SegmentationService.subscribe( - SegmentationService.EVENTS.SEGMENTATION_PIXEL_DATA_CREATED, + const { unsubscribe } = segmentationService.subscribe( + segmentationService.EVENTS.SEGMENTATION_PIXEL_DATA_CREATED, evt => { if ( evt.segDisplaySet.displaySetInstanceUID === @@ -179,7 +179,7 @@ function OHIFCornerstoneSEGViewport(props) { } if (evt.overlappingSegments) { - UINotificationService.show({ + uiNotificationService.show({ title: 'Overlapping Segments', message: 'Overlapping segments detected which is not currently supported', @@ -195,8 +195,8 @@ function OHIFCornerstoneSEGViewport(props) { }, [segDisplaySet]); useEffect(() => { - const { unsubscribe } = SegmentationService.subscribe( - SegmentationService.EVENTS.SEGMENT_PIXEL_DATA_CREATED, + const { unsubscribe } = segmentationService.subscribe( + segmentationService.EVENTS.SEGMENT_PIXEL_DATA_CREATED, ({ segmentIndex, numSegments }) => { setProcessingProgress({ segmentIndex, @@ -214,8 +214,8 @@ function OHIFCornerstoneSEGViewport(props) { Cleanup the SEG viewport when the viewport is destroyed */ useEffect(() => { - const onDisplaySetsRemovedSubscription = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_REMOVED, + const onDisplaySetsRemovedSubscription = displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SETS_REMOVED, ({ displaySetInstanceUIDs }) => { const activeViewport = viewports[activeViewportIndex]; if ( @@ -235,14 +235,14 @@ function OHIFCornerstoneSEGViewport(props) { }, []); useEffect(() => { - let toolGroup = ToolGroupService.getToolGroup(toolGroupId); + let toolGroup = toolGroupService.getToolGroup(toolGroupId); if (toolGroup) { return; } toolGroup = createSEGToolGroupAndAddTools( - ToolGroupService, + toolGroupService, toolGroupId, extensionManager ); @@ -251,11 +251,11 @@ function OHIFCornerstoneSEGViewport(props) { return () => { // remove the segmentation representations if seg displayset changed - SegmentationService.removeSegmentationRepresentationFromToolGroup( + segmentationService.removeSegmentationRepresentationFromToolGroup( toolGroupId ); - ToolGroupService.destroyToolGroup(toolGroupId); + toolGroupService.destroyToolGroup(toolGroupId); }; }, []); @@ -264,7 +264,7 @@ function OHIFCornerstoneSEGViewport(props) { return () => { // remove the segmentation representations if seg displayset changed - SegmentationService.removeSegmentationRepresentationFromToolGroup( + segmentationService.removeSegmentationRepresentationFromToolGroup( toolGroupId ); referencedDisplaySetRef.current = null; diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index 886f16648..c64a9a177 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -36,7 +36,7 @@ "@ohif/extension-cornerstone": "^3.0.0", "@ohif/extension-measurement-tracking": "^3.0.0", "@ohif/ui": "^2.0.0", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -45,7 +45,7 @@ "dependencies": { "@babel/runtime": "7.16.3", "classnames": "^2.3.2", - "@cornerstonejs/core": "^0.27.1", - "@cornerstonejs/tools": "^0.36.3" + "@cornerstonejs/core": "0.30.1", + "@cornerstonejs/tools": "0.39.0" } } diff --git a/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.js b/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.js index 7d40d11b6..7bc1e1fdf 100644 --- a/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.js +++ b/extensions/cornerstone-dicom-sr/src/getSopClassHandlerModule.js @@ -119,7 +119,7 @@ function _getDisplaySetsFromSeries( } function _load(displaySet, servicesManager, extensionManager) { - const { DisplaySetService, MeasurementService } = servicesManager.services; + const { displaySetService, measurementService } = servicesManager.services; const dataSources = extensionManager.getDataSources(); const dataSource = dataSources[0]; @@ -128,7 +128,7 @@ function _load(displaySet, servicesManager, extensionManager) { displaySet.referencedImages = _getReferencedImagesList(ContentSequence); displaySet.measurements = _getMeasurements(ContentSequence); - const mappings = MeasurementService.getSourceMappings( + const mappings = measurementService.getSourceMappings( CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION ); @@ -138,7 +138,7 @@ function _load(displaySet, servicesManager, extensionManager) { displaySet.isLoaded = true; // Check currently added displaySets and add measurements if the sources exist. - DisplaySetService.activeDisplaySets.forEach(activeDisplaySet => { + displaySetService.activeDisplaySets.forEach(activeDisplaySet => { _checkIfCanAddMeasurementsToDisplaySet( displaySet, activeDisplaySet, @@ -147,8 +147,8 @@ function _load(displaySet, servicesManager, extensionManager) { }); // Subscribe to new displaySets as the source may come in after. - DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_ADDED, + displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SETS_ADDED, data => { const { displaySetsAdded } = data; // If there are still some measurements that have not yet been loaded into cornerstone, diff --git a/extensions/cornerstone-dicom-sr/src/onModeEnter.js b/extensions/cornerstone-dicom-sr/src/onModeEnter.js index fcd6d5407..61b6985ef 100644 --- a/extensions/cornerstone-dicom-sr/src/onModeEnter.js +++ b/extensions/cornerstone-dicom-sr/src/onModeEnter.js @@ -1,8 +1,8 @@ import { SOPClassHandlerId } from './id'; export default function onModeEnter({ servicesManager }) { - const { DisplaySetService } = servicesManager.services; - const displaySetCache = DisplaySetService.getDisplaySetCache(); + const { displaySetService } = servicesManager.services; + const displaySetCache = displaySetService.getDisplaySetCache(); const srDisplaySets = displaySetCache.filter( ds => ds.SOPClassHandlerId === SOPClassHandlerId diff --git a/extensions/cornerstone-dicom-sr/src/tools/tools/SRArrowAnnotate.ts b/extensions/cornerstone-dicom-sr/src/tools/tools/SRArrowAnnotate.ts index 66b2a1e10..2500a2dc0 100644 --- a/extensions/cornerstone-dicom-sr/src/tools/tools/SRArrowAnnotate.ts +++ b/extensions/cornerstone-dicom-sr/src/tools/tools/SRArrowAnnotate.ts @@ -4,8 +4,8 @@ import { ArrowAnnotateTool } from '@cornerstonejs/tools'; * The reason we are extending ArrowAnnotateTool is to create a new tool for SR * viewport which basically has a different name. This is done since Cornerstone * has shifted from creating tool instances for each annotation, and we have ArrowAnnotate - * mappers at the MeasurementService, so if we didn't do this, we would be mapping - * the SR annotation to the MeasurementService (since there is a ArrowAnnotateTool mapper), + * mappers at the measurementService, so if we didn't do this, we would be mapping + * the SR annotation to the measurementService (since there is a ArrowAnnotateTool mapper), * but with extending and renaming it, there is not mapper for SRArrowAnnotateTool; hence * no mapping; hence no new measurement, just temporary ones for the SR viewport. */ diff --git a/extensions/cornerstone-dicom-sr/src/tools/tools/SRBidirectional.ts b/extensions/cornerstone-dicom-sr/src/tools/tools/SRBidirectional.ts index 458f4b186..2b121d0d0 100644 --- a/extensions/cornerstone-dicom-sr/src/tools/tools/SRBidirectional.ts +++ b/extensions/cornerstone-dicom-sr/src/tools/tools/SRBidirectional.ts @@ -4,8 +4,8 @@ import { BidirectionalTool } from '@cornerstonejs/tools'; * The reason we are extending BidirectionalTool is to create a new tool for SR * viewport which basically has a different name. This is done since Cornerstone * has shifted from creating tool instances for each annotation, and we have Bidirectional - * mappers at the MeasurementService, so if we didn't do this, we would be mapping - * the SR annotation to the MeasurementService (since there is a BidirectionalTool mapper), + * mappers at the measurementService, so if we didn't do this, we would be mapping + * the SR annotation to the measurementService (since there is a BidirectionalTool mapper), * but with extending and renaming it, there is not mapper for SRBidirectionalTool; hence * no mapping; hence no new measurement, just temporary ones for the SR viewport. */ diff --git a/extensions/cornerstone-dicom-sr/src/tools/tools/SREllipticalROI.ts b/extensions/cornerstone-dicom-sr/src/tools/tools/SREllipticalROI.ts index 08f0f7005..66d97da94 100644 --- a/extensions/cornerstone-dicom-sr/src/tools/tools/SREllipticalROI.ts +++ b/extensions/cornerstone-dicom-sr/src/tools/tools/SREllipticalROI.ts @@ -4,8 +4,8 @@ import { EllipticalROITool } from '@cornerstonejs/tools'; * The reason we are extending EllipticalROITool is to create a new tool for SR * viewport which basically has a different name. This is done since Cornerstone * has shifted from creating tool instances for each annotation, and we have EllipticalROI - * mappers at the MeasurementService, so if we didn't do this, we would be mapping - * the SR annotation to the MeasurementService (since there is a EllipticalROITool mapper), + * mappers at the measurementService, so if we didn't do this, we would be mapping + * the SR annotation to the measurementService (since there is a EllipticalROITool mapper), * but with extending and renaming it, there is not mapper for SREllipticalROITool; hence * no mapping; hence no new measurement, just temporary ones for the SR viewport. */ diff --git a/extensions/cornerstone-dicom-sr/src/tools/tools/SRLength.ts b/extensions/cornerstone-dicom-sr/src/tools/tools/SRLength.ts index 62acba7c7..cc3c44de9 100644 --- a/extensions/cornerstone-dicom-sr/src/tools/tools/SRLength.ts +++ b/extensions/cornerstone-dicom-sr/src/tools/tools/SRLength.ts @@ -4,8 +4,8 @@ import { LengthTool } from '@cornerstonejs/tools'; * The reason we are extending LengthTool is to create a new tool for SR * viewport which basically has a different name. This is done since Cornerstone * has shifted from creating tool instances for each annotation, and we have Length - * mappers at the MeasurementService, so if we didn't do this, we would be mapping - * the SR annotation to the MeasurementService (since there is a LengthTool mapper), + * mappers at the measurementService, so if we didn't do this, we would be mapping + * the SR annotation to the measurementService (since there is a LengthTool mapper), * but with extending and renaming it, there is not mapper for SRLengthTool; hence * no mapping; hence no new measurement, just temporary ones for the SR viewport. */ diff --git a/extensions/cornerstone-dicom-sr/src/utils/getLabelFromDCMJSImportedToolData.js b/extensions/cornerstone-dicom-sr/src/utils/getLabelFromDCMJSImportedToolData.js index 77dc0ad75..18a2ad1f5 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/getLabelFromDCMJSImportedToolData.js +++ b/extensions/cornerstone-dicom-sr/src/utils/getLabelFromDCMJSImportedToolData.js @@ -1,6 +1,6 @@ /** * Extracts the label from the toolData imported from dcmjs. We need to do this - * as dcmjs does not depeend on OHIF/the MeasurementService, it just produces data for cornestoneTools. + * as dcmjs does not depeend on OHIF/the measurementService, it just produces data for cornestoneTools. * This optional data is available for the consumer to process if they wish to. * @param {object} toolData The tooldata relating to the * diff --git a/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.js b/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.js index 758e666a0..bb1246e5c 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.js +++ b/extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.js @@ -20,14 +20,14 @@ export default function hydrateStructuredReport( displaySetInstanceUID ) { const dataSource = extensionManager.getActiveDataSource()[0]; - const { MeasurementService, DisplaySetService } = servicesManager.services; + const { measurementService, displaySetService } = servicesManager.services; - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); // TODO -> We should define a strict versioning somewhere. - const mappings = MeasurementService.getSourceMappings( + const mappings = measurementService.getSourceMappings( CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION ); @@ -166,7 +166,7 @@ export default function hydrateStructuredReport( }, }; - const source = MeasurementService.getSource( + const source = measurementService.getSource( CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION ); @@ -176,7 +176,7 @@ export default function hydrateStructuredReport( m => m.annotationType === annotationType ); - MeasurementService.addRawMeasurement( + measurementService.addRawMeasurement( source, annotationType, { annotation }, diff --git a/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js b/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js index b167e0a8e..3474e3b11 100644 --- a/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js +++ b/extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js @@ -6,11 +6,11 @@ const supportedLegacyCornerstoneTags = ['cornerstoneTools@^4.0.0']; const CORNERSTONE_3D_TAG = cornerstoneAdapters.CORNERSTONE_3D_TAG; /** - * Checks if the given `displaySet`can be rehydrated into the `MeasurementService`. + * Checks if the given `displaySet`can be rehydrated into the `measurementService`. * * @param {object} displaySet The SR `displaySet` to check. - * @param {object[]} mappings The CornerstoneTools 4 mappings to the `MeasurementService`. - * @returns {boolean} True if the SR can be rehydrated into the `MeasurementService`. + * @param {object[]} mappings The CornerstoneTools 4 mappings to the `measurementService`. + * @returns {boolean} True if the SR can be rehydrated into the `measurementService`. */ export default function isRehydratable(displaySet, mappings) { if (!mappings || !mappings.length) { @@ -30,7 +30,7 @@ export default function isRehydratable(displaySet, mappings) { adapterKeys.forEach(key => { if (mappingDefinitions.includes(key)) { - // Must have both a dcmjs adapter and a MeasurementService + // Must have both a dcmjs adapter and a measurementService // Definition in order to be a candidate for import. adapters.push(cornerstoneAdapters[key]); } diff --git a/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx b/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx index e17d7dee7..8c788e5b9 100644 --- a/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx +++ b/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx @@ -36,9 +36,9 @@ function OHIFCornerstoneSRViewport(props) { const { t } = useTranslation('SRViewport'); const { - DisplaySetService, - CornerstoneViewportService, - MeasurementService, + displaySetService, + cornerstoneViewportService, + measurementService, } = servicesManager.services; // SR viewport will always have a single display set @@ -84,12 +84,12 @@ function OHIFCornerstoneSRViewport(props) { // if no panels from measurement-tracking extension is used, this code will run trackedMeasurements = null; sendTrackedMeasurementsEvent = (eventName, { displaySetInstanceUID }) => { - MeasurementService.clearMeasurements(); + measurementService.clearMeasurements(); const { SeriesInstanceUIDs } = hydrateStructuredReport( { servicesManager, extensionManager }, displaySetInstanceUID ); - const displaySets = DisplaySetService.getDisplaySetsForSeries( + const displaySets = displaySetService.getDisplaySetsForSeries( SeriesInstanceUIDs[0] ); if (displaySets.length) { @@ -152,7 +152,7 @@ function OHIFCornerstoneSRViewport(props) { _getViewportReferencedDisplaySetData( srDisplaySet, newMeasurementSelected, - DisplaySetService + displaySetService ).then(({ referencedDisplaySet, referencedDisplaySetMetadata }) => { setMeasurementSelected(newMeasurementSelected); setActiveImageDisplaySetData(referencedDisplaySet); @@ -166,13 +166,13 @@ function OHIFCornerstoneSRViewport(props) { // it means that we have a new referenced display set, and the // imageIdIndex will handle it by updating the viewport, but if they - // are the same we just need to use MeasurementService to jump to the + // are the same we just need to use measurementService to jump to the // new measurement - const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex( + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); - const csViewport = CornerstoneViewportService.getCornerstoneViewport( + const csViewport = cornerstoneViewportService.getCornerstoneViewport( viewportInfo.getViewportId() ); @@ -259,8 +259,8 @@ function OHIFCornerstoneSRViewport(props) { Cleanup the SR viewport when the viewport is destroyed */ useEffect(() => { - const onDisplaySetsRemovedSubscription = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_REMOVED, + const onDisplaySetsRemovedSubscription = displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SETS_REMOVED, ({ displaySetInstanceUIDs }) => { const activeViewport = viewports[activeViewportIndex]; if ( @@ -432,14 +432,14 @@ OHIFCornerstoneSRViewport.defaultProps = { async function _getViewportReferencedDisplaySetData( displaySet, measurementSelected, - DisplaySetService + displaySetService ) { const { measurements } = displaySet; const measurement = measurements[measurementSelected]; const { displaySetInstanceUID } = measurement; - const referencedDisplaySet = DisplaySetService.getDisplaySetByUID( + const referencedDisplaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 651efa898..e296cab79 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -30,7 +30,7 @@ "@ohif/core": "^3.0.0", "@ohif/ui": "^2.0.0", "cornerstone-wado-image-loader": "^4.2.1", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", @@ -43,10 +43,10 @@ }, "dependencies": { "@babel/runtime": "7.17.9", - "@cornerstonejs/adapters": "^0.2.1", - "@cornerstonejs/core": "^0.27.1", + "@cornerstonejs/adapters": "0.3.0", + "@cornerstonejs/core": "0.30.1", "@cornerstonejs/streaming-image-volume-loader": "^0.11.2", - "@cornerstonejs/tools": "^0.36.3", + "@cornerstonejs/tools": "0.39.0", "@kitware/vtk.js": "25.9.0", "html2canvas": "^1.4.1", "lodash.debounce": "4.0.8", diff --git a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx index 4525585fb..d150c44e0 100644 --- a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx +++ b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx @@ -116,14 +116,14 @@ const OHIFCornerstoneViewport = React.memo(props => { const elementRef = useRef(); const { - MeasurementService, - DisplaySetService, + measurementService, + displaySetService, toolbarService, - ToolGroupService, - SyncGroupService, - CornerstoneViewportService, - CornerstoneCacheService, - ViewportGridService, + toolGroupService, + syncGroupService, + cornerstoneViewportService, + cornerstoneCacheService, + viewportGridService, } = servicesManager.services; // useCallback for scroll bar height calculation @@ -135,13 +135,13 @@ const OHIFCornerstoneViewport = React.memo(props => { // useCallback for onResize const onResize = useCallback(() => { if (elementRef.current) { - CornerstoneViewportService.resize(); + cornerstoneViewportService.resize(); setImageScrollBarHeight(); } }, [elementRef]); const cleanUpServices = useCallback(() => { - const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex( + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); @@ -153,9 +153,9 @@ const OHIFCornerstoneViewport = React.memo(props => { const renderingEngineId = viewportInfo.getRenderingEngineId(); const syncGroups = viewportInfo.getSyncGroups(); - ToolGroupService.removeViewportFromToolGroup(viewportId, renderingEngineId); + toolGroupService.removeViewportFromToolGroup(viewportId, renderingEngineId); - SyncGroupService.removeViewportFromSyncGroup( + syncGroupService.removeViewportFromSyncGroup( viewportId, renderingEngineId, syncGroups @@ -170,7 +170,7 @@ const OHIFCornerstoneViewport = React.memo(props => { } const { viewportId, element } = evt.detail; - const viewportInfo = CornerstoneViewportService.getViewportInfo( + const viewportInfo = cornerstoneViewportService.getViewportInfo( viewportId ); const viewportIndex = viewportInfo.getViewportIndex(); @@ -181,13 +181,13 @@ const OHIFCornerstoneViewport = React.memo(props => { const toolGroupId = viewportInfo.getToolGroupId(); const syncGroups = viewportInfo.getSyncGroups(); - ToolGroupService.addViewportToToolGroup( + toolGroupService.addViewportToToolGroup( viewportId, renderingEngineId, toolGroupId ); - SyncGroupService.addViewportToSyncGroup( + syncGroupService.addViewportToSyncGroup( viewportId, renderingEngineId, syncGroups @@ -197,12 +197,12 @@ const OHIFCornerstoneViewport = React.memo(props => { onElementEnabled(evt); } }, - [viewportIndex, onElementEnabled, ToolGroupService] + [viewportIndex, onElementEnabled, toolGroupService] ); // disable the element upon unmounting useEffect(() => { - CornerstoneViewportService.enableViewport( + cornerstoneViewportService.enableViewport( viewportIndex, viewportOptions, elementRef.current @@ -218,10 +218,10 @@ const OHIFCornerstoneViewport = React.memo(props => { return () => { cleanUpServices(); - CornerstoneViewportService.disableElement(viewportIndex); + cornerstoneViewportService.disableElement(viewportIndex); if (onElementDisabled) { - const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex( + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); @@ -244,24 +244,24 @@ const OHIFCornerstoneViewport = React.memo(props => { // Note: this approach does not actually end of sending network requests // and it uses the network cache useEffect(() => { - const { unsubscribe } = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, + const { unsubscribe } = displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED, async invalidatedDisplaySetInstanceUID => { - const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex( + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); if (viewportInfo.hasDisplaySet(invalidatedDisplaySetInstanceUID)) { const viewportData = viewportInfo.getViewportData(); - const newViewportData = await CornerstoneCacheService.invalidateViewportData( + const newViewportData = await cornerstoneCacheService.invalidateViewportData( viewportData, invalidatedDisplaySetInstanceUID, dataSource, - DisplaySetService + displaySetService ); const keepCamera = true; - CornerstoneViewportService.updateViewport( + cornerstoneViewportService.updateViewport( viewportIndex, newViewportData, keepCamera @@ -281,14 +281,14 @@ const OHIFCornerstoneViewport = React.memo(props => { } const loadViewportData = async () => { - const viewportData = await CornerstoneCacheService.createViewportData( + const viewportData = await cornerstoneCacheService.createViewportData( displaySets, viewportOptions, dataSource, initialImageIndex ); - CornerstoneViewportService.setViewportData( + cornerstoneViewportService.setViewportData( viewportIndex, viewportData, viewportOptions, @@ -311,23 +311,23 @@ const OHIFCornerstoneViewport = React.memo(props => { */ useEffect(() => { const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents( - MeasurementService, - DisplaySetService, + measurementService, + displaySetService, elementRef, viewportIndex, displaySets, - ViewportGridService, - CornerstoneViewportService + viewportGridService, + cornerstoneViewportService ); _checkForCachedJumpToMeasurementEvents( - MeasurementService, - DisplaySetService, + measurementService, + displaySetService, elementRef, viewportIndex, displaySets, - ViewportGridService, - CornerstoneViewportService + viewportGridService, + cornerstoneViewportService ); return () => { @@ -365,19 +365,19 @@ const OHIFCornerstoneViewport = React.memo(props => { }, areEqual); function _subscribeToJumpToMeasurementEvents( - MeasurementService, - DisplaySetService, + measurementService, + displaySetService, elementRef, viewportIndex, displaySets, - ViewportGridService, - CornerstoneViewportService + viewportGridService, + cornerstoneViewportService ) { const displaysUIDs = displaySets.map( displaySet => displaySet.displaySetInstanceUID ); - const { unsubscribe } = MeasurementService.subscribe( - MeasurementService.EVENTS.JUMP_TO_MEASUREMENT, + const { unsubscribe } = measurementService.subscribe( + measurementService.EVENTS.JUMP_TO_MEASUREMENT, ({ measurement }) => { if (!measurement) return; @@ -387,10 +387,10 @@ function _subscribeToJumpToMeasurementEvents( measurement, elementRef, viewportIndex, - MeasurementService, - DisplaySetService, - ViewportGridService, - CornerstoneViewportService + measurementService, + displaySetService, + viewportGridService, + cornerstoneViewportService ); } } @@ -401,25 +401,25 @@ function _subscribeToJumpToMeasurementEvents( // Check if there is a queued jumpToMeasurement event function _checkForCachedJumpToMeasurementEvents( - MeasurementService, - DisplaySetService, + measurementService, + displaySetService, elementRef, viewportIndex, displaySets, - ViewportGridService, - CornerstoneViewportService + viewportGridService, + cornerstoneViewportService ) { const displaysUIDs = displaySets.map( displaySet => displaySet.displaySetInstanceUID ); - const measurementIdToJumpTo = MeasurementService.getJumpToMeasurement( + const measurementIdToJumpTo = measurementService.getJumpToMeasurement( viewportIndex ); if (measurementIdToJumpTo && elementRef) { // Jump to measurement if the measurement exists - const measurement = MeasurementService.getMeasurement( + const measurement = measurementService.getMeasurement( measurementIdToJumpTo ); @@ -428,10 +428,10 @@ function _checkForCachedJumpToMeasurementEvents( measurement, elementRef, viewportIndex, - MeasurementService, - DisplaySetService, - ViewportGridService, - CornerstoneViewportService + measurementService, + displaySetService, + viewportGridService, + cornerstoneViewportService ); } } @@ -441,10 +441,10 @@ function _jumpToMeasurement( measurement, targetElementRef, viewportIndex, - MeasurementService, - DisplaySetService, - ViewportGridService, - CornerstoneViewportService + measurementService, + displaySetService, + viewportGridService, + cornerstoneViewportService ) { const targetElement = targetElementRef.current; const { displaySetInstanceUID, SOPInstanceUID, frameNumber } = measurement; @@ -453,7 +453,7 @@ function _jumpToMeasurement( console.warn('cannot jump in a non-acquisition plane measurements yet'); } - const referencedDisplaySet = DisplaySetService.getDisplaySetByUID( + const referencedDisplaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -461,11 +461,11 @@ function _jumpToMeasurement( // to set it properly // setCornerstoneMeasurementActive(measurement); - ViewportGridService.setActiveViewportIndex(viewportIndex); + viewportGridService.setActiveViewportIndex(viewportIndex); const enableElement = getEnabledElement(targetElement); - const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex( + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); @@ -520,7 +520,7 @@ function _jumpToMeasurement( cs3DTools.annotation.selection.setAnnotationSelected(measurement.uid); // Jump to measurement consumed, remove. - MeasurementService.removeJumpToMeasurement(viewportIndex); + measurementService.removeJumpToMeasurement(viewportIndex); } } diff --git a/extensions/cornerstone/src/Viewport/Overlays/CornerstoneOverlays.tsx b/extensions/cornerstone/src/Viewport/Overlays/CornerstoneOverlays.tsx index 92e88d4f5..160b6b294 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/CornerstoneOverlays.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/CornerstoneOverlays.tsx @@ -7,7 +7,7 @@ import ViewportImageSliceLoadingIndicator from './ViewportImageSliceLoadingIndic function CornerstoneOverlays(props) { const { viewportIndex, element, scrollbarHeight, servicesManager } = props; - const { CornerstoneViewportService } = servicesManager.services; + const { cornerstoneViewportService } = servicesManager.services; const [imageSliceData, setImageSliceData] = useState({ imageIndex: 0, numberOfSlices: 0, @@ -15,8 +15,8 @@ function CornerstoneOverlays(props) { const [viewportData, setViewportData] = useState(null); useEffect(() => { - const { unsubscribe } = CornerstoneViewportService.subscribe( - CornerstoneViewportService.EVENTS.VIEWPORT_DATA_CHANGED, + const { unsubscribe } = cornerstoneViewportService.subscribe( + cornerstoneViewportService.EVENTS.VIEWPORT_DATA_CHANGED, props => { if (props.viewportIndex !== viewportIndex) { return; @@ -36,7 +36,7 @@ function CornerstoneOverlays(props) { } if (viewportData) { - const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex( + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); diff --git a/extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx b/extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx index 7a3658c15..074e0a969 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/ViewportImageScrollbar.tsx @@ -16,16 +16,16 @@ function CornerstoneImageScrollbar({ }) { const { cineService, - CornerstoneViewportService, + cornerstoneViewportService, } = (servicesManager as ServicesManger).services; const onImageScrollbarChange = (imageIndex, viewportIndex) => { - const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex( + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); const viewportId = viewportInfo.getViewportId(); - const viewport = CornerstoneViewportService.getCornerstoneViewport( + const viewport = cornerstoneViewportService.getCornerstoneViewport( viewportId ); @@ -48,7 +48,7 @@ function CornerstoneImageScrollbar({ return; } - const viewport = CornerstoneViewportService.getCornerstoneViewportByIndex( + const viewport = cornerstoneViewportService.getCornerstoneViewportByIndex( viewportIndex ); diff --git a/extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.tsx b/extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.tsx index 2f912c9ce..c974bce45 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.tsx @@ -30,7 +30,7 @@ function ViewportOrientationMarkers({ const [rotation, setRotation] = useState(0); const [flipHorizontal, setFlipHorizontal] = useState(false); const [flipVertical, setFlipVertical] = useState(false); - const { CornerstoneViewportService } = servicesManager.services; + const { cornerstoneViewportService } = servicesManager.services; useEffect(() => { const cameraModifiedListener = ( @@ -114,7 +114,7 @@ function ViewportOrientationMarkers({ flipHorizontal ); - const ohifViewport = CornerstoneViewportService.getViewportInfoByIndex( + const ohifViewport = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); diff --git a/extensions/cornerstone/src/Viewport/Overlays/ViewportOverlay.tsx b/extensions/cornerstone/src/Viewport/Overlays/ViewportOverlay.tsx index 8314b269f..b9e542b94 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/ViewportOverlay.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/ViewportOverlay.tsx @@ -15,7 +15,7 @@ function CornerstoneViewportOverlay({ servicesManager, }) { const { - CornerstoneViewportService, + cornerstoneViewportService, toolbarService, } = servicesManager.services; const [voi, setVOI] = useState({ windowCenter: null, windowWidth: null }); @@ -86,7 +86,7 @@ function CornerstoneViewportOverlay({ previousCamera.parallelScale !== camera.parallelScale || previousCamera.scale !== camera.scale ) { - const viewport = CornerstoneViewportService.getCornerstoneViewportByIndex( + const viewport = cornerstoneViewportService.getCornerstoneViewportByIndex( viewportIndex ); @@ -169,7 +169,7 @@ function CornerstoneViewportOverlay({ viewportData, imageIndex, viewportIndex, - CornerstoneViewportService + cornerstoneViewportService ); } @@ -189,7 +189,7 @@ function CornerstoneViewportOverlay({ return null; } - const ohifViewport = CornerstoneViewportService.getViewportInfoByIndex( + const ohifViewport = cornerstoneViewportService.getViewportInfoByIndex( viewportIndex ); @@ -241,7 +241,7 @@ function _getInstanceNumberFromVolume( viewportData, imageIndex, viewportIndex, - CornerstoneViewportService + cornerstoneViewportService ) { const volumes = viewportData.volumes; @@ -253,7 +253,7 @@ function _getInstanceNumberFromVolume( const volume = volumes[0]; const { direction, imageIds } = volume; - const cornerstoneViewport = CornerstoneViewportService.getCornerstoneViewportByIndex( + const cornerstoneViewport = cornerstoneViewportService.getCornerstoneViewportByIndex( viewportIndex ); @@ -288,7 +288,7 @@ CornerstoneViewportOverlay.propTypes = { viewportData: PropTypes.object, imageIndex: PropTypes.number, viewportIndex: PropTypes.number, - servicesManager: ServicesManager, + servicesManager: PropTypes.instanceOf(ServicesManager), }; export default CornerstoneViewportOverlay; diff --git a/extensions/cornerstone/src/commandsModule.ts b/extensions/cornerstone/src/commandsModule.ts index ed19e95b4..c0462af51 100644 --- a/extensions/cornerstone/src/commandsModule.ts +++ b/extensions/cornerstone/src/commandsModule.ts @@ -21,18 +21,18 @@ import toggleStackImageSync from './utils/stackSync/toggleStackImageSync'; const commandsModule = ({ servicesManager }) => { const { - ViewportGridService, - ToolGroupService, + viewportGridService, + toolGroupService, cineService, toolbarService, - UIDialogService, - CornerstoneViewportService, - HangingProtocolService, - UINotificationService, + uiDialogService, + cornerstoneViewportService, + hangingProtocolService, + uiNotificationService, } = (servicesManager as ServicesManager).services; function _getActiveViewportEnabledElement() { - const { activeViewportIndex } = ViewportGridService.getState(); + const { activeViewportIndex } = viewportGridService.getState(); const { element } = OHIFgetEnabledElement(activeViewportIndex) || {}; const enabledElement = getEnabledElement(element); return enabledElement; @@ -68,7 +68,7 @@ const commandsModule = ({ servicesManager }) => { toolGroupIdToUse = toolGroup.id; } - const toolGroup = ToolGroupService.getToolGroup(toolGroupIdToUse); + const toolGroup = toolGroupService.getToolGroup(toolGroupIdToUse); return toolGroup; } @@ -77,7 +77,7 @@ const commandsModule = ({ servicesManager }) => { return _getActiveViewportEnabledElement(); }, setViewportActive: ({ viewportId }) => { - const viewportInfo = CornerstoneViewportService.getViewportInfo( + const viewportInfo = cornerstoneViewportService.getViewportInfo( viewportId ); if (!viewportInfo) { @@ -86,13 +86,13 @@ const commandsModule = ({ servicesManager }) => { } const viewportIndex = viewportInfo.getViewportIndex(); - ViewportGridService.setActiveViewportIndex(viewportIndex); + viewportGridService.setActiveViewportIndex(viewportIndex); }, arrowTextCallback: ({ callback, data }) => { - callInputDialog(UIDialogService, data, callback); + callInputDialog(uiDialogService, data, callback); }, toggleCine: () => { - const { viewports } = ViewportGridService.getState(); + const { viewports } = viewportGridService.getState(); const { isCineEnabled } = cineService.getState(); cineService.setIsCineEnabled(!isCineEnabled); toolbarService.setButton('Cine', { props: { isActive: !isCineEnabled } }); @@ -106,7 +106,7 @@ const commandsModule = ({ servicesManager }) => { const windowCenterNum = Number(level); const { viewportId } = _getActiveViewportEnabledElement(); - const viewportToolGroupId = ToolGroupService.getToolGroupForViewport( + const viewportToolGroupId = toolGroupService.getToolGroupForViewport( viewportId ); @@ -115,7 +115,7 @@ const commandsModule = ({ servicesManager }) => { } // get actor from the viewport - const renderingEngine = CornerstoneViewportService.getRenderingEngine(); + const renderingEngine = cornerstoneViewportService.getRenderingEngine(); const viewport = renderingEngine.getViewport(viewportId); const { lower, upper } = csUtils.windowLevel.toLowHighRange( @@ -136,7 +136,7 @@ const commandsModule = ({ servicesManager }) => { const activeViewportToolGroup = _getToolGroup(null); if (!activeViewportToolGroup._toolInstances.Crosshairs) { - UINotificationService.show({ + uiNotificationService.show({ title: 'Crosshairs', message: 'You need to be in a MPR view to use Crosshairs. Click on MPR button in the toolbar to activate it.', @@ -148,7 +148,7 @@ const commandsModule = ({ servicesManager }) => { } } - const { viewports } = ViewportGridService.getState() || { + const { viewports } = viewportGridService.getState() || { viewports: [], }; @@ -195,7 +195,7 @@ const commandsModule = ({ servicesManager }) => { }); }, showDownloadViewportModal: () => { - const { activeViewportIndex } = ViewportGridService.getState(); + const { activeViewportIndex } = viewportGridService.getState(); const { UIModalService } = servicesManager.services; if (UIModalService) { @@ -205,7 +205,7 @@ const commandsModule = ({ servicesManager }) => { contentProps: { activeViewportIndex, onClose: UIModalService.hide, - CornerstoneViewportService, + cornerstoneViewportService, }, }); } @@ -378,7 +378,7 @@ const commandsModule = ({ servicesManager }) => { colormap, immediate = false, }) => { - const viewport = CornerstoneViewportService.getCornerstoneViewportByIndex( + const viewport = cornerstoneViewportService.getCornerstoneViewportByIndex( viewportIndex ); @@ -397,18 +397,18 @@ const commandsModule = ({ servicesManager }) => { } }, incrementActiveViewport: () => { - const { activeViewportIndex, viewports } = ViewportGridService.getState(); + const { activeViewportIndex, viewports } = viewportGridService.getState(); const nextViewportIndex = (activeViewportIndex + 1) % viewports.length; - ViewportGridService.setActiveViewportIndex(nextViewportIndex); + viewportGridService.setActiveViewportIndex(nextViewportIndex); }, decrementActiveViewport: () => { - const { activeViewportIndex, viewports } = ViewportGridService.getState(); + const { activeViewportIndex, viewports } = viewportGridService.getState(); const nextViewportIndex = (activeViewportIndex - 1 + viewports.length) % viewports.length; - ViewportGridService.setActiveViewportIndex(nextViewportIndex); + viewportGridService.setActiveViewportIndex(nextViewportIndex); }, setHangingProtocol: ({ protocolId }) => { - HangingProtocolService.setProtocol(protocolId); + hangingProtocolService.setProtocol(protocolId); }, toggleMPR: ({ toggledState }) => { toggleMPRHangingProtocol({ @@ -425,13 +425,13 @@ const commandsModule = ({ servicesManager }) => { }); }, toggleReferenceLines: ({ toggledState }) => { - const { activeViewportIndex } = ViewportGridService.getState(); - const viewportInfo = CornerstoneViewportService.getViewportInfoByIndex( + const { activeViewportIndex } = viewportGridService.getState(); + const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex( activeViewportIndex ); const viewportId = viewportInfo.getViewportId(); - const toolGroup = ToolGroupService.getToolGroupForViewport(viewportId); + const toolGroup = toolGroupService.getToolGroupForViewport(viewportId); if (!toggledState) { toolGroup.setToolDisabled(ReferenceLinesTool.toolName); diff --git a/extensions/cornerstone/src/index.tsx b/extensions/cornerstone/src/index.tsx index 27a524311..a3ebc57c2 100644 --- a/extensions/cornerstone/src/index.tsx +++ b/extensions/cornerstone/src/index.tsx @@ -7,6 +7,8 @@ import { imageRetrievalPoolManager, } from '@cornerstonejs/core'; import { Enums as cs3DToolsEnums } from '@cornerstonejs/tools'; +import { Types } from '@ohif/core'; + import init from './init'; import commandsModule from './commandsModule'; import getHangingProtocolModule from './getHangingProtocolModule'; @@ -41,7 +43,7 @@ const OHIFCornerstoneViewport = props => { /** * */ -const cornerstoneExtension = { +const cornerstoneExtension: Types.Extensions.Extension = { /** * Only required property. Should be a unique value across all extensions. */ @@ -71,13 +73,18 @@ const cornerstoneExtension = { configuration = {}, appConfig, }) { + // Todo: we should be consistent with how services get registered. Use REGISTRATION static method for all servicesManager.registerService( CornerstoneViewportService(servicesManager) ); - servicesManager.registerService(ToolGroupService(servicesManager)); + servicesManager.registerService( + ToolGroupService.REGISTRATION(servicesManager) + ); servicesManager.registerService(SyncGroupService(servicesManager)); servicesManager.registerService(SegmentationService(servicesManager)); - servicesManager.registerService(CornerstoneCacheService(servicesManager)); + servicesManager.registerService( + CornerstoneCacheService.REGISTRATION(servicesManager) + ); await init({ servicesManager, commandsManager, configuration, appConfig }); }, diff --git a/extensions/cornerstone/src/init.tsx b/extensions/cornerstone/src/init.tsx index b50a5c78c..a374935ef 100644 --- a/extensions/cornerstone/src/init.tsx +++ b/extensions/cornerstone/src/init.tsx @@ -63,22 +63,22 @@ export default async function init({ const { UserAuthenticationService, - MeasurementService, - DisplaySetService, - UIDialogService, + measurementService, + displaySetService, + uiDialogService, UIModalService, - UINotificationService, + uiNotificationService, cineService, - CornerstoneViewportService, - HangingProtocolService, - ToolGroupService, - ViewportGridService, + cornerstoneViewportService, + hangingProtocolService, + toolGroupService, + viewportGridService, } = servicesManager.services; window.services = servicesManager.services; if (!window.crossOriginIsolated) { - UINotificationService.show({ + uiNotificationService.show({ title: 'Cross Origin Isolation', message: 'Cross Origin Isolation is not enabled, volume rendering will not work (e.g., MPR)', @@ -87,7 +87,7 @@ export default async function init({ } if (cornerstone.getShouldUseCPURendering()) { - _showCPURenderingModal(UIModalService, HangingProtocolService); + _showCPURenderingModal(UIModalService, hangingProtocolService); } const labelmapRepresentation = @@ -110,15 +110,15 @@ export default async function init({ cornerstoneStreamingImageVolumeLoader ); - HangingProtocolService.registerImageLoadStrategy( + hangingProtocolService.registerImageLoadStrategy( 'interleaveCenter', interleaveCenterLoader ); - HangingProtocolService.registerImageLoadStrategy( + hangingProtocolService.registerImageLoadStrategy( 'interleaveTopToBottom', interleaveTopToBottom ); - HangingProtocolService.registerImageLoadStrategy('nth', nthLoader); + hangingProtocolService.registerImageLoadStrategy('nth', nthLoader); metaData.addProvider(metadataProvider.get.bind(metadataProvider), 9999); @@ -132,9 +132,9 @@ export default async function init({ /* Measurement Service */ const measurementServiceSource = connectToolsToMeasurementService( - MeasurementService, - DisplaySetService, - CornerstoneViewportService + measurementService, + displaySetService, + cornerstoneViewportService ); initCineService(cineService); @@ -145,7 +145,7 @@ export default async function init({ }); const onRightClick = event => { - if (!UIDialogService) { + if (!uiDialogService) { console.warn('Unable to show dialog; no UI Dialog Service available.'); return; } @@ -172,15 +172,15 @@ export default async function init({ CONTEXT_MENU_OPEN = true; - UIDialogService.dismiss({ id: 'context-menu' }); - UIDialogService.create({ + uiDialogService.dismiss({ id: 'context-menu' }); + uiDialogService.create({ id: 'context-menu', isDraggable: false, preservePosition: false, defaultPosition: _getDefaultPosition(event.detail), content: ContextMenuMeasurements, onClickOutside: () => { - UIDialogService.dismiss({ id: 'context-menu' }); + uiDialogService.dismiss({ id: 'context-menu' }); CONTEXT_MENU_OPEN = false; }, contentProps: { @@ -200,15 +200,15 @@ export default async function init({ }, onClose: () => { CONTEXT_MENU_OPEN = false; - UIDialogService.dismiss({ id: 'context-menu' }); + uiDialogService.dismiss({ id: 'context-menu' }); }, onSetLabel: item => { const { annotationUID } = item.value; - const measurement = MeasurementService.getMeasurement(annotationUID); + const measurement = measurementService.getMeasurement(annotationUID); callInputDialog( - UIDialogService, + uiDialogService, measurement, (label, actionId) => { if (actionId === 'cancel') { @@ -219,7 +219,7 @@ export default async function init({ label, }); - MeasurementService.update( + measurementService.update( updatedMeasurement.uid, updatedMeasurement, true @@ -235,27 +235,27 @@ export default async function init({ }; const resetContextMenu = () => { - if (!UIDialogService) { + if (!uiDialogService) { console.warn('Unable to show dialog; no UI Dialog Service available.'); return; } CONTEXT_MENU_OPEN = false; - UIDialogService.dismiss({ id: 'context-menu' }); + uiDialogService.dismiss({ id: 'context-menu' }); }; // When a custom image load is performed, update the relevant viewports - HangingProtocolService.subscribe( - HangingProtocolService.EVENTS.CUSTOM_IMAGE_LOAD_PERFORMED, + hangingProtocolService.subscribe( + hangingProtocolService.EVENTS.CUSTOM_IMAGE_LOAD_PERFORMED, volumeInputArrayMap => { for (const entry of volumeInputArrayMap.entries()) { const [viewportId, volumeInputArray] = entry; - const viewport = CornerstoneViewportService.getCornerstoneViewport( + const viewport = cornerstoneViewportService.getCornerstoneViewport( viewportId ); - CornerstoneViewportService.setVolumesForViewport( + cornerstoneViewportService.setVolumesForViewport( viewport, volumeInputArray ); @@ -356,11 +356,11 @@ export default async function init({ elementDisabledHandler.bind(null) ); - ViewportGridService.subscribe( - ViewportGridService.EVENTS.ACTIVE_VIEWPORT_INDEX_CHANGED, + viewportGridService.subscribe( + viewportGridService.EVENTS.ACTIVE_VIEWPORT_INDEX_CHANGED, ({ viewportIndex }) => { const viewportId = `viewport-${viewportIndex}`; - const toolGroup = ToolGroupService.getToolGroupForViewport(viewportId); + const toolGroup = toolGroupService.getToolGroupForViewport(viewportId); if (!toolGroup || !toolGroup._toolInstances?.['ReferenceLines']) { return; @@ -403,7 +403,7 @@ function CPUModal() { ); } -function _showCPURenderingModal(UIModalService, HangingProtocolService) { +function _showCPURenderingModal(UIModalService, hangingProtocolService) { const callback = progress => { if (progress === 100) { UIModalService.show({ @@ -415,8 +415,8 @@ function _showCPURenderingModal(UIModalService, HangingProtocolService) { } }; - const { unsubscribe } = HangingProtocolService.subscribe( - HangingProtocolService.EVENTS.HANGING_PROTOCOL_APPLIED_FOR_VIEWPORT, + const { unsubscribe } = hangingProtocolService.subscribe( + hangingProtocolService.EVENTS.HANGING_PROTOCOL_APPLIED_FOR_VIEWPORT, ({ progress }) => { const done = callback(progress); diff --git a/extensions/cornerstone/src/initMeasurementService.js b/extensions/cornerstone/src/initMeasurementService.js index cb143c38f..8a0d492bc 100644 --- a/extensions/cornerstone/src/initMeasurementService.js +++ b/extensions/cornerstone/src/initMeasurementService.js @@ -13,9 +13,9 @@ const CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools'; const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1'; const initMeasurementService = ( - MeasurementService, - DisplaySetService, - CornerstoneViewportService + measurementService, + displaySetService, + cornerstoneViewportService ) => { /* Initialization */ const { @@ -24,17 +24,17 @@ const initMeasurementService = ( EllipticalROI, ArrowAnnotate, } = measurementServiceMappingsFactory( - MeasurementService, - DisplaySetService, - CornerstoneViewportService + measurementService, + displaySetService, + cornerstoneViewportService ); - const csTools3DVer1MeasurementSource = MeasurementService.createSource( + const csTools3DVer1MeasurementSource = measurementService.createSource( CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION ); /* Mappings */ - MeasurementService.addMapping( + measurementService.addMapping( csTools3DVer1MeasurementSource, 'Length', Length.matchingCriteria, @@ -42,7 +42,7 @@ const initMeasurementService = ( Length.toMeasurement ); - MeasurementService.addMapping( + measurementService.addMapping( csTools3DVer1MeasurementSource, 'Bidirectional', Bidirectional.matchingCriteria, @@ -50,7 +50,7 @@ const initMeasurementService = ( Bidirectional.toMeasurement ); - MeasurementService.addMapping( + measurementService.addMapping( csTools3DVer1MeasurementSource, 'EllipticalROI', EllipticalROI.matchingCriteria, @@ -58,7 +58,7 @@ const initMeasurementService = ( EllipticalROI.toMeasurement ); - MeasurementService.addMapping( + measurementService.addMapping( csTools3DVer1MeasurementSource, 'ArrowAnnotate', ArrowAnnotate.matchingCriteria, @@ -70,18 +70,18 @@ const initMeasurementService = ( }; const connectToolsToMeasurementService = ( - MeasurementService, - DisplaySetService, - CornerstoneViewportService + measurementService, + displaySetService, + cornerstoneViewportService ) => { const csTools3DVer1MeasurementSource = initMeasurementService( - MeasurementService, - DisplaySetService, - CornerstoneViewportService + measurementService, + displaySetService, + cornerstoneViewportService ); connectMeasurementServiceToTools( - MeasurementService, - CornerstoneViewportService, + measurementService, + cornerstoneViewportService, csTools3DVer1MeasurementSource ); const { annotationToMeasurement, remove } = csTools3DVer1MeasurementSource; @@ -113,7 +113,7 @@ const connectToolsToMeasurementService = ( } = annotationModifiedEventDetail; // If the measurement hasn't been added, don't modify it - const measurement = MeasurementService.getMeasurement(annotationUID); + const measurement = measurementService.getMeasurement(annotationUID); if (!measurement) { return; @@ -138,13 +138,13 @@ const connectToolsToMeasurementService = ( if (removedSelectedAnnotationUIDs) { removedSelectedAnnotationUIDs.forEach(annotationUID => - MeasurementService.setMeasurementSelected(annotationUID, false) + measurementService.setMeasurementSelected(annotationUID, false) ); } if (addedSelectedAnnotationUIDs) { addedSelectedAnnotationUIDs.forEach(annotationUID => - MeasurementService.setMeasurementSelected(annotationUID, true) + measurementService.setMeasurementSelected(annotationUID, true) ); } } catch (error) { @@ -166,7 +166,7 @@ const connectToolsToMeasurementService = ( annotation: { annotationUID }, } = annotationRemovedEventDetail; - const measurement = MeasurementService.getMeasurement(annotationUID); + const measurement = measurementService.getMeasurement(annotationUID); if (measurement) { console.log('~~ removeEvt', csToolsEvent); @@ -198,8 +198,8 @@ const connectToolsToMeasurementService = ( }; const connectMeasurementServiceToTools = ( - MeasurementService, - CornerstoneViewportService, + measurementService, + cornerstoneViewportService, measurementSource ) => { const { @@ -207,14 +207,14 @@ const connectMeasurementServiceToTools = ( MEASUREMENTS_CLEARED, MEASUREMENT_UPDATED, RAW_MEASUREMENT_ADDED, - } = MeasurementService.EVENTS; + } = measurementService.EVENTS; - const csTools3DVer1MeasurementSource = MeasurementService.getSource( + const csTools3DVer1MeasurementSource = measurementService.getSource( CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION ); - MeasurementService.subscribe(MEASUREMENTS_CLEARED, ({ measurements }) => { + measurementService.subscribe(MEASUREMENTS_CLEARED, ({ measurements }) => { if (!Object.keys(measurements).length) { return; } @@ -229,7 +229,7 @@ const connectMeasurementServiceToTools = ( } }); - MeasurementService.subscribe( + measurementService.subscribe( MEASUREMENT_UPDATED, ({ source, measurement, notYetUpdatedAtSource }) => { if (source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) { @@ -263,7 +263,7 @@ const connectMeasurementServiceToTools = ( } ); - MeasurementService.subscribe( + measurementService.subscribe( RAW_MEASUREMENT_ADDED, ({ source, measurement, data, dataSource }) => { if (source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) { @@ -316,14 +316,14 @@ const connectMeasurementServiceToTools = ( } ); - MeasurementService.subscribe( + measurementService.subscribe( MEASUREMENT_REMOVED, ({ source, measurement: removedMeasurementId }) => { if (source?.name && source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) { return; } removeAnnotation(removedMeasurementId); - const renderingEngine = CornerstoneViewportService.getRenderingEngine(); + const renderingEngine = cornerstoneViewportService.getRenderingEngine(); // Note: We could do a better job by triggering the render on the // viewport itself, but the removeAnnotation does not include that info... renderingEngine.render(); diff --git a/extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts b/extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts index 4370bb956..c3475491d 100644 --- a/extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts +++ b/extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts @@ -1,5 +1,5 @@ +import { ServicesManager } from '@ohif/core'; import { cache as cs3DCache, Enums, volumeLoader } from '@cornerstonejs/core'; -import { utils } from '@ohif/core'; import getCornerstoneViewportType from '../../utils/getCornerstoneViewportType'; import { @@ -10,6 +10,16 @@ import { const VOLUME_LOADER_SCHEME = 'cornerstoneStreamingImageVolume'; class CornerstoneCacheService { + static REGISTRATION = (serviceManager: ServicesManager) => { + return { + name: 'cornerstoneCacheService', + altName: 'CornerstoneCacheService', + create: ({ configuration = {} }) => { + return new CornerstoneCacheService(serviceManager); + }, + }; + }; + stackImageIds: Map = new Map(); volumeImageIds: Map = new Map(); @@ -69,7 +79,7 @@ class CornerstoneCacheService { viewportData: VolumeViewportData, invalidatedDisplaySetInstanceUID: string, dataSource, - DisplaySetService + displaySetService ) { if (viewportData.viewportType === Enums.ViewportType.STACK) { throw new Error('Invalidation of StackViewport is not supported yet'); @@ -85,7 +95,7 @@ class CornerstoneCacheService { } const displaySets = viewportData.data.map(({ displaySetInstanceUID }) => - DisplaySetService.getDisplaySetByUID(displaySetInstanceUID) + displaySetService.getDisplaySetByUID(displaySetInstanceUID) ); const newViewportData = await this._getVolumeViewportData( @@ -203,7 +213,7 @@ class CornerstoneCacheService { } private _shouldRenderSegmentation(displaySets) { - const { SegmentationService } = this.servicesManager.services; + const { segmentationService } = this.servicesManager.services; const viewportDisplaySetInstanceUIDs = displaySets.map( ({ displaySetInstanceUID }) => displaySetInstanceUID @@ -211,12 +221,12 @@ class CornerstoneCacheService { // check inside segmentations if any of them are referencing the displaySets // that are about to be displayed - const segmentations = SegmentationService.getSegmentations(); + const segmentations = segmentationService.getSegmentations(); for (const segmentation of segmentations) { const segDisplaySetInstanceUID = segmentation.displaySetInstanceUID; - const shouldDisplaySeg = SegmentationService.shouldRenderSegmentation( + const shouldDisplaySeg = segmentationService.shouldRenderSegmentation( viewportDisplaySetInstanceUIDs, segDisplaySetInstanceUID ); diff --git a/extensions/cornerstone/src/services/CornerstoneCacheService/index.js b/extensions/cornerstone/src/services/CornerstoneCacheService/index.js index 4386dcdde..39b5a1e56 100644 --- a/extensions/cornerstone/src/services/CornerstoneCacheService/index.js +++ b/extensions/cornerstone/src/services/CornerstoneCacheService/index.js @@ -1,10 +1,3 @@ import CornerstoneCacheService from './CornerstoneCacheService'; -export default function ExtendedCornerstoneCacheService(serviceManager) { - return { - name: 'CornerstoneCacheService', - create: ({ configuration = {} }) => { - return new CornerstoneCacheService(serviceManager); - }, - }; -} +export default CornerstoneCacheService; diff --git a/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts b/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts index 54b88c2ae..56ff73781 100644 --- a/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts +++ b/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts @@ -738,7 +738,7 @@ class SegmentationService { highlightHideOthers = false, highlightFunctionType: 'ease-in-out' // todo: make animation functions configurable from outside ): void { - const { ToolGroupService } = this.servicesManager.services; + const { toolGroupService } = this.servicesManager.services; const center = this._getSegmentCenter(segmentationId, segmentIndex); const { world } = center; @@ -751,10 +751,10 @@ class SegmentationService { if (Array.isArray(toolGroupId)) { toolGroupId.forEach(toolGroup => { - toolGroups.push(ToolGroupService.getToolGroup(toolGroup)); + toolGroups.push(toolGroupService.getToolGroup(toolGroup)); }); } else { - toolGroups.push(ToolGroupService.getToolGroup(toolGroupId)); + toolGroups.push(toolGroupService.getToolGroup(toolGroupId)); } toolGroups.forEach(toolGroup => { @@ -1240,9 +1240,9 @@ class SegmentationService { } // if (brushSize !== undefined) { - // const { ToolGroupService } = this.servicesManager.services; + // const { toolGroupService } = this.servicesManager.services; - // const toolGroupIds = ToolGroupService.getToolGroupIds(); + // const toolGroupIds = toolGroupService.getToolGroupIds(); // toolGroupIds.forEach(toolGroupId => { // cstUtils.segmentation.setBrushSizeForToolGroup(toolGroupId, brushSize); @@ -1250,9 +1250,9 @@ class SegmentationService { // } // if (brushThresholdGate !== undefined) { - // const { ToolGroupService } = this.servicesManager.services; + // const { toolGroupService } = this.servicesManager.services; - // const toolGroupIds = ToolGroupService.getFirstToolGroupIds(); + // const toolGroupIds = toolGroupService.getFirstToolGroupIds(); // toolGroupIds.forEach(toolGroupId => { // cstUtils.segmentation.setBrushThresholdForToolGroup( @@ -1324,11 +1324,11 @@ class SegmentationService { return false; } - const { DisplaySetService } = this.servicesManager.services; + const { displaySetService } = this.servicesManager.services; let shouldDisplaySeg = false; - const segDisplaySet = DisplaySetService.getDisplaySetByUID( + const segDisplaySet = displaySetService.getDisplaySetByUID( segDisplaySetInstanceUID ); @@ -1337,7 +1337,7 @@ class SegmentationService { viewportDisplaySetInstanceUIDs.forEach(displaySetInstanceUID => { // check if the displaySet is sharing the same frameOfReferenceUID // with the new segmentation - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -1710,7 +1710,7 @@ class SegmentationService { } private _setLabelmapConfigValue = (property, value) => { - const { CornerstoneViewportService } = this.servicesManager.services; + const { cornerstoneViewportService } = this.servicesManager.services; const config = cstSegmentation.config.getGlobalConfig(); @@ -1719,8 +1719,8 @@ class SegmentationService { // Todo: add non global (representation specific config as well) cstSegmentation.config.setGlobalConfig(config); - const renderingEngine = CornerstoneViewportService.getRenderingEngine(); - const viewportIds = CornerstoneViewportService.getViewportIds(); + const renderingEngine = cornerstoneViewportService.getRenderingEngine(); + const viewportIds = cornerstoneViewportService.getViewportIds(); renderingEngine.renderViewports(viewportIds); }; @@ -1953,8 +1953,8 @@ class SegmentationService { } private _getFirstToolGroupId = () => { - const { ToolGroupService } = this.servicesManager.services; - const toolGroupIds = ToolGroupService.getToolGroupIds(); + const { toolGroupService } = this.servicesManager.services; + const toolGroupIds = toolGroupService.getToolGroupIds(); return toolGroupIds[0]; }; diff --git a/extensions/cornerstone/src/services/SegmentationService/index.js b/extensions/cornerstone/src/services/SegmentationService/index.js index 3cc5767b6..7b89d9bec 100644 --- a/extensions/cornerstone/src/services/SegmentationService/index.js +++ b/extensions/cornerstone/src/services/SegmentationService/index.js @@ -2,7 +2,8 @@ import SegmentationService from './SegmentationService'; export default function ExtendedSegmentationService(servicesManager) { return { - name: 'SegmentationService', + name: 'segmentationService', + altName: 'SegmentationService', create: ({ configuration = {} }) => { return new SegmentationService({ servicesManager }); }, diff --git a/extensions/cornerstone/src/services/SyncGroupService/index.js b/extensions/cornerstone/src/services/SyncGroupService/index.js index 9a49fcca1..64cb989fe 100644 --- a/extensions/cornerstone/src/services/SyncGroupService/index.js +++ b/extensions/cornerstone/src/services/SyncGroupService/index.js @@ -2,7 +2,8 @@ import SyncGroupService from './SyncGroupService'; export default function ExtendedSyncGroupService(serviceManager) { return { - name: 'SyncGroupService', + altName: 'SyncGroupService', + name: 'syncGroupService', create: ({ configuration = {} }) => { return new SyncGroupService(serviceManager); }, diff --git a/extensions/cornerstone/src/services/ToolGroupService/ToolGroupService.ts b/extensions/cornerstone/src/services/ToolGroupService/ToolGroupService.ts index 96d9cd31e..f0f0bf4be 100644 --- a/extensions/cornerstone/src/services/ToolGroupService/ToolGroupService.ts +++ b/extensions/cornerstone/src/services/ToolGroupService/ToolGroupService.ts @@ -20,6 +20,16 @@ type Tools = { }; export default class ToolGroupService { + public static REGISTRATION = serviceManager => { + return { + name: 'toolGroupService', + altName: 'ToolGroupService', + create: ({ configuration = {} }) => { + return new ToolGroupService(serviceManager); + }, + }; + }; + serviceManager: any; private toolGroupIds: Set = new Set(); /** @@ -29,8 +39,8 @@ export default class ToolGroupService { EVENTS: { [key: string]: string }; constructor(serviceManager) { - const { CornerstoneViewportService } = serviceManager.services; - this.CornerstoneViewportService = CornerstoneViewportService; + const { cornerstoneViewportService } = serviceManager.services; + this.cornerstoneViewportService = cornerstoneViewportService; this.listeners = {}; this.EVENTS = EVENTS; Object.assign(this, pubSubServiceInterface); @@ -51,7 +61,7 @@ export default class ToolGroupService { } public getToolGroupForViewport(viewportId: string): Types.IToolGroup | void { - const renderingEngine = this.CornerstoneViewportService.getRenderingEngine(); + const renderingEngine = this.cornerstoneViewportService.getRenderingEngine(); return ToolGroupManager.getToolGroupForViewport( viewportId, renderingEngine.id diff --git a/extensions/cornerstone/src/services/ToolGroupService/index.js b/extensions/cornerstone/src/services/ToolGroupService/index.js index b57a6fecf..c45c14649 100644 --- a/extensions/cornerstone/src/services/ToolGroupService/index.js +++ b/extensions/cornerstone/src/services/ToolGroupService/index.js @@ -1,10 +1,3 @@ import ToolGroupService from './ToolGroupService'; -export default function ExtendedToolGroupService(serviceManager) { - return { - name: 'ToolGroupService', - create: ({ configuration = {} }) => { - return new ToolGroupService(serviceManager); - }, - }; -} +export default ToolGroupService; diff --git a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts index 6cac23218..05e4e382c 100644 --- a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts +++ b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts @@ -412,7 +412,7 @@ class CornerstoneViewportService implements IViewportService { // (This call may or may not create sub-requests for series metadata) const volumeInputArray = []; const displaySetOptionsArray = viewportInfo.getDisplaySetOptions(); - const { HangingProtocolService } = this.servicesManager.services; + const { hangingProtocolService } = this.servicesManager.services; const volumeToLoad = []; const displaySetInstanceUIDs = []; @@ -449,11 +449,11 @@ class CornerstoneViewportService implements IViewportService { this.viewportsDisplaySets.set(viewport.id, displaySetInstanceUIDs); if ( - HangingProtocolService.hasCustomImageLoadStrategy() && - !HangingProtocolService.customImageLoadPerformed + hangingProtocolService.hasCustomImageLoadStrategy() && + !hangingProtocolService.customImageLoadPerformed ) { // delegate the volume loading to the hanging protocol service if it has a custom image load strategy - return HangingProtocolService.runImageLoadStrategy({ + return hangingProtocolService.runImageLoadStrategy({ viewportId: viewport.id, volumeInputArray, }); @@ -469,9 +469,9 @@ class CornerstoneViewportService implements IViewportService { public async setVolumesForViewport(viewport, volumeInputArray) { const { - DisplaySetService, - SegmentationService, - ToolGroupService, + displaySetService, + segmentationService, + toolGroupService, } = this.servicesManager.services; await viewport.setVolumes(volumeInputArray); @@ -480,7 +480,7 @@ class CornerstoneViewportService implements IViewportService { const displaySetInstanceUIDs = this.viewportsDisplaySets.get(viewport.id); const segDisplaySet = displaySetInstanceUIDs - .map(DisplaySetService.getDisplaySetByUID) + .map(displaySetService.getDisplaySetByUID) .find(displaySet => displaySet && displaySet.Modality === 'SEG'); if (segDisplaySet) { @@ -488,18 +488,18 @@ class CornerstoneViewportService implements IViewportService { const referencedVolume = cache.getVolume(referencedVolumeId); const segmentationId = segDisplaySet.displaySetInstanceUID; - const toolGroup = ToolGroupService.getToolGroupForViewport(viewport.id); + const toolGroup = toolGroupService.getToolGroupForViewport(viewport.id); if (referencedVolume) { - SegmentationService.addSegmentationRepresentationToToolGroup( + segmentationService.addSegmentationRepresentationToToolGroup( toolGroup.id, segmentationId ); } } else { - const toolGroup = ToolGroupService.getToolGroupForViewport(viewport.id); + const toolGroup = toolGroupService.getToolGroupForViewport(viewport.id); const toolGroupSegmentationRepresentations = - SegmentationService.getSegmentationRepresentationsForToolGroup( + segmentationService.getSegmentationRepresentationsForToolGroup( toolGroup.id ) || []; @@ -508,7 +508,7 @@ class CornerstoneViewportService implements IViewportService { // and we can look into hydrated segmentations to check if any of them are // associated with the primary displaySet // get segmentations only returns the hydrated segmentations - const segmentations = SegmentationService.getSegmentations(); + const segmentations = segmentationService.getSegmentations(); for (const segmentation of segmentations) { // if there is already a segmentation representation for this segmentation @@ -543,11 +543,11 @@ class CornerstoneViewportService implements IViewportService { } if (shouldDisplaySeg) { - const toolGroup = ToolGroupService.getToolGroupForViewport( + const toolGroup = toolGroupService.getToolGroupForViewport( viewport.id ); - SegmentationService.addSegmentationRepresentationToToolGroup( + segmentationService.addSegmentationRepresentationToToolGroup( toolGroup.id, segmentation.id ); @@ -557,7 +557,7 @@ class CornerstoneViewportService implements IViewportService { const viewportInfo = this.getViewportInfo(viewport.id); - const toolGroup = ToolGroupService.getToolGroupForViewport(viewport.id); + const toolGroup = toolGroupService.getToolGroupForViewport(viewport.id); csToolsUtils.segmentation.triggerSegmentationRender(toolGroup.id); const initialImageOptions = viewportInfo.getInitialImageOptions(); @@ -733,8 +733,8 @@ class CornerstoneViewportService implements IViewportService { } _getFrameOfReferenceUID(displaySetInstanceUID) { - const { DisplaySetService } = this.servicesManager.services; - const displaySet = DisplaySetService.getDisplaySetByUID( + const { displaySetService } = this.servicesManager.services; + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); diff --git a/extensions/cornerstone/src/services/ViewportService/IViewportService.ts b/extensions/cornerstone/src/services/ViewportService/IViewportService.ts index 5fe88ba63..87168cb7f 100644 --- a/extensions/cornerstone/src/services/ViewportService/IViewportService.ts +++ b/extensions/cornerstone/src/services/ViewportService/IViewportService.ts @@ -12,7 +12,7 @@ import { */ export interface IViewportService { servicesManager: unknown; - HangingProtocolService: unknown; + hangingProtocolService: unknown; renderingEngine: unknown; viewportGridResizeObserver: unknown; viewportsInfo: unknown; diff --git a/extensions/cornerstone/src/services/ViewportService/Viewport.ts b/extensions/cornerstone/src/services/ViewportService/Viewport.ts index eae87ada0..03fce0312 100644 --- a/extensions/cornerstone/src/services/ViewportService/Viewport.ts +++ b/extensions/cornerstone/src/services/ViewportService/Viewport.ts @@ -7,7 +7,7 @@ import { SyncGroup } from '../SyncGroupService/SyncGroupService'; import { StackViewportData, VolumeViewportData, -} from './CornerstoneCacheService'; +} from '../../types/CornerstoneCacheService'; export type InitialImageOptions = { index?: number; diff --git a/extensions/cornerstone/src/utils/CornerstoneViewportDownloadForm.tsx b/extensions/cornerstone/src/utils/CornerstoneViewportDownloadForm.tsx index 973bd9dbe..3c44131eb 100644 --- a/extensions/cornerstone/src/utils/CornerstoneViewportDownloadForm.tsx +++ b/extensions/cornerstone/src/utils/CornerstoneViewportDownloadForm.tsx @@ -21,7 +21,7 @@ const VIEWPORT_ID = 'cornerstone-viewport-download-form'; const CornerstoneViewportDownloadForm = ({ onClose, activeViewportIndex, - CornerstoneViewportService, + cornerstoneViewportService, }) => { const enabledElement = OHIFgetEnabledElement(activeViewportIndex); const activeViewportElement = enabledElement?.element; @@ -154,7 +154,7 @@ const CornerstoneViewportDownloadForm = ({ const { viewport } = activeViewportEnabledElement; - const renderingEngine = CornerstoneViewportService.getRenderingEngine(); + const renderingEngine = cornerstoneViewportService.getRenderingEngine(); const downloadViewport = renderingEngine.getViewport(VIEWPORT_ID); if (downloadViewport instanceof StackViewport) { diff --git a/extensions/cornerstone/src/utils/callInputDialog.tsx b/extensions/cornerstone/src/utils/callInputDialog.tsx index acdb2bdf0..b52fbc355 100644 --- a/extensions/cornerstone/src/utils/callInputDialog.tsx +++ b/extensions/cornerstone/src/utils/callInputDialog.tsx @@ -11,7 +11,7 @@ import { Input, Dialog } from '@ohif/ui'; * @param {*} isArrowAnnotateInputDialog */ function callInputDialog( - UIDialogService, + uiDialogService, data, callback, isArrowAnnotateInputDialog = true @@ -32,11 +32,11 @@ function callInputDialog( callback('', action.id); break; } - UIDialogService.dismiss({ id: dialogId }); + uiDialogService.dismiss({ id: dialogId }); }; - if (UIDialogService) { - UIDialogService.create({ + if (uiDialogService) { + uiDialogService.create({ id: dialogId, centralize: true, isDraggable: false, @@ -46,7 +46,7 @@ function callInputDialog( title: 'Enter your annotation', value: { label }, noCloseButton: true, - onClose: () => UIDialogService.dismiss({ id: dialogId }), + onClose: () => uiDialogService.dismiss({ id: dialogId }), actions: [ { id: 'cancel', text: 'Cancel', type: 'primary' }, { id: 'save', text: 'Save', type: 'secondary' }, diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/ArrowAnnotate.js b/extensions/cornerstone/src/utils/measurementServiceMappings/ArrowAnnotate.js index 6562b1ec7..9a6f6e49b 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/ArrowAnnotate.js +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/ArrowAnnotate.js @@ -12,8 +12,8 @@ const Length = { */ toMeasurement: ( csToolsEventDetail, - DisplaySetService, - CornerstoneViewportService, + displaySetService, + cornerstoneViewportService, getValueTypeFromToolType ) => { const { annotation, viewportId } = csToolsEventDetail; @@ -37,26 +37,26 @@ const Length = { StudyInstanceUID, } = getSOPInstanceAttributes( referencedImageId, - CornerstoneViewportService, + cornerstoneViewportService, viewportId ); let displaySet; if (SOPInstanceUID) { - displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID ); } else { - displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID); + displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID); } const { points } = data.handles; const mappedAnnotations = getMappedAnnotations( annotation, - DisplaySetService + displaySetService ); const displayText = getDisplayText(mappedAnnotations, displaySet); @@ -84,7 +84,7 @@ const Length = { }, }; -function getMappedAnnotations(annotation, DisplaySetService) { +function getMappedAnnotations(annotation, displaySetService) { const { metadata, data } = annotation; const { text } = data; const { referencedImageId } = metadata; @@ -97,7 +97,7 @@ function getMappedAnnotations(annotation, DisplaySetService) { frameNumber, } = getSOPInstanceAttributes(referencedImageId); - const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + const displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID, frameNumber diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/Bidirectional.js b/extensions/cornerstone/src/utils/measurementServiceMappings/Bidirectional.js index ed2ea6c27..781a0f909 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/Bidirectional.js +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/Bidirectional.js @@ -8,8 +8,8 @@ const Bidirectional = { toAnnotation: measurement => {}, toMeasurement: ( csToolsEventDetail, - DisplaySetService, - CornerstoneViewportService, + displaySetService, + cornerstoneViewportService, getValueTypeFromToolType ) => { const { annotation, viewportId } = csToolsEventDetail; @@ -33,26 +33,26 @@ const Bidirectional = { StudyInstanceUID, } = getSOPInstanceAttributes( referencedImageId, - CornerstoneViewportService, + cornerstoneViewportService, viewportId ); let displaySet; if (SOPInstanceUID) { - displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID ); } else { - displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID); + displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID); } const { points } = data.handles; const mappedAnnotations = getMappedAnnotations( annotation, - DisplaySetService + displaySetService ); const displayText = getDisplayText(mappedAnnotations, displaySet); @@ -79,7 +79,7 @@ const Bidirectional = { }, }; -function getMappedAnnotations(annotation, DisplaySetService) { +function getMappedAnnotations(annotation, displaySetService) { const { metadata, data } = annotation; const { cachedStats } = data; const { referencedImageId, referencedSeriesInstanceUID } = metadata; @@ -105,7 +105,7 @@ function getMappedAnnotations(annotation, DisplaySetService) { frameNumber, } = getSOPInstanceAttributes(referencedImageId); - const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + const displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID, frameNumber diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/EllipticalROI.js b/extensions/cornerstone/src/utils/measurementServiceMappings/EllipticalROI.js index 49025e22e..006842602 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/EllipticalROI.js +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/EllipticalROI.js @@ -7,8 +7,8 @@ const EllipticalROI = { toAnnotation: measurement => {}, toMeasurement: ( csToolsEventDetail, - DisplaySetService, - CornerstoneViewportService, + displaySetService, + cornerstoneViewportService, getValueTypeFromToolType ) => { const { annotation, viewportId } = csToolsEventDetail; @@ -32,26 +32,26 @@ const EllipticalROI = { StudyInstanceUID, } = getSOPInstanceAttributes( referencedImageId, - CornerstoneViewportService, + cornerstoneViewportService, viewportId ); let displaySet; if (SOPInstanceUID) { - displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID ); } else { - displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID); + displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID); } const { points } = data.handles; const mappedAnnotations = getMappedAnnotations( annotation, - DisplaySetService + displaySetService ); const displayText = getDisplayText(mappedAnnotations, displaySet); @@ -78,7 +78,7 @@ const EllipticalROI = { }, }; -function getMappedAnnotations(annotation, DisplaySetService) { +function getMappedAnnotations(annotation, displaySetService) { const { metadata, data } = annotation; const { cachedStats } = data; const { referencedImageId } = metadata; @@ -105,7 +105,7 @@ function getMappedAnnotations(annotation, DisplaySetService) { frameNumber, } = getSOPInstanceAttributes(referencedImageId); - const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + const displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID, frameNumber diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/Length.js b/extensions/cornerstone/src/utils/measurementServiceMappings/Length.js index 8388c8482..206208257 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/Length.js +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/Length.js @@ -1,6 +1,6 @@ import SUPPORTED_TOOLS from './constants/supportedTools'; import getSOPInstanceAttributes from './utils/getSOPInstanceAttributes'; -import { DisplaySetService, utils } from '@ohif/core'; +import { displaySetService, utils } from '@ohif/core'; const Length = { toAnnotation: measurement => {}, @@ -13,8 +13,8 @@ const Length = { */ toMeasurement: ( csToolsEventDetail, - DisplaySetService, - CornerstoneViewportService, + displaySetService, + cornerstoneViewportService, getValueTypeFromToolType ) => { const { annotation, viewportId } = csToolsEventDetail; @@ -38,26 +38,26 @@ const Length = { StudyInstanceUID, } = getSOPInstanceAttributes( referencedImageId, - CornerstoneViewportService, + cornerstoneViewportService, viewportId ); let displaySet; if (SOPInstanceUID) { - displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID ); } else { - displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID); + displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID); } const { points } = data.handles; const mappedAnnotations = getMappedAnnotations( annotation, - DisplaySetService + displaySetService ); const displayText = getDisplayText(mappedAnnotations, displaySet); @@ -84,7 +84,7 @@ const Length = { }, }; -function getMappedAnnotations(annotation, DisplaySetService) { +function getMappedAnnotations(annotation, displaySetService) { const { metadata, data } = annotation; const { cachedStats } = data; const { referencedImageId } = metadata; @@ -110,7 +110,7 @@ function getMappedAnnotations(annotation, DisplaySetService) { frameNumber, } = getSOPInstanceAttributes(referencedImageId); - const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + const displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID, frameNumber diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js b/extensions/cornerstone/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js index 2a7776e97..1e2f91daf 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js @@ -4,9 +4,9 @@ import EllipticalROI from './EllipticalROI'; import ArrowAnnotate from './ArrowAnnotate'; const measurementServiceMappingsFactory = ( - MeasurementService, - DisplaySetService, - CornerstoneViewportService + measurementService, + displaySetService, + cornerstoneViewportService ) => { /** * Maps measurement service format object to cornerstone annotation object. @@ -23,7 +23,7 @@ const measurementServiceMappingsFactory = ( RECTANGLE, BIDIRECTIONAL, POINT, - } = MeasurementService.VALUE_TYPES; + } = measurementService.VALUE_TYPES; // TODO -> I get why this was attempted, but its not nearly flexible enough. // A single measurement may have an ellipse + a bidirectional measurement, for instances. @@ -45,13 +45,13 @@ const measurementServiceMappingsFactory = ( toMeasurement: csToolsAnnotation => Length.toMeasurement( csToolsAnnotation, - DisplaySetService, - CornerstoneViewportService, + displaySetService, + cornerstoneViewportService, _getValueTypeFromToolType ), matchingCriteria: [ { - valueType: MeasurementService.VALUE_TYPES.POLYLINE, + valueType: measurementService.VALUE_TYPES.POLYLINE, points: 2, }, ], @@ -61,19 +61,19 @@ const measurementServiceMappingsFactory = ( toMeasurement: csToolsAnnotation => Bidirectional.toMeasurement( csToolsAnnotation, - DisplaySetService, - CornerstoneViewportService, + displaySetService, + cornerstoneViewportService, _getValueTypeFromToolType ), matchingCriteria: [ // TODO -> We should eventually do something like shortAxis + longAxis, // But its still a little unclear how these automatic interpretations will work. { - valueType: MeasurementService.VALUE_TYPES.POLYLINE, + valueType: measurementService.VALUE_TYPES.POLYLINE, points: 2, }, { - valueType: MeasurementService.VALUE_TYPES.POLYLINE, + valueType: measurementService.VALUE_TYPES.POLYLINE, points: 2, }, ], @@ -83,13 +83,13 @@ const measurementServiceMappingsFactory = ( toMeasurement: csToolsAnnotation => EllipticalROI.toMeasurement( csToolsAnnotation, - DisplaySetService, - CornerstoneViewportService, + displaySetService, + cornerstoneViewportService, _getValueTypeFromToolType ), matchingCriteria: [ { - valueType: MeasurementService.VALUE_TYPES.ELLIPSE, + valueType: measurementService.VALUE_TYPES.ELLIPSE, }, ], }, @@ -98,13 +98,13 @@ const measurementServiceMappingsFactory = ( toMeasurement: csToolsAnnotation => ArrowAnnotate.toMeasurement( csToolsAnnotation, - DisplaySetService, - CornerstoneViewportService, + displaySetService, + cornerstoneViewportService, _getValueTypeFromToolType ), matchingCriteria: [ { - valueType: MeasurementService.VALUE_TYPES.POINT, + valueType: measurementService.VALUE_TYPES.POINT, points: 1, }, ], diff --git a/extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js b/extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js index 7cefa4ceb..b93226bb1 100644 --- a/extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js +++ b/extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js @@ -13,7 +13,7 @@ import * as cornerstone from '@cornerstonejs/core'; */ export default function getSOPInstanceAttributes( imageId, - CornerstoneViewportService, + cornerstoneViewportService, viewportId ) { if (imageId) { @@ -23,7 +23,7 @@ export default function getSOPInstanceAttributes( // Todo: implement for volume viewports and use the referencedSeriesInstanceUID // if no imageId => measurement is not in the acquisition plane - // const metadata = getUIDFromScene(CornerstoneViewportService, viewportId); + // const metadata = getUIDFromScene(cornerstoneViewportService, viewportId); // if (!metadata) { // throw new Error('Not viewport with imageId found'); @@ -49,8 +49,8 @@ function _getUIDFromImageID(imageId) { }; } -// function getUIDFromScene(CornerstoneViewportService) { -// const renderingEngine = CornerstoneViewportService.getRenderingEngine(); +// function getUIDFromScene(cornerstoneViewportService) { +// const renderingEngine = cornerstoneViewportService.getRenderingEngine(); // const scene = renderingEngine.getScene(sceneUID); // const viewportUIDs = scene.getViewportIds(); diff --git a/extensions/cornerstone/src/utils/mpr/toggleMPRHangingProtocol.ts b/extensions/cornerstone/src/utils/mpr/toggleMPRHangingProtocol.ts index a72061ed6..6515cea8d 100644 --- a/extensions/cornerstone/src/utils/mpr/toggleMPRHangingProtocol.ts +++ b/extensions/cornerstone/src/utils/mpr/toggleMPRHangingProtocol.ts @@ -39,9 +39,9 @@ export default function toggleMPRHangingProtocol({ getToolGroup, }) { const { - UINotificationService, - HangingProtocolService, - ViewportGridService, + uiNotificationService, + hangingProtocolService, + viewportGridService, toolbarService, } = servicesManager.services; @@ -54,12 +54,12 @@ export default function toggleMPRHangingProtocol({ viewports, numRows, numCols, - } = ViewportGridService.getState(); + } = viewportGridService.getState(); const viewportDisplaySetInstanceUIDs = viewports[activeViewportIndex].displaySetInstanceUIDs; const errorCallback = error => { - UINotificationService.show({ + uiNotificationService.show({ title: 'Multiplanar reconstruction (MPR) ', message: 'Cannot create MPR for this DisplaySet since it is not reconstructable.', @@ -69,7 +69,7 @@ export default function toggleMPRHangingProtocol({ }; // What is the current active protocol and stage number to restore later - const { protocol, stage } = HangingProtocolService.getActiveProtocol(); + const { protocol, stage } = hangingProtocolService.getActiveProtocol(); if (toggledState) { resetCachedState(); @@ -102,7 +102,7 @@ export default function toggleMPRHangingProtocol({ getToolGroup ); - HangingProtocolService.setProtocol( + hangingProtocolService.setProtocol( MPR_TOOLGROUP_ID, matchDetails, errorCallback @@ -111,7 +111,7 @@ export default function toggleMPRHangingProtocol({ } const restoreErrorCallback = error => { - UINotificationService.show({ + uiNotificationService.show({ title: 'Multiplanar reconstruction (MPR) ', message: 'Something went wrong while trying to restore the previous layout.', @@ -130,7 +130,7 @@ export default function toggleMPRHangingProtocol({ // cached protocol and stage. However, for the default protocol, we need // to also apply the layout type and properties. if (cachedState.protocol.id !== 'default') { - HangingProtocolService.setProtocol( + hangingProtocolService.setProtocol( cachedState.protocol.id, viewportMatchDetails, restoreErrorCallback @@ -139,14 +139,14 @@ export default function toggleMPRHangingProtocol({ return; } - HangingProtocolService.setProtocol( + hangingProtocolService.setProtocol( 'default', viewportMatchDetails, restoreErrorCallback ); if (numRows !== properties.rows || numCols !== properties.columns) { - ViewportGridService.setLayout({ + viewportGridService.setLayout({ numRows: properties.rows, numCols: properties.columns, layoutType, @@ -169,7 +169,7 @@ export default function toggleMPRHangingProtocol({ viewportOptions, displaySetsInfo, } = viewportMatchDetailsForViewport; - ViewportGridService.setDisplaySetsForViewport({ + viewportGridService.setDisplaySetsForViewport({ viewportIndex, displaySetInstanceUIDs: displaySetsInfo.map( displaySetInfo => displaySetInfo.displaySetInstanceUID @@ -177,7 +177,7 @@ export default function toggleMPRHangingProtocol({ viewportOptions, }); } else { - ViewportGridService.setDisplaySetsForViewport({ + viewportGridService.setDisplaySetsForViewport({ viewportIndex, displaySetInstanceUIDs: [], viewportOptions: {}, @@ -217,15 +217,15 @@ function _disableCrosshairs(toolGroupIds, getToolGroup) { function _getViewportsInfo({ protocol, stage, viewports, servicesManager }) { // here we need to use the viewports and try to map it into the - // viewportMatchDetails and displaySetMatch that HangingProtocolService + // viewportMatchDetails and displaySetMatch that hangingProtocolService // expects const { - ViewportGridService, - HangingProtocolService, - ToolGroupService, + viewportGridService, + hangingProtocolService, + toolGroupService, } = servicesManager.services; - const { numRows, numCols } = ViewportGridService.getState(); + const { numRows, numCols } = viewportGridService.getState(); let viewportMatchDetails = new Map(); @@ -261,7 +261,7 @@ function _getViewportsInfo({ protocol, stage, viewports, servicesManager }) { } }); } else { - ({ viewportMatchDetails } = HangingProtocolService.getMatchDetails()); + ({ viewportMatchDetails } = hangingProtocolService.getMatchDetails()); } // get the toolGroup state for viewports @@ -277,7 +277,7 @@ function _getViewportsInfo({ protocol, stage, viewports, servicesManager }) { if (viewportIds.length) { toolOptions = viewportIds.map(viewportId => { - const toolGroup = ToolGroupService.getToolGroupForViewport(viewportId); + const toolGroup = toolGroupService.getToolGroupForViewport(viewportId); return { toolGroupId: toolGroup.id, toolOptions: toolGroup.toolOptions, diff --git a/extensions/cornerstone/src/utils/stackSync/toggleStackImageSync.ts b/extensions/cornerstone/src/utils/stackSync/toggleStackImageSync.ts index 3ff32cdbe..5a0de4677 100644 --- a/extensions/cornerstone/src/utils/stackSync/toggleStackImageSync.ts +++ b/extensions/cornerstone/src/utils/stackSync/toggleStackImageSync.ts @@ -12,10 +12,10 @@ export default function toggleStackImageSync({ getEnabledElement, }) { const { - SyncGroupService, - ViewportGridService, - DisplaySetService, - CornerstoneViewportService, + syncGroupService, + viewportGridService, + displaySetService, + cornerstoneViewportService, } = servicesManager.services; if (!toggledState) { @@ -23,7 +23,7 @@ export default function toggleStackImageSync({ const { viewports, synchronizerId } = syncGroupInfo; viewports.forEach(({ viewportId, renderingEngineId }) => { - SyncGroupService.removeViewportFromSyncGroup( + syncGroupService.removeViewportFromSyncGroup( viewportId, renderingEngineId, synchronizerId @@ -37,7 +37,7 @@ export default function toggleStackImageSync({ STACK_IMAGE_SYNC_GROUPS_INFO = []; // create synchronization groups and add viewports - let { viewports } = ViewportGridService.getState(); + let { viewports } = viewportGridService.getState(); // filter empty viewports viewports = viewports.filter( @@ -50,7 +50,7 @@ export default function toggleStackImageSync({ const { displaySetInstanceUIDs } = viewport; for (const displaySetInstanceUID of displaySetInstanceUIDs) { - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -70,7 +70,7 @@ export default function toggleStackImageSync({ return acc; } - const { element } = CornerstoneViewportService.getViewportInfo(viewportId); + const { element } = cornerstoneViewportService.getViewportInfo(viewportId); const { viewport: csViewport, renderingEngineId } = getEnabledElement( element ); @@ -99,7 +99,7 @@ export default function toggleStackImageSync({ calculateViewportRegistrations(viewports); viewports.forEach(({ viewportId, renderingEngineId }) => { - SyncGroupService.addViewportToSyncGroup(viewportId, renderingEngineId, { + syncGroupService.addViewportToSyncGroup(viewportId, renderingEngineId, { type: 'stackimage', id: synchronizerId, source: true, diff --git a/extensions/default/package.json b/extensions/default/package.json index a894ef8d9..c6c9f3140 100644 --- a/extensions/default/package.json +++ b/extensions/default/package.json @@ -32,7 +32,7 @@ "peerDependencies": { "@ohif/core": "^3.0.0", "@ohif/i18n": "^1.0.0", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "dicomweb-client": "^0.6.0", "prop-types": "^15.6.2", "react": "^17.0.2", diff --git a/extensions/default/src/Actions/createReportAsync.tsx b/extensions/default/src/Actions/createReportAsync.tsx index f9641c801..98080288b 100644 --- a/extensions/default/src/Actions/createReportAsync.tsx +++ b/extensions/default/src/Actions/createReportAsync.tsx @@ -17,11 +17,11 @@ async function createReportAsync( options ) { const { - DisplaySetService, - UINotificationService, - UIDialogService, + displaySetService, + uiNotificationService, + uiDialogService, } = servicesManager.services; - const loadingDialogId = UIDialogService.create({ + const loadingDialogId = uiDialogService.create({ showOverlay: true, isDraggable: false, centralize: true, @@ -46,9 +46,9 @@ async function createReportAsync( // automatically calls makeDisplaySets DicomMetadataStore.addInstances([naturalizedReport], true); - const displaySetInstanceUID = DisplaySetService.getMostRecentDisplaySet(); + const displaySetInstanceUID = displaySetService.getMostRecentDisplaySet(); - UINotificationService.show({ + uiNotificationService.show({ title: 'Create Report', message: 'Measurements saved successfully', type: 'success', @@ -56,13 +56,13 @@ async function createReportAsync( return [displaySetInstanceUID]; } catch (error) { - UINotificationService.show({ + uiNotificationService.show({ title: 'Create Report', message: error.message || 'Failed to store measurements', type: 'error', }); } finally { - UIDialogService.dismiss({ id: loadingDialogId }); + uiDialogService.dismiss({ id: loadingDialogId }); } } diff --git a/extensions/default/src/Panels/PanelMeasurementTable.tsx b/extensions/default/src/Panels/PanelMeasurementTable.tsx index 1d2b0f6f0..f049dfd5b 100644 --- a/extensions/default/src/Panels/PanelMeasurementTable.tsx +++ b/extensions/default/src/Panels/PanelMeasurementTable.tsx @@ -21,10 +21,10 @@ export default function PanelMeasurementTable({ const [viewportGrid, viewportGridService] = useViewportGrid(); const { activeViewportIndex, viewports } = viewportGrid; const { - MeasurementService, - UIDialogService, - UINotificationService, - DisplaySetService, + measurementService, + uiDialogService, + uiNotificationService, + displaySetService, } = servicesManager.services; const [displayMeasurements, setDisplayMeasurements] = useState([]); @@ -34,21 +34,21 @@ export default function PanelMeasurementTable({ 100 ); // ~~ Initial - setDisplayMeasurements(_getMappedMeasurements(MeasurementService)); + setDisplayMeasurements(_getMappedMeasurements(measurementService)); // ~~ Subscription - const added = MeasurementService.EVENTS.MEASUREMENT_ADDED; - const addedRaw = MeasurementService.EVENTS.RAW_MEASUREMENT_ADDED; - const updated = MeasurementService.EVENTS.MEASUREMENT_UPDATED; - const removed = MeasurementService.EVENTS.MEASUREMENT_REMOVED; - const cleared = MeasurementService.EVENTS.MEASUREMENTS_CLEARED; + const added = measurementService.EVENTS.MEASUREMENT_ADDED; + const addedRaw = measurementService.EVENTS.RAW_MEASUREMENT_ADDED; + const updated = measurementService.EVENTS.MEASUREMENT_UPDATED; + const removed = measurementService.EVENTS.MEASUREMENT_REMOVED; + const cleared = measurementService.EVENTS.MEASUREMENTS_CLEARED; const subscriptions = []; [added, addedRaw, updated, removed, cleared].forEach(evt => { subscriptions.push( - MeasurementService.subscribe(evt, () => { + measurementService.subscribe(evt, () => { debouncedSetDisplayMeasurements( - _getMappedMeasurements(MeasurementService) + _getMappedMeasurements(measurementService) ); }).unsubscribe ); @@ -63,20 +63,20 @@ export default function PanelMeasurementTable({ }, []); async function exportReport() { - const measurements = MeasurementService.getMeasurements(); + const measurements = measurementService.getMeasurements(); - downloadCSVReport(measurements, MeasurementService); + downloadCSVReport(measurements, measurementService); } async function clearMeasurements() { - MeasurementService.clearMeasurements(); + measurementService.clearMeasurements(); } async function createReport() { // filter measurements that are added to the active study const activeViewport = viewports[activeViewportIndex]; - const measurements = MeasurementService.getMeasurements(); - const displaySet = DisplaySetService.getDisplaySetByUID( + const measurements = measurementService.getMeasurements(); + const displaySet = displaySetService.getDisplaySetByUID( activeViewport.displaySetInstanceUIDs[0] ); const trackedMeasurements = measurements.filter( @@ -84,7 +84,7 @@ export default function PanelMeasurementTable({ ); if (trackedMeasurements.length <= 0) { - UINotificationService.show({ + uiNotificationService.show({ title: 'No Measurements', message: 'No Measurements are added to the current Study.', type: 'info', @@ -93,7 +93,7 @@ export default function PanelMeasurementTable({ return; } - const promptResult = await createReportDialogPrompt(UIDialogService, { + const promptResult = await createReportDialogPrompt(uiDialogService, { extensionManager, }); @@ -109,7 +109,7 @@ export default function PanelMeasurementTable({ ? 'Research Derived Series' // default : promptResult.value; // provided value - const SeriesNumber = getNextSRSeriesNumber(DisplaySetService); + const SeriesNumber = getNextSRSeriesNumber(displaySetService); const displaySetInstanceUIDs = await createReportAsync( servicesManager, @@ -125,20 +125,20 @@ export default function PanelMeasurementTable({ } const jumpToImage = ({ uid, isActive }) => { - MeasurementService.jumpToMeasurement(viewportGrid.activeViewportIndex, uid); + measurementService.jumpToMeasurement(viewportGrid.activeViewportIndex, uid); onMeasurementItemClickHandler({ uid, isActive }); }; const onMeasurementItemEditHandler = ({ uid, isActive }) => { - const measurement = MeasurementService.getMeasurement(uid); + const measurement = measurementService.getMeasurement(uid); //Todo: why we are jumping to image? // jumpToImage({ id, isActive }); const onSubmitHandler = ({ action, value }) => { switch (action.id) { case 'save': { - MeasurementService.update( + measurementService.update( uid, { ...measurement, @@ -148,10 +148,10 @@ export default function PanelMeasurementTable({ ); } } - UIDialogService.dismiss({ id: 'enter-annotation' }); + uiDialogService.dismiss({ id: 'enter-annotation' }); }; - UIDialogService.create({ + uiDialogService.create({ id: 'enter-annotation', centralize: true, isDraggable: false, @@ -234,7 +234,7 @@ export default function PanelMeasurementTable({ PanelMeasurementTable.propTypes = { servicesManager: PropTypes.shape({ services: PropTypes.shape({ - MeasurementService: PropTypes.shape({ + measurementService: PropTypes.shape({ getMeasurements: PropTypes.func.isRequired, subscribe: PropTypes.func.isRequired, EVENTS: PropTypes.object.isRequired, @@ -244,11 +244,11 @@ PanelMeasurementTable.propTypes = { }).isRequired, }; -function _getMappedMeasurements(MeasurementService) { - const measurements = MeasurementService.getMeasurements(); +function _getMappedMeasurements(measurementService) { + const measurements = measurementService.getMeasurements(); const mappedMeasurements = measurements.map((m, index) => - _mapMeasurementToDisplay(m, index, MeasurementService.VALUE_TYPES) + _mapMeasurementToDisplay(m, index, measurementService.VALUE_TYPES) ); return mappedMeasurements; diff --git a/extensions/default/src/Panels/PanelStudyBrowser.tsx b/extensions/default/src/Panels/PanelStudyBrowser.tsx index 0da795044..05f32fefd 100644 --- a/extensions/default/src/Panels/PanelStudyBrowser.tsx +++ b/extensions/default/src/Panels/PanelStudyBrowser.tsx @@ -17,9 +17,9 @@ function PanelStudyBrowser({ dataSource, }) { const { - HangingProtocolService, - DisplaySetService, - UINotificationService, + hangingProtocolService, + displaySetService, + uiNotificationService, } = servicesManager.services; // Normally you nest the components so the tree isn't so deep, and the data // doesn't have to have such an intense shape. This works well enough for now. @@ -42,13 +42,13 @@ function PanelStudyBrowser({ let updatedViewports = []; const viewportIndex = activeViewportIndex; try { - updatedViewports = HangingProtocolService.getViewportsRequireUpdate( + updatedViewports = hangingProtocolService.getViewportsRequireUpdate( viewportIndex, displaySetInstanceUID ); } catch (error) { console.warn(error); - UINotificationService.show({ + uiNotificationService.show({ title: 'Thumbnail Double Click', message: 'The selected display sets could not be added to the viewport due to a mismatch in the Hanging Protocol rules.', @@ -103,10 +103,10 @@ function PanelStudyBrowser({ // // ~~ Initial Thumbnails useEffect(() => { - const currentDisplaySets = DisplaySetService.activeDisplaySets; + const currentDisplaySets = displaySetService.activeDisplaySets; currentDisplaySets.forEach(async dSet => { const newImageSrcEntry = {}; - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( dSet.displaySetInstanceUID ); const imageIds = dataSource.getImageIdsForDisplaySet(displaySet); @@ -134,7 +134,7 @@ function PanelStudyBrowser({ // ~~ displaySets useEffect(() => { // TODO: Are we sure `activeDisplaySets` will always be accurate? - const currentDisplaySets = DisplaySetService.activeDisplaySets; + const currentDisplaySets = displaySetService.activeDisplaySets; const mappedDisplaySets = _mapDisplaySets( currentDisplaySets, thumbnailImageSrcMap @@ -148,13 +148,13 @@ function PanelStudyBrowser({ // ~~ subscriptions --> displaySets useEffect(() => { // DISPLAY_SETS_ADDED returns an array of DisplaySets that were added - const SubscriptionDisplaySetsAdded = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_ADDED, + const SubscriptionDisplaySetsAdded = displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SETS_ADDED, data => { const { displaySetsAdded } = data; displaySetsAdded.forEach(async dSet => { const newImageSrcEntry = {}; - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( dSet.displaySetInstanceUID ); const imageIds = dataSource.getImageIdsForDisplaySet(displaySet); @@ -179,8 +179,8 @@ function PanelStudyBrowser({ // TODO: Will this always hold _all_ the displaySets we care about? // DISPLAY_SETS_CHANGED returns `DisplaySerService.activeDisplaySets` - const SubscriptionDisplaySetsChanged = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_CHANGED, + const SubscriptionDisplaySetsChanged = displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SETS_CHANGED, changedDisplaySets => { const mappedDisplaySets = _mapDisplaySets( changedDisplaySets, @@ -222,7 +222,7 @@ function PanelStudyBrowser({ if (!shouldCollapseStudy) { const madeInClient = true; requestDisplaySetCreationForStudy( - DisplaySetService, + displaySetService, StudyInstanceUID, madeInClient ); diff --git a/extensions/default/src/Panels/createReportDialogPrompt.tsx b/extensions/default/src/Panels/createReportDialogPrompt.tsx index d635b4354..531d24ed7 100644 --- a/extensions/default/src/Panels/createReportDialogPrompt.tsx +++ b/extensions/default/src/Panels/createReportDialogPrompt.tsx @@ -8,7 +8,7 @@ export const CREATE_REPORT_DIALOG_RESPONSE = { }; export default function createReportDialogPrompt( - UIDialogService, + uiDialogService, { extensionManager } ) { return new Promise(function (resolve, reject) { @@ -16,7 +16,7 @@ export default function createReportDialogPrompt( const _handleClose = () => { // Dismiss dialog - UIDialogService.dismiss({ id: dialogId }); + uiDialogService.dismiss({ id: dialogId }); // Notify of cancel action resolve({ action: CREATE_REPORT_DIALOG_RESPONSE.CANCEL, @@ -31,7 +31,7 @@ export default function createReportDialogPrompt( * @param {string} param0.value - value from input field */ const _handleFormSubmit = ({ action, value }) => { - UIDialogService.dismiss({ id: dialogId }); + uiDialogService.dismiss({ id: dialogId }); switch (action.id) { case 'save': resolve({ @@ -66,7 +66,7 @@ export default function createReportDialogPrompt( }; }); - dialogId = UIDialogService.create({ + dialogId = uiDialogService.create({ centralize: true, isDraggable: false, content: Dialog, @@ -93,7 +93,7 @@ export default function createReportDialogPrompt( }; const onKeyPressHandler = event => { if (event.key === 'Enter') { - UIDialogService.dismiss({ id: dialogId }); + uiDialogService.dismiss({ id: dialogId }); resolve({ action: CREATE_REPORT_DIALOG_RESPONSE.CREATE_REPORT, value: value.label, diff --git a/extensions/default/src/Panels/requestDisplaySetCreationForStudy.js b/extensions/default/src/Panels/requestDisplaySetCreationForStudy.js index 52f4a038f..c10a5d97b 100644 --- a/extensions/default/src/Panels/requestDisplaySetCreationForStudy.js +++ b/extensions/default/src/Panels/requestDisplaySetCreationForStudy.js @@ -1,12 +1,12 @@ function requestDisplaySetCreationForStudy( dataSource, - DisplaySetService, + displaySetService, StudyInstanceUID, madeInClient ) { // TODO: is this already short-circuited by the map of Retrieve promises? if ( - DisplaySetService.activeDisplaySets.some( + displaySetService.activeDisplaySets.some( displaySet => displaySet.StudyInstanceUID === StudyInstanceUID ) ) { diff --git a/extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx b/extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx index 789096966..a385c071d 100644 --- a/extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx +++ b/extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx @@ -20,7 +20,7 @@ function LayoutSelector({ const [viewportGridState, viewportGridService] = useViewportGrid(); const { - HangingProtocolService, + hangingProtocolService, toolbarService, } = (servicesManager as ServicesManager).services; @@ -31,8 +31,8 @@ function LayoutSelector({ }; useEffect(() => { - const { unsubscribe } = HangingProtocolService.subscribe( - HangingProtocolService.EVENTS.PROTOCOL_CHANGED, + const { unsubscribe } = hangingProtocolService.subscribe( + hangingProtocolService.EVENTS.PROTOCOL_CHANGED, evt => { const { protocol } = evt; } @@ -41,7 +41,7 @@ function LayoutSelector({ return () => { unsubscribe(); }; - }, [HangingProtocolService]); + }, [hangingProtocolService]); useEffect(() => { window.addEventListener('click', closeOnOutsideClick); @@ -65,7 +65,7 @@ function LayoutSelector({ // TODO Here the layout change will amount to a change of hanging protocol as specified by the extension for this layout selector tool // followed by the change of the grid itself. - if (HangingProtocolService.getActiveProtocol().protocol.id === 'mpr') { + if (hangingProtocolService.getActiveProtocol().protocol.id === 'mpr') { toolbarService.recordInteraction({ groupId: 'MPR', itemId: 'MPR', diff --git a/extensions/default/src/ViewerLayout/index.tsx b/extensions/default/src/ViewerLayout/index.tsx index 1ee954b55..46df33cd5 100644 --- a/extensions/default/src/ViewerLayout/index.tsx +++ b/extensions/default/src/ViewerLayout/index.tsx @@ -58,7 +58,7 @@ function ViewerLayout({ appConfig.showLoadingIndicator ); - const { HangingProtocolService } = servicesManager.services; + const { hangingProtocolService } = servicesManager.services; const { hotkeyDefinitions, hotkeyDefaults } = hotkeysManager; const versionNumber = process.env.VERSION_NUMBER; @@ -167,11 +167,11 @@ function ViewerLayout({ }; useEffect(() => { - const { unsubscribe } = HangingProtocolService.subscribe( - HangingProtocolService.EVENTS.HANGING_PROTOCOL_APPLIED_FOR_VIEWPORT, + const { unsubscribe } = hangingProtocolService.subscribe( + hangingProtocolService.EVENTS.HANGING_PROTOCOL_APPLIED_FOR_VIEWPORT, // Todo: right now to set the loading indicator to false, we need to wait for the - // HangingProtocolService to finish applying the viewport matching to each viewport, + // hangingProtocolService to finish applying the viewport matching to each viewport, // however, this might not be the only approach to set the loading indicator to false. we need to explore this further. ({ progress }) => { if (progress === 100) { @@ -183,7 +183,7 @@ function ViewerLayout({ return () => { unsubscribe(); }; - }, [HangingProtocolService]); + }, [hangingProtocolService]); const getViewportComponentData = viewportComponent => { const { entry } = getComponent(viewportComponent.namespace); diff --git a/extensions/default/src/commandsModule.js b/extensions/default/src/commandsModule.js index eb576784d..deb413f98 100644 --- a/extensions/default/src/commandsModule.js +++ b/extensions/default/src/commandsModule.js @@ -3,37 +3,37 @@ import React from 'react'; const commandsModule = ({ servicesManager, commandsManager }) => { const { - MeasurementService, - HangingProtocolService, - UINotificationService, - ViewportGridService, - DisplaySetService, + measurementService, + hangingProtocolService, + uiNotificationService, + viewportGridService, + displaySetService, } = servicesManager.services; const actions = { displayNotification: ({ text, title, type }) => { - UINotificationService.show({ + uiNotificationService.show({ title: title, message: text, type: type, }); }, clearMeasurements: () => { - MeasurementService.clear(); + measurementService.clear(); }, nextStage: () => { // next stage in hanging protocols - HangingProtocolService.nextProtocolStage(); + hangingProtocolService.nextProtocolStage(); }, previousStage: () => { - HangingProtocolService.previousProtocolStage(); + hangingProtocolService.previousProtocolStage(); }, openDICOMTagViewer() { - const { activeViewportIndex, viewports } = ViewportGridService.getState(); + const { activeViewportIndex, viewports } = viewportGridService.getState(); const activeViewportSpecificData = viewports[activeViewportIndex]; const { displaySetInstanceUIDs } = activeViewportSpecificData; - const displaySets = DisplaySetService.activeDisplaySets; + const displaySets = displaySetService.activeDisplaySets; const { UIModalService } = servicesManager.services; const displaySetInstanceUID = displaySetInstanceUIDs[0]; diff --git a/extensions/default/src/utils/getNextSRSeriesNumber.js b/extensions/default/src/utils/getNextSRSeriesNumber.js index d5865d38e..c980aae9c 100644 --- a/extensions/default/src/utils/getNextSRSeriesNumber.js +++ b/extensions/default/src/utils/getNextSRSeriesNumber.js @@ -1,7 +1,7 @@ const MIN_SR_SERIES_NUMBER = 4700; -export default function getNextSRSeriesNumber(DisplaySetService) { - const activeDisplaySets = DisplaySetService.getActiveDisplaySets(); +export default function getNextSRSeriesNumber(displaySetService) { + const activeDisplaySets = displaySetService.getActiveDisplaySets(); const srDisplaySets = activeDisplaySets.filter(ds => ds.Modality === 'SR'); const srSeriesNumbers = srDisplaySets.map(ds => ds.SeriesNumber); const maxSeriesNumber = Math.max(...srSeriesNumbers, MIN_SR_SERIES_NUMBER); diff --git a/extensions/dicom-pdf/package.json b/extensions/dicom-pdf/package.json index 03fe4c66a..d6ac78f82 100644 --- a/extensions/dicom-pdf/package.json +++ b/extensions/dicom-pdf/package.json @@ -30,7 +30,7 @@ "peerDependencies": { "@ohif/core": "^3.0.0", "@ohif/ui": "^2.0.0", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", diff --git a/extensions/dicom-video/package.json b/extensions/dicom-video/package.json index 4d86d4251..17ac39036 100644 --- a/extensions/dicom-video/package.json +++ b/extensions/dicom-video/package.json @@ -30,7 +30,7 @@ "peerDependencies": { "@ohif/core": "^3.0.0", "@ohif/ui": "^2.0.0", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index 0e9f1349b..a6acf2588 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,10 +32,10 @@ "peerDependencies": { "@ohif/core": "^3.0.0", "classnames": "^2.3.2", - "@cornerstonejs/core": "^0.27.1", - "@cornerstonejs/tools": "^0.36.3", + "@cornerstonejs/core": "0.30.1", + "@cornerstonejs/tools": "0.39.0", "@ohif/extension-cornerstone-dicom-sr": "^3.0.0", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "prop-types": "^15.6.2", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/extensions/measurement-tracking/src/_shared/createReportAsync.tsx b/extensions/measurement-tracking/src/_shared/createReportAsync.tsx index f9641c801..98080288b 100644 --- a/extensions/measurement-tracking/src/_shared/createReportAsync.tsx +++ b/extensions/measurement-tracking/src/_shared/createReportAsync.tsx @@ -17,11 +17,11 @@ async function createReportAsync( options ) { const { - DisplaySetService, - UINotificationService, - UIDialogService, + displaySetService, + uiNotificationService, + uiDialogService, } = servicesManager.services; - const loadingDialogId = UIDialogService.create({ + const loadingDialogId = uiDialogService.create({ showOverlay: true, isDraggable: false, centralize: true, @@ -46,9 +46,9 @@ async function createReportAsync( // automatically calls makeDisplaySets DicomMetadataStore.addInstances([naturalizedReport], true); - const displaySetInstanceUID = DisplaySetService.getMostRecentDisplaySet(); + const displaySetInstanceUID = displaySetService.getMostRecentDisplaySet(); - UINotificationService.show({ + uiNotificationService.show({ title: 'Create Report', message: 'Measurements saved successfully', type: 'success', @@ -56,13 +56,13 @@ async function createReportAsync( return [displaySetInstanceUID]; } catch (error) { - UINotificationService.show({ + uiNotificationService.show({ title: 'Create Report', message: error.message || 'Failed to store measurements', type: 'error', }); } finally { - UIDialogService.dismiss({ id: loadingDialogId }); + uiDialogService.dismiss({ id: loadingDialogId }); } } diff --git a/extensions/measurement-tracking/src/_shared/createReportDialogPrompt.tsx b/extensions/measurement-tracking/src/_shared/createReportDialogPrompt.tsx index cdad87953..397ad1810 100644 --- a/extensions/measurement-tracking/src/_shared/createReportDialogPrompt.tsx +++ b/extensions/measurement-tracking/src/_shared/createReportDialogPrompt.tsx @@ -3,13 +3,13 @@ import React from 'react'; import { Dialog, Input } from '@ohif/ui'; import RESPONSE from './PROMPT_RESPONSES'; -export default function createReportDialogPrompt(UIDialogService) { +export default function createReportDialogPrompt(uiDialogService) { return new Promise(function(resolve, reject) { let dialogId = undefined; const _handleClose = () => { // Dismiss dialog - UIDialogService.dismiss({ id: dialogId }); + uiDialogService.dismiss({ id: dialogId }); // Notify of cancel action resolve({ action: RESPONSE.CANCEL, value: undefined }); }; @@ -20,7 +20,7 @@ export default function createReportDialogPrompt(UIDialogService) { * @param {string} param0.value - value from input field */ const _handleFormSubmit = ({ action, value }) => { - UIDialogService.dismiss({ id: dialogId }); + uiDialogService.dismiss({ id: dialogId }); switch (action.id) { case 'save': resolve({ action: RESPONSE.CREATE_REPORT, value: value.label }); @@ -31,7 +31,7 @@ export default function createReportDialogPrompt(UIDialogService) { } }; - dialogId = UIDialogService.create({ + dialogId = uiDialogService.create({ centralize: true, isDraggable: false, content: Dialog, @@ -55,7 +55,7 @@ export default function createReportDialogPrompt(UIDialogService) { }; const onKeyPressHandler = event => { if (event.key === 'Enter') { - UIDialogService.dismiss({ id: dialogId }); + uiDialogService.dismiss({ id: dialogId }); resolve({ action: RESPONSE.CREATE_REPORT, value: value.label }); } }; diff --git a/extensions/measurement-tracking/src/_shared/getNextSRSeriesNumber.js b/extensions/measurement-tracking/src/_shared/getNextSRSeriesNumber.js index d5865d38e..c980aae9c 100644 --- a/extensions/measurement-tracking/src/_shared/getNextSRSeriesNumber.js +++ b/extensions/measurement-tracking/src/_shared/getNextSRSeriesNumber.js @@ -1,7 +1,7 @@ const MIN_SR_SERIES_NUMBER = 4700; -export default function getNextSRSeriesNumber(DisplaySetService) { - const activeDisplaySets = DisplaySetService.getActiveDisplaySets(); +export default function getNextSRSeriesNumber(displaySetService) { + const activeDisplaySets = displaySetService.getActiveDisplaySets(); const srDisplaySets = activeDisplaySets.filter(ds => ds.Modality === 'SR'); const srSeriesNumbers = srDisplaySets.map(ds => ds.SeriesNumber); const maxSeriesNumber = Math.max(...srSeriesNumbers, MIN_SR_SERIES_NUMBER); diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx index 7ac6d46f2..b35f16389 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/TrackedMeasurementsContext.tsx @@ -34,10 +34,10 @@ function TrackedMeasurementsContextProvider( const machineOptions = Object.assign({}, defaultOptions); machineOptions.actions = Object.assign({}, machineOptions.actions, { jumpToFirstMeasurementInActiveViewport: (ctx, evt) => { - const { MeasurementService } = servicesManager.services; + const { measurementService } = servicesManager.services; const { trackedStudy, trackedSeries } = ctx; - const measurements = MeasurementService.getMeasurements(); + const measurements = measurementService.getMeasurements(); const trackedMeasurements = measurements.filter( m => trackedStudy === m.referenceStudyUID && @@ -46,7 +46,7 @@ function TrackedMeasurementsContextProvider( const uid = trackedMeasurements[0].uid; - MeasurementService.jumpToMeasurement( + measurementService.jumpToMeasurement( viewportGrid.activeViewportIndex, uid ); @@ -63,24 +63,24 @@ function TrackedMeasurementsContextProvider( } }, discardPreviouslyTrackedMeasurements: (ctx, evt) => { - const { MeasurementService } = servicesManager.services; - const measurements = MeasurementService.getMeasurements(); + const { measurementService } = servicesManager.services; + const measurements = measurementService.getMeasurements(); const filteredMeasurements = measurements.filter(ms => ctx.prevTrackedSeries.includes(ms.referenceSeriesUID) ); const measurementIds = filteredMeasurements.map(fm => fm.id); for (let i = 0; i < measurementIds.length; i++) { - MeasurementService.remove(measurementIds[i]); + measurementService.remove(measurementIds[i]); } }, clearAllMeasurements: (ctx, evt) => { - const { MeasurementService } = servicesManager.services; - const measurements = MeasurementService.getMeasurements(); + const { measurementService } = servicesManager.services; + const measurements = measurementService.getMeasurements(); const measurementIds = measurements.map(fm => fm.uid); for (let i = 0; i < measurementIds.length; i++) { - MeasurementService.remove(measurementIds[i]); + measurementService.remove(measurementIds[i]); } }, }); @@ -139,8 +139,8 @@ function TrackedMeasurementsContextProvider( // Todo: Getting the first displaySetInstanceUID is wrong, but we don't have // tracking fusion viewports yet. This should change when we do. - const { DisplaySetService } = servicesManager.services; - const displaySet = DisplaySetService.getDisplaySetByUID( + const { displaySetService } = servicesManager.services; + const displaySet = displaySetService.getDisplaySetByUID( activeViewport.displaySetInstanceUIDs[0] ); diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js index 7ae57bd49..bc889bfc7 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js @@ -17,10 +17,10 @@ function promptHydrateStructuredReport( ) { const { UIViewportDialogService, - DisplaySetService, + displaySetService, } = servicesManager.services; const { viewportIndex, displaySetInstanceUID } = evt; - const srDisplaySet = DisplaySetService.getDisplaySetByUID( + const srDisplaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptSaveReport.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptSaveReport.js index 3e825aae2..2aa54db80 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptSaveReport.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptSaveReport.js @@ -9,9 +9,9 @@ function promptSaveReport( evt ) { const { - UIDialogService, - MeasurementService, - DisplaySetService, + uiDialogService, + measurementService, + displaySetService, } = servicesManager.services; const viewportIndex = evt.viewportIndex === undefined @@ -26,13 +26,13 @@ function promptSaveReport( let displaySetInstanceUIDs; return new Promise(async function(resolve, reject) { - // TODO: Fallback if (UIDialogService) { - const promptResult = await createReportDialogPrompt(UIDialogService); + // TODO: Fallback if (uiDialogService) { + const promptResult = await createReportDialogPrompt(uiDialogService); if (promptResult.action === RESPONSE.CREATE_REPORT) { const dataSources = extensionManager.getDataSources(); const dataSource = dataSources[0]; - const measurements = MeasurementService.getMeasurements(); + const measurements = measurementService.getMeasurements(); const trackedMeasurements = measurements.filter( m => trackedStudy === m.referenceStudyUID && @@ -45,7 +45,7 @@ function promptSaveReport( ? 'Research Derived Series' // default : promptResult.value; // provided value - const SeriesNumber = getNextSRSeriesNumber(DisplaySetService); + const SeriesNumber = getNextSRSeriesNumber(displaySetService); displaySetInstanceUIDs = await createReportAsync( servicesManager, diff --git a/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking/index.tsx b/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking/index.tsx index f376aecfb..0947eab69 100644 --- a/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking/index.tsx +++ b/extensions/measurement-tracking/src/panels/PanelMeasurementTableTracking/index.tsx @@ -32,9 +32,9 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) { 200 ); const { - MeasurementService, - UIDialogService, - DisplaySetService, + measurementService, + uiDialogService, + displaySetService, } = servicesManager.services; const [ trackedMeasurements, @@ -47,7 +47,7 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) { const [displayMeasurements, setDisplayMeasurements] = useState([]); useEffect(() => { - const measurements = MeasurementService.getMeasurements(); + const measurements = measurementService.getMeasurements(); const filteredMeasurements = measurements.filter( m => trackedStudy === m.referenceStudyUID && @@ -57,14 +57,14 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) { const mappedMeasurements = filteredMeasurements.map(m => _mapMeasurementToDisplay( m, - MeasurementService.VALUE_TYPES, - DisplaySetService + measurementService.VALUE_TYPES, + displaySetService ) ); setDisplayMeasurements(mappedMeasurements); // eslint-ignore-next-line }, [ - MeasurementService, + measurementService, trackedStudy, trackedSeries, debouncedMeasurementChangeTimestamp, @@ -110,20 +110,20 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) { // TODO: Better way to consolidated, debounce, check on change? // Are we exposing the right API for measurementService? - // This watches for ALL MeasurementService changes. It updates a timestamp, + // This watches for ALL measurementService changes. It updates a timestamp, // which is debounced. After a brief period of inactivity, this triggers // a re-render where we grab up-to-date measurements useEffect(() => { - const added = MeasurementService.EVENTS.MEASUREMENT_ADDED; - const addedRaw = MeasurementService.EVENTS.RAW_MEASUREMENT_ADDED; - const updated = MeasurementService.EVENTS.MEASUREMENT_UPDATED; - const removed = MeasurementService.EVENTS.MEASUREMENT_REMOVED; - const cleared = MeasurementService.EVENTS.MEASUREMENTS_CLEARED; + const added = measurementService.EVENTS.MEASUREMENT_ADDED; + const addedRaw = measurementService.EVENTS.RAW_MEASUREMENT_ADDED; + const updated = measurementService.EVENTS.MEASUREMENT_UPDATED; + const removed = measurementService.EVENTS.MEASUREMENT_REMOVED; + const cleared = measurementService.EVENTS.MEASUREMENTS_CLEARED; const subscriptions = []; [added, addedRaw, updated, removed, cleared].forEach(evt => { subscriptions.push( - MeasurementService.subscribe(evt, () => { + measurementService.subscribe(evt, () => { setMeasurementsUpdated(Date.now().toString()); }).unsubscribe ); @@ -134,33 +134,33 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) { unsub(); }); }; - }, [MeasurementService, sendTrackedMeasurementsEvent]); + }, [measurementService, sendTrackedMeasurementsEvent]); async function exportReport() { - const measurements = MeasurementService.getMeasurements(); + const measurements = measurementService.getMeasurements(); const trackedMeasurements = measurements.filter( m => trackedStudy === m.referenceStudyUID && trackedSeries.includes(m.referenceSeriesUID) ); - downloadCSVReport(trackedMeasurements, MeasurementService); + downloadCSVReport(trackedMeasurements, measurementService); } const jumpToImage = ({ uid, isActive }) => { - MeasurementService.jumpToMeasurement(viewportGrid.activeViewportIndex, uid); + measurementService.jumpToMeasurement(viewportGrid.activeViewportIndex, uid); onMeasurementItemClickHandler({ uid, isActive }); }; const onMeasurementItemEditHandler = ({ uid, isActive }) => { - const measurement = MeasurementService.getMeasurement(uid); + const measurement = measurementService.getMeasurement(uid); jumpToImage({ uid, isActive }); const onSubmitHandler = ({ action, value }) => { switch (action.id) { case 'save': { - MeasurementService.update( + measurementService.update( uid, { ...measurement, @@ -170,10 +170,10 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) { ); } } - UIDialogService.dismiss({ id: 'enter-annotation' }); + uiDialogService.dismiss({ id: 'enter-annotation' }); }; - UIDialogService.create({ + uiDialogService.create({ id: 'enter-annotation', centralize: true, isDraggable: false, @@ -230,10 +230,10 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) { }; const displayMeasurementsWithoutFindings = displayMeasurements.filter( - dm => dm.measurementType !== MeasurementService.VALUE_TYPES.POINT + dm => dm.measurementType !== measurementService.VALUE_TYPES.POINT ); const additionalFindings = displayMeasurements.filter( - dm => dm.measurementType === MeasurementService.VALUE_TYPES.POINT + dm => dm.measurementType === measurementService.VALUE_TYPES.POINT ); return ( @@ -286,7 +286,7 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) { PanelMeasurementTableTracking.propTypes = { servicesManager: PropTypes.shape({ services: PropTypes.shape({ - MeasurementService: PropTypes.shape({ + measurementService: PropTypes.shape({ getMeasurements: PropTypes.func.isRequired, VALUE_TYPES: PropTypes.object.isRequired, }).isRequired, @@ -294,8 +294,8 @@ PanelMeasurementTableTracking.propTypes = { }).isRequired, }; -// TODO: This could be a MeasurementService mapper -function _mapMeasurementToDisplay(measurement, types, DisplaySetService) { +// TODO: This could be a measurementService mapper +function _mapMeasurementToDisplay(measurement, types, displaySetService) { const { referenceStudyUID, referenceSeriesUID, SOPInstanceUID } = measurement; // TODO: We don't deal with multiframe well yet, would need to update @@ -307,7 +307,7 @@ function _mapMeasurementToDisplay(measurement, types, DisplaySetService) { SOPInstanceUID ); - const displaySets = DisplaySetService.getDisplaySetsForSeries( + const displaySets = displaySetService.getDisplaySetsForSeries( referenceSeriesUID ); diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx index 84bcfddc9..9983aadf5 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; -import { HangingProtocolService, utils } from '@ohif/core'; +import { utils } from '@ohif/core'; import { StudyBrowser, useImageViewer, @@ -23,11 +23,11 @@ function PanelStudyBrowserTracking({ dataSource, }) { const { - MeasurementService, - DisplaySetService, - UIDialogService, - HangingProtocolService, - UINotificationService, + measurementService, + displaySetService, + uiDialogService, + hangingProtocolService, + uiNotificationService, } = servicesManager.services; // Normally you nest the components so the tree isn't so deep, and the data @@ -55,13 +55,13 @@ function PanelStudyBrowserTracking({ let updatedViewports = []; const viewportIndex = activeViewportIndex; try { - updatedViewports = HangingProtocolService.getViewportsRequireUpdate( + updatedViewports = hangingProtocolService.getViewportsRequireUpdate( viewportIndex, displaySetInstanceUID ); } catch (error) { console.warn(error); - UINotificationService.show({ + uiNotificationService.show({ title: 'Thumbnail Double Click', message: 'The selected display sets could not be added to the viewport due to a mismatch in the Hanging Protocol rules.', @@ -79,13 +79,13 @@ function PanelStudyBrowserTracking({ const isSingleViewport = numCols === 1 && numRows === 1; useEffect(() => { - const added = MeasurementService.EVENTS.MEASUREMENT_ADDED; - const addedRaw = MeasurementService.EVENTS.RAW_MEASUREMENT_ADDED; + const added = measurementService.EVENTS.MEASUREMENT_ADDED; + const addedRaw = measurementService.EVENTS.RAW_MEASUREMENT_ADDED; const subscriptions = []; [added, addedRaw].forEach(evt => { subscriptions.push( - MeasurementService.subscribe(evt, ({ source, measurement }) => { + measurementService.subscribe(evt, ({ source, measurement }) => { const { referenceSeriesUID: SeriesInstanceUID, referenceStudyUID: StudyInstanceUID, @@ -106,7 +106,7 @@ function PanelStudyBrowserTracking({ unsub(); }); }; - }, [MeasurementService, activeViewportIndex, sendTrackedMeasurementsEvent]); + }, [measurementService, activeViewportIndex, sendTrackedMeasurementsEvent]); const { trackedStudy, trackedSeries } = trackedMeasurements.context; @@ -150,10 +150,10 @@ function PanelStudyBrowserTracking({ // ~~ Initial Thumbnails useEffect(() => { - const currentDisplaySets = DisplaySetService.activeDisplaySets; + const currentDisplaySets = displaySetService.activeDisplaySets; currentDisplaySets.forEach(async dSet => { const newImageSrcEntry = {}; - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( dSet.displaySetInstanceUID ); const imageIds = dataSource.getImageIdsForDisplaySet(displaySet); @@ -171,12 +171,12 @@ function PanelStudyBrowserTracking({ } }); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [DisplaySetService, dataSource, getImageSrc]); + }, [displaySetService, dataSource, getImageSrc]); // ~~ displaySets useEffect(() => { // TODO: Are we sure `activeDisplaySets` will always be accurate? - const currentDisplaySets = DisplaySetService.activeDisplaySets; + const currentDisplaySets = displaySetService.activeDisplaySets; const mappedDisplaySets = _mapDisplaySets( currentDisplaySets, thumbnailImageSrcMap, @@ -184,15 +184,15 @@ function PanelStudyBrowserTracking({ viewports, isSingleViewport, dataSource, - DisplaySetService, - UIDialogService, - UINotificationService + displaySetService, + uiDialogService, + uiNotificationService ); setDisplaySets(mappedDisplaySets); // eslint-disable-next-line react-hooks/exhaustive-deps }, [ - DisplaySetService.activeDisplaySets, + displaySetService.activeDisplaySets, trackedSeries, thumbnailImageSrcMap, viewports, @@ -202,15 +202,15 @@ function PanelStudyBrowserTracking({ // ~~ subscriptions --> displaySets useEffect(() => { // DISPLAY_SETS_ADDED returns an array of DisplaySets that were added - const SubscriptionDisplaySetsAdded = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_ADDED, + const SubscriptionDisplaySetsAdded = displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SETS_ADDED, data => { const { displaySetsAdded, options } = data; displaySetsAdded.forEach(async dSet => { const displaySetInstanceUID = dSet.displaySetInstanceUID; const newImageSrcEntry = {}; - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -237,8 +237,8 @@ function PanelStudyBrowserTracking({ // TODO: Will this always hold _all_ the displaySets we care about? // DISPLAY_SETS_CHANGED returns `DisplaySerService.activeDisplaySets` - const SubscriptionDisplaySetsChanged = DisplaySetService.subscribe( - DisplaySetService.EVENTS.DISPLAY_SETS_CHANGED, + const SubscriptionDisplaySetsChanged = displaySetService.subscribe( + displaySetService.EVENTS.DISPLAY_SETS_CHANGED, changedDisplaySets => { const mappedDisplaySets = _mapDisplaySets( changedDisplaySets, @@ -247,9 +247,9 @@ function PanelStudyBrowserTracking({ viewports, isSingleViewport, dataSource, - DisplaySetService, - UIDialogService, - UINotificationService + displaySetService, + uiDialogService, + uiNotificationService ); setDisplaySets(mappedDisplaySets); @@ -262,7 +262,7 @@ function PanelStudyBrowserTracking({ }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [ - DisplaySetService, + displaySetService, dataSource, getImageSrc, thumbnailImageSrcMap, @@ -294,7 +294,7 @@ function PanelStudyBrowserTracking({ if (!shouldCollapseStudy) { const madeInClient = true; requestDisplaySetCreationForStudy( - DisplaySetService, + displaySetService, StudyInstanceUID, madeInClient ); @@ -357,7 +357,7 @@ function PanelStudyBrowserTracking({ setActiveTabName(clickedTabName); }} onClickUntrack={displaySetInstanceUID => { - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); // TODO: shift this somewhere else where we're centralizing this logic? @@ -414,9 +414,9 @@ function _mapDisplaySets( viewports, // TODO: make array of `displaySetInstanceUIDs`? isSingleViewport, dataSource, - DisplaySetService, - UIDialogService, - UINotificationService + displaySetService, + uiDialogService, + uiNotificationService ) { const thumbnailDisplaySets = []; const thumbnailNoImageDisplaySets = []; @@ -466,7 +466,7 @@ function _mapDisplaySets( if (dataSource.reject && dataSource.reject.series) { thumbnailProps.canReject = true; thumbnailProps.onReject = () => { - UIDialogService.create({ + uiDialogService.create({ id: 'ds-reject-sr', centralize: true, isDraggable: false, @@ -489,7 +489,7 @@ function _mapDisplaySets( classes: ['reject-yes-button'], }, ], - onClose: () => UIDialogService.dismiss({ id: 'ds-reject-sr' }), + onClose: () => uiDialogService.dismiss({ id: 'ds-reject-sr' }), onShow: () => { const yesButton = document.querySelector('.reject-yes-button'); @@ -503,16 +503,16 @@ function _mapDisplaySets( ds.StudyInstanceUID, ds.SeriesInstanceUID ); - DisplaySetService.deleteDisplaySet(displaySetInstanceUID); - UIDialogService.dismiss({ id: 'ds-reject-sr' }); - UINotificationService.show({ + 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({ + uiDialogService.dismiss({ id: 'ds-reject-sr' }); + uiNotificationService.show({ title: 'Delete Report', message: 'Failed to delete report', type: 'error', @@ -520,7 +520,7 @@ function _mapDisplaySets( } break; case 'cancel': - UIDialogService.dismiss({ id: 'ds-reject-sr' }); + uiDialogService.dismiss({ id: 'ds-reject-sr' }); break; } }, diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/requestDisplaySetCreationForStudy.js b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/requestDisplaySetCreationForStudy.js index b6b79ec2e..7da70cb9f 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/requestDisplaySetCreationForStudy.js +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/requestDisplaySetCreationForStudy.js @@ -1,11 +1,11 @@ function requestDisplaySetCreationForStudy( dataSource, - DisplaySetService, + displaySetService, StudyInstanceUID, madeInClient ) { if ( - DisplaySetService.activeDisplaySets.some( + displaySetService.activeDisplaySets.some( displaySet => displaySet.StudyInstanceUID === StudyInstanceUID ) ) { diff --git a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx index 4cf48444a..6d0971f43 100644 --- a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx +++ b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx @@ -35,8 +35,8 @@ function TrackedCornerstoneViewport(props) { const { t } = useTranslation('TrackedViewport'); const { - MeasurementService, - CornerstoneViewportService, + measurementService, + cornerstoneViewportService, } = servicesManager.services; // Todo: handling more than one displaySet on the same viewport @@ -99,9 +99,9 @@ function TrackedCornerstoneViewport(props) { }, }); - CornerstoneViewportService.getRenderingEngine().renderViewport( - viewportId - ); + cornerstoneViewportService + .getRenderingEngine() + .renderViewport(viewportId); return; } @@ -112,7 +112,7 @@ function TrackedCornerstoneViewport(props) { }, }); - CornerstoneViewportService.getRenderingEngine().renderViewport(viewportId); + cornerstoneViewportService.getRenderingEngine().renderViewport(viewportId); return () => { annotation.config.style.setViewportToolStyles(viewportId, {}); @@ -177,7 +177,7 @@ function TrackedCornerstoneViewport(props) { setTrackedMeasurementUID(newTrackedMeasurementUID); - MeasurementService.jumpToMeasurement( + measurementService.jumpToMeasurement( viewportIndex, newTrackedMeasurementUID ); @@ -281,8 +281,8 @@ function _getNextMeasurementUID( trackedMeasurementId, trackedMeasurements ) { - const { MeasurementService } = servicesManager.services; - const measurements = MeasurementService.getMeasurements(); + const { measurementService } = servicesManager.services; + const measurements = measurementService.getMeasurements(); const { trackedSeries } = trackedMeasurements.context; diff --git a/extensions/tmtv/package.json b/extensions/tmtv/package.json index 9bb5c9479..a789437a1 100644 --- a/extensions/tmtv/package.json +++ b/extensions/tmtv/package.json @@ -30,7 +30,7 @@ "peerDependencies": { "@ohif/core": "^3.0.0", "@ohif/ui": "^2.0.0", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", diff --git a/extensions/tmtv/src/Panels/PanelPetSUV.tsx b/extensions/tmtv/src/Panels/PanelPetSUV.tsx index b07476f1f..9cb5dbfd6 100644 --- a/extensions/tmtv/src/Panels/PanelPetSUV.tsx +++ b/extensions/tmtv/src/Panels/PanelPetSUV.tsx @@ -25,10 +25,10 @@ const DEFAULT_MEATADATA = { export default function PanelPetSUV({ servicesManager, commandsManager }) { const { t } = useTranslation('PanelSUV'); const { - DisplaySetService, - ToolGroupService, + displaySetService, + toolGroupService, toolbarService, - HangingProtocolService, + hangingProtocolService, } = (servicesManager as ServicesManager).services; const [metadata, setMetadata] = useState(DEFAULT_MEATADATA); const [ptDisplaySet, setPtDisplaySet] = useState(null); @@ -70,8 +70,8 @@ export default function PanelPetSUV({ servicesManager, commandsManager }) { }; useEffect(() => { - const displaySets = DisplaySetService.getActiveDisplaySets(); - const { viewportMatchDetails } = HangingProtocolService.getMatchDetails(); + const displaySets = displaySetService.getActiveDisplaySets(); + const { viewportMatchDetails } = hangingProtocolService.getMatchDetails(); if (!displaySets.length) { return; } @@ -89,8 +89,8 @@ export default function PanelPetSUV({ servicesManager, commandsManager }) { // get the patientMetadata from the StudyInstanceUIDs and update the state useEffect(() => { - const { unsubscribe } = HangingProtocolService.subscribe( - HangingProtocolService.EVENTS.PROTOCOL_CHANGED, + const { unsubscribe } = hangingProtocolService.subscribe( + hangingProtocolService.EVENTS.PROTOCOL_CHANGED, ({ viewportMatchDetails }) => { const displaySetInfo = getMatchingPTDisplaySet(viewportMatchDetails); @@ -112,7 +112,7 @@ export default function PanelPetSUV({ servicesManager, commandsManager }) { throw new Error('No ptDisplaySet found'); } - const toolGroupIds = ToolGroupService.getToolGroupIds(); + const toolGroupIds = toolGroupService.getToolGroupIds(); // Todo: we don't have a proper way to perform a toggle command and update the // state for the toolbar, so here, we manually toggle the toolbar @@ -139,7 +139,7 @@ export default function PanelPetSUV({ servicesManager, commandsManager }) { ); // update the displaySets - DisplaySetService.setDisplaySetMetadataInvalidated( + displaySetService.setDisplaySetMetadataInvalidated( ptDisplaySet.displaySetInstanceUID ); } @@ -238,7 +238,7 @@ export default function PanelPetSUV({ servicesManager, commandsManager }) { PanelPetSUV.propTypes = { servicesManager: PropTypes.shape({ services: PropTypes.shape({ - MeasurementService: PropTypes.shape({ + measurementService: PropTypes.shape({ getMeasurements: PropTypes.func.isRequired, subscribe: PropTypes.func.isRequired, EVENTS: PropTypes.object.isRequired, diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx index 238dcfc0f..0d47b93f5 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/PanelROIThresholdSegmentation.tsx @@ -45,14 +45,14 @@ export default function PanelRoiThresholdSegmentation({ servicesManager, commandsManager, }) { - const { SegmentationService } = servicesManager.services; + const { segmentationService } = servicesManager.services; const { t } = useTranslation('PanelSUV'); const [showConfig, setShowConfig] = useState(false); const [labelmapLoading, setLabelmapLoading] = useState(false); const [selectedSegmentationId, setSelectedSegmentationId] = useState(null); const [segmentations, setSegmentations] = useState(() => - SegmentationService.getSegmentations() + segmentationService.getSegmentations() ); const [config, dispatch] = useReducer(reducer, { @@ -90,7 +90,7 @@ export default function PanelRoiThresholdSegmentation({ const lesionGlyoclysisStats = lesionStats.volume * lesionStats.meanValue; // update segDetails with the suv peak for the active segmentation - const segmentation = SegmentationService.getSegmentation( + const segmentation = segmentationService.getSegmentation( selectedSegmentationId ); @@ -101,7 +101,7 @@ export default function PanelRoiThresholdSegmentation({ }; const notYetUpdatedAtSource = true; - SegmentationService.addOrUpdateSegmentation( + segmentationService.addOrUpdateSegmentation( { ...segmentation, ...Object.assign(segmentation.cachedStats, cachedStats), @@ -118,13 +118,13 @@ export default function PanelRoiThresholdSegmentation({ */ useEffect(() => { // ~~ Subscription - const added = SegmentationService.EVENTS.SEGMENTATION_ADDED; - const updated = SegmentationService.EVENTS.SEGMENTATION_UPDATED; + const added = segmentationService.EVENTS.SEGMENTATION_ADDED; + const updated = segmentationService.EVENTS.SEGMENTATION_UPDATED; const subscriptions = []; [added, updated].forEach(evt => { - const { unsubscribe } = SegmentationService.subscribe(evt, () => { - const segmentations = SegmentationService.getSegmentations(); + const { unsubscribe } = segmentationService.subscribe(evt, () => { + const segmentations = segmentationService.getSegmentations(); setSegmentations(segmentations); }); subscriptions.push(unsubscribe); @@ -138,10 +138,10 @@ export default function PanelRoiThresholdSegmentation({ }, []); useEffect(() => { - const { unsubscribe } = SegmentationService.subscribe( - SegmentationService.EVENTS.SEGMENTATION_REMOVED, + const { unsubscribe } = segmentationService.subscribe( + segmentationService.EVENTS.SEGMENTATION_REMOVED, () => { - const segmentations = SegmentationService.getSegmentations(); + const segmentations = segmentationService.getSegmentations(); setSegmentations(segmentations); if (segmentations.length > 0) { @@ -223,15 +223,15 @@ export default function PanelRoiThresholdSegmentation({ setSelectedSegmentationId(id); }} onToggleVisibility={id => { - SegmentationService.toggleSegmentationVisibility(id); + segmentationService.toggleSegmentationVisibility(id); }} onToggleVisibilityAll={ids => { ids.map(id => { - SegmentationService.toggleSegmentationVisibility(id); + segmentationService.toggleSegmentationVisibility(id); }); }} onDelete={id => { - SegmentationService.remove(id); + segmentationService.remove(id); }} onEdit={id => { segmentationEditHandler({ @@ -285,7 +285,7 @@ PanelRoiThresholdSegmentation.propTypes = { }), servicesManager: PropTypes.shape({ services: PropTypes.shape({ - SegmentationService: PropTypes.shape({ + segmentationService: PropTypes.shape({ getSegmentation: PropTypes.func.isRequired, getSegmentations: PropTypes.func.isRequired, toggleSegmentationVisibility: PropTypes.func.isRequired, diff --git a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/segmentationEditHandler.tsx b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/segmentationEditHandler.tsx index 363127b01..433a9a704 100644 --- a/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/segmentationEditHandler.tsx +++ b/extensions/tmtv/src/Panels/PanelROIThresholdSegmentation/segmentationEditHandler.tsx @@ -2,14 +2,14 @@ import React from 'react'; import { Input, Dialog } from '@ohif/ui'; function segmentationItemEditHandler({ id, servicesManager }) { - const { SegmentationService, UIDialogService } = servicesManager.services; + const { segmentationService, uiDialogService } = servicesManager.services; - const segmentation = SegmentationService.getSegmentation(id); + const segmentation = segmentationService.getSegmentation(id); const onSubmitHandler = ({ action, value }) => { switch (action.id) { case 'save': { - SegmentationService.addOrUpdateSegmentation( + segmentationService.addOrUpdateSegmentation( { ...segmentation, ...value, @@ -18,10 +18,10 @@ function segmentationItemEditHandler({ id, servicesManager }) { ); } } - UIDialogService.dismiss({ id: 'enter-annotation' }); + uiDialogService.dismiss({ id: 'enter-annotation' }); }; - UIDialogService.create({ + uiDialogService.create({ id: 'enter-annotation', centralize: true, isDraggable: false, diff --git a/extensions/tmtv/src/commandsModule.js b/extensions/tmtv/src/commandsModule.js index 4916f99fb..bc4de2c98 100644 --- a/extensions/tmtv/src/commandsModule.js +++ b/extensions/tmtv/src/commandsModule.js @@ -20,13 +20,13 @@ const commandsModule = ({ extensionManager, }) => { const { - ViewportGridService, - UINotificationService, - DisplaySetService, - HangingProtocolService, - ToolGroupService, - CornerstoneViewportService, - SegmentationService, + viewportGridService, + uiNotificationService, + displaySetService, + hangingProtocolService, + toolGroupService, + cornerstoneViewportService, + segmentationService, } = servicesManager.services; const utilityModule = extensionManager.getModuleEntry( @@ -36,14 +36,14 @@ const commandsModule = ({ const { getEnabledElement } = utilityModule.exports; function _getActiveViewportsEnabledElement() { - const { activeViewportIndex } = ViewportGridService.getState(); + const { activeViewportIndex } = viewportGridService.getState(); const { element } = getEnabledElement(activeViewportIndex) || {}; const enabledElement = cs.getEnabledElement(element); return enabledElement; } function _getMatchedViewportsToolGroupIds() { - const { viewportMatchDetails } = HangingProtocolService.getMatchDetails(); + const { viewportMatchDetails } = hangingProtocolService.getMatchDetails(); const toolGroupIds = []; viewportMatchDetails.forEach((value, key) => { const { viewportOptions } = value; @@ -67,7 +67,7 @@ const commandsModule = ({ for (const [viewportIndex, viewportDetails] of viewportMatchDetails) { const { displaySetsInfo } = viewportDetails; const displaySets = displaySetsInfo.map(({ displaySetInstanceUID }) => - DisplaySetService.getDisplaySetByUID(displaySetInstanceUID) + displaySetService.getDisplaySetByUID(displaySetInstanceUID) ); if (!displaySets || displaySets.length === 0) { @@ -121,17 +121,17 @@ const commandsModule = ({ createNewLabelmapFromPT: async () => { // Create a segmentation of the same resolution as the source data // using volumeLoader.createAndCacheDerivedVolume. - const { viewportMatchDetails } = HangingProtocolService.getMatchDetails(); + const { viewportMatchDetails } = hangingProtocolService.getMatchDetails(); const ptDisplaySet = actions.getMatchingPTDisplaySet({ viewportMatchDetails, }); if (!ptDisplaySet) { - UINotificationService.error('No matching PT display set found'); + uiNotificationService.error('No matching PT display set found'); return; } - const segmentationId = await SegmentationService.createSegmentationForDisplaySet( + const segmentationId = await segmentationService.createSegmentationForDisplaySet( ptDisplaySet.displaySetInstanceUID ); @@ -142,14 +142,14 @@ const commandsModule = ({ for (const toolGroupId of toolGroupIds) { const hydrateSegmentation = true; - await SegmentationService.addSegmentationRepresentationToToolGroup( + await segmentationService.addSegmentationRepresentationToToolGroup( toolGroupId, segmentationId, hydrateSegmentation, representationType ); - SegmentationService.setActiveSegmentationForToolGroup( + segmentationService.setActiveSegmentationForToolGroup( segmentationId, toolGroupId ); @@ -161,7 +161,7 @@ const commandsModule = ({ const toolGroupIds = _getMatchedViewportsToolGroupIds(); toolGroupIds.forEach(toolGroupId => { - SegmentationService.setActiveSegmentationForToolGroup( + segmentationService.setActiveSegmentationForToolGroup( segmentationId, toolGroupId ); @@ -193,7 +193,7 @@ const commandsModule = ({ ); if (annotationUIDs.length === 0) { - UINotificationService.show({ + uiNotificationService.show({ title: 'Commands Module', message: 'No ROIThreshold Tool is Selected', type: 'error', @@ -289,7 +289,7 @@ const commandsModule = ({ }, calculateTMTV: ({ segmentations }) => { const labelmaps = segmentations.map(s => - SegmentationService.getLabelmapVolume(s.id) + segmentationService.getLabelmapVolume(s.id) ); if (!labelmaps.length) { @@ -314,7 +314,7 @@ const commandsModule = ({ }, getTotalLesionGlycolysis: ({ segmentations }) => { const labelmapVolumes = segmentations.map(s => - SegmentationService.getLabelmapVolume(s.id) + segmentationService.getLabelmapVolume(s.id) ); let mergedLabelmap; @@ -448,7 +448,7 @@ const commandsModule = ({ }, getSegmentationCSVReport: ({ segmentations }) => { if (!segmentations || !segmentations.length) { - segmentations = SegmentationService.getSegmentations(); + segmentations = segmentationService.getSegmentations(); } let report = {}; @@ -474,7 +474,7 @@ const commandsModule = ({ } }); - const labelmapVolume = SegmentationService.getLabelmapVolume(id); + const labelmapVolume = segmentationService.getLabelmapVolume(id); if (!labelmapVolume) { report[id] = segReport; @@ -484,7 +484,7 @@ const commandsModule = ({ const referencedVolumeId = labelmapVolume.referencedVolumeId; segReport.referencedVolumeId = referencedVolumeId; - const referencedVolume = SegmentationService.getLabelmapVolume( + const referencedVolume = segmentationService.getLabelmapVolume( referencedVolumeId ); @@ -525,8 +525,8 @@ const commandsModule = ({ dicomRTAnnotationExport(annotations); }, setFusionPTColormap: ({ toolGroupId, colormap }) => { - const toolGroup = ToolGroupService.getToolGroup(toolGroupId); - const { viewportMatchDetails } = HangingProtocolService.getMatchDetails(); + const toolGroup = toolGroupService.getToolGroup(toolGroupId); + const { viewportMatchDetails } = hangingProtocolService.getMatchDetails(); const ptDisplaySet = actions.getMatchingPTDisplaySet({ viewportMatchDetails, @@ -540,7 +540,7 @@ const commandsModule = ({ let viewports = []; fusionViewportIds.forEach(viewportId => { - const viewportInfo = CornerstoneViewportService.getViewportInfo( + const viewportInfo = cornerstoneViewportService.getViewportInfo( viewportId ); @@ -552,7 +552,7 @@ const commandsModule = ({ }); viewports.push( - CornerstoneViewportService.getCornerstoneViewport(viewportId) + cornerstoneViewportService.getCornerstoneViewport(viewportId) ); }); diff --git a/extensions/tmtv/src/init.js b/extensions/tmtv/src/init.js index 72fa9af88..3c694cf37 100644 --- a/extensions/tmtv/src/init.js +++ b/extensions/tmtv/src/init.js @@ -16,25 +16,25 @@ const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1'; */ export default function init({ servicesManager, extensionManager }) { const { - MeasurementService, - DisplaySetService, - CornerstoneViewportService, + measurementService, + displaySetService, + cornerstoneViewportService, } = servicesManager.services; addTool(RectangleROIStartEndThresholdTool); const { RectangleROIStartEndThreshold } = measurementServiceMappingsFactory( - MeasurementService, - DisplaySetService, - CornerstoneViewportService + measurementService, + displaySetService, + cornerstoneViewportService ); - const csTools3DVer1MeasurementSource = MeasurementService.getSource( + const csTools3DVer1MeasurementSource = measurementService.getSource( CORNERSTONE_3D_TOOLS_SOURCE_NAME, CORNERSTONE_3D_TOOLS_SOURCE_VERSION ); - MeasurementService.addMapping( + measurementService.addMapping( csTools3DVer1MeasurementSource, 'RectangleROIStartEndThreshold', RectangleROIStartEndThreshold.matchingCriteria, diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/RectangleROIStartEndThreshold.js b/extensions/tmtv/src/utils/measurementServiceMappings/RectangleROIStartEndThreshold.js index 9508c2532..5d2100aff 100644 --- a/extensions/tmtv/src/utils/measurementServiceMappings/RectangleROIStartEndThreshold.js +++ b/extensions/tmtv/src/utils/measurementServiceMappings/RectangleROIStartEndThreshold.js @@ -12,8 +12,8 @@ const RectangleROIStartEndThreshold = { */ toMeasurement: ( csToolsEventDetail, - DisplaySetService, - CornerstoneViewportService + displaySetService, + cornerstoneViewportService ) => { const { annotation, viewportId } = csToolsEventDetail; const { metadata, data, annotationUID } = annotation; @@ -36,19 +36,19 @@ const RectangleROIStartEndThreshold = { StudyInstanceUID, } = getSOPInstanceAttributes( referencedImageId, - CornerstoneViewportService, + cornerstoneViewportService, viewportId ); let displaySet; if (SOPInstanceUID) { - displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID( + displaySet = displaySetService.getDisplaySetForSOPInstanceUID( SOPInstanceUID, SeriesInstanceUID ); } else { - displaySet = DisplaySetService.getDisplaySetsForSeries(SeriesInstanceUID); + displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID); } const { cachedStats } = data; diff --git a/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js b/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js index ec69721ef..f99b956a1 100644 --- a/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js +++ b/extensions/tmtv/src/utils/measurementServiceMappings/measurementServiceMappingsFactory.js @@ -1,9 +1,9 @@ import RectangleROIStartEndThreshold from './RectangleROIStartEndThreshold'; const measurementServiceMappingsFactory = ( - MeasurementService, - DisplaySetService, - CornerstoneViewportService + measurementService, + displaySetService, + cornerstoneViewportService ) => { return { RectangleROIStartEndThreshold: { @@ -11,12 +11,12 @@ const measurementServiceMappingsFactory = ( toMeasurement: csToolsAnnotation => RectangleROIStartEndThreshold.toMeasurement( csToolsAnnotation, - DisplaySetService, - CornerstoneViewportService + displaySetService, + cornerstoneViewportService ), matchingCriteria: [ { - valueType: MeasurementService.VALUE_TYPES.ROI_THRESHOLD_MANUAL, + valueType: measurementService.VALUE_TYPES.ROI_THRESHOLD_MANUAL, }, ], }, diff --git a/modes/basic-dev-mode/src/index.js b/modes/basic-dev-mode/src/index.js index 45778fde6..204b7b612 100644 --- a/modes/basic-dev-mode/src/index.js +++ b/modes/basic-dev-mode/src/index.js @@ -53,7 +53,7 @@ function modeFactory({ modeConfiguration }) { * Lifecycle hooks */ onModeEnter: ({ servicesManager, extensionManager }) => { - const { toolbarService, ToolGroupService } = servicesManager.services; + const { toolbarService, toolGroupService } = servicesManager.services; const utilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone.utilityModule.tools' ); @@ -89,7 +89,7 @@ function modeFactory({ modeConfiguration }) { }; const toolGroupId = 'default'; - ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, configs); + toolGroupService.createToolGroupAndAddTools(toolGroupId, tools, configs); let unsubscribe; @@ -116,8 +116,8 @@ function modeFactory({ modeConfiguration }) { // Since we only have one viewport for the basic cs3d mode and it has // only one hanging protocol, we can just use the first viewport - ({ unsubscribe } = ToolGroupService.subscribe( - ToolGroupService.EVENTS.VIEWPORT_ADDED, + ({ unsubscribe } = toolGroupService.subscribe( + toolGroupService.EVENTS.VIEWPORT_ADDED, activateTool )); @@ -134,13 +134,13 @@ function modeFactory({ modeConfiguration }) { }, onModeExit: ({ servicesManager }) => { const { - ToolGroupService, - MeasurementService, + toolGroupService, + measurementService, toolbarService, } = servicesManager.services; toolbarService.reset(); - ToolGroupService.destroy(); + toolGroupService.destroy(); }, validationTags: { study: [], diff --git a/modes/basic-test-mode/src/index.js b/modes/basic-test-mode/src/index.js index b932ff574..7a35b70b2 100644 --- a/modes/basic-test-mode/src/index.js +++ b/modes/basic-test-mode/src/index.js @@ -68,15 +68,15 @@ function modeFactory() { */ onModeEnter: ({ servicesManager, extensionManager, commandsManager }) => { const { - MeasurementService, + measurementService, toolbarService, - ToolGroupService, + toolGroupService, } = servicesManager.services; - MeasurementService.clearMeasurements(); + measurementService.clearMeasurements(); // Init Default and SR ToolGroups - initToolGroups(extensionManager, ToolGroupService, commandsManager); + initToolGroups(extensionManager, toolGroupService, commandsManager); let unsubscribe; @@ -103,8 +103,8 @@ function modeFactory() { // Since we only have one viewport for the basic cs3d mode and it has // only one hanging protocol, we can just use the first viewport - ({ unsubscribe } = ToolGroupService.subscribe( - ToolGroupService.EVENTS.VIEWPORT_ADDED, + ({ unsubscribe } = toolGroupService.subscribe( + toolGroupService.EVENTS.VIEWPORT_ADDED, activateTool )); @@ -124,18 +124,18 @@ function modeFactory() { }, onModeExit: ({ servicesManager }) => { const { - ToolGroupService, - SyncGroupService, + toolGroupService, + syncGroupService, toolbarService, - SegmentationService, - CornerstoneViewportService, + segmentationService, + cornerstoneViewportService, } = servicesManager.services; toolbarService.reset(); - ToolGroupService.destroy(); - SyncGroupService.destroy(); - SegmentationService.destroy(); - CornerstoneViewportService.destroy(); + toolGroupService.destroy(); + syncGroupService.destroy(); + segmentationService.destroy(); + cornerstoneViewportService.destroy(); }, validationTags: { study: [], diff --git a/modes/basic-test-mode/src/initToolGroups.js b/modes/basic-test-mode/src/initToolGroups.js index 74057f146..105b1a2f8 100644 --- a/modes/basic-test-mode/src/initToolGroups.js +++ b/modes/basic-test-mode/src/initToolGroups.js @@ -1,6 +1,6 @@ function initDefaultToolGroup( extensionManager, - ToolGroupService, + toolGroupService, commandsManager, toolGroupId ) { @@ -60,10 +60,10 @@ function initDefaultToolGroup( }, }; - ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); + toolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); } -function initSRToolGroup(extensionManager, ToolGroupService, commandsManager) { +function initSRToolGroup(extensionManager, toolGroupService, commandsManager) { const SRUtilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone-dicom-sr.utilityModule.tools' ); @@ -138,10 +138,10 @@ function initSRToolGroup(extensionManager, ToolGroupService, commandsManager) { }; const toolGroupId = 'SRToolGroup'; - ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); + toolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); } -function initMPRToolGroup(extensionManager, ToolGroupService, commandsManager) { +function initMPRToolGroup(extensionManager, toolGroupService, commandsManager) { const utilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone.utilityModule.tools' ); @@ -208,18 +208,18 @@ function initMPRToolGroup(extensionManager, ToolGroupService, commandsManager) { }, }; - ToolGroupService.createToolGroupAndAddTools('mpr', tools, toolsConfig); + toolGroupService.createToolGroupAndAddTools('mpr', tools, toolsConfig); } -function initToolGroups(extensionManager, ToolGroupService, commandsManager) { +function initToolGroups(extensionManager, toolGroupService, commandsManager) { initDefaultToolGroup( extensionManager, - ToolGroupService, + toolGroupService, commandsManager, 'default' ); - initSRToolGroup(extensionManager, ToolGroupService, commandsManager); - initMPRToolGroup(extensionManager, ToolGroupService, commandsManager); + initSRToolGroup(extensionManager, toolGroupService, commandsManager); + initMPRToolGroup(extensionManager, toolGroupService, commandsManager); } export default initToolGroups; diff --git a/modes/longitudinal/src/index.js b/modes/longitudinal/src/index.js index eb31d1600..09c6ec146 100644 --- a/modes/longitudinal/src/index.js +++ b/modes/longitudinal/src/index.js @@ -68,15 +68,15 @@ function modeFactory() { */ onModeEnter: ({ servicesManager, extensionManager, commandsManager }) => { const { - MeasurementService, + measurementService, toolbarService, - ToolGroupService, + toolGroupService, } = servicesManager.services; - MeasurementService.clearMeasurements(); + measurementService.clearMeasurements(); // Init Default and SR ToolGroups - initToolGroups(extensionManager, ToolGroupService, commandsManager); + initToolGroups(extensionManager, toolGroupService, commandsManager); let unsubscribe; @@ -103,8 +103,8 @@ function modeFactory() { // Since we only have one viewport for the basic cs3d mode and it has // only one hanging protocol, we can just use the first viewport - ({ unsubscribe } = ToolGroupService.subscribe( - ToolGroupService.EVENTS.VIEWPORT_ADDED, + ({ unsubscribe } = toolGroupService.subscribe( + toolGroupService.EVENTS.VIEWPORT_ADDED, activateTool )); @@ -124,18 +124,18 @@ function modeFactory() { }, onModeExit: ({ servicesManager }) => { const { - ToolGroupService, - SyncGroupService, + toolGroupService, + syncGroupService, toolbarService, - SegmentationService, - CornerstoneViewportService, + segmentationService, + cornerstoneViewportService, } = servicesManager.services; toolbarService.reset(); - ToolGroupService.destroy(); - SyncGroupService.destroy(); - SegmentationService.destroy(); - CornerstoneViewportService.destroy(); + toolGroupService.destroy(); + syncGroupService.destroy(); + segmentationService.destroy(); + cornerstoneViewportService.destroy(); }, validationTags: { study: [], diff --git a/modes/longitudinal/src/initToolGroups.js b/modes/longitudinal/src/initToolGroups.js index 74057f146..105b1a2f8 100644 --- a/modes/longitudinal/src/initToolGroups.js +++ b/modes/longitudinal/src/initToolGroups.js @@ -1,6 +1,6 @@ function initDefaultToolGroup( extensionManager, - ToolGroupService, + toolGroupService, commandsManager, toolGroupId ) { @@ -60,10 +60,10 @@ function initDefaultToolGroup( }, }; - ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); + toolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); } -function initSRToolGroup(extensionManager, ToolGroupService, commandsManager) { +function initSRToolGroup(extensionManager, toolGroupService, commandsManager) { const SRUtilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone-dicom-sr.utilityModule.tools' ); @@ -138,10 +138,10 @@ function initSRToolGroup(extensionManager, ToolGroupService, commandsManager) { }; const toolGroupId = 'SRToolGroup'; - ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); + toolGroupService.createToolGroupAndAddTools(toolGroupId, tools, toolsConfig); } -function initMPRToolGroup(extensionManager, ToolGroupService, commandsManager) { +function initMPRToolGroup(extensionManager, toolGroupService, commandsManager) { const utilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone.utilityModule.tools' ); @@ -208,18 +208,18 @@ function initMPRToolGroup(extensionManager, ToolGroupService, commandsManager) { }, }; - ToolGroupService.createToolGroupAndAddTools('mpr', tools, toolsConfig); + toolGroupService.createToolGroupAndAddTools('mpr', tools, toolsConfig); } -function initToolGroups(extensionManager, ToolGroupService, commandsManager) { +function initToolGroups(extensionManager, toolGroupService, commandsManager) { initDefaultToolGroup( extensionManager, - ToolGroupService, + toolGroupService, commandsManager, 'default' ); - initSRToolGroup(extensionManager, ToolGroupService, commandsManager); - initMPRToolGroup(extensionManager, ToolGroupService, commandsManager); + initSRToolGroup(extensionManager, toolGroupService, commandsManager); + initMPRToolGroup(extensionManager, toolGroupService, commandsManager); } export default initToolGroups; diff --git a/modes/tmtv/src/index.js b/modes/tmtv/src/index.js index e6bb5ab9a..d9a4e885a 100644 --- a/modes/tmtv/src/index.js +++ b/modes/tmtv/src/index.js @@ -43,9 +43,9 @@ function modeFactory({ modeConfiguration }) { onModeEnter: ({ servicesManager, extensionManager, commandsManager }) => { const { toolbarService, - ToolGroupService, - HangingProtocolService, - DisplaySetService, + toolGroupService, + hangingProtocolService, + displaySetService, } = servicesManager.services; const utilityModule = extensionManager.getModuleEntry( @@ -55,7 +55,7 @@ function modeFactory({ modeConfiguration }) { const { toolNames, Enums } = utilityModule.exports; // Init Default and SR ToolGroups - initToolGroups(toolNames, Enums, ToolGroupService, commandsManager); + initToolGroups(toolNames, Enums, toolGroupService, commandsManager); const setWindowLevelActive = () => { toolbarService.recordInteraction({ @@ -91,28 +91,28 @@ function modeFactory({ modeConfiguration }) { }); }; - const { unsubscribe } = ToolGroupService.subscribe( - ToolGroupService.EVENTS.VIEWPORT_ADDED, + const { unsubscribe } = toolGroupService.subscribe( + toolGroupService.EVENTS.VIEWPORT_ADDED, () => { // For fusion toolGroup we need to add the volumeIds for the crosshairs // since in the fusion viewport we don't want both PT and CT to render MIP // when slabThickness is modified const { displaySetMatchDetails, - } = HangingProtocolService.getMatchDetails(); + } = hangingProtocolService.getMatchDetails(); setCrosshairsConfiguration( displaySetMatchDetails, toolNames, - ToolGroupService, - DisplaySetService + toolGroupService, + displaySetService ); setFusionActiveVolume( displaySetMatchDetails, toolNames, - ToolGroupService, - DisplaySetService + toolGroupService, + displaySetService ); setWindowLevelActive(); @@ -134,19 +134,19 @@ function modeFactory({ modeConfiguration }) { }, onModeExit: ({ servicesManager }) => { const { - ToolGroupService, - SyncGroupService, + toolGroupService, + syncGroupService, toolbarService, - SegmentationService, - CornerstoneViewportService, + segmentationService, + cornerstoneViewportService, } = servicesManager.services; unsubscriptions.forEach(unsubscribe => unsubscribe()); toolbarService.reset(); - ToolGroupService.destroy(); - SyncGroupService.destroy(); - SegmentationService.destroy(); - CornerstoneViewportService.destroy(); + toolGroupService.destroy(); + syncGroupService.destroy(); + segmentationService.destroy(); + cornerstoneViewportService.destroy(); }, validationTags: { study: [], diff --git a/modes/tmtv/src/initToolGroups.js b/modes/tmtv/src/initToolGroups.js index 3167d7528..21e14e126 100644 --- a/modes/tmtv/src/initToolGroups.js +++ b/modes/tmtv/src/initToolGroups.js @@ -7,7 +7,7 @@ export const toolGroupIds = { // MPR: 'mpr', }; -function _initToolGroups(toolNames, Enums, ToolGroupService, commandsManager) { +function _initToolGroups(toolNames, Enums, toolGroupService, commandsManager) { const tools = { active: [ { @@ -65,12 +65,12 @@ function _initToolGroups(toolNames, Enums, ToolGroupService, commandsManager) { }, }; - ToolGroupService.createToolGroupAndAddTools( + toolGroupService.createToolGroupAndAddTools( toolGroupIds.CT, tools, toolsConfig ); - ToolGroupService.createToolGroupAndAddTools( + toolGroupService.createToolGroupAndAddTools( toolGroupIds.PT, { active: tools.active, @@ -83,12 +83,12 @@ function _initToolGroups(toolNames, Enums, ToolGroupService, commandsManager) { }, toolsConfig ); - ToolGroupService.createToolGroupAndAddTools( + toolGroupService.createToolGroupAndAddTools( toolGroupIds.Fusion, tools, toolsConfig ); - ToolGroupService.createToolGroupAndAddTools( + toolGroupService.createToolGroupAndAddTools( toolGroupIds.default, tools, toolsConfig @@ -116,14 +116,14 @@ function _initToolGroups(toolNames, Enums, ToolGroupService, commandsManager) { }, }; - ToolGroupService.createToolGroupAndAddTools( + toolGroupService.createToolGroupAndAddTools( toolGroupIds.MIP, mipTools, mipToolsConfig ); } -function initMPRToolGroup(toolNames, Enums, ToolGroupService, commandsManager) { +function initMPRToolGroup(toolNames, Enums, toolGroupService, commandsManager) { const tools = { active: [ { @@ -181,12 +181,12 @@ function initMPRToolGroup(toolNames, Enums, ToolGroupService, commandsManager) { }, }; - ToolGroupService.createToolGroupAndAddTools('mpr', tools, toolsConfig); + toolGroupService.createToolGroupAndAddTools('mpr', tools, toolsConfig); } -function initToolGroups(toolNames, Enums, ToolGroupService, commandsManager) { - _initToolGroups(toolNames, Enums, ToolGroupService, commandsManager); - // initMPRToolGroup(toolNames, Enums, ToolGroupService, commandsManager); +function initToolGroups(toolNames, Enums, toolGroupService, commandsManager) { + _initToolGroups(toolNames, Enums, toolGroupService, commandsManager); + // initMPRToolGroup(toolNames, Enums, toolGroupService, commandsManager); } export default initToolGroups; diff --git a/modes/tmtv/src/utils/setCrosshairsConfiguration.js b/modes/tmtv/src/utils/setCrosshairsConfiguration.js index 3d83fd14a..cc6b4f57d 100644 --- a/modes/tmtv/src/utils/setCrosshairsConfiguration.js +++ b/modes/tmtv/src/utils/setCrosshairsConfiguration.js @@ -3,8 +3,8 @@ import { toolGroupIds } from '../initToolGroups'; export default function setCrosshairsConfiguration( matches, toolNames, - ToolGroupService, - DisplaySetService + toolGroupService, + displaySetService ) { const matchDetails = matches.get('ctDisplaySet'); @@ -13,11 +13,11 @@ export default function setCrosshairsConfiguration( } const { SeriesInstanceUID } = matchDetails; - const displaySets = DisplaySetService.getDisplaySetsForSeries( + const displaySets = displaySetService.getDisplaySetsForSeries( SeriesInstanceUID ); - const toolConfig = ToolGroupService.getToolConfiguration( + const toolConfig = toolGroupService.getToolConfiguration( toolGroupIds.Fusion, toolNames.Crosshairs ); @@ -27,7 +27,7 @@ export default function setCrosshairsConfiguration( filterActorUIDsToSetSlabThickness: [displaySets[0].displaySetInstanceUID], }; - ToolGroupService.setToolConfiguration( + toolGroupService.setToolConfiguration( toolGroupIds.Fusion, toolNames.Crosshairs, crosshairsConfig diff --git a/modes/tmtv/src/utils/setFusionActiveVolume.js b/modes/tmtv/src/utils/setFusionActiveVolume.js index 44790eebe..ed7b1f6a9 100644 --- a/modes/tmtv/src/utils/setFusionActiveVolume.js +++ b/modes/tmtv/src/utils/setFusionActiveVolume.js @@ -3,8 +3,8 @@ import { toolGroupIds } from '../initToolGroups'; export default function setFusionActiveVolume( matches, toolNames, - ToolGroupService, - DisplaySetService + toolGroupService, + displaySetService ) { const matchDetails = matches.get('ptDisplaySet'); @@ -14,7 +14,7 @@ export default function setFusionActiveVolume( const { SeriesInstanceUID } = matchDetails; - const displaySets = DisplaySetService.getDisplaySetsForSeries( + const displaySets = displaySetService.getDisplaySetsForSeries( SeriesInstanceUID ); @@ -22,12 +22,12 @@ export default function setFusionActiveVolume( return; } - const wlToolConfig = ToolGroupService.getToolConfiguration( + const wlToolConfig = toolGroupService.getToolConfiguration( toolGroupIds.Fusion, toolNames.WindowLevel ); - const ellipticalToolConfig = ToolGroupService.getToolConfiguration( + const ellipticalToolConfig = toolGroupService.getToolConfiguration( toolGroupIds.Fusion, toolNames.EllipticalROI ); @@ -45,13 +45,13 @@ export default function setFusionActiveVolume( volumeId, }; - ToolGroupService.setToolConfiguration( + toolGroupService.setToolConfiguration( toolGroupIds.Fusion, toolNames.WindowLevel, windowLevelConfig ); - ToolGroupService.setToolConfiguration( + toolGroupService.setToolConfiguration( toolGroupIds.Fusion, toolNames.EllipticalROI, ellipticalROIConfig diff --git a/platform/core/package.json b/platform/core/package.json index 6fba39630..811a389b1 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@babel/runtime": "7.16.3", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "dicomweb-client": "^0.6.0", "isomorphic-base64": "^1.0.2", "lodash.merge": "^4.6.1", diff --git a/platform/core/src/classes/HotkeysManager.ts b/platform/core/src/classes/HotkeysManager.ts index 03cafd55e..ddb2757ec 100644 --- a/platform/core/src/classes/HotkeysManager.ts +++ b/platform/core/src/classes/HotkeysManager.ts @@ -76,8 +76,8 @@ export class HotkeysManager { } definitions.forEach(definition => this.registerHotkeys(definition)); } catch (error) { - const { UINotificationService } = this._servicesManager.services; - UINotificationService.show({ + const { uiNotificationService, } = this._servicesManager.services; + uiNotificationService.show({ title: 'Hotkeys Manager', message: 'Error while setting hotkeys', type: 'error', diff --git a/platform/core/src/extensions/ExtensionManager.ts b/platform/core/src/extensions/ExtensionManager.ts index 81a4a54cd..8a3f1ebdf 100644 --- a/platform/core/src/extensions/ExtensionManager.ts +++ b/platform/core/src/extensions/ExtensionManager.ts @@ -347,11 +347,11 @@ export default class ExtensionManager { }; _initHangingProtocolsModule = (extensionModule, extensionId) => { - const { HangingProtocolService } = this._servicesManager.services; + const { hangingProtocolService } = this._servicesManager.services; extensionModule.forEach(({ id, protocol }) => { if (protocol) { // Only auto-register if protocol specified, otherwise let mode register - HangingProtocolService.addProtocol(id, protocol); + hangingProtocolService.addProtocol(id, protocol); } }); }; diff --git a/platform/core/src/services/HangingProtocolService/HangingProtocolService.test.js b/platform/core/src/services/HangingProtocolService/HangingProtocolService.test.js index 160410bd3..19fbf8906 100644 --- a/platform/core/src/services/HangingProtocolService/HangingProtocolService.test.js +++ b/platform/core/src/services/HangingProtocolService/HangingProtocolService.test.js @@ -1,4 +1,4 @@ -import HangingProtocolServiceClass from './HangingProtocolService'; +import HangingProtocolService from './HangingProtocolService'; const testProtocol = { id: 'test', @@ -149,7 +149,10 @@ describe('HangingProtocolService', () => { }, }, }; - const hps = new HangingProtocolServiceClass(commandsManager, servicesManager); + const hangingProtocolService = new HangingProtocolService( + commandsManager, + servicesManager + ); let initialScaling; afterEach(() => { @@ -158,36 +161,42 @@ describe('HangingProtocolService', () => { describe('with a static protocol', () => { beforeAll(() => { - hps.addProtocol(testProtocol.id, testProtocol); + hangingProtocolService.addProtocol(testProtocol.id, testProtocol); }); it('has one protocol', () => { - expect(hps.getProtocols().length).toBe(1); + expect(hangingProtocolService.getProtocols().length).toBe(1); }); describe('run', () => { it('matches best image match', () => { - checkHpsBestMatch(hps); + checkHpsBestMatch(hangingProtocolService); }); }); }); describe('with protocol generator', () => { beforeAll(() => { - hps.addProtocol(testProtocol.id, testProtocolGenerator); + hangingProtocolService.addProtocol( + testProtocol.id, + testProtocolGenerator + ); }); it('has one protocol', () => { - expect(hps.getProtocols().length).toBe(1); + expect(hangingProtocolService.getProtocols().length).toBe(1); }); describe('run', () => { it('matches best image match', () => { - checkHpsBestMatch(hps); + checkHpsBestMatch(hangingProtocolService); }); it('uses services manager', () => { - hps.run({ studies: [studyMatch], displaySets: studyMatchDisplaySets }); + hangingProtocolService.run({ + studies: [studyMatch], + displaySets: studyMatchDisplaySets, + }); expect(mockedFunction).toHaveBeenCalledTimes(1); }); }); diff --git a/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts b/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts index bca69e2c9..1539529bb 100644 --- a/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts +++ b/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts @@ -866,13 +866,13 @@ class HangingProtocolService { protocol: Protocol, options: HangingProtocol.SetProtocolOptions ) { - const { DisplaySetService } = this._servicesManager.services; + const { displaySetService } = this._servicesManager.services; if (options.displaySetInstanceUIDs) { this._updateGlobalMatchByOptions( options as HangingProtocol.GlobalProtocolOptions, protocol, - DisplaySetService + displaySetService ); return; } @@ -893,7 +893,7 @@ class HangingProtocolService { options: HangingProtocol.ViewportSpecificProtocolOptions, protocol: HangingProtocol.Protocol ) { - const { DisplaySetService } = this._servicesManager.services; + const { displaySetService } = this._servicesManager.services; const { displaySetSelectors = {} } = protocol; const protocolViewports = protocol.stages[this.stage].viewports; @@ -914,7 +914,7 @@ class HangingProtocolService { displaySetAndViewportOptions.displaySetInstanceUIDs.forEach( (displaySetInstanceUID, index) => { - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -968,7 +968,7 @@ class HangingProtocolService { displaySetAndViewportOptions?.displaySetInstanceUIDs?.forEach( (displaySetInstanceUID, index) => { - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -999,7 +999,7 @@ class HangingProtocolService { protocolViewport: HangingProtocol.Viewport, displaySetSelectors: Record ) { - const { DisplaySetService } = this._servicesManager.services; + const { displaySetService } = this._servicesManager.services; const protocolViewportDisplaySets = protocolViewport.displaySets; const numDisplaySetsToSet = displaySetAndViewportOptions.displaySetInstanceUIDs.length; @@ -1015,7 +1015,7 @@ class HangingProtocolService { displaySetAndViewportOptions.displaySetInstanceUIDs.forEach( displaySetInstanceUID => { - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -1036,7 +1036,7 @@ class HangingProtocolService { private _updateGlobalMatchByOptions( options: HangingProtocol.GlobalProtocolOptions, protocol: Protocol, - DisplaySetService: any + displaySetService: any ) { const { displaySetSelectors = {} } = protocol; const protocolViewports = protocol.stages[this.stage].viewports; @@ -1045,7 +1045,7 @@ class HangingProtocolService { // we need to check each displaySetInstanceUIDs to see if it satisfies the // seriesMatching criteria options.displaySetInstanceUIDs.forEach(displaySetInstanceUID => { - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -1076,7 +1076,7 @@ class HangingProtocolService { Array.from(newDisplaySetIds).forEach((displaySetId, index) => { const displaySetInstanceUID = options.displaySetInstanceUIDs[index]; - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -1115,7 +1115,7 @@ class HangingProtocolService { }); remainingDisplaySetMatches.forEach(({ displaySetInstanceUID }) => { - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); @@ -1157,13 +1157,13 @@ class HangingProtocolService { } _validateOptions(options: HangingProtocol.SetProtocolOptions) { - const { DisplaySetService } = this._servicesManager.services; + const { displaySetService } = this._servicesManager.services; if (options.displaySetInstanceUIDs) { options = options as HangingProtocol.GlobalProtocolOptions; options.displaySetInstanceUIDs.forEach(displaySetInstanceUID => { - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( displaySetInstanceUID ); diff --git a/platform/docs/docs/platform/services/index.md b/platform/docs/docs/platform/services/index.md index c2190e9a9..c4a11b1ed 100644 --- a/platform/docs/docs/platform/services/index.md +++ b/platform/docs/docs/platform/services/index.md @@ -62,12 +62,12 @@ The following services is available in the `OHIF-v3`. - SegmentationService (NEW) + segmentationService (NEW) Segmentation Service - SegmentationService + segmentationService diff --git a/platform/viewer/package.json b/platform/viewer/package.json index 48ef595d9..a0f1e0f6e 100644 --- a/platform/viewer/package.json +++ b/platform/viewer/package.json @@ -65,7 +65,7 @@ "cornerstone-math": "^0.1.9", "cornerstone-wado-image-loader": "^4.2.1", "dayjs": "^1.11.6", - "dcmjs": "^0.28.3", + "dcmjs": "0.29.4", "detect-gpu": "^4.0.16", "dicom-parser": "^1.8.9", "dotenv-webpack": "^1.7.0", diff --git a/platform/viewer/src/components/ViewportGrid.tsx b/platform/viewer/src/components/ViewportGrid.tsx index 66d7e8e18..52a4eb62a 100644 --- a/platform/viewer/src/components/ViewportGrid.tsx +++ b/platform/viewer/src/components/ViewportGrid.tsx @@ -30,10 +30,10 @@ function ViewerViewportGrid(props) { // TODO -> Need some way of selecting which displaySets hit the viewports. const { - DisplaySetService, - MeasurementService, - HangingProtocolService, - UINotificationService, + displaySetService, + measurementService, + hangingProtocolService, + uiNotificationService, } = servicesManager.services; /** @@ -48,7 +48,7 @@ function ViewerViewportGrid(props) { const { viewportMatchDetails, hpAlreadyApplied, - } = HangingProtocolService.getMatchDetails(); + } = hangingProtocolService.getMatchDetails(); if (!viewportMatchDetails.size) { return; @@ -104,7 +104,7 @@ function ViewerViewportGrid(props) { const suppressEvent = true; const applied = true; - HangingProtocolService.setHangingProtocolAppliedForViewport( + hangingProtocolService.setHangingProtocolAppliedForViewport( viewportIndex, applied, suppressEvent @@ -119,13 +119,13 @@ function ViewerViewportGrid(props) { (viewportIndex, displaySetInstanceUID) => { let updatedViewports = []; try { - updatedViewports = HangingProtocolService.getViewportsRequireUpdate( + updatedViewports = hangingProtocolService.getViewportsRequireUpdate( viewportIndex, displaySetInstanceUID ); } catch (error) { console.warn(error); - UINotificationService.show({ + uiNotificationService.show({ title: 'Drag and Drop', message: 'The selected display sets could not be added to the viewport due to a mismatch in the Hanging Protocol rules.', @@ -136,18 +136,18 @@ function ViewerViewportGrid(props) { return updatedViewports; }, - [HangingProtocolService, UINotificationService] + [hangingProtocolService, uiNotificationService] ); useEffect(() => { - const displaySets = DisplaySetService.getActiveDisplaySets(); + const displaySets = displaySetService.getActiveDisplaySets(); updateDisplaySetsForViewports(displaySets); }, [numRows, numCols]); // Layout change based on hanging protocols useEffect(() => { - const { unsubscribe } = HangingProtocolService.subscribe( - HangingProtocolService.EVENTS.NEW_LAYOUT, + const { unsubscribe } = hangingProtocolService.subscribe( + hangingProtocolService.EVENTS.NEW_LAYOUT, ({ layoutType, numRows, numCols, layoutOptions }) => { viewportGridService.setLayout({ numRows, @@ -165,10 +165,10 @@ function ViewerViewportGrid(props) { // Using Hanging protocol engine to match the displaySets useEffect(() => { - const { unsubscribe } = HangingProtocolService.subscribe( - HangingProtocolService.EVENTS.PROTOCOL_CHANGED, + const { unsubscribe } = hangingProtocolService.subscribe( + hangingProtocolService.EVENTS.PROTOCOL_CHANGED, () => { - const displaySets = DisplaySetService.getActiveDisplaySets(); + const displaySets = displaySetService.getActiveDisplaySets(); updateDisplaySetsForViewports(displaySets); } ); @@ -179,8 +179,8 @@ function ViewerViewportGrid(props) { }, [viewports]); useEffect(() => { - const { unsubscribe } = MeasurementService.subscribe( - MeasurementService.EVENTS.JUMP_TO_MEASUREMENT, + const { unsubscribe } = measurementService.subscribe( + measurementService.EVENTS.JUMP_TO_MEASUREMENT, ({ viewportIndex, measurement }) => { const { displaySetInstanceUID: referencedDisplaySetInstanceUID, @@ -198,7 +198,7 @@ function ViewerViewportGrid(props) { } } - const displaySet = DisplaySetService.getDisplaySetByUID( + const displaySet = displaySetService.getDisplaySetByUID( referencedDisplaySetInstanceUID ); @@ -335,7 +335,7 @@ function ViewerViewportGrid(props) { const displaySets = displaySetInstanceUIDsToUse.map( displaySetInstanceUID => { return ( - DisplaySetService.getDisplaySetByUID(displaySetInstanceUID) || {} + displaySetService.getDisplaySetByUID(displaySetInstanceUID) || {} ); } ); @@ -343,7 +343,7 @@ function ViewerViewportGrid(props) { const ViewportComponent = _getViewportComponent( displaySets, viewportComponents, - UINotificationService + uiNotificationService ); // look inside displaySets to see if they need reRendering @@ -403,7 +403,7 @@ function ViewerViewportGrid(props) { }, [viewports, activeViewportIndex, viewportComponents, dataSource]); /** - * Loading indicator until numCols and numRows are gotten from the HangingProtocolService + * Loading indicator until numCols and numRows are gotten from the hangingProtocolService */ if (!numRows || !numCols) { return null; @@ -428,7 +428,7 @@ ViewerViewportGrid.defaultProps = { function _getViewportComponent( displaySets, viewportComponents, - UINotificationService + uiNotificationService ) { if (!displaySets || !displaySets.length) { return EmptyViewport; @@ -453,7 +453,7 @@ function _getViewportComponent( } console.log("Can't show displaySet", SOPClassHandlerId, displaySets[0]); - UINotificationService.show({ + uiNotificationService.show({ title: 'Viewport Not Supported Yet', message: `Cannot display SOPClassId of ${displaySets[0].SOPClassUID} yet`, type: 'error', diff --git a/platform/viewer/src/routes/Mode/Mode.tsx b/platform/viewer/src/routes/Mode/Mode.tsx index 347114bd8..86839e27c 100644 --- a/platform/viewer/src/routes/Mode/Mode.tsx +++ b/platform/viewer/src/routes/Mode/Mode.tsx @@ -23,8 +23,8 @@ function defaultRouteInit( hangingProtocol ) { const { - DisplaySetService, - HangingProtocolService, + displaySetService, + hangingProtocolService, } = servicesManager.services; const unsubscriptions = []; @@ -38,7 +38,7 @@ function defaultRouteInit( SeriesInstanceUID ); - DisplaySetService.makeDisplaySets(seriesMetadata.instances, madeInClient); + displaySetService.makeDisplaySets(seriesMetadata.instances, madeInClient); } ); @@ -58,7 +58,7 @@ function defaultRouteInit( // until we run the hanging protocol matching service. Promise.allSettled(allRetrieves).then(() => { - const displaySets = DisplaySetService.getActiveDisplaySets(); + const displaySets = displaySetService.getActiveDisplaySets(); if (!displaySets || !displaySets.length) { return; @@ -84,7 +84,7 @@ function defaultRouteInit( // run the hanging protocol matching on the displaySets with the predefined // hanging protocol in the mode configuration - HangingProtocolService.run( + hangingProtocolService.run( { studies, activeStudy, displaySets }, hangingProtocol ); @@ -119,8 +119,8 @@ export default function ModeRoute({ } const { - DisplaySetService, - HangingProtocolService: hangingProtocolService, + displaySetService, + hangingProtocolService, } = servicesManager.services; const { extensions, sopClassHandlers, hotkeys, hangingProtocol } = mode; @@ -242,7 +242,7 @@ export default function ModeRoute({ // Extension // Add SOPClassHandlers to a new SOPClassManager. - DisplaySetService.init(extensionManager, sopClassHandlers); + displaySetService.init(extensionManager, sopClassHandlers); extensionManager.onModeEnter({ servicesManager, diff --git a/yarn.lock b/yarn.lock index f91f3a726..14f62d9b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2372,18 +2372,16 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cornerstonejs/adapters@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-0.2.1.tgz#c1de369d82e05a4ff58dce25dc441e870b0ef991" - integrity sha512-5oHHwpSR9sjRh3GBsHh3sBF8kiWbgAdNiVf1nWc7dc3PtemWl+BiPr7xLE0/9aRe0BCRkgyU/u/Yqgk7I/pZLg== +"@cornerstonejs/adapters@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@cornerstonejs/adapters/-/adapters-0.3.0.tgz#c0a2a904c92ebfae77520eba4fc64c07ebd06db4" + integrity sha512-o3GIrccNM0q/QF0//ueVIXeRltUmtTBkTR47qPgIY9gdi+3sYEFHEW6RTXe3OOtDDXOWgM88Jp3mWWUK4ZeXxg== dependencies: "@babel/runtime-corejs2" "^7.17.8" dcmjs "^0.29.4" gl-matrix "^3.4.3" lodash.clonedeep "^4.5.0" - loglevelnext "^3.0.1" ndarray "^1.0.19" - pako "^2.0.4" "@cornerstonejs/calculate-suv@^1.0.3": version "1.0.3" @@ -2410,6 +2408,14 @@ resolved "https://registry.npmjs.org/@cornerstonejs/codec-openjph/-/codec-openjph-1.0.3.tgz#4c82642e8a6beb0d263f5a263723aec4225e5300" integrity sha512-PK+9N/JL7ZMGum6OKuReRGGhWXpWjRC9WnltQ6aEzRKEQPMg+3WFiQPZowKCCG1I4whv35DYFRi6wu7RyRaEMQ== +"@cornerstonejs/core@0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-0.30.1.tgz#6cb7088260641e7e55de2edb11979b1a0c00c794" + integrity sha512-A7t6WtPut17uLGpv3cUfk1gSzEvWiFcCg1K3H0WGySdZsf4tIinb5xA+9oD2eaBPbvTXmIef4HWFIAsN3kAEgg== + dependencies: + detect-gpu "^4.0.45" + lodash.clonedeep "4.5.0" + "@cornerstonejs/core@^0.27.1": version "0.27.1" resolved "https://registry.npmjs.org/@cornerstonejs/core/-/core-0.27.1.tgz#1c56697cee8071eacfd9b1ee6f59c0fa6071accc" @@ -2418,6 +2424,14 @@ detect-gpu "^4.0.45" lodash.clonedeep "4.5.0" +"@cornerstonejs/core@^0.28.0": + version "0.28.0" + resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-0.28.0.tgz#bc5114dfd332fcc5caf4ab049bcb08f6457e5f97" + integrity sha512-DSAdH2+8h/rRCTR6WbbGkY+vqnAVVZH47+GgGQQHscEwDD/K3ZO62JMl4LgcgkDzI0LIIZAk6CgAtok31yG/3Q== + dependencies: + detect-gpu "^4.0.45" + lodash.clonedeep "4.5.0" + "@cornerstonejs/streaming-image-volume-loader@^0.11.2": version "0.11.2" resolved "https://registry.npmjs.org/@cornerstonejs/streaming-image-volume-loader/-/streaming-image-volume-loader-0.11.2.tgz#75a8502a381a402a28ca2022f4bd2733eb90427f" @@ -2426,12 +2440,12 @@ "@cornerstonejs/core" "^0.27.1" cornerstone-wado-image-loader "^4.8.0" -"@cornerstonejs/tools@^0.36.3": - version "0.36.3" - resolved "https://registry.npmjs.org/@cornerstonejs/tools/-/tools-0.36.3.tgz#22769dbcac57f6811f37376ac45ea1041286d4a0" - integrity sha512-popsYtA5Tvr9u7AoRFASwAr9vdxT3S697sb14clydczbbURAk/vHJw1K70P55BJ38jVx/yaGqfZWObFMWbqPLg== +"@cornerstonejs/tools@0.39.0": + version "0.39.0" + resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-0.39.0.tgz#7d9bac4c55bc19145c2051f7c7150b34570849e4" + integrity sha512-xDR51lOEuNIDaTJltZvxDK+BIdIbznXUsWt+OpYiiygCQYt1Lt2eHufO2wVFVPrMgvm0dryF+WQbRVwtWvx4yA== dependencies: - "@cornerstonejs/core" "^0.27.1" + "@cornerstonejs/core" "^0.28.0" lodash.clonedeep "4.5.0" lodash.get "^4.4.2" @@ -10263,19 +10277,7 @@ dayjs@^1.11.6: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== -dcmjs@^0.28.3: - version "0.28.3" - resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.28.3.tgz#a756ab4b02363d12545c9830b8f97b5141723727" - integrity sha512-GZOu+CtNvdWsPv8ga9Ywm/1YadEqT/+FhwcpgsbDAmKDUKe+6uNH+8KbEsRcaN1V5WFQEMwRbF9IRTl2qOoZvA== - dependencies: - "@babel/runtime-corejs2" "^7.17.8" - gl-matrix "^3.1.0" - lodash.clonedeep "^4.5.0" - loglevelnext "^3.0.1" - ndarray "^1.0.19" - pako "^2.0.4" - -dcmjs@^0.29.4: +dcmjs@0.29.4, dcmjs@^0.29.4: version "0.29.4" resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.29.4.tgz#3fb13945611979f756bc91b3f199fd87b4eabdb4" integrity sha512-PzD6C4oB7v/AVTIPbkS6D6hjgVcSW7+T+DsxFpkD1xcEgU4qjGM16WGEHH3ZAPDBF0Xgm2d9FXUu/lXZIyfmow==