Files
ohif-viewer/platform/app/src/routes/buildModeRoutes.tsx
T

90 lines
2.2 KiB
TypeScript

import React from 'react';
import ModeRoute from '@routes/Mode';
/*
Routes uniquely define an entry point to:
- A mode
- Linked to a data source
- With a specified data set.
The full route template is:
/:modeId/:modeRoute/:sourceType/?queryParameters=example
Where:
:modeId - Is the mode selected.
:modeRoute - Is the route within the mode to select.
:sourceType - Is the data source identifier, which specifies which DataSource to use.
?queryParameters - Are query parameters as defined by data source.
A default source can be specified at the app level configuration, and then that source is used if :sourceType is omitted:
/:modeId/:modeRoute/?queryParameters=example
*/
export default function buildModeRoutes({
modes,
dataSources,
extensionManager,
servicesManager,
commandsManager,
hotkeysManager,
}: withAppTypes) {
const routes = [];
const dataSourceNames = [];
dataSources.forEach(dataSource => {
const { sourceName } = dataSource;
if (!dataSourceNames.includes(sourceName)) {
dataSourceNames.push(sourceName);
}
});
modes.forEach(mode => {
// todo: for each route. add route to path.
dataSourceNames.forEach(dataSourceName => {
const path = `/${mode.routeName}/${dataSourceName}`;
// TODO move up.
const children = () => (
<ModeRoute
mode={mode}
dataSourceName={dataSourceName}
extensionManager={extensionManager}
servicesManager={servicesManager}
commandsManager={commandsManager}
hotkeysManager={hotkeysManager}
/>
);
routes.push({
path,
children,
private: true,
});
});
// Add active DataSource route.
// This is the DataSource route for the active data source defined in ExtensionManager.getActiveDataSource
const path = `/${mode.routeName}`;
// TODO move up.
const children = () => (
<ModeRoute
mode={mode}
extensionManager={extensionManager}
servicesManager={servicesManager}
commandsManager={commandsManager}
hotkeysManager={hotkeysManager}
/>
);
routes.push({
path,
children,
private: true,
});
});
return routes;
}