Fixes for Standalone OpenID Connect usage
This commit is contained in:
1 parent
9cc063430a
commit
d961a73b6c
28 files changed
+81117
-14405
No files matched your search
@@ -14,8 +14,8 @@
|
||||
"lodash.clonedeep": "^4.5.0",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"moment": "^2.22.2",
|
||||
"ohif-core": "^0.1.6",
|
||||
"ohif-viewer": "0.0.1",
|
||||
"ohif-core": "^0.1.7",
|
||||
"ohif-viewer": "0.0.5",
|
||||
"oidc-client": "^1.6.1",
|
||||
"prop-types": "^15.6.2",
|
||||
"query-string": "^6.2.0",
|
||||
|
||||
+22
-26
@@ -6,8 +6,7 @@ import { connect } from 'react-redux';
|
||||
import { ViewerbaseDragDropContext } from 'react-viewerbase';
|
||||
import routes from './routes/';
|
||||
import StudyListRouting from './studylist/StudyListRouting.js';
|
||||
//import CallbackPage from './CallbackPage.js';'
|
||||
import userManager from "./userManager.js";
|
||||
import CallbackPage from './CallbackPage.js';
|
||||
import './App.css';
|
||||
import './variables.css';
|
||||
import './theme-tide.css';
|
||||
@@ -24,14 +23,10 @@ function setContext(context) {
|
||||
});*/
|
||||
}
|
||||
|
||||
function LoadingUser() {
|
||||
return (<div>Loading user...</div>);
|
||||
}
|
||||
|
||||
class App extends Component {
|
||||
static propTypes = {
|
||||
history: PropTypes.object.isRequired,
|
||||
user: PropTypes.object
|
||||
user: PropTypes.object,
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
@@ -45,21 +40,30 @@ class App extends Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
const user = this.props.user;
|
||||
const { user, userManager } = this.props;
|
||||
|
||||
/*if (!user || user.expired) {
|
||||
// TODO: redirect to OAuth page if necessary
|
||||
return <Switch>
|
||||
<Route path="/callback" component={CallbackPage} />
|
||||
<Route exact path='/login' component={() => {
|
||||
userManager.signinRedirect();
|
||||
}}/>
|
||||
<Route component={LoadingUser}/>
|
||||
</Switch>;
|
||||
}*/
|
||||
const userNotLoggedIn = userManager && (!user || user.expired);
|
||||
if (userNotLoggedIn) {
|
||||
return (
|
||||
<Switch>
|
||||
<Route exact path="/silent-refresh.html" onEnter={reload} />
|
||||
<Route exact path="/logout-redirect.html" onEnter={reload} />
|
||||
<Route path="/callback" render={
|
||||
() => <CallbackPage userManager={userManager}/>
|
||||
}/>
|
||||
<Route component={() => {
|
||||
userManager.signinRedirect();
|
||||
|
||||
return null;
|
||||
}}/>
|
||||
</Switch>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<Switch>
|
||||
<Route exact path="/silent-refresh.html" onEnter={reload} />
|
||||
<Route exact path="/logout-redirect.html" onEnter={reload} />
|
||||
<Route
|
||||
exact
|
||||
path="/studylist"
|
||||
@@ -87,14 +91,6 @@ class App extends Component {
|
||||
path="/IHEInvokeImageDisplay"
|
||||
component={IHEInvokeImageDisplay}
|
||||
/>
|
||||
|
||||
<Route path="/silent-refresh.html" onEnter={reload} />
|
||||
<Route path="/logout-redirect.html" onEnter={reload} />
|
||||
<Route exact path='/login' component={() => {
|
||||
userManager.signinRedirect();
|
||||
}}
|
||||
/>
|
||||
{/*<Route path="/callback" component={CallbackPage} />*/}
|
||||
<Route render={() =>
|
||||
<div> Sorry, this page does not exist. </div>}
|
||||
/>
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import React, { Component } from "react";
|
||||
import { CallbackComponent } from "redux-oidc";
|
||||
import { withRouter } from "react-router-dom";
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
class CallbackPage extends Component {
|
||||
static propTypes = {
|
||||
userManager: PropTypes.object.isRequired,
|
||||
history: PropTypes.object.isRequired
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<CallbackComponent
|
||||
userManager={this.props.userManager}
|
||||
successCallback={() => {
|
||||
this.props.history.push("/");
|
||||
}}
|
||||
errorCallback={error => {
|
||||
//this.props.history.push("/");
|
||||
throw new Error(error);
|
||||
}}
|
||||
>
|
||||
<div>Redirecting...</div>
|
||||
</CallbackComponent>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withRouter(CallbackPage);
|
||||
@@ -8,7 +8,8 @@ const mapStateToProps = (state, ownProps) => {
|
||||
|
||||
return {
|
||||
studyInstanceUid,
|
||||
seriesInstanceUid
|
||||
seriesInstanceUid,
|
||||
displaySet
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@ import PropTypes from 'prop-types';
|
||||
class ExampleViewportPlugin extends Component {
|
||||
static propTypes = {
|
||||
studyInstanceUid: PropTypes.string.isRequired,
|
||||
seriesInstanceUid: PropTypes.string.isRequired
|
||||
seriesInstanceUid: PropTypes.string.isRequired,
|
||||
displaySet: PropTypes.object
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
@@ -16,6 +17,7 @@ class ExampleViewportPlugin extends Component {
|
||||
return (<div className="ExampleViewportPlugin">
|
||||
<p>StudyInstanceUid: {this.props.studyInstanceUid}</p>
|
||||
<p>SeriesInstanceUid: {this.props.seriesInstanceUid}</p>
|
||||
{JSON.stringify(this.props.displaySet)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import ConnectedLayoutManager from './ConnectedLayoutManager.js';
|
||||
import './ViewerMain.css';
|
||||
|
||||
// Attempt to fix weird undefined dep issue
|
||||
cornerstoneTools.external.cornerstone = cornerstone;
|
||||
cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
|
||||
|
||||
class ViewerMain extends Component {
|
||||
|
||||
@@ -1,27 +1,62 @@
|
||||
import React from 'react';
|
||||
import React from "react";
|
||||
import ReactDOM from 'react-dom';
|
||||
import { BrowserRouter } from 'react-router-dom';
|
||||
import { BrowserRouter } from "react-router-dom";
|
||||
import { Provider } from 'react-redux';
|
||||
import { createStore, combineReducers } from 'redux';
|
||||
import { loadUser, reducer as oidcReducer, OidcProvider} from 'redux-oidc';
|
||||
import { loadUser, reducer as oidcReducer, OidcProvider, createUserManager } from 'redux-oidc';
|
||||
import OHIF from 'ohif-core';
|
||||
import OHIFCornerstoneViewportPlugin from "./connectedComponents/OHIFCornerstoneViewportPlugin/OHIFCornerstoneViewportPlugin.js";
|
||||
import './config';
|
||||
import ui from './redux/ui.js';
|
||||
import App from './App.js';
|
||||
import userManager from './userManager.js';
|
||||
import ConnectedExampleViewportPlugin from './components/ConnectedExampleViewportPlugin.js';
|
||||
|
||||
import OHIFCornerstoneViewportPlugin from "./connectedComponents/OHIFCornerstoneViewportPlugin/OHIFCornerstoneViewportPlugin.js";
|
||||
//import ConnectedExampleViewportPlugin from './components/ConnectedExampleViewportPlugin.js';
|
||||
|
||||
const reducers = OHIF.redux.reducers;
|
||||
reducers.ui = ui;
|
||||
reducers.oidc = oidcReducer;
|
||||
|
||||
const Icons = '/icons.svg';
|
||||
|
||||
const combined = combineReducers(reducers)
|
||||
|
||||
const store = createStore(combined);
|
||||
loadUser(store, userManager);
|
||||
|
||||
// Note: Run your build like this:
|
||||
// REACT_APP_CONFIG=$(cat ../config-react/ccc.json) yarn start
|
||||
//
|
||||
// If you change the JSON config, you need to re-run the command!
|
||||
let config;
|
||||
if (process.env.REACT_APP_CONFIG) {
|
||||
config = JSON.parse(process.env.REACT_APP_CONFIG);
|
||||
}
|
||||
|
||||
let userManager;
|
||||
if (config.oidc) {
|
||||
const oidcClient = config.oidc[0];
|
||||
|
||||
const settings = {
|
||||
authority: oidcClient.authServerUrl,
|
||||
client_id: oidcClient.clientId,
|
||||
redirect_uri: oidcClient.authRedirectUri,
|
||||
silent_redirect_uri: '/silent-refresh.html',
|
||||
post_logout_redirect_uri: oidcClient.postLogoutRedirectUri,
|
||||
response_type: oidcClient.responseType,
|
||||
scope: 'email profile openid', // Note: Request must have scope 'openid' to be considered an OpenID Connect request
|
||||
automaticSilentRenew: true,
|
||||
revokeAccessTokenOnSignout: true,
|
||||
filterProtocolClaims: true,
|
||||
loadUserInfo: true,
|
||||
extraQueryParams: oidcClient.extraQueryParams
|
||||
};
|
||||
|
||||
userManager = createUserManager(settings);
|
||||
|
||||
loadUser(store, userManager);
|
||||
}
|
||||
|
||||
if (config.servers) {
|
||||
OHIF.utils.addServers(config.servers, store);
|
||||
}
|
||||
|
||||
|
||||
const defaultButtons = [
|
||||
{
|
||||
@@ -109,46 +144,28 @@ const pluginAction = OHIF.redux.actions.addPlugin({
|
||||
|
||||
store.dispatch(pluginAction);
|
||||
|
||||
const servers = {
|
||||
dicomWeb: [
|
||||
{
|
||||
"name": "DCM4CHEE",
|
||||
//"wadoUriRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
//"qidoRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
//"wadoRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
//"wadoUriRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
//"qidoRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
//"wadoRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoUriRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
"qidoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"qidoSupportsIncludeField": true,
|
||||
"imageRendering": "wadors",
|
||||
"thumbnailRendering": "wadors",
|
||||
"requestOptions": {
|
||||
"requestFromBrowser": true,
|
||||
"logRequests": true,
|
||||
"logResponses": false,
|
||||
"logTiming": true,
|
||||
//"auth": "admin:admin"
|
||||
//"auth": "cloud:healthcare"
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
OHIF.utils.addServers(servers, store);
|
||||
|
||||
// TODO[react] Use a provider when the whole tree is React
|
||||
window.store = store;
|
||||
|
||||
ReactDOM.render(
|
||||
if (userManager) {
|
||||
ReactDOM.render(
|
||||
<Provider store={store}>
|
||||
<OidcProvider store={store} userManager={userManager}>
|
||||
<BrowserRouter>
|
||||
<App/>
|
||||
</BrowserRouter>
|
||||
</OidcProvider>
|
||||
<OidcProvider store={store} userManager={userManager}>
|
||||
<BrowserRouter>
|
||||
<App userManager={userManager}/>
|
||||
</BrowserRouter>
|
||||
</OidcProvider>
|
||||
</Provider>,
|
||||
document.getElementById('root')
|
||||
);
|
||||
);
|
||||
} else {
|
||||
ReactDOM.render(
|
||||
<Provider store={store}>
|
||||
<BrowserRouter>
|
||||
<App/>
|
||||
</BrowserRouter>
|
||||
</Provider>,
|
||||
document.getElementById('root')
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
import { createUserManager } from 'redux-oidc';
|
||||
|
||||
const oidcClient = {
|
||||
authServerUrl: 'https://cancer.crowds-cure.org/auth/realms/dcm4che',
|
||||
clientId: 'crowds-cure-cancer',
|
||||
authRedirectUri: '/callback',
|
||||
postLogoutRedirectUri: '/logout-redirect.html',
|
||||
responseType: 'id_token token',
|
||||
scope: 'email profile openid',
|
||||
revokeAccessTokenOnSignout: true,
|
||||
extraQueryParams: {
|
||||
kc_idp_hint: 'crowds-cure-cancer-auth0-oidc',
|
||||
client_id: 'crowds-cure-cancer'
|
||||
}
|
||||
};
|
||||
|
||||
const settings = {
|
||||
authority: oidcClient.authServerUrl,
|
||||
client_id: oidcClient.clientId,
|
||||
redirect_uri: oidcClient.authRedirectUri,
|
||||
silent_redirect_uri: '/silent-refresh.html',
|
||||
post_logout_redirect_uri: oidcClient.postLogoutRedirectUri,
|
||||
response_type: oidcClient.responseType,
|
||||
scope: 'email profile openid', // Note: Request must have scope 'openid' to be considered an OpenID Connect request
|
||||
automaticSilentRenew: true,
|
||||
revokeAccessTokenOnSignout: true,
|
||||
filterProtocolClaims: true,
|
||||
loadUserInfo: true,
|
||||
extraQueryParams: oidcClient.extraQueryParams
|
||||
};
|
||||
|
||||
const userManager = createUserManager(settings);
|
||||
|
||||
export default userManager;
|
||||
+1
-1
Submodule Packages-react/ohif-core updated: 521cd30ac0...305643a1c9.
+26841
-4666
File diff suppressed because it is too large.
Load diff
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"index.es.js","sources":["../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/react-router-dom/node_modules/warning/warning.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/warning/warning.js","../node_modules/invariant/invariant.js","../node_modules/resolve-pathname/index.js","../node_modules/value-equal/index.js","../node_modules/history/es/PathUtils.js","../node_modules/history/es/LocationUtils.js","../node_modules/history/es/createTransitionManager.js","../node_modules/history/es/DOMUtils.js","../node_modules/history/es/createBrowserHistory.js","../node_modules/history/es/createHashHistory.js","../node_modules/history/es/createMemoryHistory.js","../node_modules/react-router/node_modules/warning/warning.js","../node_modules/react-router/es/Router.js","../node_modules/react-router-dom/es/Router.js","../node_modules/react-router-dom/es/BrowserRouter.js","../node_modules/react-router-dom/es/HashRouter.js","../node_modules/react-router-dom/es/Link.js","../node_modules/react-router/es/MemoryRouter.js","../node_modules/react-router-dom/es/MemoryRouter.js","../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/path-to-regexp/index.js","../node_modules/react-router/es/matchPath.js","../node_modules/react-router/es/Route.js","../node_modules/react-router-dom/es/Route.js","../node_modules/react-router-dom/es/NavLink.js","../node_modules/react-router/es/Prompt.js","../node_modules/react-router-dom/es/Prompt.js","../node_modules/react-router/es/generatePath.js","../node_modules/react-router/es/Redirect.js","../node_modules/react-router-dom/es/Redirect.js","../node_modules/react-router/es/StaticRouter.js","../node_modules/react-router-dom/es/StaticRouter.js","../node_modules/react-router/es/Switch.js","../node_modules/react-router-dom/es/Switch.js","../node_modules/react-router-dom/es/generatePath.js","../node_modules/react-router-dom/es/matchPath.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-router/es/withRouter.js","../node_modules/react-router-dom/es/withRouter.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/react-redux/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/redux/es/redux.js","../node_modules/react-redux/es/utils/isPlainObject.js","../node_modules/react-redux/es/utils/warning.js","../node_modules/react-redux/es/utils/verifyPlainObject.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/verifySubselectors.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../../ohif-core/dist/index.es.js","../node_modules/dicom-parser/dist/dicomParser.min.js","../node_modules/cornerstone-core/dist/cornerstone.js","../node_modules/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.min.js","../node_modules/cornerstone-math/dist/cornerstoneMath.min.js","../node_modules/cornerstone-tools/dist/cornerstoneTools.min.js","../node_modules/hammerjs/hammer.js","../src/config.js","../src/redux/ui.js","../../react-viewerbase/dist/index.es.js","../node_modules/style-inject/dist/style-inject.es.js","../src/components/Header/Header.js","../node_modules/lodash.clonedeep/index.js","../src/connectedComponents/ConnectedStudyBrowser.js","../src/coLine truncated
|
||||
{"version":3,"file":"index.es.js","sources":["../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/react-router-dom/node_modules/warning/warning.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/warning/warning.js","../node_modules/invariant/invariant.js","../node_modules/resolve-pathname/index.js","../node_modules/value-equal/index.js","../node_modules/history/es/PathUtils.js","../node_modules/history/es/LocationUtils.js","../node_modules/history/es/createTransitionManager.js","../node_modules/history/es/DOMUtils.js","../node_modules/history/es/createBrowserHistory.js","../node_modules/history/es/createHashHistory.js","../node_modules/history/es/createMemoryHistory.js","../node_modules/react-router/node_modules/warning/warning.js","../node_modules/react-router/es/Router.js","../node_modules/react-router-dom/es/Router.js","../node_modules/react-router-dom/es/BrowserRouter.js","../node_modules/react-router-dom/es/HashRouter.js","../node_modules/react-router-dom/es/Link.js","../node_modules/react-router/es/MemoryRouter.js","../node_modules/react-router-dom/es/MemoryRouter.js","../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/path-to-regexp/index.js","../node_modules/react-router/es/matchPath.js","../node_modules/react-router/es/Route.js","../node_modules/react-router-dom/es/Route.js","../node_modules/react-router-dom/es/NavLink.js","../node_modules/react-router/es/Prompt.js","../node_modules/react-router-dom/es/Prompt.js","../node_modules/react-router/es/generatePath.js","../node_modules/react-router/es/Redirect.js","../node_modules/react-router-dom/es/Redirect.js","../node_modules/react-router/es/StaticRouter.js","../node_modules/react-router-dom/es/StaticRouter.js","../node_modules/react-router/es/Switch.js","../node_modules/react-router-dom/es/Switch.js","../node_modules/react-router-dom/es/generatePath.js","../node_modules/react-router-dom/es/matchPath.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-router/es/withRouter.js","../node_modules/react-router-dom/es/withRouter.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/react-redux/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/redux/es/redux.js","../node_modules/react-redux/es/utils/isPlainObject.js","../node_modules/react-redux/es/utils/warning.js","../node_modules/react-redux/es/utils/verifyPlainObject.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/verifySubselectors.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../../ohif-core/dist/index.es.js","../node_modules/dicom-parser/dist/dicomParser.min.js","../node_modules/cornerstone-core/dist/cornerstone.js","../node_modules/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.min.js","../node_modules/cornerstone-math/dist/cornerstoneMath.min.js","../node_modules/cornerstone-tools/dist/cornerstoneTools.min.js","../node_modules/hammerjs/hammer.js","../src/config.js","../src/redux/ui.js","../node_modules/react-viewerbase/dist/index.es.js","../node_modules/style-inject/dist/style-inject.es.js","../src/components/Header/Header.js","../node_modules/lodash.clonedeep/index.js","../src/connectedComponents/ConnectedStudyBrowser.js",Line truncated
|
||||
+26841
-4666
File diff suppressed because it is too large.
Load diff
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"index.js","sources":["../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/react-router-dom/node_modules/warning/warning.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/warning/warning.js","../node_modules/invariant/invariant.js","../node_modules/resolve-pathname/index.js","../node_modules/value-equal/index.js","../node_modules/history/es/PathUtils.js","../node_modules/history/es/LocationUtils.js","../node_modules/history/es/createTransitionManager.js","../node_modules/history/es/DOMUtils.js","../node_modules/history/es/createBrowserHistory.js","../node_modules/history/es/createHashHistory.js","../node_modules/history/es/createMemoryHistory.js","../node_modules/react-router/node_modules/warning/warning.js","../node_modules/react-router/es/Router.js","../node_modules/react-router-dom/es/Router.js","../node_modules/react-router-dom/es/BrowserRouter.js","../node_modules/react-router-dom/es/HashRouter.js","../node_modules/react-router-dom/es/Link.js","../node_modules/react-router/es/MemoryRouter.js","../node_modules/react-router-dom/es/MemoryRouter.js","../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/path-to-regexp/index.js","../node_modules/react-router/es/matchPath.js","../node_modules/react-router/es/Route.js","../node_modules/react-router-dom/es/Route.js","../node_modules/react-router-dom/es/NavLink.js","../node_modules/react-router/es/Prompt.js","../node_modules/react-router-dom/es/Prompt.js","../node_modules/react-router/es/generatePath.js","../node_modules/react-router/es/Redirect.js","../node_modules/react-router-dom/es/Redirect.js","../node_modules/react-router/es/StaticRouter.js","../node_modules/react-router-dom/es/StaticRouter.js","../node_modules/react-router/es/Switch.js","../node_modules/react-router-dom/es/Switch.js","../node_modules/react-router-dom/es/generatePath.js","../node_modules/react-router-dom/es/matchPath.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-router/es/withRouter.js","../node_modules/react-router-dom/es/withRouter.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/react-redux/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/redux/es/redux.js","../node_modules/react-redux/es/utils/isPlainObject.js","../node_modules/react-redux/es/utils/warning.js","../node_modules/react-redux/es/utils/verifyPlainObject.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/verifySubselectors.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../../ohif-core/dist/index.es.js","../node_modules/dicom-parser/dist/dicomParser.min.js","../node_modules/cornerstone-core/dist/cornerstone.js","../node_modules/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.min.js","../node_modules/cornerstone-math/dist/cornerstoneMath.min.js","../node_modules/cornerstone-tools/dist/cornerstoneTools.min.js","../node_modules/hammerjs/hammer.js","../src/config.js","../src/redux/ui.js","../../react-viewerbase/dist/index.es.js","../node_modules/style-inject/dist/style-inject.es.js","../src/components/Header/Header.js","../node_modules/lodash.clonedeep/index.js","../src/connectedComponents/ConnectedStudyBrowser.js","../src/conneLine truncated
|
||||
{"version":3,"file":"index.js","sources":["../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/react-router-dom/node_modules/warning/warning.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/warning/warning.js","../node_modules/invariant/invariant.js","../node_modules/resolve-pathname/index.js","../node_modules/value-equal/index.js","../node_modules/history/es/PathUtils.js","../node_modules/history/es/LocationUtils.js","../node_modules/history/es/createTransitionManager.js","../node_modules/history/es/DOMUtils.js","../node_modules/history/es/createBrowserHistory.js","../node_modules/history/es/createHashHistory.js","../node_modules/history/es/createMemoryHistory.js","../node_modules/react-router/node_modules/warning/warning.js","../node_modules/react-router/es/Router.js","../node_modules/react-router-dom/es/Router.js","../node_modules/react-router-dom/es/BrowserRouter.js","../node_modules/react-router-dom/es/HashRouter.js","../node_modules/react-router-dom/es/Link.js","../node_modules/react-router/es/MemoryRouter.js","../node_modules/react-router-dom/es/MemoryRouter.js","../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/path-to-regexp/index.js","../node_modules/react-router/es/matchPath.js","../node_modules/react-router/es/Route.js","../node_modules/react-router-dom/es/Route.js","../node_modules/react-router-dom/es/NavLink.js","../node_modules/react-router/es/Prompt.js","../node_modules/react-router-dom/es/Prompt.js","../node_modules/react-router/es/generatePath.js","../node_modules/react-router/es/Redirect.js","../node_modules/react-router-dom/es/Redirect.js","../node_modules/react-router/es/StaticRouter.js","../node_modules/react-router-dom/es/StaticRouter.js","../node_modules/react-router/es/Switch.js","../node_modules/react-router-dom/es/Switch.js","../node_modules/react-router-dom/es/generatePath.js","../node_modules/react-router-dom/es/matchPath.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-router/es/withRouter.js","../node_modules/react-router-dom/es/withRouter.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/react-redux/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/redux/es/redux.js","../node_modules/react-redux/es/utils/isPlainObject.js","../node_modules/react-redux/es/utils/warning.js","../node_modules/react-redux/es/utils/verifyPlainObject.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/verifySubselectors.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../../ohif-core/dist/index.es.js","../node_modules/dicom-parser/dist/dicomParser.min.js","../node_modules/cornerstone-core/dist/cornerstone.js","../node_modules/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.min.js","../node_modules/cornerstone-math/dist/cornerstoneMath.min.js","../node_modules/cornerstone-tools/dist/cornerstoneTools.min.js","../node_modules/hammerjs/hammer.js","../src/config.js","../src/redux/ui.js","../node_modules/react-viewerbase/dist/index.es.js","../node_modules/style-inject/dist/style-inject.es.js","../src/components/Header/Header.js","../node_modules/lodash.clonedeep/index.js","../src/connectedComponents/ConnectedStudyBrowser.js","..Line truncated
|
||||
+26841
-4666
File diff suppressed because it is too large.
Load diff
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"index.umd.js","sources":["../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/react-router-dom/node_modules/warning/warning.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/warning/warning.js","../node_modules/invariant/invariant.js","../node_modules/resolve-pathname/index.js","../node_modules/value-equal/index.js","../node_modules/history/es/PathUtils.js","../node_modules/history/es/LocationUtils.js","../node_modules/history/es/createTransitionManager.js","../node_modules/history/es/DOMUtils.js","../node_modules/history/es/createBrowserHistory.js","../node_modules/history/es/createHashHistory.js","../node_modules/history/es/createMemoryHistory.js","../node_modules/react-router/node_modules/warning/warning.js","../node_modules/react-router/es/Router.js","../node_modules/react-router-dom/es/Router.js","../node_modules/react-router-dom/es/BrowserRouter.js","../node_modules/react-router-dom/es/HashRouter.js","../node_modules/react-router-dom/es/Link.js","../node_modules/react-router/es/MemoryRouter.js","../node_modules/react-router-dom/es/MemoryRouter.js","../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/path-to-regexp/index.js","../node_modules/react-router/es/matchPath.js","../node_modules/react-router/es/Route.js","../node_modules/react-router-dom/es/Route.js","../node_modules/react-router-dom/es/NavLink.js","../node_modules/react-router/es/Prompt.js","../node_modules/react-router-dom/es/Prompt.js","../node_modules/react-router/es/generatePath.js","../node_modules/react-router/es/Redirect.js","../node_modules/react-router-dom/es/Redirect.js","../node_modules/react-router/es/StaticRouter.js","../node_modules/react-router-dom/es/StaticRouter.js","../node_modules/react-router/es/Switch.js","../node_modules/react-router-dom/es/Switch.js","../node_modules/react-router-dom/es/generatePath.js","../node_modules/react-router-dom/es/matchPath.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-router/es/withRouter.js","../node_modules/react-router-dom/es/withRouter.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/react-redux/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/redux/es/redux.js","../node_modules/react-redux/es/utils/isPlainObject.js","../node_modules/react-redux/es/utils/warning.js","../node_modules/react-redux/es/utils/verifyPlainObject.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/verifySubselectors.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../../ohif-core/dist/index.es.js","../node_modules/dicom-parser/dist/dicomParser.min.js","../node_modules/cornerstone-core/dist/cornerstone.js","../node_modules/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.min.js","../node_modules/cornerstone-math/dist/cornerstoneMath.min.js","../node_modules/cornerstone-tools/dist/cornerstoneTools.min.js","../node_modules/hammerjs/hammer.js","../src/config.js","../src/redux/ui.js","../../react-viewerbase/dist/index.es.js","../node_modules/style-inject/dist/style-inject.es.js","../src/components/Header/Header.js","../node_modules/lodash.clonedeep/index.js","../src/connectedComponents/ConnectedStudyBrowser.js","../src/cLine truncated
|
||||
{"version":3,"file":"index.umd.js","sources":["../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/react-router-dom/node_modules/warning/warning.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/warning/warning.js","../node_modules/invariant/invariant.js","../node_modules/resolve-pathname/index.js","../node_modules/value-equal/index.js","../node_modules/history/es/PathUtils.js","../node_modules/history/es/LocationUtils.js","../node_modules/history/es/createTransitionManager.js","../node_modules/history/es/DOMUtils.js","../node_modules/history/es/createBrowserHistory.js","../node_modules/history/es/createHashHistory.js","../node_modules/history/es/createMemoryHistory.js","../node_modules/react-router/node_modules/warning/warning.js","../node_modules/react-router/es/Router.js","../node_modules/react-router-dom/es/Router.js","../node_modules/react-router-dom/es/BrowserRouter.js","../node_modules/react-router-dom/es/HashRouter.js","../node_modules/react-router-dom/es/Link.js","../node_modules/react-router/es/MemoryRouter.js","../node_modules/react-router-dom/es/MemoryRouter.js","../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/path-to-regexp/index.js","../node_modules/react-router/es/matchPath.js","../node_modules/react-router/es/Route.js","../node_modules/react-router-dom/es/Route.js","../node_modules/react-router-dom/es/NavLink.js","../node_modules/react-router/es/Prompt.js","../node_modules/react-router-dom/es/Prompt.js","../node_modules/react-router/es/generatePath.js","../node_modules/react-router/es/Redirect.js","../node_modules/react-router-dom/es/Redirect.js","../node_modules/react-router/es/StaticRouter.js","../node_modules/react-router-dom/es/StaticRouter.js","../node_modules/react-router/es/Switch.js","../node_modules/react-router-dom/es/Switch.js","../node_modules/react-router-dom/es/generatePath.js","../node_modules/react-router-dom/es/matchPath.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-router/es/withRouter.js","../node_modules/react-router-dom/es/withRouter.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/react-redux/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/redux/es/redux.js","../node_modules/react-redux/es/utils/isPlainObject.js","../node_modules/react-redux/es/utils/warning.js","../node_modules/react-redux/es/utils/verifyPlainObject.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/verifySubselectors.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../../ohif-core/dist/index.es.js","../node_modules/dicom-parser/dist/dicomParser.min.js","../node_modules/cornerstone-core/dist/cornerstone.js","../node_modules/cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.min.js","../node_modules/cornerstone-math/dist/cornerstoneMath.min.js","../node_modules/cornerstone-tools/dist/cornerstoneTools.min.js","../node_modules/hammerjs/hammer.js","../src/config.js","../src/redux/ui.js","../node_modules/react-viewerbase/dist/index.es.js","../node_modules/style-inject/dist/style-inject.es.js","../src/components/Header/Header.js","../node_modules/lodash.clonedeep/index.js","../src/connectedComponents/ConnectedStudyBrowser.js"Line truncated
|
||||
@@ -51,35 +51,89 @@
|
||||
|
||||
window.process = process;
|
||||
</script>
|
||||
<script src="https://unpkg.com/ohif-viewer/dist/index.umd.js" crossorigin></script>
|
||||
<!--<script src="http://localhost:3000/dist/index.umd.js" crossorigin></script>!-->
|
||||
<!--<script src="https://unpkg.com/ohif-viewer/dist/index.umd.js" crossorigin></script>!-->
|
||||
<script src="/deps/index.umd.js" crossorigin></script>
|
||||
<!--<script src="/node_modules/ohif-viewer/dist/index.umd.js" crossorigin></script>!-->
|
||||
|
||||
<!-- Load our React component. -->
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
// TODO: Add viewer config here
|
||||
|
||||
var routerBasename = 'http://localhost:5000';
|
||||
var props = {
|
||||
routerBasename: window.location.pathname
|
||||
routerBasename: routerBasename
|
||||
};
|
||||
|
||||
/*
|
||||
Example config with OIDC
|
||||
*/
|
||||
// Uncomment the next two blocks, comment out the config without OIDC
|
||||
// Try going to:
|
||||
// http://localhost:5000/viewer/1.3.6.1.4.1.25403.345050719074.3824.20170126082328.1
|
||||
// http://ohif-viewer-react.s3-website-us-east-1.amazonaws.com/viewer/1.3.6.1.4.1.25403.345050719074.3824.20170126082328.1
|
||||
/*props.servers = {
|
||||
"dicomWeb": [{
|
||||
"name": "DCM4CHEE",
|
||||
"wadoUriRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
"qidoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"qidoSupportsIncludeField": true,
|
||||
"imageRendering": "wadors",
|
||||
"thumbnailRendering": "wadors",
|
||||
"requestOptions": {
|
||||
"requestFromBrowser": true
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
OAuth settings
|
||||
DICOMWeb servers
|
||||
props.oidc = [{
|
||||
"authServerUrl": "https://cancer.crowds-cure.org/auth/realms/dcm4che",
|
||||
"authRedirectUri": routerBasename + '/callback',
|
||||
"postLogoutRedirectUri": routerBasename + '/logout-redirect.html',
|
||||
"clientId": "crowds-cure-cancer",
|
||||
"responseType": "id_token token",
|
||||
"scope": "email profile openid",
|
||||
"revokeAccessTokenOnSignout": true,
|
||||
"extraQueryParams": {
|
||||
"kc_idp_hint": "crowds-cure-cancer-auth0-oidc",
|
||||
"client_id": "crowds-cure-cancer"
|
||||
}
|
||||
}];*/
|
||||
|
||||
/* Example config without OIDC */
|
||||
// Try going to:
|
||||
// http://localhost:5000/viewer/1.3.6.1.4.1.14519.5.2.1.1706.4996.216859690032335293073513900362
|
||||
props.servers = {
|
||||
"dicomWeb": [
|
||||
{
|
||||
"name": "DCM4CHEE",
|
||||
"wadoUriRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
"qidoRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"qidoSupportsIncludeField": true,
|
||||
"imageRendering": "wadors",
|
||||
"thumbnailRendering": "wadors",
|
||||
"requestOptions": {
|
||||
"requestFromBrowser": true,
|
||||
"auth": "cloud:healthcare"
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
UI settings
|
||||
Plugins
|
||||
- Custom tools / buttons
|
||||
- Custom Sidebar module thing
|
||||
- Custom Viewports
|
||||
- Custom Sop Class Interpreters
|
||||
*/
|
||||
|
||||
|
||||
base url path
|
||||
|
||||
"ROOT_URL": "http://localhost:3000",
|
||||
"PUBLIC_SETTINGS": {
|
||||
"verifyEmail": false,
|
||||
/*"PUBLIC_SETTINGS": {
|
||||
"ui": {
|
||||
"studyListFunctionsEnabled": true,
|
||||
"leftSidebarOpen": false,
|
||||
@@ -94,8 +148,6 @@
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO: Why do we need to do this? Something is wrong with our rollup settings
|
||||
var Viewer = window.OHIFStandaloneViewer.App;
|
||||
var app = React.createElement(Viewer, props, null);
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"serve": "^10.1.1"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "serve ."
|
||||
"prepare": "mkdir -p deps && cp node_modules/ohif-viewer/dist/index.umd.* deps/",
|
||||
"start": "yarn run prepare && serve -s ."
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ohif-viewer",
|
||||
"version": "0.0.4",
|
||||
"version": "0.0.5",
|
||||
"description": "OHIF Viewer",
|
||||
"author": "OHIF Contributors",
|
||||
"license": "MIT",
|
||||
@@ -9,7 +9,6 @@
|
||||
"browser": "dist/index.umd.js",
|
||||
"module": "dist/index.es.js",
|
||||
"jsnext:main": "dist/index.es.js",
|
||||
"homepage": "http://localhost:3000",
|
||||
"engines": {
|
||||
"node": ">=8",
|
||||
"npm": ">=5"
|
||||
@@ -94,7 +93,7 @@
|
||||
"dicom-parser": "^1.8.3",
|
||||
"hammerjs": "^2.0.8",
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"ohif-core": "^0.1.6",
|
||||
"ohif-core": "^0.1.7",
|
||||
"oidc-client": "^1.6.1",
|
||||
"prop-types": "^15.6.2",
|
||||
"react-bootstrap-modal": "^4.2.0",
|
||||
|
||||
@@ -43,7 +43,6 @@ export default {
|
||||
}
|
||||
],
|
||||
plugins: [
|
||||
builtins(),
|
||||
external(),
|
||||
postcss({
|
||||
modules: false
|
||||
@@ -59,8 +58,12 @@ export default {
|
||||
commonjs({
|
||||
include: 'node_modules/**',
|
||||
namedExports: {
|
||||
'node_modules/react-is/index.js': ['isValidElementType']
|
||||
'node_modules/react-is/index.js': ['isValidElementType'],
|
||||
'node_modules/redux-oidc/dist/redux-oidc.js': [
|
||||
'reducer', 'CallbackComponent', 'loadUser', 'OidcProvider', 'createUserManager'
|
||||
]
|
||||
}
|
||||
})
|
||||
}),
|
||||
builtins(),
|
||||
]
|
||||
}
|
||||
@@ -6,23 +6,29 @@ import { createStore, combineReducers } from 'redux';
|
||||
import PropTypes from 'prop-types';
|
||||
import OHIF from 'ohif-core';
|
||||
import './config';
|
||||
import ui from './redux/ui.js'
|
||||
import ui from './redux/ui.js';
|
||||
import OHIFStandaloneViewer from './OHIFStandaloneViewer';
|
||||
import OHIFCornerstoneViewportPlugin from './connectedComponents/OHIFCornerstoneViewportPlugin/OHIFCornerstoneViewportPlugin.js';
|
||||
//import { loadUser, reducer as oidcReducer, OidcProvider} from 'redux-oidc';
|
||||
//import userManager from './userManager.js';
|
||||
|
||||
import {
|
||||
loadUser,
|
||||
OidcProvider,
|
||||
createUserManager,
|
||||
reducer as oidcReducer
|
||||
} from 'redux-oidc';
|
||||
import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';
|
||||
|
||||
//import Icons from "./images/icons.svg"
|
||||
|
||||
const Icons = 'icons.svg';
|
||||
const Icons = '/icons.svg';
|
||||
|
||||
const reducers = OHIF.redux.reducers;
|
||||
reducers.ui = ui;
|
||||
//reducers.oidc = oidcReducer;
|
||||
reducers.oidc = oidcReducer;
|
||||
|
||||
const combined = combineReducers(reducers)
|
||||
const combined = combineReducers(reducers);
|
||||
|
||||
const store = createStore(combined);
|
||||
//loadUser(store, userManager);
|
||||
|
||||
const defaultButtons = [
|
||||
{
|
||||
@@ -87,7 +93,7 @@ const defaultButtons = [
|
||||
text: 'Reset',
|
||||
svgUrl: `${Icons}#icon-tools-reset`,
|
||||
active: false
|
||||
},
|
||||
}
|
||||
];
|
||||
|
||||
const buttonsAction = OHIF.redux.actions.setAvailableButtons(defaultButtons);
|
||||
@@ -102,52 +108,98 @@ const pluginAction = OHIF.redux.actions.addPlugin({
|
||||
|
||||
store.dispatch(pluginAction);
|
||||
|
||||
const servers = {
|
||||
dicomWeb: [
|
||||
{
|
||||
"name": "DCM4CHEE",
|
||||
//"wadoUriRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
//"qidoRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
//"wadoRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
//"wadoUriRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
//"qidoRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
//"wadoRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoUriRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
"qidoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"qidoSupportsIncludeField": true,
|
||||
"imageRendering": "wadors",
|
||||
"thumbnailRendering": "wadors",
|
||||
"requestOptions": {
|
||||
"requestFromBrowser": true,
|
||||
"logRequests": true,
|
||||
"logResponses": false,
|
||||
"logTiming": true,
|
||||
//"auth": "admin:admin"
|
||||
//"auth": "cloud:healthcare"
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
OHIF.utils.addServers(servers, store);
|
||||
|
||||
// TODO[react] Use a provider when the whole tree is React
|
||||
window.store = store;
|
||||
|
||||
function handleServers(servers) {
|
||||
if (servers) {
|
||||
OHIF.utils.addServers(servers, store);
|
||||
}
|
||||
}
|
||||
|
||||
function handleOIDC(oidc) {
|
||||
if (!oidc) {
|
||||
return;
|
||||
}
|
||||
|
||||
const oidcClient = oidc[0];
|
||||
|
||||
const settings = {
|
||||
authority: oidcClient.authServerUrl,
|
||||
client_id: oidcClient.clientId,
|
||||
redirect_uri: oidcClient.authRedirectUri,
|
||||
silent_redirect_uri: '/silent-refresh.html',
|
||||
post_logout_redirect_uri: oidcClient.postLogoutRedirectUri,
|
||||
response_type: oidcClient.responseType,
|
||||
scope: 'email profile openid', // Note: Request must have scope 'openid' to be considered an OpenID Connect request
|
||||
automaticSilentRenew: true,
|
||||
revokeAccessTokenOnSignout: true,
|
||||
filterProtocolClaims: true,
|
||||
loadUserInfo: true,
|
||||
extraQueryParams: oidcClient.extraQueryParams
|
||||
};
|
||||
|
||||
const userManager = createUserManager(settings);
|
||||
|
||||
loadUser(store, userManager);
|
||||
|
||||
return userManager;
|
||||
}
|
||||
|
||||
function handleWebWorkerInit(basename) {
|
||||
const config = {
|
||||
maxWebWorkers: Math.max(navigator.hardwareConcurrency - 1, 1),
|
||||
startWebWorkersOnDemand: true,
|
||||
webWorkerPath: basename + '/cornerstoneWADOImageLoaderWebWorker.min.js',
|
||||
taskConfiguration: {
|
||||
decodeTask: {
|
||||
loadCodecsOnStartup: true,
|
||||
initializeCodecsOnStartup: false,
|
||||
codecsPath: basename + '/cornerstoneWADOImageLoaderCodecs.min.js',
|
||||
usePDFJS: false,
|
||||
strict: false
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
cornerstoneWADOImageLoader.webWorkerManager.initialize(config);
|
||||
}
|
||||
|
||||
class App extends Component {
|
||||
static propTypes = {
|
||||
servers: PropTypes.array,
|
||||
oidc: PropTypes.array,
|
||||
routerBasename: PropTypes.string
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.userManager = handleOIDC(this.props.oidc);
|
||||
handleServers(this.props.servers);
|
||||
handleWebWorkerInit(this.props.routerBasename);
|
||||
}
|
||||
|
||||
render() {
|
||||
const userManager = this.userManager;
|
||||
|
||||
if (userManager) {
|
||||
return (
|
||||
<Provider store={store}>
|
||||
<OidcProvider store={store} userManager={userManager}>
|
||||
<BrowserRouter>
|
||||
<OHIFStandaloneViewer userManager={userManager} />
|
||||
</BrowserRouter>
|
||||
</OidcProvider>
|
||||
</Provider>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Provider store={store}>
|
||||
{/*<OidcProvider store={store} userManager={userManager}>*/}
|
||||
<BrowserRouter basename={this.props.routerBasename}>
|
||||
<OHIFStandaloneViewer/>
|
||||
</BrowserRouter>
|
||||
{/*</OidcProvider>*/}
|
||||
<BrowserRouter>
|
||||
<OHIFStandaloneViewer />
|
||||
</BrowserRouter>
|
||||
</Provider>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,29 +1,33 @@
|
||||
import React, { Component } from "react";
|
||||
import { CallbackComponent } from "redux-oidc";
|
||||
import { withRouter } from "react-router-dom";
|
||||
import React, { Component } from 'react';
|
||||
import { withRouter } from 'react-router-dom';
|
||||
import PropTypes from 'prop-types';
|
||||
import userManager from "./userManager";
|
||||
import { CallbackComponent } from 'redux-oidc';
|
||||
|
||||
class CallbackPage extends Component {
|
||||
static propTypes = {
|
||||
history: PropTypes.object
|
||||
}
|
||||
static propTypes = {
|
||||
userManager: PropTypes.object.isRequired,
|
||||
history: PropTypes.object.isRequired
|
||||
};
|
||||
|
||||
render() {
|
||||
// just redirect to '/' in both cases
|
||||
return (
|
||||
<CallbackComponent
|
||||
userManager={userManager}
|
||||
successCallback={() => this.props.history.push("/")}
|
||||
errorCallback={error => {
|
||||
this.props.history.push("/");
|
||||
throw new Error(error);
|
||||
}}
|
||||
>
|
||||
<div>Redirecting...</div>
|
||||
</CallbackComponent>
|
||||
);
|
||||
}
|
||||
render() {
|
||||
return (
|
||||
<CallbackComponent
|
||||
userManager={this.props.userManager}
|
||||
successCallback={() => {
|
||||
const pathname = sessionStorage.getItem('ohif-redirect-to');
|
||||
debugger;
|
||||
|
||||
this.props.history.push(pathname);
|
||||
}}
|
||||
errorCallback={error => {
|
||||
this.props.history.push('/');
|
||||
throw new Error(error);
|
||||
}}
|
||||
>
|
||||
<div>Redirecting...</div>
|
||||
</CallbackComponent>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withRouter(CallbackPage);
|
||||
@@ -4,103 +4,98 @@ import { withRouter } from 'react-router';
|
||||
import { Route, Switch } from 'react-router-dom';
|
||||
import { connect } from 'react-redux';
|
||||
import { ViewerbaseDragDropContext } from 'react-viewerbase';
|
||||
import ViewerRouting from "./routes/ViewerRouting.js";
|
||||
import ViewerRouting from './routes/ViewerRouting.js';
|
||||
import StandaloneRouting from './routes/StandaloneRouting.js';
|
||||
import IHEInvokeImageDisplay from './routes/IHEInvokeImageDisplay.js';
|
||||
//import CallbackPage from './CallbackPage.js';
|
||||
//import userManager from "./userManager.js";
|
||||
import CallbackPage from './CallbackPage.js';
|
||||
|
||||
import './OHIFStandaloneViewer.css';
|
||||
import './variables.css';
|
||||
import './theme-tide.css';
|
||||
|
||||
const reload = () => window.location.reload();
|
||||
|
||||
/*function LoadingUser() {
|
||||
return (<div>Loading user...</div>);
|
||||
}*/
|
||||
class OHIFStandaloneViewer extends Component {
|
||||
static propTypes = {
|
||||
history: PropTypes.object.isRequired,
|
||||
user: PropTypes.object
|
||||
};
|
||||
|
||||
class App extends Component {
|
||||
static propTypes = {
|
||||
history: PropTypes.object.isRequired,
|
||||
user: PropTypes.object
|
||||
componentDidMount() {
|
||||
this.unlisten = this.props.history.listen((location, action) => {
|
||||
if (this.props.setContext) {
|
||||
this.props.setContext(window.location.pathname);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.unlisten();
|
||||
}
|
||||
|
||||
render() {
|
||||
const { user, userManager } = this.props;
|
||||
|
||||
const userNotLoggedIn = userManager && (!user || user.expired);
|
||||
if (userNotLoggedIn) {
|
||||
debugger;
|
||||
const pathname = this.props.location.pathname;
|
||||
|
||||
if (pathname !== '/callback') {
|
||||
sessionStorage.setItem('ohif-redirect-to', pathname);
|
||||
}
|
||||
|
||||
return (
|
||||
<Switch>
|
||||
<Route exact path="/silent-refresh.html" onEnter={reload} />
|
||||
<Route exact path="/logout-redirect.html" onEnter={reload} />
|
||||
<Route
|
||||
path="/callback"
|
||||
render={() => <CallbackPage userManager={userManager} />}
|
||||
/>
|
||||
<Route
|
||||
component={() => {
|
||||
userManager.signinRedirect();
|
||||
|
||||
return null;
|
||||
}}
|
||||
/>
|
||||
</Switch>
|
||||
);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.unlisten = this.props.history.listen((location, action) => {
|
||||
if (this.props.setContext) {
|
||||
this.props.setContext(window.location.pathname);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.unlisten();
|
||||
}
|
||||
|
||||
render() {
|
||||
const user = this.props.user;
|
||||
|
||||
/*if (!user || user.expired) {
|
||||
// TODO: redirect to OAuth page if necessary
|
||||
return <Switch>
|
||||
<Route path="/callback" component={CallbackPage} />
|
||||
<Route exact path='/login' component={() => {
|
||||
userManager.signinRedirect();
|
||||
}}/>
|
||||
<Route component={LoadingUser}/>
|
||||
</Switch>;
|
||||
}*/
|
||||
|
||||
return (
|
||||
<Switch>
|
||||
<Route
|
||||
exact
|
||||
path="/"
|
||||
component={StandaloneRouting}
|
||||
/>
|
||||
<Route
|
||||
exact
|
||||
path="/viewer"
|
||||
component={StandaloneRouting}
|
||||
/>
|
||||
<Route
|
||||
path="/viewer/:studyInstanceUids"
|
||||
component={ViewerRouting}
|
||||
/>
|
||||
<Route
|
||||
path="/study/:studyInstanceUid/series/:seriesInstanceUids"
|
||||
component={ViewerRouting}
|
||||
/>
|
||||
<Route
|
||||
path="/IHEInvokeImageDisplay"
|
||||
component={IHEInvokeImageDisplay}
|
||||
/>
|
||||
|
||||
<Route path="/silent-refresh.html" onEnter={reload} />
|
||||
<Route path="/logout-redirect.html" onEnter={reload} />
|
||||
{/*<Route exact path='/login' component={() => {
|
||||
userManager.signinRedirect();
|
||||
}}
|
||||
/>*/
|
||||
/*<Route path="/callback" component={CallbackPage} />*/}
|
||||
<Route render={() =>
|
||||
<div> Sorry, this page does not exist. </div>}
|
||||
/>
|
||||
</Switch>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<Switch>
|
||||
<Route exact path="/silent-refresh.html" onEnter={reload} />
|
||||
<Route exact path="/logout-redirect.html" onEnter={reload} />
|
||||
<Route exact path="/" component={StandaloneRouting} />
|
||||
<Route exact path="/viewer" component={StandaloneRouting} />
|
||||
<Route path="/viewer/:studyInstanceUids" component={ViewerRouting} />
|
||||
<Route
|
||||
path="/study/:studyInstanceUid/series/:seriesInstanceUids"
|
||||
component={ViewerRouting}
|
||||
/>
|
||||
<Route
|
||||
path="/IHEInvokeImageDisplay"
|
||||
component={IHEInvokeImageDisplay}
|
||||
/>
|
||||
<Route render={() => <div> Sorry, this page does not exist. </div>} />
|
||||
</Switch>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = state => {
|
||||
return {};
|
||||
/*return {
|
||||
user: state.oidc.user,
|
||||
};*/
|
||||
return {
|
||||
user: state.oidc.user
|
||||
};
|
||||
};
|
||||
|
||||
const ConnectedApp = connect(
|
||||
mapStateToProps,
|
||||
null
|
||||
)(App);
|
||||
const ConnectedOHIFStandaloneViewer = connect(
|
||||
mapStateToProps,
|
||||
null
|
||||
)(OHIFStandaloneViewer);
|
||||
|
||||
export default ViewerbaseDragDropContext(withRouter(ConnectedApp));
|
||||
export default ViewerbaseDragDropContext(
|
||||
withRouter(ConnectedOHIFStandaloneViewer)
|
||||
);
|
||||
@@ -7,12 +7,10 @@ import Hammer from 'hammerjs';
|
||||
import OHIF from 'ohif-core';
|
||||
//import sha from './sha.js';
|
||||
//import version from './version.js';
|
||||
import { homepage } from '../package.json';
|
||||
|
||||
window.info = {
|
||||
//sha,
|
||||
//sha,
|
||||
//version,
|
||||
homepage
|
||||
};
|
||||
|
||||
// For debugging
|
||||
@@ -33,51 +31,30 @@ OHIF.external.cornerstoneTools = cornerstoneTools;
|
||||
OHIF.external.cornerstoneMath = cornerstoneMath;
|
||||
OHIF.external.cornerstoneWADOImageLoader = cornerstoneWADOImageLoader;
|
||||
|
||||
// TODO: Is there a better way to guess ROOT_URL?
|
||||
let ROOT_URL = window.location.pathname;
|
||||
OHIF.user.getAccessToken = () => {
|
||||
// TODO: Get the Redux store from somewhere else
|
||||
const state = window.store.getState();
|
||||
if (!state.oidc || !state.oidc.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
const config = {
|
||||
maxWebWorkers: Math.max(navigator.hardwareConcurrency - 1, 1),
|
||||
startWebWorkersOnDemand: true,
|
||||
webWorkerPath: ROOT_URL + '/cornerstoneWADOImageLoaderWebWorker.min.js',
|
||||
taskConfiguration: {
|
||||
decodeTask: {
|
||||
loadCodecsOnStartup: true,
|
||||
initializeCodecsOnStartup: false,
|
||||
codecsPath: ROOT_URL + '/cornerstoneWADOImageLoaderCodecs.min.js',
|
||||
usePDFJS: false,
|
||||
strict: false
|
||||
}
|
||||
}
|
||||
return state.oidc.user.access_token;
|
||||
};
|
||||
|
||||
cornerstoneWADOImageLoader.webWorkerManager.initialize(config);
|
||||
|
||||
|
||||
OHIF.user.getAccessToken = () => {
|
||||
// TODO: Get the Redux store from somewhere else
|
||||
const state = window.store.getState();
|
||||
if (!state.oidc || !state.oidc.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
return state.oidc.user.access_token;
|
||||
}
|
||||
|
||||
cornerstoneWADOImageLoader.configure({
|
||||
beforeSend: function(xhr) {
|
||||
const headers = OHIF.DICOMWeb.getAuthorizationHeader();
|
||||
beforeSend: function(xhr) {
|
||||
const headers = OHIF.DICOMWeb.getAuthorizationHeader();
|
||||
|
||||
if (headers.Authorization) {
|
||||
xhr.setRequestHeader("Authorization", headers.Authorization);
|
||||
}
|
||||
if (headers.Authorization) {
|
||||
xhr.setRequestHeader('Authorization', headers.Authorization);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Set the tool font and font size
|
||||
// context.font = "[style] [variant] [weight] [size]/[line height] [font family]";
|
||||
const fontFamily =
|
||||
'Roboto, OpenSans, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif';
|
||||
'Roboto, OpenSans, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif';
|
||||
cornerstoneTools.textStyle.setFont(`16px ${fontFamily}`);
|
||||
|
||||
// Set the tool width
|
||||
|
||||
@@ -1,104 +1,126 @@
|
||||
import React, { Component } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import qs from 'query-string'
|
||||
import Viewer from "../connectedComponents/Viewer";
|
||||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import qs from 'query-string';
|
||||
import Viewer from '../connectedComponents/Viewer';
|
||||
import OHIF from 'ohif-core';
|
||||
|
||||
const { createDisplaySets } = OHIF.utils;
|
||||
|
||||
function parseQueryAndFetchStudies(query) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const url = query.url;
|
||||
return new Promise((resolve, reject) => {
|
||||
const url = query.url;
|
||||
|
||||
if (!url) {
|
||||
reject(new Error('No URL was specified. Use ?url=$yourURL'));
|
||||
}
|
||||
if (!url) {
|
||||
reject(new Error('No URL was specified. Use ?url=$yourURL'));
|
||||
}
|
||||
|
||||
// Define a request to the server to retrieve the study data
|
||||
// as JSON, given a URL that was in the Route
|
||||
const oReq = new XMLHttpRequest();
|
||||
// Define a request to the server to retrieve the study data
|
||||
// as JSON, given a URL that was in the Route
|
||||
const oReq = new XMLHttpRequest();
|
||||
|
||||
// Add event listeners for request failure
|
||||
oReq.addEventListener('error', (error) => {
|
||||
OHIF.log.warn('An error occurred while retrieving the JSON data');
|
||||
reject(error)
|
||||
});
|
||||
|
||||
// When the JSON has been returned, parse it into a JavaScript Object
|
||||
// and render the OHIF Viewer with this data
|
||||
oReq.addEventListener('load', () => {
|
||||
// Parse the response content
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText
|
||||
if (!oReq.responseText) {
|
||||
OHIF.log.warn('Response was undefined');
|
||||
reject(new Error('Response was undefined'));
|
||||
}
|
||||
|
||||
OHIF.log.info(JSON.stringify(oReq.responseText, null, 2));
|
||||
|
||||
const data = JSON.parse(oReq.responseText);
|
||||
if (data.servers && query.studyInstanceUids) {
|
||||
const server = data.servers.dicomWeb[0];
|
||||
server.type = 'dicomWeb';
|
||||
|
||||
const studyInstanceUids = query.studyInstanceUids.split(';');
|
||||
const seriesInstanceUids = [];
|
||||
|
||||
OHIF.studies.retrieveStudiesMetadata(server, studyInstanceUids, seriesInstanceUids).then(studies => {
|
||||
resolve(studies);
|
||||
}, error => {
|
||||
reject(error);
|
||||
});
|
||||
} else {
|
||||
resolve(data.studies);
|
||||
}
|
||||
});
|
||||
|
||||
// Open the Request to the server for the JSON data
|
||||
// In this case we have a server-side route called /api/
|
||||
// which responds to GET requests with the study data
|
||||
OHIF.log.info(`Sending Request to: ${url}`);
|
||||
oReq.open('GET', url);
|
||||
oReq.setRequestHeader('Accept', 'application/json')
|
||||
|
||||
// Fire the request to the server
|
||||
oReq.send();
|
||||
// Add event listeners for request failure
|
||||
oReq.addEventListener('error', error => {
|
||||
OHIF.log.warn('An error occurred while retrieving the JSON data');
|
||||
reject(error);
|
||||
});
|
||||
|
||||
// When the JSON has been returned, parse it into a JavaScript Object
|
||||
// and render the OHIF Viewer with this data
|
||||
oReq.addEventListener('load', () => {
|
||||
// Parse the response content
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText
|
||||
if (!oReq.responseText) {
|
||||
OHIF.log.warn('Response was undefined');
|
||||
reject(new Error('Response was undefined'));
|
||||
}
|
||||
|
||||
OHIF.log.info(JSON.stringify(oReq.responseText, null, 2));
|
||||
|
||||
const data = JSON.parse(oReq.responseText);
|
||||
if (data.servers && query.studyInstanceUids) {
|
||||
const server = data.servers.dicomWeb[0];
|
||||
server.type = 'dicomWeb';
|
||||
|
||||
const studyInstanceUids = query.studyInstanceUids.split(';');
|
||||
const seriesInstanceUids = [];
|
||||
|
||||
OHIF.studies
|
||||
.retrieveStudiesMetadata(
|
||||
server,
|
||||
studyInstanceUids,
|
||||
seriesInstanceUids
|
||||
)
|
||||
.then(
|
||||
studies => {
|
||||
resolve(studies);
|
||||
},
|
||||
error => {
|
||||
reject(error);
|
||||
}
|
||||
);
|
||||
} else {
|
||||
resolve(data.studies);
|
||||
}
|
||||
});
|
||||
|
||||
// Open the Request to the server for the JSON data
|
||||
// In this case we have a server-side route called /api/
|
||||
// which responds to GET requests with the study data
|
||||
OHIF.log.info(`Sending Request to: ${url}`);
|
||||
oReq.open('GET', url);
|
||||
oReq.setRequestHeader('Accept', 'application/json');
|
||||
|
||||
// Fire the request to the server
|
||||
oReq.send();
|
||||
});
|
||||
}
|
||||
|
||||
class StandaloneRouting extends Component {
|
||||
state = {
|
||||
studies: null,
|
||||
error: null
|
||||
state = {
|
||||
studies: null,
|
||||
error: null
|
||||
};
|
||||
|
||||
static propTypes = {
|
||||
location: PropTypes.object,
|
||||
store: PropTypes.object
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
const search = this.props.location.search;
|
||||
if (!search) {
|
||||
console.warn('no search string!');
|
||||
|
||||
this.setState({
|
||||
error: new Error('No query string provided.')
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static propTypes = {
|
||||
location: PropTypes.object,
|
||||
store: PropTypes.object
|
||||
};
|
||||
const query = qs.parse(search);
|
||||
|
||||
componentDidMount() {
|
||||
const query = qs.parse(this.props.location.search);
|
||||
parseQueryAndFetchStudies(query).then(studies => {
|
||||
const updatedStudies = createDisplaySets(studies);
|
||||
parseQueryAndFetchStudies(query).then(
|
||||
studies => {
|
||||
const updatedStudies = createDisplaySets(studies);
|
||||
|
||||
this.setState({ studies: updatedStudies });
|
||||
}, error => {
|
||||
this.setState({ error });
|
||||
});
|
||||
this.setState({ studies: updatedStudies });
|
||||
},
|
||||
error => {
|
||||
this.setState({ error });
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.error) {
|
||||
return <div>Error: {JSON.stringify(this.state.error)}</div>;
|
||||
} else if (!this.state.studies) {
|
||||
return <div>Loading...</div>;
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.error) {
|
||||
return (<div>Error: {JSON.stringify(this.state.error)}</div>);
|
||||
} else if (!this.state.studies) {
|
||||
return (<div>Loading...</div>);
|
||||
}
|
||||
|
||||
return (
|
||||
<Viewer studies={this.state.studies}/>
|
||||
);
|
||||
}
|
||||
return <Viewer studies={this.state.studies} />;
|
||||
}
|
||||
}
|
||||
|
||||
export default StandaloneRouting;
|
||||
@@ -7126,10 +7126,10 @@ octal@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b"
|
||||
|
||||
ohif-core@^0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/ohif-core/-/ohif-core-0.1.6.tgz#81e2aea7bfe41acaea18641428c65afb57223a0b"
|
||||
integrity sha512-2qYojFkcM5Zoa2y4nlJ/1ovZCLNjTvnuizixSWIuIvu4s3jnlu+2f09R3cHb53hlknC4NiZEgHH//cSXR4/9Jw==
|
||||
ohif-core@^0.1.7:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/ohif-core/-/ohif-core-0.1.7.tgz#81f49f142d40338a3839f06c849aace675847002"
|
||||
integrity sha512-VXnpaw4VjKBR1P9tSB2ZGLpXYXwdbmL0oZ7P+bbKKOh2Q+8An4E9lTiKpUlUoxaf/HiTZIUQ/2Cjp7qJe88FDg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.2.0"
|
||||
dicomweb-client "^0.4.1"
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"servers": {
|
||||
"dicomWeb": [
|
||||
{
|
||||
"name": "DCM4CHEE",
|
||||
"wadoUriRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
"qidoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoRoot": "https://cancer.crowds-cure.org/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"qidoSupportsIncludeField": true,
|
||||
"imageRendering": "wadors",
|
||||
"thumbnailRendering": "wadors",
|
||||
"requestOptions": {
|
||||
"requestFromBrowser": true
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"oidc": [{
|
||||
"authServerUrl": "https://cancer.crowds-cure.org/auth/realms/dcm4che",
|
||||
"authRedirectUri": "/callback",
|
||||
"clientId": "crowds-cure-cancer",
|
||||
"postLogoutRedirectUri": "/logout-redirect.html",
|
||||
"responseType": "id_token token",
|
||||
"scope": "email profile openid",
|
||||
"revokeAccessTokenOnSignout": true,
|
||||
"extraQueryParams": {
|
||||
"kc_idp_hint": "crowds-cure-cancer-auth0-oidc",
|
||||
"client_id": "crowds-cure-cancer"
|
||||
}
|
||||
}]
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"servers": {
|
||||
"dicomWeb": [
|
||||
{
|
||||
"name": "DCM4CHEE",
|
||||
"wadoUriRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
"qidoRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"qidoSupportsIncludeField": true,
|
||||
"imageRendering": "wadors",
|
||||
"thumbnailRendering": "wadors",
|
||||
"requestOptions": {
|
||||
"requestFromBrowser": true,
|
||||
"auth": "admin:admin"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"servers": {
|
||||
"dicomWeb": [
|
||||
{
|
||||
"name": "DCM4CHEE",
|
||||
"wadoUriRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/wado",
|
||||
"qidoRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"wadoRoot": "https://dcm4che.ohif.club/dcm4chee-arc/aets/DCM4CHEE/rs",
|
||||
"qidoSupportsIncludeField": true,
|
||||
"imageRendering": "wadors",
|
||||
"thumbnailRendering": "wadors",
|
||||
"requestOptions": {
|
||||
"requestFromBrowser": true,
|
||||
"auth": "cloud:healthcare"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user