2020-05-07 16:55:13 +02:00
|
|
|
// External
|
2020-03-05 22:12:46 +01:00
|
|
|
import React from 'react';
|
2020-04-29 20:15:45 +02:00
|
|
|
import PropTypes from 'prop-types';
|
2020-06-24 04:05:37 +02:00
|
|
|
import i18n from '@ohif/i18n';
|
|
|
|
|
import { I18nextProvider } from 'react-i18next';
|
2020-04-29 20:15:45 +02:00
|
|
|
import { BrowserRouter, HashRouter } from 'react-router-dom';
|
2020-05-24 05:38:20 +02:00
|
|
|
import {
|
|
|
|
|
DialogProvider,
|
|
|
|
|
Modal,
|
|
|
|
|
ModalProvider,
|
|
|
|
|
SnackbarProvider,
|
|
|
|
|
ThemeWrapper,
|
2020-06-05 21:19:09 +02:00
|
|
|
ViewportDialogProvider,
|
2020-05-24 05:58:50 +02:00
|
|
|
ViewportGridProvider,
|
2020-05-24 05:38:20 +02:00
|
|
|
} from '@ohif/ui';
|
2020-05-07 16:55:13 +02:00
|
|
|
// Viewer Project
|
2020-05-08 06:16:11 +02:00
|
|
|
// TODO: Should this influence study list?
|
2020-06-16 16:20:03 +02:00
|
|
|
import { AppConfigProvider } from '@state';
|
2020-05-18 17:21:57 +02:00
|
|
|
import createRoutes from './routes';
|
2020-05-07 16:55:13 +02:00
|
|
|
import appInit from './appInit.js';
|
2020-04-29 20:15:45 +02:00
|
|
|
|
2020-05-24 05:38:20 +02:00
|
|
|
// TODO: Temporarily for testing
|
2020-05-09 10:57:52 +02:00
|
|
|
import '@ohif/mode-example';
|
2020-05-26 15:03:58 +02:00
|
|
|
import '@ohif/mode-longitudinal';
|
2020-05-09 10:57:52 +02:00
|
|
|
|
2020-05-07 16:19:58 +02:00
|
|
|
/**
|
|
|
|
|
* ENV Variable to determine routing behavior
|
|
|
|
|
*/
|
|
|
|
|
const Router = JSON.parse(process.env.USE_HASH_ROUTER)
|
|
|
|
|
? HashRouter
|
|
|
|
|
: BrowserRouter;
|
|
|
|
|
|
2020-05-18 04:18:25 +02:00
|
|
|
let commandsManager, extensionManager, servicesManager;
|
2020-05-08 05:43:10 +02:00
|
|
|
|
2020-05-07 16:19:58 +02:00
|
|
|
function App({ config, defaultExtensions }) {
|
2020-05-08 05:43:10 +02:00
|
|
|
const init = appInit(config, defaultExtensions);
|
|
|
|
|
|
|
|
|
|
// Set above for named export
|
|
|
|
|
commandsManager = init.commandsManager;
|
|
|
|
|
extensionManager = init.extensionManager;
|
|
|
|
|
servicesManager = init.servicesManager;
|
2020-05-07 16:55:13 +02:00
|
|
|
|
2020-05-18 04:18:25 +02:00
|
|
|
// Set appConfig
|
2020-06-16 16:20:03 +02:00
|
|
|
const appConfigState = init.appConfig;
|
|
|
|
|
const { routerBasename, modes, dataSources } = appConfigState;
|
2020-05-18 04:18:25 +02:00
|
|
|
// Use config to create routes
|
2020-05-18 17:21:57 +02:00
|
|
|
const appRoutes = createRoutes(
|
|
|
|
|
modes,
|
|
|
|
|
dataSources,
|
|
|
|
|
extensionManager,
|
|
|
|
|
servicesManager
|
|
|
|
|
);
|
2020-06-03 19:12:13 +02:00
|
|
|
const {
|
|
|
|
|
UIDialogService,
|
|
|
|
|
UIModalService,
|
|
|
|
|
UINotificationService,
|
2020-06-05 21:19:09 +02:00
|
|
|
UIViewportDialogService,
|
2020-06-25 23:00:42 +02:00
|
|
|
ViewportGridService, // TODO: Should this be a "UI" Service?
|
2020-06-03 19:12:13 +02:00
|
|
|
} = servicesManager.services;
|
2019-12-09 18:47:23 +01:00
|
|
|
|
2020-03-05 22:12:46 +01:00
|
|
|
return (
|
2020-06-16 16:20:03 +02:00
|
|
|
<AppConfigProvider value={appConfigState}>
|
2020-06-24 04:05:37 +02:00
|
|
|
<I18nextProvider i18n={i18n}>
|
|
|
|
|
<Router basename={routerBasename}>
|
|
|
|
|
<ThemeWrapper>
|
2020-06-26 20:26:35 +02:00
|
|
|
<ViewportGridProvider service={ViewportGridService}>
|
2020-06-24 04:05:37 +02:00
|
|
|
<ViewportDialogProvider service={UIViewportDialogService}>
|
|
|
|
|
<SnackbarProvider service={UINotificationService}>
|
|
|
|
|
<DialogProvider service={UIDialogService}>
|
|
|
|
|
<ModalProvider modal={Modal} service={UIModalService}>
|
|
|
|
|
{appRoutes}
|
|
|
|
|
</ModalProvider>
|
|
|
|
|
</DialogProvider>
|
|
|
|
|
</SnackbarProvider>
|
|
|
|
|
</ViewportDialogProvider>
|
|
|
|
|
</ViewportGridProvider>
|
|
|
|
|
</ThemeWrapper>
|
|
|
|
|
</Router>
|
|
|
|
|
</I18nextProvider>
|
2020-06-16 16:20:03 +02:00
|
|
|
</AppConfigProvider>
|
2020-02-12 21:35:04 +01:00
|
|
|
);
|
2020-04-29 20:15:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
App.propTypes = {
|
|
|
|
|
config: PropTypes.oneOfType([
|
|
|
|
|
PropTypes.func,
|
|
|
|
|
PropTypes.shape({
|
|
|
|
|
routerBasename: PropTypes.string.isRequired,
|
|
|
|
|
oidc: PropTypes.array,
|
|
|
|
|
whiteLabeling: PropTypes.shape({
|
|
|
|
|
createLogoComponentFn: PropTypes.func,
|
|
|
|
|
}),
|
|
|
|
|
extensions: PropTypes.array,
|
|
|
|
|
}),
|
|
|
|
|
]).isRequired,
|
2020-05-18 03:42:38 +02:00
|
|
|
/* Extensions that are "bundled" or "baked-in" to the application.
|
|
|
|
|
* These would be provided at build time as part of they entry point. */
|
2020-04-29 20:15:45 +02:00
|
|
|
defaultExtensions: PropTypes.array,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
App.defaultProps = {
|
|
|
|
|
config: {
|
2020-05-07 16:19:58 +02:00
|
|
|
/**
|
|
|
|
|
* Relative route from domain root that OHIF instance is installed at.
|
|
|
|
|
* For example:
|
|
|
|
|
*
|
|
|
|
|
* Hosted at: https://ohif.org/where-i-host-the/viewer/
|
|
|
|
|
* Value: `/where-i-host-the/viewer/`
|
|
|
|
|
* */
|
|
|
|
|
routerBaseName: '/',
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
*/
|
2020-04-29 20:15:45 +02:00
|
|
|
showStudyList: true,
|
|
|
|
|
oidc: [],
|
|
|
|
|
extensions: [],
|
|
|
|
|
},
|
|
|
|
|
defaultExtensions: [],
|
2020-03-05 22:12:46 +01:00
|
|
|
};
|
2020-02-12 21:35:04 +01:00
|
|
|
|
2020-03-05 22:12:46 +01:00
|
|
|
export default App;
|
2020-05-08 05:43:10 +02:00
|
|
|
|
2020-05-18 04:18:25 +02:00
|
|
|
export { commandsManager, extensionManager, servicesManager };
|