ohif-viewer/src/App.js

145 lines
4.1 KiB
JavaScript
Raw Normal View History

2019-05-29 14:39:54 +02:00
import './config';
2019-05-30 18:57:46 +02:00
2019-05-29 14:39:54 +02:00
import { OidcProvider, reducer as oidcReducer } from 'redux-oidc';
2019-05-30 18:57:46 +02:00
import React, { Component } from 'react';
import { combineReducers, createStore } from 'redux';
import {
getDefaultToolbarButtons,
getUserManagerForOpenIdConnectClient,
initWebWorkers,
2019-05-29 14:39:54 +02:00
} from './utils/index.js';
2019-05-30 18:57:46 +02:00
2019-05-29 14:39:54 +02:00
import ConnectedToolContextMenu from './connectedComponents/ConnectedToolContextMenu';
2019-05-30 18:57:46 +02:00
import OHIF from 'ohif-core';
import OHIFCornerstoneExtension from '@ohif/extension-cornerstone';
import OHIFDicomHtmlExtension from 'ohif-dicom-html-extension';
import OHIFDicomMicroscopyExtension from '@ohif/extension-dicom-microscopy';
2019-05-30 18:57:46 +02:00
import OHIFDicomPDFExtension from 'ohif-dicom-pdf-extension';
import OHIFStandaloneViewer from './OHIFStandaloneViewer';
import OHIFVTKExtension from '@ohif/extension-vtk';
import PropTypes from 'prop-types';
import { Provider } from 'react-redux';
import { BrowserRouter as Router } from 'react-router-dom';
import WhiteLabellingContext from './WhiteLabellingContext';
import setupTools from './setupTools';
import ui from './redux/ui.js';
import i18n from '@ohif/i18n';
import { I18nextProvider } from 'react-i18next';
2019-05-29 14:39:54 +02:00
const { ExtensionManager } = OHIF.extensions;
const { reducers, localStorage } = OHIF.redux;
2019-05-29 14:39:54 +02:00
reducers.ui = ui;
reducers.oidc = oidcReducer;
2019-05-29 14:39:54 +02:00
const combined = combineReducers(reducers);
const store = createStore(combined, localStorage.loadState());
store.subscribe(() => {
localStorage.saveState({
preferences: store.getState().preferences,
2019-05-29 14:39:54 +02:00
});
});
2019-05-29 14:39:54 +02:00
setupTools(store);
const children = {
viewport: [<ConnectedToolContextMenu />],
2019-05-29 14:39:54 +02:00
};
/** TODO: extensions should be passed in as prop as soon as we have the extensions as separate packages and then registered by ExtensionsManager */
const extensions = [
new OHIFCornerstoneExtension({ children }),
new OHIFVTKExtension(),
new OHIFDicomPDFExtension(),
new OHIFDicomHtmlExtension(),
new OHIFDicomMicroscopyExtension(),
2019-05-29 14:39:54 +02:00
];
ExtensionManager.registerExtensions(store, extensions);
// TODO[react] Use a provider when the whole tree is React
2019-05-29 14:39:54 +02:00
window.store = store;
function handleServers(servers) {
if (servers) {
2019-05-29 14:39:54 +02:00
OHIF.utils.addServers(servers, store);
}
}
class App extends Component {
2019-01-17 17:39:08 +01:00
static propTypes = {
routerBasename: PropTypes.string.isRequired,
relativeWebWorkerScriptsPath: PropTypes.string.isRequired,
servers: PropTypes.object.isRequired,
oidc: PropTypes.array,
2019-04-29 21:06:17 +02:00
whiteLabelling: PropTypes.object,
2019-05-29 14:39:54 +02:00
};
2019-01-30 12:24:34 +01:00
static defaultProps = {
whiteLabelling: {},
oidc: [],
2019-05-29 14:39:54 +02:00
};
2019-01-30 12:24:34 +01:00
constructor(props) {
2019-05-29 14:39:54 +02:00
super(props);
//
2019-05-29 14:39:54 +02:00
const defaultButtons = getDefaultToolbarButtons(this.props.routerBasename);
const buttonsAction = OHIF.redux.actions.setAvailableButtons(
defaultButtons
);
2019-05-29 14:39:54 +02:00
store.dispatch(buttonsAction);
if (this.props.oidc.length) {
2019-05-29 14:39:54 +02:00
const firstOpenIdClient = this.props.oidc[0];
this.userManager = getUserManagerForOpenIdConnectClient(
store,
firstOpenIdClient
2019-05-29 14:39:54 +02:00
);
}
2019-05-29 14:39:54 +02:00
handleServers(this.props.servers);
initWebWorkers(
2019-04-29 20:42:29 +02:00
this.props.routerBasename,
this.props.relativeWebWorkerScriptsPath
2019-05-29 14:39:54 +02:00
);
2019-01-17 17:39:08 +01:00
}
render() {
2019-05-29 14:39:54 +02:00
const userManager = this.userManager;
if (userManager) {
return (
2019-06-04 23:16:07 +02:00
<Provider store={store}>
<I18nextProvider i18n={i18n}>
2019-05-30 20:41:15 +02:00
<OidcProvider store={store} userManager={userManager}>
<Router basename={this.props.routerBasename}>
<WhiteLabellingContext.Provider
value={this.props.whiteLabelling}
>
<OHIFStandaloneViewer userManager={userManager} />
</WhiteLabellingContext.Provider>
</Router>
</OidcProvider>
2019-06-04 23:16:07 +02:00
</I18nextProvider>
</Provider>
2019-05-29 14:39:54 +02:00
);
}
return (
<Provider store={store}>
2019-06-06 23:57:45 +02:00
<I18nextProvider i18n={i18n}>
<Router basename={this.props.routerBasename}>
<WhiteLabellingContext.Provider value={this.props.whiteLabelling}>
<OHIFStandaloneViewer />
</WhiteLabellingContext.Provider>
</Router>
</I18nextProvider>
</Provider>
2019-05-29 14:39:54 +02:00
);
}
}
2019-05-29 14:39:54 +02:00
export default App;