WIP build up displaysets.

This commit is contained in:
James A. Petts committed 2020-05-15 14:01:58 +02:00
1 parent d4f51c5e3c
commit 5c19671d3c
26 files changed
+1496 -350

No files matched your search

+3 -2
View File
@@ -7,8 +7,9 @@ window.config = {
// filterQueryParam: false,
dataSources: [
{
friendlyName: "Rodrigo's DICOMWeb Server",
namespace: 'org.ohif.default.datasources.dicomweb',
friendlyName: 'dcmjs DICOMWeb Server',
namespace: 'org.ohif.default.dataSourcesModule.dicomweb',
sourceName: 'dicomweb',
configuration: {
name: 'DCM4CHEE',
wadoUriRoot: 'https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/wado',
+6 -5
View File
@@ -50,10 +50,10 @@ function appInit(appConfigOrFunc, defaultExtensions) {
* Example: [ext1, ext2, ext3]
* Example2: [[ext1, config], ext2, [ext3, config]]
*/
extensionManager.registerExtensions([
...defaultExtensions,
...appConfig.extensions,
]);
extensionManager.registerExtensions(
[...defaultExtensions, ...appConfig.extensions],
appConfig.dataSources
);
// TODO: Init global hotkeys, or the hotkeys manager?
// TODO: We no longer use `utils.addServer`
@@ -69,7 +69,8 @@ function appInit(appConfigOrFunc, defaultExtensions) {
modes.push(window.exampleMode);
}
const appRoutes = buildModeRoutes(modes, extensionManager) || [];
const appRoutes =
buildModeRoutes(modes, appConfig.dataSources, extensionManager) || [];
return {
appConfig,
+24 -21
View File
@@ -1,20 +1,26 @@
import React, { useContext } from 'react';
import SOPClassHandlerManager from './SOPClassHandlerManager';
import { displaySetManager } from '@ohif/core';
import ViewModelContext from './ViewModelContext';
import Compose from './Compose';
export default function ModeRoute({
location,
mode,
dataSourceId,
dataSourceName,
extensionManager,
}) {
const { routes, sopClassHandlers, extensions } = mode;
const dataSource = extensionManager.getDataSource(dataSourceId);
const dataSources = extensionManager.getDataSources(dataSourceName);
const { displaySetInstanceUids, setDisplaySetInstanceUids } = useContext(
ViewModelContext
);
// TODO: For now assume one unique datasource.
const dataSource = dataSources[0];
const viewModelContext = useContext(ViewModelContext);
console.log(viewModelContext);
const { displaySetInstanceUids } = viewModelContext;
// Deal with toolbar.
// Only handling one route per mode for now
@@ -28,28 +34,25 @@ export default function ModeRoute({
const LayoutComponent = layoutTemplateModuleEntry.component;
// Add SOPClassHandlers to a new SOPClassManager.
const manager = new SOPClassHandlerManager(
extensionManager,
sopClassHandlers
);
/*setInterval(() => {
setDisplaySetInstanceUids(manager.displaySets);
}, 5000);*/
debugger;
displaySetManager.init(extensionManager, sopClassHandlers, viewModelContext);
// setInterval(() => {
// setDisplaySetInstanceUids(manager.displaySets);
// }, 5000);
const queryParams = location.search;
// Call the data source to start building the view model?
//dataSource(queryParams);
//metadataStore.onModified();
const onUpdatedCallback = () => {
// TODO: This should append, not create from scratch so we don't nuke existing display sets
// when e.g. a new series arrives
//manager.createDisplaySets.then(setDisplaySetInstanceUids);
};
dataSource.retrieve.series.metadata(
queryParams,
displaySetManager.makeDisplaySets
);
// For each extension, look up their context modules
// TODO: move to extension manager.
let contextModules = [];
extensions.forEach(extensionId => {
const allRegisteredModuleIds = Object.keys(extensionManager.modulesMap);
@@ -1,31 +0,0 @@
import { dicomMetadataStore } from '@ohif/core';
export default class SOPClassHandlerManager {
constructor(extensionManager, sopClassHandlerIds) {
this.SOPClassHandlers = sopClassHandlerIds.map(
extensionManager.getModuleEntry
);
dicomMetadataStore.onSeriesMetadataLoaded(this.onSeriesMetadataLoaded);
// TODO, this is unclear. How are we getting the created display sets out?
this.displaySets = [];
}
onSeriesMetadataLoaded = instances => {
if (!instances || !instances.length) {
throw new Error("No instances were provided.");
}
const SOPClassHandlers = this.SOPClassHandlers;
for (let i = 0; i < SOPClassHandlers.length; i++) {
const handler = SOPClassHandlers[i];
if (handler.sopClassUids.includes(instances[0].SOPClassUID)) {
// TODO: This step is still unclear to me
this.displaySets = handler.getDisplaySetFromSeries(instances).map(a => a.displaySetInstanceUid);
}
}
};
}
+18 -11
View File
@@ -22,28 +22,35 @@ import { ViewModelProvider } from './ViewModelContext';
/:modeId/:modeRoute/?queryParameters=example
*/
export default function buildModeRoutes(modes, extensionManager) {
export default function buildModeRoutes(modes, dataSources, extensionManager) {
const routes = [];
// TODO: Build api for this.
// Currently builds an endpoint for all data sources, which probably
// doesn't make sense
const dataSources = Object.keys(extensionManager.dataSourceMap).map(a =>
extensionManager.getDataSource(a)
);
// const dataSources = Object.keys(extensionManager.dataSourceMap).map(a =>
// extensionManager.getDataSources(a)
// );
const dataSourceNames = [];
dataSources.forEach(dataSource => {
const { sourceName } = dataSource;
if (!dataSourceNames.includes(sourceName)) {
dataSourceNames.push(sourceName);
}
});
modes.forEach(mode => {
dataSources.forEach(dataSource => {
// todo: for each route. add route to path.
dataSourceNames.forEach(dataSourceName => {
// TODO: name vs id
const dataSourceId = dataSource.name;
const path = `/${mode.id}/${dataSourceId}`;
const path = `/${mode.id}/${dataSourceName}`;
// TODO move up.
const component = ({ location }) => (
<ViewModelProvider>
<ModeRoute
location={location}
mode={mode}
dataSourceId={dataSourceId}
dataSourceName={dataSourceName}
extensionManager={extensionManager}
/>
</ViewModelProvider>