fix: Service consistency typing (#3309)

* Use more consistent type/structure for services

* Fix restoring SR so the tests described work

* One more typed service

* Added types for the Cornerstone library

* Couple more type fixes
This commit is contained in:
Bill Wallace authored and GitHub committed 2023-04-18 11:17:50 -04:00
1 parent 47c25f4364
commit 6cf271d006
24 files changed
+309 -299

No files matched your search

@@ -1,4 +1,4 @@
import { ServicesManager } from '@ohif/core';
import { ServicesManager, Types } from '@ohif/core';
import { cache as cs3DCache, Enums, volumeLoader } from '@cornerstonejs/core';
import getCornerstoneViewportType from '../../utils/getCornerstoneViewportType';
@@ -10,20 +10,21 @@ import {
const VOLUME_LOADER_SCHEME = 'cornerstoneStreamingImageVolume';
class CornerstoneCacheService {
static REGISTRATION = (serviceManager: ServicesManager) => {
return {
name: 'cornerstoneCacheService',
altName: 'CornerstoneCacheService',
create: ({ configuration = {} }) => {
return new CornerstoneCacheService(serviceManager);
},
};
static REGISTRATION = {
name: 'cornerstoneCacheService',
altName: 'CornerstoneCacheService',
create: ({
servicesManager,
}: Types.Extensions.ExtensionParams): CornerstoneCacheService => {
return new CornerstoneCacheService(servicesManager);
},
};
stackImageIds: Map<string, string[]> = new Map();
volumeImageIds: Map<string, string[]> = new Map();
readonly servicesManager: ServicesManager;
constructor(servicesManager) {
constructor(servicesManager: ServicesManager) {
this.servicesManager = servicesManager;
}
@@ -1,5 +1,6 @@
import cloneDeep from 'lodash.clonedeep';
import { Types as OhifTypes, ServicesManager, PubSubService } from '@ohif/core';
import {
cache,
eventTarget,
@@ -16,7 +17,6 @@ import {
Types as cstTypes,
utilities as cstUtils,
} from '@cornerstonejs/tools';
import { pubSubServiceInterface } from '@ohif/core';
import isEqual from 'lodash.isequal';
import { easeInOutBell } from '../../utils/transitions';
import {
@@ -47,19 +47,26 @@ const EVENTS = {
const VALUE_TYPES = {};
class SegmentationService {
listeners = {};
class SegmentationService extends PubSubService {
static REGISTRATION = {
name: 'segmentationService',
altName: 'SegmentationService',
create: ({
servicesManager,
}: OhifTypes.Extensions.ExtensionParams): SegmentationService => {
return new SegmentationService({ servicesManager });
},
};
segmentations: Record<string, Segmentation>;
servicesManager = null;
readonly servicesManager: ServicesManager;
highlightIntervalId = null;
_broadcastEvent: (eventName: string, callbackProps: any) => void;
readonly EVENTS = EVENTS;
constructor({ servicesManager }) {
super(EVENTS);
this.segmentations = {};
this.listeners = {};
Object.assign(this, pubSubServiceInterface);
this.servicesManager = servicesManager;
this._initSegmentationService();
@@ -1,11 +1,3 @@
import SegmentationService from './SegmentationService';
export default function ExtendedSegmentationService(servicesManager) {
return {
name: 'segmentationService',
altName: 'SegmentationService',
create: ({ configuration = {} }) => {
return new SegmentationService({ servicesManager });
},
};
}
export default SegmentationService;
@@ -4,7 +4,7 @@ import {
Synchronizer,
} from '@cornerstonejs/tools';
import { pubSubServiceInterface } from '@ohif/core';
import { pubSubServiceInterface, Types, ServicesManager } from '@ohif/core';
const EVENTS = {
TOOL_GROUP_CREATED: 'event::cornerstone::syncgroupservice:toolgroupcreated',
@@ -37,7 +37,17 @@ const asSyncGroup = (syncGroup: string | SyncGroup): SyncGroup =>
typeof syncGroup === 'string' ? { type: syncGroup } : syncGroup;
export default class SyncGroupService {
serviceManager: any;
static REGISTRATION = {
name: 'syncGroupService',
altName: 'SyncGroupService',
create: ({
servicesManager,
}: Types.Extensions.ExtensionParams): SyncGroupService => {
return new SyncGroupService(servicesManager);
},
};
servicesManager: ServicesManager;
listeners: { [key: string]: (...args: any[]) => void } = {};
EVENTS: { [key: string]: string };
synchronizerCreators: Record<string, SyncCreator> = {
@@ -47,8 +57,8 @@ export default class SyncGroupService {
[STACKIMAGE]: synchronizers.createStackImageSynchronizer,
};
constructor(serviceManager) {
this.serviceManager = serviceManager;
constructor(serviceManager: ServicesManager) {
this.servicesManager = serviceManager;
this.listeners = {};
this.EVENTS = EVENTS;
//
@@ -1,11 +1,3 @@
import SyncGroupService from './SyncGroupService';
export default function ExtendedSyncGroupService(serviceManager) {
return {
altName: 'SyncGroupService',
name: 'syncGroupService',
create: ({ configuration = {} }) => {
return new SyncGroupService(serviceManager);
},
};
}
export default SyncGroupService;
@@ -1,6 +1,6 @@
import { ToolGroupManager, Enums, Types } from '@cornerstonejs/tools';
import { pubSubServiceInterface } from '@ohif/core';
import { Types as OhifTypes, pubSubServiceInterface } from '@ohif/core';
const EVENTS = {
VIEWPORT_ADDED: 'event::cornerstone::toolgroupservice:viewportadded',
@@ -20,14 +20,14 @@ type Tools = {
};
export default class ToolGroupService {
public static REGISTRATION = serviceManager => {
return {
name: 'toolGroupService',
altName: 'ToolGroupService',
create: ({ configuration = {} }) => {
return new ToolGroupService(serviceManager);
},
};
public static REGISTRATION = {
name: 'toolGroupService',
altName: 'ToolGroupService',
create: ({
servicesManager,
}: OhifTypes.Extensions.ExtensionParams): ToolGroupService => {
return new ToolGroupService(servicesManager);
},
};
serviceManager: any;
@@ -1,4 +1,5 @@
import { PubSubService } from '@ohif/core';
import { PubSubService, ServicesManager } from '@ohif/core';
import * as OhifTypes from '@ohif/core/types';
import {
RenderingEngine,
StackViewport,
@@ -43,6 +44,16 @@ const EVENTS = {
*/
class CornerstoneViewportService extends PubSubService
implements IViewportService {
static REGISTRATION = {
name: 'cornerstoneViewportService',
altName: 'CornerstoneViewportService',
create: ({
servicesManager,
}: OhifTypes.Extensions.ExtensionParams): CornerstoneViewportService => {
return new CornerstoneViewportService(servicesManager);
},
};
renderingEngine: Types.IRenderingEngine | null;
viewportsInfo: Map<number, ViewportInfo> = new Map();
viewportsById: Map<string, ViewportInfo> = new Map();
@@ -55,7 +66,7 @@ class CornerstoneViewportService extends PubSubService
resizeRefreshMode: 'debounce';
servicesManager = null;
constructor(servicesManager) {
constructor(servicesManager: ServicesManager) {
super(EVENTS);
this.renderingEngine = null;
this.viewportGridResizeObserver = null;
@@ -71,7 +82,7 @@ class CornerstoneViewportService extends PubSubService
viewportIndex: number,
viewportOptions: PublicViewportOptions,
elementRef: HTMLDivElement
) {
): void {
// Use the provided viewportId
// Not providing a viewportId is frowned upon because it does weird things
// on moving them around, but it does mostly work.
@@ -855,14 +866,4 @@ class CornerstoneViewportService extends PubSubService
}
}
export default function CornerstoneViewportServiceRegistration(serviceManager) {
return {
name: 'cornerstoneViewportService',
altName: 'CornerstoneViewportService',
create: ({ configuration = {} }) => {
return new CornerstoneViewportService(serviceManager);
},
};
}
export { CornerstoneViewportService, CornerstoneViewportServiceRegistration };
export default CornerstoneViewportService;