WIP build up displaysets.
This commit is contained in:
1 parent
d4f51c5e3c
commit
5c19671d3c
26 files changed
+1496
-350
No files matched your search
@@ -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',
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user