Continue the ModeRoute work. Routes are reachable, but extensionManager needs to be improve to provide module entries correctly
This commit is contained in:
parent
20dd83e702
commit
8acd744710
@ -6,7 +6,7 @@ export default function() {
|
|||||||
return [
|
return [
|
||||||
// Layout Template Definition
|
// Layout Template Definition
|
||||||
{
|
{
|
||||||
name: 'myLayout',
|
id: 'org.ohif.defaults.viewerLayout',
|
||||||
component: viewerLayout,
|
component: viewerLayout,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@ -8,10 +8,16 @@ function getSidePanelModule() {
|
|||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
name: 'org.ohif.defaults.seriesList',
|
name: 'org.ohif.defaults.seriesList',
|
||||||
|
iconName: 'group-layers',
|
||||||
|
iconLabel: 'Studies',
|
||||||
|
label: 'Studies',
|
||||||
component: helloWorldComponent,
|
component: helloWorldComponent,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'org.ohif.defaults.measure',
|
name: 'org.ohif.defaults.measure',
|
||||||
|
iconName: 'list-bullets',
|
||||||
|
iconLabel: 'Measure',
|
||||||
|
label: 'Measurements',
|
||||||
component: helloWorldComponent,
|
component: helloWorldComponent,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@ -21,7 +21,7 @@ export default function mode({ modeConfiguration }) {
|
|||||||
},
|
},
|
||||||
layoutTemplate: ({ routeProps }) => {
|
layoutTemplate: ({ routeProps }) => {
|
||||||
return {
|
return {
|
||||||
id: 'org.ohif.defaults.viewerlayout',
|
id: 'org.ohif.defaults.viewerLayout',
|
||||||
props: {
|
props: {
|
||||||
// named slots
|
// named slots
|
||||||
leftPanels: ['org.ohif.defaults.seriesList'],
|
leftPanels: ['org.ohif.defaults.seriesList'],
|
||||||
@ -35,3 +35,5 @@ export default function mode({ modeConfiguration }) {
|
|||||||
sopClassHandlers: ['org.ohif.defaults.stack'],
|
sopClassHandlers: ['org.ohif.defaults.stack'],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.exampleMode = mode({});
|
||||||
|
|||||||
@ -97,7 +97,7 @@ export default class ExtensionManager {
|
|||||||
});
|
});
|
||||||
|
|
||||||
extensionModule.forEach(element => {
|
extensionModule.forEach(element => {
|
||||||
this.modulesMap[`${extensionId}.${moduleType}.${name}`];
|
this.modulesMap[`${extensionId}.${moduleType}.${element.name}`];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -111,6 +111,7 @@ export default class ExtensionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getDataSource(dataSourceId) {
|
getDataSource(dataSourceId) {
|
||||||
|
// Note: this currently uses the data source name, which feels weird...
|
||||||
return this.dataSourceMap[dataSourceId];
|
return this.dataSourceMap[dataSourceId];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,11 +164,11 @@ export default class ExtensionManager {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'dataSourcesModule': {
|
case 'dataSourcesModule': {
|
||||||
break;
|
|
||||||
|
|
||||||
extensionModule.forEach(element => {
|
extensionModule.forEach(element => {
|
||||||
this.dataSourceMap[extensionModule.name] = element;
|
this.dataSourceMap[element.name] = element;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
// code block
|
// code block
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
window.config = {
|
window.config = {
|
||||||
routerBasename: '/',
|
routerBasename: '/',
|
||||||
// whiteLabelling: {},
|
// whiteLabelling: {},
|
||||||
extensions: [],
|
extensions: ['org.ohif.default'],
|
||||||
modes: [],
|
modes: [],
|
||||||
showStudyList: true,
|
showStudyList: true,
|
||||||
// filterQueryParam: false,
|
// filterQueryParam: false,
|
||||||
|
|||||||
@ -9,6 +9,9 @@ import { ThemeWrapper } from '@ohif/ui';
|
|||||||
import createRoutes from './routes';
|
import createRoutes from './routes';
|
||||||
import appInit from './appInit.js';
|
import appInit from './appInit.js';
|
||||||
|
|
||||||
|
// Temporarily for testing
|
||||||
|
import '@ohif/mode-example';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ENV Variable to determine routing behavior
|
* ENV Variable to determine routing behavior
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -64,6 +64,11 @@ function appInit(appConfigOrFunc, defaultExtensions) {
|
|||||||
|
|
||||||
const { modes } = appConfig;
|
const { modes } = appConfig;
|
||||||
|
|
||||||
|
// Temporarily for testing
|
||||||
|
if (!modes.length) {
|
||||||
|
modes.push(window.exampleMode);
|
||||||
|
}
|
||||||
|
|
||||||
const appRoutes = buildModeRoutes(modes, extensionManager) || [];
|
const appRoutes = buildModeRoutes(modes, extensionManager) || [];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -18,15 +18,23 @@ export default function ModeRoute({
|
|||||||
// Deal with toolbar.
|
// Deal with toolbar.
|
||||||
|
|
||||||
// Only handling one route per mode for now
|
// Only handling one route per mode for now
|
||||||
const LayoutComponent = extensionManager.getModuleEntry(
|
const layoutTemplateData = routes[0].layoutTemplate({ location });
|
||||||
routes[0].layoutTemplate
|
/*const LayoutComponent = extensionManager.getModuleEntry(
|
||||||
|
layoutTemplateData.id
|
||||||
|
);*/
|
||||||
|
|
||||||
|
// You can test via http://localhost:3000/example-mode/dicomweb
|
||||||
|
const LayoutComponent = () => (
|
||||||
|
<div>
|
||||||
|
{`Reached the route for Mode: ${mode.id} and Data Source: ${dataSourceId}`}
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
// Add SOPClassHandlers to a new SOPClassManager.
|
// Add SOPClassHandlers to a new SOPClassManager.
|
||||||
const manager = new SOPClassHandlerManager(
|
/*const manager = new SOPClassHandlerManager(
|
||||||
extensionManager,
|
extensionManager,
|
||||||
sopClassHandlers
|
sopClassHandlers
|
||||||
);
|
);*/
|
||||||
|
|
||||||
const queryParams = location.search;
|
const queryParams = location.search;
|
||||||
|
|
||||||
@ -38,16 +46,27 @@ export default function ModeRoute({
|
|||||||
const onUpdatedCallback = () => {
|
const onUpdatedCallback = () => {
|
||||||
// TODO: This should append, not create from scratch so we don't nuke existing display sets
|
// TODO: This should append, not create from scratch so we don't nuke existing display sets
|
||||||
// when e.g. a new series arrives
|
// when e.g. a new series arrives
|
||||||
manager.createDisplaySets.then(setDisplaySetInstanceUids);
|
//manager.createDisplaySets.then(setDisplaySetInstanceUids);
|
||||||
};
|
};
|
||||||
|
|
||||||
const contextModules = extensions.getContextModules();
|
// TODO: For each extension, look up their context modules
|
||||||
const contextModuleProviders = contextModules.map(a => a.context.Provider);
|
//const contextModules = extensions.getContextModules();
|
||||||
const CombinedContextProvider = Compose(contextModuleProviders);
|
//const contextModuleProviders = contextModules.map(a => a.context.Provider);
|
||||||
|
//const CombinedContextProvider = Compose(contextModuleProviders);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<CombinedContextProvider>
|
<LayoutComponent
|
||||||
<LayoutComponent displaySetInstanceUids={displaySetInstanceUids} />
|
displaySetInstanceUids={displaySetInstanceUids}
|
||||||
</CombinedContextProvider>
|
{...layoutTemplateData.props}
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/*return (
|
||||||
|
<CombinedContextProvider>
|
||||||
|
<LayoutComponent
|
||||||
|
displaySetInstanceUids={displaySetInstanceUids}
|
||||||
|
{...layoutTemplateData.props}
|
||||||
|
/>
|
||||||
|
</CombinedContextProvider>
|
||||||
|
);*/
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { React } from 'react';
|
import React from 'react';
|
||||||
import ModeRoute from './ModeRoute';
|
import ModeRoute from './ModeRoute';
|
||||||
import ViewModelProvider from './ViewModelContext';
|
import { ViewModelProvider } from './ViewModelContext';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Routes uniquely define an entry point to:
|
Routes uniquely define an entry point to:
|
||||||
@ -26,16 +26,22 @@ export default function buildModeRoutes(modes, extensionManager) {
|
|||||||
const routes = [];
|
const routes = [];
|
||||||
|
|
||||||
// TODO: Build api for this.
|
// TODO: Build api for this.
|
||||||
const dataSources = extensionManager.getDataSource();
|
// 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)
|
||||||
|
);
|
||||||
|
|
||||||
modes.forEach(mode => {
|
modes.forEach(mode => {
|
||||||
dataSources.forEach(dataSource => {
|
dataSources.forEach(dataSource => {
|
||||||
const dataSourceId = dataSource.id;
|
// TODO: name vs id
|
||||||
|
const dataSourceId = dataSource.name;
|
||||||
const path = `/${mode.id}/${dataSourceId}`;
|
const path = `/${mode.id}/${dataSourceId}`;
|
||||||
|
|
||||||
const component = (
|
const component = ({ location }) => (
|
||||||
<ViewModelProvider>
|
<ViewModelProvider>
|
||||||
<ModeRoute
|
<ModeRoute
|
||||||
|
location={location}
|
||||||
mode={mode}
|
mode={mode}
|
||||||
dataSourceId={dataSourceId}
|
dataSourceId={dataSourceId}
|
||||||
extensionManager={extensionManager}
|
extensionManager={extensionManager}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user