Compare commits

..
Author SHA1 Message Date
ohif-bot 391ff2243d chore(version): Update package versions [skip ci] 2024-05-15 15:51:44 +00:00
ohif-bot 3227ec1ddc chore(version): version.json [skip ci] 2024-05-15 15:51:35 +00:00
Ibrahim 8d5c676a5e fix(tmtv): threshold was crashing the side panel (#4119) 2024-05-15 11:39:03 -04:00
ohif-bot bbd41ac3dd chore(version): Update package versions [skip ci] 2024-05-15 13:28:59 +00:00
ohif-bot e096aa8b1a chore(version): version.json [skip ci] 2024-05-15 13:28:50 +00:00
Igor Octaviano 6bba2e70f8 fix: 🐛 Overflow scroll list menu based on screen hight (#4123) 2024-05-15 09:16:02 -04:00
ohif-bot d5759d6c06 chore(version): Update package versions [skip ci] 2024-05-14 17:41:13 +00:00
ohif-bot a289c10eb2 chore(version): version.json [skip ci] 2024-05-14 17:41:04 +00:00
Ibrahim 997a1afd7c test(visual-regression): Add percy tests and improve coverage (#4065) 2024-05-14 13:27:21 -04:00
ohif-bot 953d9eed9c chore(version): Update package versions [skip ci] 2024-05-14 17:10:40 +00:00
ohif-bot c86a141119 chore(version): version.json [skip ci] 2024-05-14 17:10:30 +00:00
Sofien-Sellami 8fa339f296 fix(auth): bind handleUnauthenticated to correct context (#4120) 2024-05-14 12:56:58 -04:00
Igor Octaviano 2de102c73c fix(DicomJSONDataSource): Fix series filtering (#4092) 2024-05-09 16:10:56 -04:00
ohif-bot e341ebe9d6 chore(version): Update package versions [skip ci] 2024-05-08 16:25:20 +00:00
ohif-bot 2046a16dad chore(version): version.json [skip ci] 2024-05-08 16:25:13 +00:00
Ibrahim 374065bc3b feat(typings): Enhance typing support with withAppTypes and custom services throughout OHIF (#4090) 2024-05-08 12:12:49 -04:00
ohif-bot b2cd0172d6 chore(version): Update package versions [skip ci] 2024-05-06 19:07:46 +00:00
ohif-bot cf8a99fbd3 chore(version): version.json [skip ci] 2024-05-06 19:07:38 +00:00
Ibrahim 730f434910 fix(bugs): enhancements and bugs in several areas (#4086) 2024-05-06 14:55:32 -04:00
ohif-bot 01fe7fab3d chore(version): Update package versions [skip ci] 2024-05-06 18:38:31 +00:00
ohif-bot 4ca8595095 chore(version): version.json [skip ci] 2024-05-06 18:38:23 +00:00
Ibrahim 0156bc426f fix(rt): enhanced RT support, utilize SVGs for rendering. (#4074) 2024-05-06 14:26:11 -04:00
ohif-bot 8c304718ad chore(version): Update package versions [skip ci] 2024-04-29 18:28:48 +00:00
ohif-bot 000224ce1a chore(version): version.json [skip ci] 2024-04-29 18:28:39 +00:00
Alireza f95255e8cd chore(version): move to the next beta version [BUMP BETA] (#4073) 2024-04-29 14:16:17 -04:00
241 changed files with 3266 additions and 1355 deletions

No files matched your search

-1
View File
@@ -1 +0,0 @@
PERCY_TOKEN=<your token here>
+83
View File
@@ -3,6 +3,89 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.9.0-beta.7](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.6...v3.9.0-beta.7) (2024-05-15)
### Bug Fixes
* **tmtv:** threshold was crashing the side panel ([#4119](https://github.com/OHIF/Viewers/issues/4119)) ([8d5c676](https://github.com/OHIF/Viewers/commit/8d5c676a5e1f3eda664071c8aece313de766bd59))
# [3.9.0-beta.6](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.5...v3.9.0-beta.6) (2024-05-15)
### Bug Fixes
* 🐛 Overflow scroll list menu based on screen hight ([#4123](https://github.com/OHIF/Viewers/issues/4123)) ([6bba2e7](https://github.com/OHIF/Viewers/commit/6bba2e70f80d8eacc57c0e765013d9c10adf5413))
# [3.9.0-beta.5](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.4...v3.9.0-beta.5) (2024-05-14)
**Note:** Version bump only for package ohif-monorepo-root
# [3.9.0-beta.4](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.3...v3.9.0-beta.4) (2024-05-14)
### Bug Fixes
* **auth:** bind handleUnauthenticated to correct context ([#4120](https://github.com/OHIF/Viewers/issues/4120)) ([8fa339f](https://github.com/OHIF/Viewers/commit/8fa339f296fd7e844f3879cfd81e47dbff315e66))
* **DicomJSONDataSource:** Fix series filtering ([#4092](https://github.com/OHIF/Viewers/issues/4092)) ([2de102c](https://github.com/OHIF/Viewers/commit/2de102c73c795cfb48b49005b10aa788444a45b7))
# [3.9.0-beta.3](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.2...v3.9.0-beta.3) (2024-05-08)
### Features
* **typings:** Enhance typing support with withAppTypes and custom services throughout OHIF ([#4090](https://github.com/OHIF/Viewers/issues/4090)) ([374065b](https://github.com/OHIF/Viewers/commit/374065bc3bad9d212f9817a8d41546cc64cfabfb))
# [3.9.0-beta.2](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.1...v3.9.0-beta.2) (2024-05-06)
### Bug Fixes
* **bugs:** enhancements and bugs in several areas ([#4086](https://github.com/OHIF/Viewers/issues/4086)) ([730f434](https://github.com/OHIF/Viewers/commit/730f4349100f21b4489a21707dbb2dca9dbfbba2))
# [3.9.0-beta.1](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.0...v3.9.0-beta.1) (2024-05-06)
### Bug Fixes
* **rt:** enhanced RT support, utilize SVGs for rendering. ([#4074](https://github.com/OHIF/Viewers/issues/4074)) ([0156bc4](https://github.com/OHIF/Viewers/commit/0156bc426f1840ae0d090223e94a643726e856cb))
# [3.9.0-beta.0](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.94...v3.9.0-beta.0) (2024-04-29)
**Note:** Version bump only for package ohif-monorepo-root
# [3.8.0-beta.94](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.93...v3.8.0-beta.94) (2024-04-29)
**Note:** Version bump only for package ohif-monorepo-root
+1 -1
View File
@@ -140,7 +140,7 @@ Here is a schematic representation of our development workflow:
### Requirements
- [Yarn 1.17.3+](https://yarnpkg.com/en/docs/install)
- [Node 16+](https://nodejs.org/en/)
- [Node 18+](https://nodejs.org/en/)
- Yarn Workspaces should be enabled on your machine:
- `yarn config set workspaces-experimental true`
+1 -1
View File
@@ -1 +1 @@
e4b64789528669ca918e3973fbe0ff9d2c81bdaa
8d5c676a5e1f3eda664071c8aece313de766bd59
@@ -3,6 +3,76 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.9.0-beta.7](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.6...v3.9.0-beta.7) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.9.0-beta.6](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.5...v3.9.0-beta.6) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.9.0-beta.5](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.4...v3.9.0-beta.5) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.9.0-beta.4](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.3...v3.9.0-beta.4) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.9.0-beta.3](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.2...v3.9.0-beta.3) (2024-05-08)
### Features
* **typings:** Enhance typing support with withAppTypes and custom services throughout OHIF ([#4090](https://github.com/OHIF/Viewers/issues/4090)) ([374065b](https://github.com/OHIF/Viewers/commit/374065bc3bad9d212f9817a8d41546cc64cfabfb))
# [3.9.0-beta.2](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.1...v3.9.0-beta.2) (2024-05-06)
### Bug Fixes
* **bugs:** enhancements and bugs in several areas ([#4086](https://github.com/OHIF/Viewers/issues/4086)) ([730f434](https://github.com/OHIF/Viewers/commit/730f4349100f21b4489a21707dbb2dca9dbfbba2))
# [3.9.0-beta.1](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.0...v3.9.0-beta.1) (2024-05-06)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.9.0-beta.0](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.94...v3.9.0-beta.0) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
# [3.8.0-beta.94](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.93...v3.8.0-beta.94) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-rt
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dicom-rt",
"version": "3.8.0-beta.94",
"version": "3.9.0-beta.7",
"description": "DICOM RT read workflow",
"author": "OHIF",
"license": "MIT",
@@ -33,10 +33,10 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@ohif/core": "3.8.0-beta.94",
"@ohif/extension-cornerstone": "3.8.0-beta.94",
"@ohif/extension-default": "3.8.0-beta.94",
"@ohif/i18n": "3.8.0-beta.94",
"@ohif/core": "3.9.0-beta.7",
"@ohif/extension-cornerstone": "3.9.0-beta.7",
"@ohif/extension-default": "3.9.0-beta.7",
"@ohif/i18n": "3.9.0-beta.7",
"prop-types": "^15.6.2",
"react": "^17.0.2",
"react-dom": "^17.0.2",
@@ -5,9 +5,13 @@ import loadRTStruct from './loadRTStruct';
const sopClassUids = ['1.2.840.10008.5.1.4.1.1.481.3'];
let loadPromises = {};
const loadPromises = {};
function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) {
function _getDisplaySetsFromSeries(
instances,
servicesManager: AppTypes.ServicesManager,
extensionManager
) {
const instance = instances[0];
const {
@@ -69,8 +73,8 @@ function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager)
displaySet.referencedSeriesInstanceUID = referencedSeries.SeriesInstanceUID;
displaySet.getReferenceDisplaySet = () => {
const { DisplaySetService } = servicesManager.services;
const referencedDisplaySets = DisplaySetService.getDisplaySetsForSeries(
const { displaySetService } = servicesManager.services;
const referencedDisplaySets = displaySetService.getDisplaySetsForSeries(
displaySet.referencedSeriesInstanceUID
);
@@ -90,7 +94,7 @@ function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager)
return [displaySet];
}
function _load(rtDisplaySet, servicesManager, extensionManager, headers) {
function _load(rtDisplaySet, servicesManager: AppTypes.ServicesManager, extensionManager, headers) {
const { SOPInstanceUID } = rtDisplaySet;
const { segmentationService } = servicesManager.services;
if (
@@ -168,7 +172,10 @@ function _deriveReferencedSeriesSequenceFromFrameOfReferenceSequence(
return ReferencedSeriesSequence;
}
function _segmentationExistsInCache(rtDisplaySet, segmentationService) {
function _segmentationExistsInCache(
rtDisplaySet,
segmentationService: AppTypes.SegmentationService
) {
// Todo: fix this
return false;
// This should be abstracted with the CornerstoneCacheService
@@ -13,30 +13,35 @@ function promptHydrateRT({
toolGroupId = 'default',
preHydrateCallbacks,
hydrateRTDisplaySet,
}) {
}: withAppTypes) {
const { uiViewportDialogService } = servicesManager.services;
const extensionManager = servicesManager._extensionManager;
const appConfig = extensionManager._appConfig;
return new Promise(async function (resolve, reject) {
const promptResult = await _askHydrate(uiViewportDialogService, viewportId);
const promptResult = appConfig?.disableConfirmationPrompts
? RESPONSE.HYDRATE_SEG
: await _askHydrate(uiViewportDialogService, viewportId);
if (promptResult === RESPONSE.HYDRATE_SEG) {
preHydrateCallbacks?.forEach(callback => {
callback();
});
const isHydrated = await hydrateRTDisplaySet({
rtDisplaySet,
viewportId,
toolGroupId,
servicesManager,
});
window.setTimeout(async () => {
const isHydrated = await hydrateRTDisplaySet({
rtDisplaySet,
viewportId,
toolGroupId,
servicesManager,
});
resolve(isHydrated);
resolve(isHydrated);
}, 0);
}
});
}
function _askHydrate(uiViewportDialogService, viewportId) {
function _askHydrate(uiViewportDialogService: AppTypes.UIViewportDialogService, viewportId) {
return new Promise(function (resolve, reject) {
const message = 'Do you want to open this Segmentation?';
const actions = [
@@ -57,6 +62,7 @@ function _askHydrate(uiViewportDialogService, viewportId) {
};
uiViewportDialogService.show({
id: 'promptHydrateRT',
viewportId,
type: 'info',
message,
@@ -8,7 +8,7 @@ import createRTToolGroupAndAddTools from '../utils/initRTToolGroup';
const RT_TOOLGROUP_BASE_NAME = 'RTToolGroup';
function OHIFCornerstoneRTViewport(props) {
function OHIFCornerstoneRTViewport(props: withAppTypes) {
const {
children,
displaySets,
@@ -3,6 +3,79 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.9.0-beta.7](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.6...v3.9.0-beta.7) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.9.0-beta.6](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.5...v3.9.0-beta.6) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.9.0-beta.5](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.4...v3.9.0-beta.5) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.9.0-beta.4](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.3...v3.9.0-beta.4) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.9.0-beta.3](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.2...v3.9.0-beta.3) (2024-05-08)
### Features
* **typings:** Enhance typing support with withAppTypes and custom services throughout OHIF ([#4090](https://github.com/OHIF/Viewers/issues/4090)) ([374065b](https://github.com/OHIF/Viewers/commit/374065bc3bad9d212f9817a8d41546cc64cfabfb))
# [3.9.0-beta.2](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.1...v3.9.0-beta.2) (2024-05-06)
### Bug Fixes
* **bugs:** enhancements and bugs in several areas ([#4086](https://github.com/OHIF/Viewers/issues/4086)) ([730f434](https://github.com/OHIF/Viewers/commit/730f4349100f21b4489a21707dbb2dca9dbfbba2))
# [3.9.0-beta.1](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.0...v3.9.0-beta.1) (2024-05-06)
### Bug Fixes
* **rt:** enhanced RT support, utilize SVGs for rendering. ([#4074](https://github.com/OHIF/Viewers/issues/4074)) ([0156bc4](https://github.com/OHIF/Viewers/commit/0156bc426f1840ae0d090223e94a643726e856cb))
# [3.9.0-beta.0](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.94...v3.9.0-beta.0) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
# [3.8.0-beta.94](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.93...v3.8.0-beta.94) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-seg
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dicom-seg",
"version": "3.8.0-beta.94",
"version": "3.9.0-beta.7",
"description": "DICOM SEG read workflow",
"author": "OHIF",
"license": "MIT",
@@ -33,10 +33,10 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@ohif/core": "3.8.0-beta.94",
"@ohif/extension-cornerstone": "3.8.0-beta.94",
"@ohif/extension-default": "3.8.0-beta.94",
"@ohif/i18n": "3.8.0-beta.94",
"@ohif/core": "3.9.0-beta.7",
"@ohif/extension-cornerstone": "3.9.0-beta.7",
"@ohif/extension-default": "3.9.0-beta.7",
"@ohif/i18n": "3.9.0-beta.7",
"prop-types": "^15.6.2",
"react": "^17.0.2",
"react-dom": "^17.0.2",
@@ -46,8 +46,8 @@
},
"dependencies": {
"@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^1.70.14",
"@cornerstonejs/core": "^1.70.14",
"@cornerstonejs/adapters": "^1.71.2",
"@cornerstonejs/core": "^1.71.2",
"@kitware/vtk.js": "30.4.1",
"react-color": "^2.19.3"
}
@@ -1,6 +1,6 @@
import dcmjs from 'dcmjs';
import { createReportDialogPrompt } from '@ohif/extension-default';
import { ServicesManager, Types } from '@ohif/core';
import { Types } from '@ohif/core';
import { cache, metaData } from '@cornerstonejs/core';
import {
segmentation as cornerstoneToolsSegmentation,
@@ -48,7 +48,7 @@ const commandsModule = ({
displaySetService,
viewportGridService,
toolGroupService,
} = (servicesManager as ServicesManager).services;
} = servicesManager.services;
const actions = {
/**
@@ -258,9 +258,12 @@ const commandsModule = ({
labelmapObj.metadata = [];
const segmentationInOHIF = segmentationService.getSegmentation(segmentationId);
labelmapObj.segmentsOnLabelmap.forEach(segmentIndex => {
segmentationInOHIF.segments.forEach(segment => {
// segmentation service already has a color for each segment
const segment = segmentationInOHIF?.segments[segmentIndex];
if (!segment) {
return;
}
const segmentIndex = segment.segmentIndex;
const { label, color } = segment;
const RecommendedDisplayCIELabValue = dcmjs.data.Colors.rgb2DICOMLAB(
@@ -10,7 +10,7 @@ const getPanelModule = ({
extensionManager,
configuration,
title,
}) => {
}: withAppTypes) => {
const { customizationService } = servicesManager.services;
const wrappedPanelSegmentation = configuration => {
@@ -8,9 +8,13 @@ import { dicomlabToRGB } from './utils/dicomlabToRGB';
const sopClassUids = ['1.2.840.10008.5.1.4.1.1.66.4'];
let loadPromises = {};
const loadPromises = {};
function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) {
function _getDisplaySetsFromSeries(
instances,
servicesManager: AppTypes.ServicesManager,
extensionManager
) {
const instance = instances[0];
const {
@@ -95,7 +99,12 @@ function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager)
return [displaySet];
}
function _load(segDisplaySet, servicesManager, extensionManager, headers) {
function _load(
segDisplaySet,
servicesManager: AppTypes.ServicesManager,
extensionManager,
headers
) {
const { SOPInstanceUID } = segDisplaySet;
const { segmentationService } = servicesManager.services;
@@ -137,7 +146,12 @@ function _load(segDisplaySet, servicesManager, extensionManager, headers) {
return loadPromises[SOPInstanceUID];
}
async function _loadSegments({ extensionManager, servicesManager, segDisplaySet, headers }) {
async function _loadSegments({
extensionManager,
servicesManager,
segDisplaySet,
headers,
}: withAppTypes) {
const utilityModule = extensionManager.getModuleEntry(
'@ohif/extension-cornerstone.utilityModule.common'
);
@@ -212,7 +226,7 @@ async function _loadSegments({ extensionManager, servicesManager, segDisplaySet,
Object.assign(segDisplaySet, results);
}
function _segmentationExists(segDisplaySet, segmentationService) {
function _segmentationExists(segDisplaySet, segmentationService: AppTypes.SegmentationService) {
// This should be abstracted with the CornerstoneCacheService
return segmentationService.getSegmentation(segDisplaySet.displaySetInstanceUID);
}
@@ -1,4 +1,4 @@
export function getToolbarModule({ servicesManager }) {
export function getToolbarModule({ servicesManager }: withAppTypes) {
const { segmentationService, toolbarService, toolGroupService } = servicesManager.services;
return [
{
@@ -17,7 +17,7 @@ export default function PanelSegmentation({
commandsManager,
extensionManager,
configuration,
}) {
}: withAppTypes) {
const {
segmentationService,
viewportGridService,
@@ -22,7 +22,7 @@ async function updateViewportsForSegmentationRendering({
}: {
viewportId: string;
loadFn: () => Promise<string>;
servicesManager: any;
servicesManager: AppTypes.ServicesManager;
referencedDisplaySetInstanceUID?: string;
}) {
const { cornerstoneViewportService, segmentationService, viewportGridService } =
@@ -134,7 +134,7 @@ function getUpdatedViewportsForSegmentation({
viewportId,
servicesManager,
referencedDisplaySetInstanceUID,
}) {
}: withAppTypes) {
const { hangingProtocolService, displaySetService, segmentationService, viewportGridService } =
servicesManager.services;
@@ -12,23 +12,29 @@ function promptHydrateSEG({
viewportId,
preHydrateCallbacks,
hydrateSEGDisplaySet,
}) {
}: withAppTypes) {
const { uiViewportDialogService } = servicesManager.services;
const extensionManager = servicesManager._extensionManager;
const appConfig = extensionManager._appConfig;
return new Promise(async function (resolve, reject) {
const promptResult = await _askHydrate(uiViewportDialogService, viewportId);
const promptResult = appConfig?.disableConfirmationPrompts
? RESPONSE.HYDRATE_SEG
: await _askHydrate(uiViewportDialogService, viewportId);
if (promptResult === RESPONSE.HYDRATE_SEG) {
preHydrateCallbacks?.forEach(callback => {
callback();
});
const isHydrated = await hydrateSEGDisplaySet({
segDisplaySet,
viewportId,
});
window.setTimeout(async () => {
const isHydrated = await hydrateSEGDisplaySet({
segDisplaySet,
viewportId,
});
resolve(isHydrated);
resolve(isHydrated);
}, 0);
}
});
}
@@ -8,7 +8,7 @@ import _getStatusComponent from './_getStatusComponent';
const SEG_TOOLGROUP_BASE_NAME = 'SEGToolGroup';
function OHIFCornerstoneSEGViewport(props) {
function OHIFCornerstoneSEGViewport(props: withAppTypes) {
const {
children,
displaySets,
@@ -3,6 +3,76 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.9.0-beta.7](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.6...v3.9.0-beta.7) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.9.0-beta.6](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.5...v3.9.0-beta.6) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.9.0-beta.5](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.4...v3.9.0-beta.5) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.9.0-beta.4](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.3...v3.9.0-beta.4) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.9.0-beta.3](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.2...v3.9.0-beta.3) (2024-05-08)
### Features
* **typings:** Enhance typing support with withAppTypes and custom services throughout OHIF ([#4090](https://github.com/OHIF/Viewers/issues/4090)) ([374065b](https://github.com/OHIF/Viewers/commit/374065bc3bad9d212f9817a8d41546cc64cfabfb))
# [3.9.0-beta.2](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.1...v3.9.0-beta.2) (2024-05-06)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.9.0-beta.1](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.0...v3.9.0-beta.1) (2024-05-06)
### Bug Fixes
* **rt:** enhanced RT support, utilize SVGs for rendering. ([#4074](https://github.com/OHIF/Viewers/issues/4074)) ([0156bc4](https://github.com/OHIF/Viewers/commit/0156bc426f1840ae0d090223e94a643726e856cb))
# [3.9.0-beta.0](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.94...v3.9.0-beta.0) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
# [3.8.0-beta.94](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.93...v3.8.0-beta.94) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone-dicom-sr
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dicom-sr",
"version": "3.8.0-beta.94",
"version": "3.9.0-beta.7",
"description": "OHIF extension for an SR Cornerstone Viewport",
"author": "OHIF",
"license": "MIT",
@@ -34,10 +34,10 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.8.0-beta.94",
"@ohif/extension-cornerstone": "3.8.0-beta.94",
"@ohif/extension-measurement-tracking": "3.8.0-beta.94",
"@ohif/ui": "3.8.0-beta.94",
"@ohif/core": "3.9.0-beta.7",
"@ohif/extension-cornerstone": "3.9.0-beta.7",
"@ohif/extension-measurement-tracking": "3.9.0-beta.7",
"@ohif/ui": "3.9.0-beta.7",
"dcmjs": "^0.29.12",
"dicom-parser": "^1.8.9",
"hammerjs": "^2.0.8",
@@ -46,9 +46,9 @@
},
"dependencies": {
"@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^1.70.14",
"@cornerstonejs/core": "^1.70.14",
"@cornerstonejs/tools": "^1.70.14",
"@cornerstonejs/adapters": "^1.71.2",
"@cornerstonejs/core": "^1.71.2",
"@cornerstonejs/tools": "^1.71.2",
"classnames": "^2.3.2"
}
}
@@ -40,7 +40,7 @@ const _generateReport = (measurementData, additionalFindingTypes, options = {})
return dataset;
};
const commandsModule = props => {
const commandsModule = (props: withAppTypes) => {
const { servicesManager } = props;
const { customizationService } = servicesManager.services;
const actions = {
@@ -57,7 +57,7 @@ const commandsModule = props => {
const reportBlob = dcmjs.data.datasetToBlob(srDataset);
//Create a URL for the binary.
var objectUrl = URL.createObjectURL(reportBlob);
const objectUrl = URL.createObjectURL(reportBlob);
window.location.assign(objectUrl);
},
@@ -85,7 +85,11 @@ function addInstances(instances: InstanceMetadata[], displaySetService: DisplayS
* @param servicesManager is the services that can be used for creating
* @returns The list of display sets created for the given instances object
*/
function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) {
function _getDisplaySetsFromSeries(
instances,
servicesManager: AppTypes.ServicesManager,
extensionManager
) {
// If the series has no instances, stop here
if (!instances || !instances.length) {
throw new Error('No instances were provided');
@@ -150,7 +154,7 @@ function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager)
return [displaySet];
}
async function _load(displaySet, servicesManager, extensionManager) {
async function _load(displaySet, servicesManager: AppTypes.ServicesManager, extensionManager) {
const { displaySetService, measurementService } = servicesManager.services;
const dataSources = extensionManager.getDataSources();
const dataSource = dataSources[0];
@@ -223,7 +227,7 @@ function _checkIfCanAddMeasurementsToDisplaySet(
srDisplaySet,
newDisplaySet,
dataSource,
servicesManager
servicesManager: AppTypes.ServicesManager
) {
const { customizationService } = servicesManager.services;
let unloadedMeasurements = srDisplaySet.measurements.filter(
@@ -43,7 +43,7 @@ const convertSites = (codingValues, sites) => {
*
*/
export default function hydrateStructuredReport(
{ servicesManager, extensionManager, appConfig },
{ servicesManager, extensionManager, appConfig }: withAppTypes,
displaySetInstanceUID
) {
const annotationManager = CsAnnotation.state.getAnnotationManager();
@@ -1,7 +1,7 @@
import PropTypes from 'prop-types';
import React, { useCallback, useContext, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { ServicesManager, ExtensionManager } from '@ohif/core';
import { ExtensionManager } from '@ohif/core';
import { setTrackingUniqueIdentifiersForElement } from '../tools/modules/dicomSRModule';
@@ -14,7 +14,7 @@ const MEASUREMENT_TRACKING_EXTENSION_ID = '@ohif/extension-measurement-tracking'
const SR_TOOLGROUP_BASE_NAME = 'SRToolGroup';
function OHIFCornerstoneSRViewport(props) {
function OHIFCornerstoneSRViewport(props: withAppTypes) {
const { children, dataSource, displaySets, viewportOptions, servicesManager, extensionManager } =
props;
@@ -369,7 +369,7 @@ OHIFCornerstoneSRViewport.propTypes = {
viewportLabel: PropTypes.string,
customProps: PropTypes.object,
viewportOptions: PropTypes.object,
servicesManager: PropTypes.instanceOf(ServicesManager).isRequired,
servicesManager: PropTypes.object.isRequired,
extensionManager: PropTypes.instanceOf(ExtensionManager).isRequired,
};
@@ -3,6 +3,76 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.9.0-beta.7](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.6...v3.9.0-beta.7) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.9.0-beta.6](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.5...v3.9.0-beta.6) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.9.0-beta.5](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.4...v3.9.0-beta.5) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.9.0-beta.4](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.3...v3.9.0-beta.4) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.9.0-beta.3](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.2...v3.9.0-beta.3) (2024-05-08)
### Features
* **typings:** Enhance typing support with withAppTypes and custom services throughout OHIF ([#4090](https://github.com/OHIF/Viewers/issues/4090)) ([374065b](https://github.com/OHIF/Viewers/commit/374065bc3bad9d212f9817a8d41546cc64cfabfb))
# [3.9.0-beta.2](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.1...v3.9.0-beta.2) (2024-05-06)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.9.0-beta.1](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.0...v3.9.0-beta.1) (2024-05-06)
### Bug Fixes
* **rt:** enhanced RT support, utilize SVGs for rendering. ([#4074](https://github.com/OHIF/Viewers/issues/4074)) ([0156bc4](https://github.com/OHIF/Viewers/commit/0156bc426f1840ae0d090223e94a643726e856cb))
# [3.9.0-beta.0](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.94...v3.9.0-beta.0) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
# [3.8.0-beta.94](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.93...v3.8.0-beta.94) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone-dynamic-volume
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone-dynamic-volume",
"version": "3.8.0-beta.94",
"version": "3.9.0-beta.7",
"description": "OHIF extension for 4D volumes data",
"author": "OHIF",
"license": "MIT",
@@ -29,11 +29,11 @@
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
},
"peerDependencies": {
"@ohif/core": "3.8.0-beta.94",
"@ohif/extension-cornerstone": "3.8.0-beta.94",
"@ohif/extension-default": "3.8.0-beta.94",
"@ohif/i18n": "3.8.0-beta.94",
"@ohif/ui": "3.8.0-beta.94",
"@ohif/core": "3.9.0-beta.7",
"@ohif/extension-cornerstone": "3.9.0-beta.7",
"@ohif/extension-default": "3.9.0-beta.7",
"@ohif/i18n": "3.9.0-beta.7",
"@ohif/ui": "3.9.0-beta.7",
"dcmjs": "^0.29.5",
"dicom-parser": "^1.8.21",
"hammerjs": "^2.0.8",
@@ -42,9 +42,9 @@
},
"dependencies": {
"@babel/runtime": "^7.20.13",
"@cornerstonejs/core": "^1.70.14",
"@cornerstonejs/streaming-image-volume-loader": "^1.70.14",
"@cornerstonejs/tools": "^1.70.14",
"@cornerstonejs/core": "^1.71.2",
"@cornerstonejs/streaming-image-volume-loader": "^1.71.2",
"@cornerstonejs/tools": "^1.71.2",
"classnames": "^2.3.2"
}
}
@@ -265,7 +265,7 @@ function _getInstanceFromSegmentations(segmentations, displaySetService) {
return { seriesMetadata, instance };
}
function updateSegmentationsChartDisplaySet({ servicesManager }): void {
function updateSegmentationsChartDisplaySet({ servicesManager }: withAppTypes): void {
const { segmentationService, displaySetService } = servicesManager.services;
const segmentations = segmentationService.getSegmentations();
const { seriesMetadata, instance } =
@@ -4,7 +4,7 @@ import { cache } from '@cornerstonejs/core';
const LABELMAP = Enums.SegmentationRepresentations.Labelmap;
const commandsModule = ({ commandsManager, servicesManager }) => {
const commandsModule = ({ commandsManager, servicesManager }: withAppTypes) => {
const services = servicesManager.services;
const { displaySetService, viewportGridService, segmentationService } = services;
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
import { ActionButtons } from '@ohif/ui';
import { useTranslation } from 'react-i18next';
function DynamicExport({ commandsManager, servicesManager, extensionManager }) {
function DynamicExport({ commandsManager, servicesManager, extensionManager }: withAppTypes) {
const { segmentationService } = servicesManager.services;
const { t } = useTranslation('dynamicExport');
@@ -8,7 +8,7 @@ import DynamicVolumeControls from './DynamicVolumeControls';
const SOPClassHandlerId = '@ohif/extension-default.sopClassHandlerModule.stack';
export default function PanelGenerateImage({ servicesManager, commandsManager }) {
export default function PanelGenerateImage({ servicesManager, commandsManager }: withAppTypes) {
const { cornerstoneViewportService, viewportGridService, displaySetService } =
servicesManager.services;
+73
View File
@@ -3,6 +3,79 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.9.0-beta.7](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.6...v3.9.0-beta.7) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.9.0-beta.6](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.5...v3.9.0-beta.6) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.9.0-beta.5](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.4...v3.9.0-beta.5) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.9.0-beta.4](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.3...v3.9.0-beta.4) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.9.0-beta.3](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.2...v3.9.0-beta.3) (2024-05-08)
### Features
* **typings:** Enhance typing support with withAppTypes and custom services throughout OHIF ([#4090](https://github.com/OHIF/Viewers/issues/4090)) ([374065b](https://github.com/OHIF/Viewers/commit/374065bc3bad9d212f9817a8d41546cc64cfabfb))
# [3.9.0-beta.2](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.1...v3.9.0-beta.2) (2024-05-06)
### Bug Fixes
* **bugs:** enhancements and bugs in several areas ([#4086](https://github.com/OHIF/Viewers/issues/4086)) ([730f434](https://github.com/OHIF/Viewers/commit/730f4349100f21b4489a21707dbb2dca9dbfbba2))
# [3.9.0-beta.1](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.0...v3.9.0-beta.1) (2024-05-06)
### Bug Fixes
* **rt:** enhanced RT support, utilize SVGs for rendering. ([#4074](https://github.com/OHIF/Viewers/issues/4074)) ([0156bc4](https://github.com/OHIF/Viewers/commit/0156bc426f1840ae0d090223e94a643726e856cb))
# [3.9.0-beta.0](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.94...v3.9.0-beta.0) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone
# [3.8.0-beta.94](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.93...v3.8.0-beta.94) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-cornerstone
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-cornerstone",
"version": "3.8.0-beta.94",
"version": "3.9.0-beta.7",
"description": "OHIF extension for Cornerstone",
"author": "OHIF",
"license": "MIT",
@@ -38,10 +38,10 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.2",
"@cornerstonejs/codec-openjph": "^2.4.2",
"@cornerstonejs/dicom-image-loader": "^1.70.14",
"@cornerstonejs/dicom-image-loader": "^1.71.2",
"@icr/polyseg-wasm": "^0.4.0",
"@ohif/core": "3.8.0-beta.94",
"@ohif/ui": "3.8.0-beta.94",
"@ohif/core": "3.9.0-beta.7",
"@ohif/ui": "3.9.0-beta.7",
"dcmjs": "^0.29.12",
"dicom-parser": "^1.8.21",
"hammerjs": "^2.0.8",
@@ -55,10 +55,10 @@
},
"dependencies": {
"@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^1.70.14",
"@cornerstonejs/core": "^1.70.14",
"@cornerstonejs/streaming-image-volume-loader": "^1.70.14",
"@cornerstonejs/tools": "^1.70.14",
"@cornerstonejs/adapters": "^1.71.2",
"@cornerstonejs/core": "^1.71.2",
"@cornerstonejs/streaming-image-volume-loader": "^1.71.2",
"@cornerstonejs/tools": "^1.71.2",
"@icr/polyseg-wasm": "^0.4.0",
"@kitware/vtk.js": "30.4.1",
"html2canvas": "^1.4.1",
@@ -18,7 +18,6 @@ import { setEnabledElement } from '../state';
import './OHIFCornerstoneViewport.css';
import CornerstoneOverlays from './Overlays/CornerstoneOverlays';
import getSOPInstanceAttributes from '../utils/measurementServiceMappings/utils/getSOPInstanceAttributes';
import CornerstoneServices from '../types/CornerstoneServices';
import CinePlayer from '../components/CinePlayer';
import { Types } from '@ohif/core';
@@ -100,7 +99,7 @@ function areEqual(prevProps, nextProps) {
// Todo: This should be done with expose of internal API similar to react-vtkjs-viewport
// Then we don't need to worry about the re-renders if the props change.
const OHIFCornerstoneViewport = React.memo(props => {
const OHIFCornerstoneViewport = React.memo((props: withAppTypes) => {
const {
displaySets,
dataSource,
@@ -108,11 +107,13 @@ const OHIFCornerstoneViewport = React.memo(props => {
displaySetOptions,
servicesManager,
onElementEnabled,
// eslint-disable-next-line react/prop-types
onElementDisabled,
isJumpToMeasurementDisabled,
// Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation
// of the imageData in the OHIFCornerstoneViewport. This prop is used
// to set the initial state of the viewport's first image to render
// eslint-disable-next-line react/prop-types
initialImageIndex,
// if the viewport is part of a hanging protocol layout
// we should not really rely on the old synchronizers and
@@ -120,6 +121,7 @@ const OHIFCornerstoneViewport = React.memo(props => {
// is not part of the hanging protocol layout. HPs should
// define their own synchronizers. Since the synchronizers are
// viewportId dependent and
// eslint-disable-next-line react/prop-types
isHangingProtocolLayout,
} = props;
@@ -152,7 +154,7 @@ const OHIFCornerstoneViewport = React.memo(props => {
viewportGridService,
stateSyncService,
viewportActionCornersService,
} = servicesManager.services as CornerstoneServices;
} = servicesManager.services;
const [viewportDialogState] = useViewportDialog();
// useCallback for scroll bar height calculation
@@ -5,7 +5,7 @@ import CustomizableViewportOverlay from './CustomizableViewportOverlay';
import ViewportOrientationMarkers from './ViewportOrientationMarkers';
import ViewportImageSliceLoadingIndicator from './ViewportImageSliceLoadingIndicator';
function CornerstoneOverlays(props) {
function CornerstoneOverlays(props: withAppTypes) {
const { viewportId, element, scrollbarHeight, servicesManager } = props;
const { cornerstoneViewportService } = servicesManager.services;
const [imageSliceData, setImageSliceData] = useState({
@@ -4,7 +4,6 @@ import PropTypes from 'prop-types';
import { metaData, Enums, utilities } from '@cornerstonejs/core';
import { ImageSliceData } from '@cornerstonejs/core/dist/esm/types';
import { ViewportOverlay } from '@ohif/ui';
import { ServicesManager } from '@ohif/core';
import { InstanceMetadata } from '@ohif/core/src/types';
import { formatPN, formatDICOMDate, formatDICOMTime, formatNumberPrecision } from './utils';
import { StackViewportData, VolumeViewportData } from '../../types/CornerstoneCacheService';
@@ -19,7 +18,7 @@ interface OverlayItemProps {
element: HTMLElement;
viewportData: ViewportData;
imageSliceData: ImageSliceData;
servicesManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
viewportId: string;
instance: InstanceMetadata;
customization: any;
@@ -59,7 +58,7 @@ function CustomizableViewportOverlay({
viewportData: ViewportData;
imageSliceData: ImageSliceData;
viewportId: string;
servicesManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
}) {
const { cornerstoneViewportService, customizationService, toolGroupService } =
servicesManager.services;
@@ -137,20 +136,8 @@ function CustomizableViewportOverlay({
return;
}
const imageData = viewport.getImageData();
const scale = viewport.getZoom();
if (!imageData) {
return;
}
if (camera.scale) {
setScale(camera.scale);
return;
}
const { spacing } = imageData;
// convert parallel scale to scale
const scale = (element.clientHeight * spacing[0] * 0.5) / camera.parallelScale;
setScale(scale);
}
};
@@ -3,7 +3,6 @@ import PropTypes from 'prop-types';
import { Enums, Types, utilities } from '@cornerstonejs/core';
import { utilities as csToolsUtils } from '@cornerstonejs/tools';
import { ImageScrollbar } from '@ohif/ui';
import { ServicesManger } from '@ohif/core';
function CornerstoneImageScrollbar({
viewportData,
@@ -13,8 +12,8 @@ function CornerstoneImageScrollbar({
setImageSliceData,
scrollbarHeight,
servicesManager,
}) {
const { cineService, cornerstoneViewportService } = (servicesManager as ServicesManger).services;
}: withAppTypes) {
const { cineService, cornerstoneViewportService } = servicesManager.services;
const onImageScrollbarChange = (imageIndex, viewportId) => {
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
@@ -22,7 +22,7 @@ function ViewportOrientationMarkers({
viewportId,
servicesManager,
orientationMarkers = ['top', 'left'],
}) {
}: withAppTypes) {
// Rotation is in degrees
const [rotation, setRotation] = useState(0);
const [flipHorizontal, setFlipHorizontal] = useState(false);
+1 -2
View File
@@ -20,7 +20,6 @@ import { callLabelAutocompleteDialog, showLabelAnnotationPopup } from './utils/c
import toggleImageSliceSync from './utils/imageSliceSync/toggleImageSliceSync';
import { getFirstAnnotationSelected } from './utils/measurementServiceMappings/utils/selection';
import getActiveViewportEnabledElement from './utils/getActiveViewportEnabledElement';
import { CornerstoneServices } from './types';
import toggleVOISliceSync from './utils/toggleVOISliceSync';
const toggleSyncFunctions = {
@@ -44,7 +43,7 @@ function commandsModule({
colorbarService,
hangingProtocolService,
syncGroupService,
} = servicesManager.services as CornerstoneServices;
} = servicesManager.services;
const { measurementServiceSource } = this;
@@ -1,14 +1,9 @@
import React, { ReactElement } from 'react';
import PropTypes from 'prop-types';
import { ServicesManager } from '@ohif/core';
import { useViewportGrid } from '@ohif/ui';
import ViewportWindowLevel from '../ViewportWindowLevel/ViewportWindowLevel';
const ActiveViewportWindowLevel = ({
servicesManager,
}: {
servicesManager: ServicesManager;
}): ReactElement => {
const ActiveViewportWindowLevel = ({ servicesManager }: withAppTypes): ReactElement => {
const [viewportGrid] = useViewportGrid();
const { activeViewportId } = viewportGrid;
@@ -25,7 +20,7 @@ const ActiveViewportWindowLevel = ({
};
ActiveViewportWindowLevel.propTypes = {
servicesManager: PropTypes.instanceOf(ServicesManager),
servicesManager: PropTypes.object.isRequired,
};
export default ActiveViewportWindowLevel;
@@ -4,7 +4,14 @@ import { Enums, eventTarget, cache } from '@cornerstonejs/core';
import { Enums as StreamingEnums } from '@cornerstonejs/streaming-image-volume-loader';
import { useAppConfig } from '@state';
function WrappedCinePlayer({ enabledVPElement, viewportId, servicesManager }) {
function WrappedCinePlayer({
enabledVPElement,
viewportId,
servicesManager,
}: withAppTypes<{
enabledVPElement: HTMLElement;
viewportId: string;
}>) {
const { customizationService, displaySetService, viewportGridService } = servicesManager.services;
const [{ isCineEnabled, cines }, cineService] = useCine();
const [newStackFrameRate, setNewStackFrameRate] = useState(24);
@@ -1,7 +1,6 @@
import React, { useEffect, useCallback, useState, ReactElement } from 'react';
import PropTypes from 'prop-types';
import debounce from 'lodash.debounce';
import { ServicesManager } from '@ohif/core';
import { PanelSection, WindowLevel } from '@ohif/ui';
import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps';
import { Enums, eventTarget, cache as cs3DCache, utilities as csUtils } from '@cornerstonejs/core';
@@ -12,10 +11,9 @@ const { Events } = Enums;
const ViewportWindowLevel = ({
servicesManager,
viewportId,
}: {
servicesManager: ServicesManager;
}: withAppTypes<{
viewportId: string;
}): ReactElement => {
}>): ReactElement => {
const { cornerstoneViewportService } = servicesManager.services;
const [windowLevels, setWindowLevels] = useState([]);
const [cachedHistograms, setCachedHistograms] = useState({});
@@ -380,7 +378,7 @@ const ViewportWindowLevel = ({
};
ViewportWindowLevel.propTypes = {
servicesManager: PropTypes.instanceOf(ServicesManager),
servicesManager: PropTypes.object.isRequired,
viewportId: PropTypes.string.isRequired,
};
@@ -8,10 +8,10 @@ export function setViewportColorbar(
viewportId,
displaySets,
commandsManager,
serviceManager,
servicesManager: AppTypes.ServicesManager,
colorbarOptions
) {
const { cornerstoneViewportService } = serviceManager.services;
const { cornerstoneViewportService } = servicesManager.services;
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
@@ -59,10 +59,10 @@ export function Colorbar({
viewportId,
displaySets,
commandsManager,
serviceManager,
servicesManager,
colorbarProperties,
}: ColorbarProps): ReactElement {
const { colorbarService } = serviceManager.services;
}: withAppTypes<ColorbarProps>): ReactElement {
const { colorbarService } = servicesManager.services;
const {
width: colorbarWidth,
colorbarTickPosition,
@@ -73,7 +73,7 @@ export function Colorbar({
const [showColorbar, setShowColorbar] = useState(colorbarService.hasColorbar(viewportId));
const onSetColorbar = useCallback(() => {
setViewportColorbar(viewportId, displaySets, commandsManager, serviceManager, {
setViewportColorbar(viewportId, displaySets, commandsManager, servicesManager, {
viewportId,
colormaps,
ticks: {
@@ -8,9 +8,9 @@ export function Colormap({
viewportId,
displaySets,
commandsManager,
serviceManager,
servicesManager,
}: ColormapProps): ReactElement {
const { cornerstoneViewportService } = serviceManager.services;
const { cornerstoneViewportService } = servicesManager.services;
const [activeDisplaySet, setActiveDisplaySet] = useState(displaySets[0]);
@@ -2,11 +2,11 @@ import React, { ReactElement, useState, useEffect, useCallback } from 'react';
import { VolumeLightingProps } from '../../types/ViewportPresets';
export function VolumeLighting({
serviceManager,
servicesManager,
commandsManager,
viewportId,
}: VolumeLightingProps): ReactElement {
const { cornerstoneViewportService } = serviceManager.services;
const { cornerstoneViewportService } = servicesManager.services;
const [ambient, setAmbient] = useState(null);
const [diffuse, setDiffuse] = useState(null);
const [specular, setSpecular] = useState(null);
@@ -9,21 +9,21 @@ export function VolumeRenderingOptions({
viewportId,
commandsManager,
volumeRenderingQualityRange,
serviceManager,
servicesManager,
}: VolumeRenderingOptionsProps): ReactElement {
return (
<AllInOneMenu.ItemPanel>
<VolumeRenderingQuality
viewportId={viewportId}
commandsManager={commandsManager}
serviceManager={serviceManager}
servicesManager={servicesManager}
volumeRenderingQualityRange={volumeRenderingQualityRange}
/>
<VolumeShift
viewportId={viewportId}
commandsManager={commandsManager}
serviceManager={serviceManager}
servicesManager={servicesManager}
/>
<div className="all-in-one-menu-item mt-2 flex !h-[20px] w-full justify-start">
<div className="text-aqua-pale text-[13px]">LIGHTING</div>
@@ -32,14 +32,14 @@ export function VolumeRenderingOptions({
<div className="all-in-one-menu-item flex w-full justify-center">
<VolumeShade
commandsManager={commandsManager}
serviceManager={serviceManager}
servicesManager={servicesManager}
viewportId={viewportId}
/>
</div>
<VolumeLighting
viewportId={viewportId}
commandsManager={commandsManager}
serviceManager={serviceManager}
servicesManager={servicesManager}
/>
</AllInOneMenu.ItemPanel>
);
@@ -5,11 +5,11 @@ import { VolumeRenderingPresetsContent } from './VolumeRenderingPresetsContent';
export function VolumeRenderingPresets({
viewportId,
serviceManager,
servicesManager,
commandsManager,
volumeRenderingPresets,
}: VolumeRenderingPresetsProps): ReactElement {
const { uiModalService } = serviceManager.services;
const { uiModalService } = servicesManager.services;
const onClickPresets = () => {
uiModalService.show({
@@ -4,10 +4,10 @@ import { VolumeRenderingQualityProps } from '../../types/ViewportPresets';
export function VolumeRenderingQuality({
volumeRenderingQualityRange,
commandsManager,
serviceManager,
servicesManager,
viewportId,
}: VolumeRenderingQualityProps): ReactElement {
const { cornerstoneViewportService } = serviceManager.services;
const { cornerstoneViewportService } = servicesManager.services;
const { min, max, step } = volumeRenderingQualityRange;
const [quality, setQuality] = useState(null);
@@ -5,9 +5,9 @@ import { VolumeShadeProps } from '../../types/ViewportPresets';
export function VolumeShade({
commandsManager,
viewportId,
serviceManager,
servicesManager,
}: VolumeShadeProps): ReactElement {
const { cornerstoneViewportService } = serviceManager.services;
const { cornerstoneViewportService } = servicesManager.services;
const [shade, setShade] = useState(true);
const [key, setKey] = useState(0);
@@ -4,9 +4,9 @@ import { VolumeShiftProps } from '../../types/ViewportPresets';
export function VolumeShift({
viewportId,
commandsManager,
serviceManager,
servicesManager,
}: VolumeShiftProps): ReactElement {
const { cornerstoneViewportService } = serviceManager.services;
const { cornerstoneViewportService } = servicesManager.services;
const [minShift, setMinShift] = useState<number | null>(null);
const [maxShift, setMaxShift] = useState<number | null>(null);
const [shift, setShift] = useState<number | null>(
@@ -2,7 +2,6 @@ import React, { ReactElement, useCallback, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import classNames from 'classnames';
import { AllInOneMenu, useViewportGrid } from '@ohif/ui';
import { CommandsManager, ServicesManager } from '@ohif/core';
import { Colormap } from './Colormap';
import { Colorbar } from './Colorbar';
import { setViewportColorbar } from './Colorbar';
@@ -22,8 +21,6 @@ export type WindowLevelActionMenuProps = {
presets: Array<Record<string, Array<WindowLevelPreset>>>;
verticalDirection: AllInOneMenu.VerticalDirection;
horizontalDirection: AllInOneMenu.HorizontalDirection;
commandsManager: CommandsManager;
serviceManager: ServicesManager;
colorbarProperties: ColorbarProperties;
displaySets: Array<any>;
volumeRenderingPresets: Array<ViewportPreset>;
@@ -37,12 +34,12 @@ export function WindowLevelActionMenu({
verticalDirection,
horizontalDirection,
commandsManager,
serviceManager,
servicesManager,
colorbarProperties,
displaySets,
volumeRenderingPresets,
volumeRenderingQualityRange,
}: WindowLevelActionMenuProps): ReactElement {
}: withAppTypes<WindowLevelActionMenuProps>): ReactElement {
const {
colormaps,
colorbarContainerPosition,
@@ -50,7 +47,7 @@ export function WindowLevelActionMenu({
colorbarTickPosition,
width: colorbarWidth,
} = colorbarProperties;
const { colorbarService, cornerstoneViewportService } = serviceManager.services;
const { colorbarService, cornerstoneViewportService } = servicesManager.services;
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
const backgroundColor = viewportInfo.getViewportOptions().background;
@@ -68,7 +65,7 @@ export function WindowLevelActionMenu({
const [is3DVolume, setIs3DVolume] = useState(false);
const onSetColorbar = useCallback(() => {
setViewportColorbar(viewportId, displaySets, commandsManager, serviceManager, {
setViewportColorbar(viewportId, displaySets, commandsManager, servicesManager, {
colormaps,
ticks: {
position: colorbarTickPosition,
@@ -138,7 +135,7 @@ export function WindowLevelActionMenu({
viewportId={viewportId}
displaySets={displaySets.filter(ds => !nonImageModalities.includes(ds.Modality))}
commandsManager={commandsManager}
serviceManager={serviceManager}
servicesManager={servicesManager}
colorbarProperties={colorbarProperties}
/>
)}
@@ -154,7 +151,7 @@ export function WindowLevelActionMenu({
viewportId={viewportId}
displaySets={displaySets.filter(ds => !nonImageModalities.includes(ds.Modality))}
commandsManager={commandsManager}
serviceManager={serviceManager}
servicesManager={servicesManager}
/>
</AllInOneMenu.SubMenu>
)}
@@ -175,7 +172,7 @@ export function WindowLevelActionMenu({
{volumeRenderingPresets && is3DVolume && (
<VolumeRenderingPresets
serviceManager={serviceManager}
servicesManager={servicesManager}
viewportId={viewportId}
commandsManager={commandsManager}
volumeRenderingPresets={volumeRenderingPresets}
@@ -188,7 +185,7 @@ export function WindowLevelActionMenu({
viewportId={viewportId}
commandsManager={commandsManager}
volumeRenderingQualityRange={volumeRenderingQualityRange}
serviceManager={serviceManager}
servicesManager={servicesManager}
/>
</AllInOneMenu.SubMenu>
)}
@@ -9,7 +9,7 @@ export function getWindowLevelActionMenu({
commandsManager,
verticalDirection,
horizontalDirection,
}): ReactNode {
}: withAppTypes): ReactNode {
const { customizationService } = servicesManager.services;
const { presets } = customizationService.get('cornerstone.windowLevelPresets');
@@ -32,7 +32,7 @@ export function getWindowLevelActionMenu({
verticalDirection={verticalDirection}
horizontalDirection={horizontalDirection}
commandsManager={commandsManager}
serviceManager={servicesManager}
servicesManager={servicesManager}
colorbarProperties={colorbarProperties}
displaySets={displaySets}
volumeRenderingPresets={volumeRenderingPresets}
@@ -6,7 +6,7 @@ const getToggledClassName = (isToggled: boolean) => {
: '!text-common-bright hover:!bg-primary-dark hover:text-primary-light';
};
export default function getToolbarModule({ commandsManager, servicesManager }) {
export default function getToolbarModule({ commandsManager, servicesManager }: withAppTypes) {
const {
toolGroupService,
toolbarService,
+4 -4
View File
@@ -8,7 +8,7 @@ import {
} from '@cornerstonejs/core';
import * as csStreamingImageVolumeLoader from '@cornerstonejs/streaming-image-volume-loader';
import { Enums as cs3DToolsEnums } from '@cornerstonejs/tools';
import { ServicesManager, Types } from '@ohif/core';
import { Types } from '@ohif/core';
import init from './init';
import getCustomizationModule from './getCustomizationModule';
@@ -61,7 +61,7 @@ const cornerstoneExtension: Types.Extensions.Extension = {
*/
id,
onModeEnter: ({ servicesManager }): void => {
onModeEnter: ({ servicesManager }: withAppTypes): void => {
const { cornerstoneViewportService, toolbarService, segmentationService } =
servicesManager.services;
toolbarService.registerEventForToolbarUpdate(cornerstoneViewportService, [
@@ -79,7 +79,7 @@ const cornerstoneExtension: Types.Extensions.Extension = {
]);
},
onModeExit: ({ servicesManager }): void => {
onModeExit: ({ servicesManager }: withAppTypes): void => {
const { cineService } = servicesManager.services;
// Empty out the image load and retrieval pools to prevent memory leaks
// on the mode exits
@@ -132,7 +132,7 @@ const cornerstoneExtension: Types.Extensions.Extension = {
// const onNewImageHandler = jumpData => {
// commandsManager.runCommand('jumpToImage', jumpData);
// };
const { toolbarService } = (servicesManager as ServicesManager).services;
const { toolbarService } = servicesManager.services;
return (
<OHIFCornerstoneViewport
+1 -5
View File
@@ -30,12 +30,9 @@ import nthLoader from './utils/nthLoader';
import interleaveTopToBottom from './utils/interleaveTopToBottom';
import initContextMenu from './initContextMenu';
import initDoubleClick from './initDoubleClick';
import { CornerstoneServices } from './types';
import initViewTiming from './utils/initViewTiming';
import { colormaps } from './utils/colormaps';
import { debounce } from 'lodash';
const { registerColormap } = csUtilities.colormap;
// TODO: Cypress tests are currently grabbing this from the window?
@@ -101,7 +98,7 @@ export default async function init({
hangingProtocolService,
viewportGridService,
stateSyncService,
} = servicesManager.services as CornerstoneServices;
} = servicesManager.services;
window.services = servicesManager.services;
window.extensionManager = extensionManager;
@@ -144,7 +141,6 @@ export default async function init({
});
const labelmapRepresentation = cornerstoneTools.Enums.SegmentationRepresentations.Labelmap;
cornerstoneTools.segmentation.config.setGlobalRepresentationConfig(labelmapRepresentation, {
fillAlpha: 0.5,
fillAlphaInactive: 0.2,
@@ -19,7 +19,7 @@ function _getVolumeFromViewport(viewport) {
* @param srcViewportIndex Source viewport index
* @returns array with viewport information.
*/
function _getSyncedViewports(servicesManager, srcViewportId) {
function _getSyncedViewports(servicesManager: AppTypes.ServicesManager, srcViewportId) {
const { viewportGridService, cornerstoneViewportService } = servicesManager.services;
const { viewports: viewportsStates } = viewportGridService.getState();
@@ -48,7 +48,7 @@ function _getSyncedViewports(servicesManager, srcViewportId) {
.map(({ viewportId }) => ({ viewportId }));
}
function initCineService(servicesManager) {
function initCineService(servicesManager: AppTypes.ServicesManager) {
const { cineService } = servicesManager.services;
const getSyncedViewports = viewportId => {
@@ -178,7 +178,7 @@ const initMeasurementService = (
return csTools3DVer1MeasurementSource;
};
const connectToolsToMeasurementService = servicesManager => {
const connectToolsToMeasurementService = (servicesManager: AppTypes.ServicesManager) => {
const {
measurementService,
displaySetService,
@@ -1,4 +1,4 @@
import { ServicesManager, Types } from '@ohif/core';
import { Types } from '@ohif/core';
import { cache as cs3DCache, Enums, volumeLoader, utilities as utils } from '@cornerstonejs/core';
import getCornerstoneViewportType from '../../utils/getCornerstoneViewportType';
@@ -17,9 +17,9 @@ class CornerstoneCacheService {
stackImageIds: Map<string, string[]> = new Map();
volumeImageIds: Map<string, string[]> = new Map();
readonly servicesManager: ServicesManager;
readonly servicesManager: AppTypes.ServicesManager;
constructor(servicesManager: ServicesManager) {
constructor(servicesManager: AppTypes.ServicesManager) {
this.servicesManager = servicesManager;
}
@@ -1,4 +1,4 @@
import { Types as OhifTypes, ServicesManager, PubSubService } from '@ohif/core';
import { Types as OhifTypes, PubSubService } from '@ohif/core';
import {
cache,
Enums as csEnums,
@@ -60,7 +60,7 @@ class SegmentationService extends PubSubService {
};
segmentations: Record<string, Segmentation>;
readonly servicesManager: ServicesManager;
readonly servicesManager: AppTypes.ServicesManager;
highlightIntervalId = null;
readonly EVENTS = EVENTS;
@@ -568,7 +568,7 @@ class SegmentationService extends PubSubService {
rgba,
} = segmentInfo;
const { x, y, z } = segDisplaySet.centroids.get(segmentIndex);
const { x, y, z } = segDisplaySet.centroids.get(segmentIndex) || { x: 0, y: 0, z: 0 };
const centerWorld = derivedVolume.imageData.indexToWorld([x, y, z]);
segmentation.cachedStats = {
@@ -1,7 +1,7 @@
import { synchronizers, SynchronizerManager, Synchronizer } from '@cornerstonejs/tools';
import { getRenderingEngines, utilities } from '@cornerstonejs/core';
import { pubSubServiceInterface, Types, ServicesManager } from '@ohif/core';
import { pubSubServiceInterface, Types } from '@ohif/core';
const EVENTS = {
TOOL_GROUP_CREATED: 'event::cornerstone::syncgroupservice:toolgroupcreated',
@@ -40,7 +40,7 @@ export default class SyncGroupService {
},
};
servicesManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
listeners: { [key: string]: (...args: any[]) => void } = {};
EVENTS: { [key: string]: string };
synchronizerCreators: Record<string, SyncCreator> = {
@@ -55,8 +55,8 @@ export default class SyncGroupService {
synchronizersByType: { [key: string]: Synchronizer[] } = {};
constructor(serviceManager: ServicesManager) {
this.servicesManager = serviceManager;
constructor(servicesManager: AppTypes.ServicesManager) {
this.servicesManager = servicesManager;
this.listeners = {};
this.EVENTS = EVENTS;
//
@@ -32,7 +32,10 @@ export default class ToolGroupService {
},
};
serviceManager: any;
servicesManager: AppTypes.ServicesManager;
cornerstoneViewportService: any;
viewportGridService: any;
uiNotificationService: any;
private toolGroupIds: Set<string> = new Set();
/**
* Service-specific
@@ -40,9 +43,9 @@ export default class ToolGroupService {
listeners: { [key: string]: Function[] };
EVENTS: { [key: string]: string };
constructor(serviceManager) {
constructor(servicesManager: AppTypes.ServicesManager) {
const { cornerstoneViewportService, viewportGridService, uiNotificationService } =
serviceManager.services;
servicesManager.services;
this.cornerstoneViewportService = cornerstoneViewportService;
this.viewportGridService = viewportGridService;
this.uiNotificationService = uiNotificationService;
@@ -1,4 +1,4 @@
import { PubSubService, ServicesManager } from '@ohif/core';
import { PubSubService } from '@ohif/core';
import * as OhifTypes from '@ohif/core/types';
import {
RenderingEngine,
@@ -52,14 +52,14 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi
enableResizeDetector: true;
resizeRefreshRateMs: 200;
resizeRefreshMode: 'debounce';
servicesManager = null;
servicesManager: AppTypes.ServicesManager = null;
resizeQueue = [];
viewportResizeTimer = null;
gridResizeDelay = 50;
gridResizeTimeOut = null;
constructor(servicesManager: ServicesManager) {
constructor(servicesManager: AppTypes.ServicesManager) {
super(EVENTS);
this.renderingEngine = null;
this.viewportGridResizeObserver = null;
@@ -8,7 +8,7 @@ import { Presentations } from '../../types/Presentation';
* updating the viewport.
*/
export interface IViewportService {
servicesManager: unknown;
servicesManager: AppTypes.ServicesManager;
hangingProtocolService: unknown;
renderingEngine: unknown;
viewportGridResizeObserver: unknown;
@@ -1,4 +1,3 @@
import { metaData } from '@cornerstonejs/core';
import { LengthTool, utilities } from '@cornerstonejs/tools';
import callInputDialog from '../utils/callInputDialog';
import getActiveViewportEnabledElement from '../utils/getActiveViewportEnabledElement';
@@ -49,7 +48,10 @@ function calculateLength3(pos1, pos2) {
export default CalibrationLineTool;
export function onCompletedCalibrationLine(servicesManager, csToolsEvent) {
export function onCompletedCalibrationLine(
servicesManager: AppTypes.ServicesManager,
csToolsEvent
) {
const { uiDialogService, viewportGridService } = servicesManager.services;
// calculate length (mm) with the current Pixel Spacing
@@ -0,0 +1,29 @@
/* eslint-disable @typescript-eslint/no-namespace */
import CornerstoneCacheServiceType from '../services/CornerstoneCacheService';
import CornerstoneViewportServiceType from '../services/ViewportService/CornerstoneViewportService';
import SegmentationServiceType from '../services/SegmentationService';
import SyncGroupServiceType from '../services/SyncGroupService';
import ToolGroupServiceType from '../services/ToolGroupService';
import ViewportActionCornersServiceType from '../services/ViewportActionCornersService/ViewportActionCornersService';
import ColorbarServiceType from '../services/ColorbarService';
declare global {
namespace AppTypes {
export type CornerstoneCacheService = CornerstoneCacheServiceType;
export type CornerstoneViewportService = CornerstoneViewportServiceType;
export type SegmentationService = SegmentationServiceType;
export type SyncGroupService = SyncGroupServiceType;
export type ToolGroupService = ToolGroupServiceType;
export type ViewportActionCornersService = ViewportActionCornersServiceType;
export type ColorbarService = ColorbarServiceType;
export interface Services {
cornerstoneViewportService?: CornerstoneViewportServiceType;
toolGroupService?: ToolGroupServiceType;
syncGroupService?: SyncGroupServiceType;
segmentationService?: SegmentationServiceType;
cornerstoneCacheService?: CornerstoneCacheServiceType;
viewportActionCornersService?: ViewportActionCornersServiceType;
colorbarService?: ColorbarServiceType;
}
}
}
@@ -1,5 +1,4 @@
import { ColorMapPreset } from './Colormap';
import { CommandsManager, ServicesManager } from '@ohif/core';
export type ColorbarOptions = {
position: string;
@@ -11,8 +10,6 @@ export type ColorbarOptions = {
export type ColorbarProps = {
viewportId: string;
commandsManager: CommandsManager;
serviceManager: ServicesManager;
displaySets: Array<any>;
colorbarProperties: ColorbarProperties;
};
+2 -2
View File
@@ -1,4 +1,4 @@
import { CommandsManager, ServicesManager } from '@ohif/core';
import { CommandsManager } from '@ohif/core';
export type ColorMapPreset = {
ColorSpace;
@@ -10,7 +10,7 @@ export type ColorMapPreset = {
export type ColormapProps = {
viewportId: string;
commandsManager: CommandsManager;
serviceManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
colormaps: Array<ColorMapPreset>;
displaySets: Array<any>;
};
@@ -5,6 +5,7 @@ import SegmentationService from '../services/SegmentationService';
import CornerstoneCacheService from '../services/CornerstoneCacheService';
import CornerstoneViewportService from '../services/ViewportService/CornerstoneViewportService';
import ViewportActionCornersService from '../services/ViewportActionCornersService/ViewportActionCornersService';
import ColorbarService from '../services/ColorbarService';
interface CornerstoneServices extends Types.Services {
cornerstoneViewportService: CornerstoneViewportService;
@@ -13,6 +14,7 @@ interface CornerstoneServices extends Types.Services {
segmentationService: SegmentationService;
cornerstoneCacheService: CornerstoneCacheService;
viewportActionCornersService: ViewportActionCornersService;
colorbarService: ColorbarService;
}
export default CornerstoneServices;
@@ -1,4 +1,4 @@
import { ServicesManager, CommandsManager } from '@ohif/core';
import { CommandsManager } from '@ohif/core';
export type ViewportPreset = {
name: string;
@@ -15,7 +15,7 @@ export type ViewportPreset = {
export type VolumeRenderingPresetsProps = {
viewportId: string;
serviceManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
commandsManager: CommandsManager;
volumeRenderingPresets: ViewportPreset[];
};
@@ -30,7 +30,7 @@ export type VolumeRenderingPresetsContentProps = {
export type VolumeRenderingOptionsProps = {
viewportId: string;
commandsManager: CommandsManager;
serviceManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
volumeRenderingQualityRange: VolumeRenderingQualityRange;
};
@@ -43,24 +43,24 @@ export type VolumeRenderingQualityRange = {
export type VolumeRenderingQualityProps = {
viewportId: string;
commandsManager: CommandsManager;
serviceManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
volumeRenderingQualityRange: VolumeRenderingQualityRange;
};
export type VolumeShiftProps = {
viewportId: string;
commandsManager: CommandsManager;
serviceManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
};
export type VolumeShadeProps = {
viewportId: string;
commandsManager: CommandsManager;
serviceManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
};
export type VolumeLightingProps = {
viewportId: string;
commandsManager: CommandsManager;
serviceManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
};
@@ -1,10 +1,12 @@
import { DisplaySetService, ViewportGridService } from '@ohif/core';
const IMAGE_SLICE_SYNC_NAME = 'IMAGE_SLICE_SYNC';
export default function toggleImageSliceSync({
servicesManager,
viewports: providedViewports,
syncId,
}) {
}: withAppTypes) {
const { syncGroupService, viewportGridService, displaySetService, cornerstoneViewportService } =
servicesManager.services;
@@ -46,7 +48,7 @@ export default function toggleImageSliceSync({
});
}
function disableSync(syncName, servicesManager) {
function disableSync(syncName, servicesManager: AppTypes.ServicesManager) {
const { syncGroupService, viewportGridService, displaySetService, cornerstoneViewportService } =
servicesManager.services;
const viewports = getReconstructableStackViewports(viewportGridService, displaySetService);
@@ -68,7 +70,10 @@ function disableSync(syncName, servicesManager) {
* Gets the consistent spacing stack viewport types, which are the ones which
* can be navigated using the stack image sync right now.
*/
function getReconstructableStackViewports(viewportGridService, displaySetService) {
function getReconstructableStackViewports(
viewportGridService: ViewportGridService,
displaySetService: DisplaySetService
) {
let { viewports } = viewportGridService.getState();
viewports = [...viewports.values()];
@@ -1,3 +1,5 @@
import { DisplaySetService, ViewportGridService } from '@ohif/core';
const VOI_SYNC_NAME = 'VOI_SYNC';
const getSyncId = modality => `${VOI_SYNC_NAME}_${modality}`;
@@ -6,7 +8,7 @@ export default function toggleVOISliceSync({
servicesManager,
viewports: providedViewports,
syncId,
}) {
}: withAppTypes) {
const { syncGroupService, viewportGridService, displaySetService, cornerstoneViewportService } =
servicesManager.services;
@@ -52,7 +54,7 @@ export default function toggleVOISliceSync({
}
}
function disableSync(modalityViewports, syncId, servicesManager) {
function disableSync(modalityViewports, syncId, servicesManager: AppTypes.ServicesManager) {
const { syncGroupService, cornerstoneViewportService } = servicesManager.services;
const viewports = modalityViewports;
@@ -70,7 +72,10 @@ function disableSync(modalityViewports, syncId, servicesManager) {
});
}
function groupViewportsByModality(viewportGridService, displaySetService) {
function groupViewportsByModality(
viewportGridService: ViewportGridService,
displaySetService: DisplaySetService
) {
let { viewports } = viewportGridService.getState();
viewports = [...viewports.values()];
+73
View File
@@ -3,6 +3,79 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.9.0-beta.7](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.6...v3.9.0-beta.7) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-default
# [3.9.0-beta.6](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.5...v3.9.0-beta.6) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-default
# [3.9.0-beta.5](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.4...v3.9.0-beta.5) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-default
# [3.9.0-beta.4](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.3...v3.9.0-beta.4) (2024-05-14)
### Bug Fixes
* **DicomJSONDataSource:** Fix series filtering ([#4092](https://github.com/OHIF/Viewers/issues/4092)) ([2de102c](https://github.com/OHIF/Viewers/commit/2de102c73c795cfb48b49005b10aa788444a45b7))
# [3.9.0-beta.3](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.2...v3.9.0-beta.3) (2024-05-08)
### Features
* **typings:** Enhance typing support with withAppTypes and custom services throughout OHIF ([#4090](https://github.com/OHIF/Viewers/issues/4090)) ([374065b](https://github.com/OHIF/Viewers/commit/374065bc3bad9d212f9817a8d41546cc64cfabfb))
# [3.9.0-beta.2](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.1...v3.9.0-beta.2) (2024-05-06)
### Bug Fixes
* **bugs:** enhancements and bugs in several areas ([#4086](https://github.com/OHIF/Viewers/issues/4086)) ([730f434](https://github.com/OHIF/Viewers/commit/730f4349100f21b4489a21707dbb2dca9dbfbba2))
# [3.9.0-beta.1](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.0...v3.9.0-beta.1) (2024-05-06)
**Note:** Version bump only for package @ohif/extension-default
# [3.9.0-beta.0](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.94...v3.9.0-beta.0) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-default
# [3.8.0-beta.94](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.93...v3.8.0-beta.94) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-default
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-default",
"version": "3.8.0-beta.94",
"version": "3.9.0-beta.7",
"description": "Common/default features and functionality for basic image viewing",
"author": "OHIF Core Team",
"license": "MIT",
@@ -32,8 +32,8 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@ohif/core": "3.8.0-beta.94",
"@ohif/i18n": "3.8.0-beta.94",
"@ohif/core": "3.9.0-beta.7",
"@ohif/i18n": "3.9.0-beta.7",
"dcmjs": "^0.29.12",
"dicomweb-client": "^0.10.4",
"prop-types": "^15.6.2",
@@ -5,7 +5,11 @@ import { DicomMetadataStore } from '@ohif/core';
*
* @param {*} servicesManager
*/
async function createReportAsync({ servicesManager, getReport, reportType = 'measurement' }) {
async function createReportAsync({
servicesManager,
getReport,
reportType = 'measurement',
}: withAppTypes) {
const { displaySetService, uiNotificationService, uiDialogService } = servicesManager.services;
const loadingDialogId = uiDialogService.create({
showOverlay: true,
@@ -39,6 +43,7 @@ async function createReportAsync({ servicesManager, getReport, reportType = 'mea
message: error.message || `Failed to store ${reportType}`,
type: 'error',
});
throw new Error(`Failed to store ${reportType}. Error: ${error.message || 'Unknown error'}`);
} finally {
uiDialogService.dismiss({ id: loadingDialogId });
}
@@ -1,18 +1,13 @@
import React, { ReactElement, useCallback, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Icon, useModal } from '@ohif/ui';
import { ExtensionManager, ServicesManager, Types } from '@ohif/core';
import { Types } from '@ohif/core';
import DataSourceConfigurationModalComponent from './DataSourceConfigurationModalComponent';
type DataSourceConfigurationComponentProps = {
servicesManager: ServicesManager;
extensionManager: ExtensionManager;
};
function DataSourceConfigurationComponent({
servicesManager,
extensionManager,
}: DataSourceConfigurationComponentProps): ReactElement {
}: withAppTypes): ReactElement {
const { t } = useTranslation('DataSourceConfiguration');
const { show, hide } = useModal();
@@ -1,9 +1,9 @@
import React, { useEffect, useState, useCallback } from 'react';
import { SidePanel } from '@ohif/ui';
import { PanelService, ServicesManager, Types } from '@ohif/core';
import { Types } from '@ohif/core';
export type SidePanelWithServicesProps = {
servicesManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
side: 'left' | 'right';
className: string;
activeTabIndex: number;
@@ -19,7 +19,7 @@ const SidePanelWithServices = ({
expandedWidth,
...props
}: SidePanelWithServicesProps) => {
const panelService: PanelService = servicesManager?.services?.panelService;
const panelService = servicesManager?.services?.panelService;
// Tracks whether this SidePanel has been opened at least once since this SidePanel was inserted into the DOM.
// Thus going to the Study List page and back to the viewer resets this flag for a SidePanel.
@@ -1,6 +1,6 @@
import * as ContextMenuItemsBuilder from './ContextMenuItemsBuilder';
import ContextMenu from '../../../../platform/ui/src/components/ContextMenu/ContextMenu';
import { CommandsManager, ServicesManager, Types } from '@ohif/core';
import { CommandsManager } from '@ohif/core';
import { annotation as CsAnnotation } from '@cornerstonejs/tools';
import { Menu, MenuItem, Point, ContextMenuProps } from './types';
@@ -17,11 +17,11 @@ import { Menu, MenuItem, Point, ContextMenuProps } from './types';
*/
export default class ContextMenuController {
commandsManager: CommandsManager;
services: Types.Services;
services: AppTypes.Services;
menuItems: Menu[] | MenuItem[];
constructor(servicesManager: ServicesManager, commandsManager: CommandsManager) {
this.services = servicesManager.services as Obj;
constructor(servicesManager: AppTypes.ServicesManager, commandsManager: CommandsManager) {
this.services = servicesManager.services;
this.commandsManager = commandsManager;
}
@@ -42,7 +42,7 @@ class GoogleCloudDataSourceConfigurationAPI implements Types.BaseDataSourceConfi
private _fetchOptions: { method: string; headers: unknown };
private _dataSourceName: string;
constructor(dataSourceName, servicesManager, extensionManager) {
constructor(dataSourceName, servicesManager: AppTypes.ServicesManager, extensionManager) {
this._dataSourceName = dataSourceName;
this._extensionManager = extensionManager;
const userAuthenticationService = servicesManager.services.userAuthenticationService;
@@ -169,7 +169,7 @@ function createDicomJSONApi(dicomJsonConfig) {
return getDirectURL(dicomJsonConfig, params);
},
series: {
metadata: async ({ StudyInstanceUID, madeInClient = false, customSort } = {}) => {
metadata: async ({ filters, StudyInstanceUID, madeInClient = false, customSort } = {}) => {
if (!StudyInstanceUID) {
throw new Error('Unable to query for SeriesMetadata without StudyInstanceUID');
}
@@ -183,6 +183,18 @@ function createDicomJSONApi(dicomJsonConfig) {
series = study.series;
}
const seriesKeys = [
'SeriesInstanceUID',
'SeriesInstanceUIDs',
'seriesInstanceUID',
'seriesInstanceUIDs',
];
const seriesFilter = seriesKeys.find(key => filters[key]);
if (seriesFilter) {
const seriesUIDs = filters[seriesFilter];
series = series.filter(s => seriesUIDs.includes(s.SeriesInstanceUID));
}
const seriesSummaryMetadata = series.map(series => {
const seriesSummary = {
StudyInstanceUID: study.StudyInstanceUID,
@@ -8,13 +8,13 @@ import {
processResults,
processSeriesResults,
} from './qido.js';
import dcm4cheeReject from './dcm4cheeReject';
import dcm4cheeReject from './dcm4cheeReject.js';
import getImageId from './utils/getImageId';
import getImageId from './utils/getImageId.js';
import dcmjs from 'dcmjs';
import { retrieveStudyMetadata, deleteStudyMetadataPromise } from './retrieveStudyMetadata.js';
import StaticWadoClient from './utils/StaticWadoClient';
import getDirectURL from '../utils/getDirectURL';
import getDirectURL from '../utils/getDirectURL.js';
import { fixBulkDataURI } from './utils/fixBulkDataURI';
const { DicomMetaDictionary, DicomDict } = dcmjs.data;
@@ -89,9 +89,9 @@ function createDicomWebApi(dicomWebConfig, servicesManager) {
};
generateWadoHeader = () => {
let authorizationHeader = getAuthrorizationHeader();
const authorizationHeader = getAuthrorizationHeader();
//Generate accept header depending on config params
let formattedAcceptHeader = utils.generateAcceptHeader(
const formattedAcceptHeader = utils.generateAcceptHeader(
dicomWebConfig.acceptHeader,
dicomWebConfig.requestTransferSyntaxUID,
dicomWebConfig.omitQuotationForMultipartRequest
@@ -9,7 +9,7 @@ import { createDicomWebApi } from '../DicomWebDataSource/index';
* dicomWeb configuration array
*
*/
function createDicomWebProxyApi(dicomWebProxyConfig, servicesManager) {
function createDicomWebProxyApi(dicomWebProxyConfig, servicesManager: AppTypes.ServicesManager) {
const { name } = dicomWebProxyConfig;
let dicomWebDelegate = undefined;
@@ -21,7 +21,7 @@ function createDicomWebProxyApi(dicomWebProxyConfig, servicesManager) {
throw new Error(`No url for '${name}'`);
} else {
const response = await fetch(url);
let data = await response.json();
const data = await response.json();
if (!data.servers?.dicomWeb?.[0]) {
throw new Error('Invalid configuration returned by url');
}
@@ -167,7 +167,7 @@ export const callByRetrieveAETitle = ({
function createMergeDataSourceApi(
mergeConfig: MergeConfig,
servicesManager: unknown,
servicesManager: AppTypes.ServicesManager,
extensionManager
) {
const { seriesMerge } = mergeConfig;
@@ -1,7 +1,7 @@
import React, { useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
import { utils, ServicesManager } from '@ohif/core';
import { utils } from '@ohif/core';
import {
MeasurementTable,
Dialog,
@@ -24,14 +24,13 @@ export default function PanelMeasurementTable({
servicesManager,
commandsManager,
extensionManager,
}): React.FunctionComponent {
}: withAppTypes): React.FunctionComponent {
const { t } = useTranslation('MeasurementTable');
const [viewportGrid, viewportGridService] = useViewportGrid();
const { activeViewportId, viewports } = viewportGrid;
const { measurementService, uiDialogService, uiNotificationService, displaySetService } = (
servicesManager as ServicesManager
).services;
const { measurementService, uiDialogService, uiNotificationService, displaySetService } =
servicesManager.services;
const [displayMeasurements, setDisplayMeasurements] = useState([]);
useEffect(() => {
@@ -245,7 +244,7 @@ export default function PanelMeasurementTable({
}
PanelMeasurementTable.propTypes = {
servicesManager: PropTypes.instanceOf(ServicesManager).isRequired,
servicesManager: PropTypes.object.isRequired,
};
function _getMappedMeasurements(measurementService) {
@@ -16,7 +16,7 @@ function PanelStudyBrowser({
getStudiesForPatientByMRN,
requestDisplaySetCreationForStudy,
dataSource,
}) {
}: withAppTypes) {
const { hangingProtocolService, displaySetService, uiNotificationService } =
servicesManager.services;
const navigate = useNavigate();
@@ -1,9 +1,8 @@
import React, { useEffect, useState, useCallback } from 'react';
import PropTypes from 'prop-types';
import { LayoutSelector as OHIFLayoutSelector, ToolbarButton } from '@ohif/ui';
import { ServicesManager } from '@ohif/core';
function LegacyLayoutSelectorWithServices({ servicesManager, ...props }) {
function LegacyLayoutSelectorWithServices({ servicesManager, ...props }: withAppTypes) {
const { toolbarService } = servicesManager.services;
const onSelection = useCallback(
@@ -76,7 +75,7 @@ LayoutSelector.propTypes = {
rows: PropTypes.number,
columns: PropTypes.number,
onLayoutChange: PropTypes.func,
servicesManager: PropTypes.instanceOf(ServicesManager),
servicesManager: PropTypes.object.isRequired,
};
LayoutSelector.defaultProps = {
@@ -1,7 +1,6 @@
import React, { useEffect, useState, useCallback } from 'react';
import PropTypes from 'prop-types';
import { LayoutSelector as OHIFLayoutSelector, ToolbarButton, LayoutPreset } from '@ohif/ui';
import { ServicesManager } from '@ohif/core';
const defaultCommonPresets = [
{
@@ -45,7 +44,7 @@ const _areSelectorsValid = (hp, displaySets, hangingProtocolService) => {
);
};
const generateAdvancedPresets = ({ servicesManager }) => {
const generateAdvancedPresets = ({ servicesManager }: withAppTypes) => {
const { hangingProtocolService, viewportGridService, displaySetService } =
servicesManager.services;
@@ -84,7 +83,11 @@ const generateAdvancedPresets = ({ servicesManager }) => {
.filter(preset => preset !== null);
};
function ToolbarLayoutSelectorWithServices({ commandsManager, servicesManager, ...props }) {
function ToolbarLayoutSelectorWithServices({
commandsManager,
servicesManager,
...props
}: withAppTypes) {
const [isDisabled, setIsDisabled] = useState(false);
const handleMouseEnter = () => {
@@ -129,7 +132,7 @@ function LayoutSelector({
servicesManager,
tooltipDisabled,
...rest
}) {
}: withAppTypes) {
const [isOpen, setIsOpen] = useState(false);
const { customizationService } = servicesManager.services;
@@ -225,7 +228,7 @@ LayoutSelector.propTypes = {
rows: PropTypes.number,
columns: PropTypes.number,
onLayoutChange: PropTypes.func,
servicesManager: PropTypes.instanceOf(ServicesManager),
servicesManager: PropTypes.object.isRequired,
};
LayoutSelector.defaultProps = {
@@ -10,7 +10,7 @@ function ToolbarSplitButtonWithServices({
renderer,
onInteraction,
servicesManager,
}) {
}: withAppTypes) {
const { toolbarService } = servicesManager?.services;
/* Bubbles up individual item clicks */
@@ -10,7 +10,12 @@ import { Toolbar } from '../Toolbar/Toolbar';
const { availableLanguages, defaultLanguage, currentLanguage } = i18n;
function ViewerHeader({ hotkeysManager, extensionManager, servicesManager, appConfig }) {
function ViewerHeader({
hotkeysManager,
extensionManager,
servicesManager,
appConfig,
}: withAppTypes) {
const navigate = useNavigate();
const location = useLocation();
@@ -2,7 +2,7 @@ import React, { useEffect, useState, useCallback } from 'react';
import PropTypes from 'prop-types';
import { ErrorBoundary, LoadingIndicatorProgress, InvestigationalUseDialog } from '@ohif/ui';
import { ServicesManager, HangingProtocolService, CommandsManager } from '@ohif/core';
import { HangingProtocolService, CommandsManager } from '@ohif/core';
import { useAppConfig } from '@state';
import ViewerHeader from './ViewerHeader';
import SidePanelWithServices from '../Components/SidePanelWithServices';
@@ -18,7 +18,7 @@ function ViewerLayout({
ViewportGridComp,
leftPanelClosed = false,
rightPanelClosed = false,
}): React.FunctionComponent {
}: withAppTypes): React.FunctionComponent {
const [appConfig] = useAppConfig();
const { panelService, hangingProtocolService } = servicesManager.services;
@@ -167,7 +167,7 @@ ViewerLayout.propTypes = {
getModuleEntry: PropTypes.func.isRequired,
}).isRequired,
commandsManager: PropTypes.instanceOf(CommandsManager),
servicesManager: PropTypes.instanceOf(ServicesManager),
servicesManager: PropTypes.object.isRequired,
// From modes
leftPanels: PropTypes.array,
rightPanels: PropTypes.array,
+2 -3
View File
@@ -1,4 +1,4 @@
import { ServicesManager, utils, Types } from '@ohif/core';
import { utils, Types } from '@ohif/core';
import { ContextMenuController, defaultContextMenu } from './CustomizableContextMenu';
import DicomTagBrowser from './DicomTagBrowser/DicomTagBrowser';
@@ -12,7 +12,6 @@ import { NavigateHistory } from './types/commandModuleTypes';
import { history } from '@ohif/app';
const { subscribeToNextViewportGridChange } = utils;
export type HangingProtocolParams = {
protocolId?: string;
stageIndex?: number;
@@ -38,7 +37,7 @@ const commandsModule = ({
viewportGridService,
displaySetService,
stateSyncService,
} = (servicesManager as ServicesManager).services;
} = servicesManager.services;
// Define a context menu controller for use with any context menus
const contextMenuController = new ContextMenuController(servicesManager, commandsManager);
@@ -1,5 +1,4 @@
import React, { useEffect, useState, useCallback, ReactElement } from 'react';
import { ServicesManager } from '@ohif/core';
import { ProgressDropdown } from '@ohif/ui';
const workflowStepsToDropdownOptions = (steps = []) =>
@@ -11,11 +10,7 @@ const workflowStepsToDropdownOptions = (steps = []) =>
completed: false,
}));
function ProgressDropdownWithService({
servicesManager,
}: {
servicesManager: ServicesManager;
}): ReactElement {
function ProgressDropdownWithService({ servicesManager }: withAppTypes): ReactElement {
const { workflowStepsService } = servicesManager.services;
const [activeStepId, setActiveStepId] = useState(workflowStepsService.activeWorkflowStep?.id);
@@ -5,7 +5,7 @@
import { createDicomWebApi } from './DicomWebDataSource/index.js';
import { createDicomJSONApi } from './DicomJSONDataSource/index.js';
import { createDicomLocalApi } from './DicomLocalDataSource/index.js';
import { createDicomWebProxyApi } from './DicomWebProxyDataSource/index.js';
import { createDicomWebProxyApi } from './DicomWebProxyDataSource/index';
import { createMergeDataSourceApi } from './MergeDataSource/index';
/**
+1 -1
View File
@@ -13,7 +13,7 @@ const getClassName = isToggled => {
};
};
export default function getToolbarModule({ commandsManager, servicesManager }) {
export default function getToolbarModule({ commandsManager, servicesManager }: withAppTypes) {
const { cineService } = servicesManager.services;
return [
{
+2 -2
View File
@@ -1,4 +1,4 @@
import { ServicesManager, CommandsManager, ExtensionManager } from '@ohif/core';
import { CommandsManager, ExtensionManager } from '@ohif/core';
import LineChartViewport from './Components/LineChartViewport/index';
const getViewportModule = ({
@@ -6,7 +6,7 @@ const getViewportModule = ({
commandsManager,
extensionManager,
}: {
servicesManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
commandsManager: CommandsManager;
extensionManager: ExtensionManager;
}) => {
+5 -1
View File
@@ -10,7 +10,11 @@ const metadataProvider = classes.MetadataProvider;
* @param {Object} servicesManager
* @param {Object} configuration
*/
export default function init({ servicesManager, configuration = {}, commandsManager }): void {
export default function init({
servicesManager,
configuration = {},
commandsManager,
}: withAppTypes): void {
const { stateSyncService, toolbarService, cineService, viewportGridService } =
servicesManager.services;
+70
View File
@@ -3,6 +3,76 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [3.9.0-beta.7](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.6...v3.9.0-beta.7) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.9.0-beta.6](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.5...v3.9.0-beta.6) (2024-05-15)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.9.0-beta.5](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.4...v3.9.0-beta.5) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.9.0-beta.4](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.3...v3.9.0-beta.4) (2024-05-14)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.9.0-beta.3](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.2...v3.9.0-beta.3) (2024-05-08)
### Features
* **typings:** Enhance typing support with withAppTypes and custom services throughout OHIF ([#4090](https://github.com/OHIF/Viewers/issues/4090)) ([374065b](https://github.com/OHIF/Viewers/commit/374065bc3bad9d212f9817a8d41546cc64cfabfb))
# [3.9.0-beta.2](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.1...v3.9.0-beta.2) (2024-05-06)
### Bug Fixes
* **bugs:** enhancements and bugs in several areas ([#4086](https://github.com/OHIF/Viewers/issues/4086)) ([730f434](https://github.com/OHIF/Viewers/commit/730f4349100f21b4489a21707dbb2dca9dbfbba2))
# [3.9.0-beta.1](https://github.com/OHIF/Viewers/compare/v3.9.0-beta.0...v3.9.0-beta.1) (2024-05-06)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.9.0-beta.0](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.94...v3.9.0-beta.0) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
# [3.8.0-beta.94](https://github.com/OHIF/Viewers/compare/v3.8.0-beta.93...v3.8.0-beta.94) (2024-04-29)
**Note:** Version bump only for package @ohif/extension-dicom-microscopy
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-dicom-microscopy",
"version": "3.8.0-beta.94",
"version": "3.9.0-beta.7",
"description": "OHIF extension for DICOM microscopy",
"author": "Bill Wallace, md-prog",
"license": "MIT",
@@ -30,10 +30,10 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@ohif/core": "3.8.0-beta.94",
"@ohif/extension-default": "3.8.0-beta.94",
"@ohif/i18n": "3.8.0-beta.94",
"@ohif/ui": "3.8.0-beta.94",
"@ohif/core": "3.9.0-beta.7",
"@ohif/extension-default": "3.9.0-beta.7",
"@ohif/i18n": "3.9.0-beta.7",
"@ohif/ui": "3.9.0-beta.7",
"prop-types": "^15.6.2",
"react": "^17.0.2",
"react-dom": "^17.0.2",
@@ -1,6 +1,6 @@
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import { ServicesManager, ExtensionManager, CommandsManager, DicomMetadataStore } from '@ohif/core';
import { ExtensionManager, CommandsManager, DicomMetadataStore } from '@ohif/core';
import { MeasurementTable } from '@ohif/ui';
import { withTranslation, WithTranslation } from 'react-i18next';
import { EVENTS as MicroscopyEvents } from '../../services/MicroscopyService';
@@ -53,7 +53,7 @@ interface IMicroscopyPanelProps extends WithTranslation {
onRejectComplete?: PropTypes.func; // callback when rejected annotations
//
servicesManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
extensionManager: ExtensionManager;
commandsManager: CommandsManager;
}
@@ -1,4 +1,4 @@
import { ServicesManager, CommandsManager, ExtensionManager } from '@ohif/core';
import { CommandsManager, ExtensionManager } from '@ohif/core';
import styles from './utils/styles';
import callInputDialog from './utils/callInputDialog';
@@ -7,7 +7,7 @@ export default function getCommandsModule({
commandsManager,
extensionManager,
}: {
servicesManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
commandsManager: CommandsManager;
extensionManager: ExtensionManager;
}) {
@@ -1,5 +1,5 @@
import React from 'react';
import { ServicesManager, CommandsManager, ExtensionManager } from '@ohif/core';
import { CommandsManager, ExtensionManager } from '@ohif/core';
import { useViewportGrid } from '@ohif/ui';
import MicroscopyPanel from './components/MicroscopyPanel/MicroscopyPanel';
@@ -13,7 +13,7 @@ export default function getPanelModule({
extensionManager,
servicesManager,
}: {
servicesManager: ServicesManager;
servicesManager: AppTypes.ServicesManager;
commandsManager: CommandsManager;
extensionManager: ExtensionManager;
}) {
Loaded 100 of 241 files, more files were not shown because too many files have changed in this diff. Show more