fix(hotkeys): Fix the issues with hotkeys (#488)
* wip viewport * refactoring to do not use dispatch from window * fixing server active testing * fix(dependencies): Bump ohif-core to 0.5.5
This commit is contained in:
parent
c2eb5f342f
commit
3bae254a6f
@ -30,7 +30,8 @@ const mapStateToProps = (state, ownProps) => {
|
||||
...dataFromStore,
|
||||
enableStackPrefetch: isActive,
|
||||
//stack: viewportSpecificData.stack,
|
||||
cineToolData: viewportSpecificData.cine
|
||||
cineToolData: viewportSpecificData.cine,
|
||||
viewport: viewportSpecificData.viewport
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -77,7 +77,7 @@
|
||||
"hammerjs": "^2.0.8",
|
||||
"lodash.isequal": "4.5.0",
|
||||
"moment": "^2.24.0",
|
||||
"ohif-core": "0.5.3",
|
||||
"ohif-core": "0.5.5",
|
||||
"ohif-cornerstone-extension": "0.0.30",
|
||||
"ohif-dicom-html-extension": "^0.0.2",
|
||||
"ohif-dicom-microscopy-extension": "^0.0.5",
|
||||
|
||||
@ -1,33 +1,44 @@
|
||||
import { connect } from 'react-redux';
|
||||
import ViewerMain from './ViewerMain';
|
||||
import OHIF from 'ohif-core';
|
||||
import { connect } from 'react-redux'
|
||||
import ViewerMain from './ViewerMain'
|
||||
import OHIF from 'ohif-core'
|
||||
|
||||
const { setViewportSpecificData, clearViewportSpecificData } = OHIF.redux.actions;
|
||||
const {
|
||||
setViewportSpecificData,
|
||||
clearViewportSpecificData,
|
||||
setToolActive,
|
||||
setActiveViewportSpecificData,
|
||||
} = OHIF.redux.actions
|
||||
|
||||
const mapStateToProps = state => {
|
||||
const { activeViewportIndex, layout, viewportSpecificData } = state.viewports;
|
||||
const { activeViewportIndex, layout, viewportSpecificData } = state.viewports
|
||||
|
||||
return {
|
||||
activeViewportIndex,
|
||||
layout,
|
||||
viewportSpecificData
|
||||
}
|
||||
};
|
||||
return {
|
||||
activeViewportIndex,
|
||||
layout,
|
||||
viewportSpecificData,
|
||||
}
|
||||
}
|
||||
|
||||
const mapDispatchToProps = dispatch => {
|
||||
return {
|
||||
setViewportSpecificData: (viewportIndex, data) => {
|
||||
dispatch(setViewportSpecificData(viewportIndex, data));
|
||||
},
|
||||
clearViewportSpecificData: () => {
|
||||
dispatch(clearViewportSpecificData());
|
||||
}
|
||||
};
|
||||
};
|
||||
return {
|
||||
setViewportSpecificData: (viewportIndex, data) => {
|
||||
dispatch(setViewportSpecificData(viewportIndex, data))
|
||||
},
|
||||
clearViewportSpecificData: () => {
|
||||
dispatch(clearViewportSpecificData())
|
||||
},
|
||||
setToolActive: tool => {
|
||||
dispatch(setToolActive(tool))
|
||||
},
|
||||
setActiveViewportSpecificData: viewport => {
|
||||
dispatch(setActiveViewportSpecificData(viewport))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
const ConnectedViewerMain = connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(ViewerMain);
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(ViewerMain)
|
||||
|
||||
export default ConnectedViewerMain;
|
||||
export default ConnectedViewerMain
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
import { connect } from 'react-redux';
|
||||
import ViewerRetrieveStudyData from './ViewerRetrieveStudyData.js';
|
||||
import { connect } from 'react-redux'
|
||||
import ViewerRetrieveStudyData from './ViewerRetrieveStudyData.js'
|
||||
|
||||
const isActive = (a) => a.active === true;
|
||||
const isActive = a => a.active === true
|
||||
|
||||
const mapStateToProps = state => {
|
||||
const activeServer = state.servers.servers.find(isActive);
|
||||
const activeServer = state.servers.servers.find(isActive)
|
||||
|
||||
return {
|
||||
server: activeServer,
|
||||
};
|
||||
};
|
||||
return {
|
||||
server: activeServer,
|
||||
}
|
||||
}
|
||||
|
||||
const ConnectedViewerRetrieveStudyData = connect(
|
||||
mapStateToProps,
|
||||
null
|
||||
)(ViewerRetrieveStudyData);
|
||||
mapStateToProps,
|
||||
null
|
||||
)(ViewerRetrieveStudyData)
|
||||
|
||||
export default ConnectedViewerRetrieveStudyData;
|
||||
export default ConnectedViewerRetrieveStudyData
|
||||
|
||||
@ -1,52 +1,61 @@
|
||||
import { Component } from 'react';
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { OHIF } from 'ohif-core';
|
||||
import ConnectedLayoutManager from './ConnectedLayoutManager.js';
|
||||
import './ViewerMain.css';
|
||||
import { Component } from 'react'
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import { OHIF } from 'ohif-core'
|
||||
import ConnectedLayoutManager from './ConnectedLayoutManager.js'
|
||||
import './ViewerMain.css'
|
||||
|
||||
class ViewerMain extends Component {
|
||||
static propTypes = {
|
||||
studies: PropTypes.array.isRequired,
|
||||
setViewportSpecificData: PropTypes.func.isRequired,
|
||||
clearViewportSpecificData: PropTypes.func.isRequired
|
||||
};
|
||||
clearViewportSpecificData: PropTypes.func.isRequired,
|
||||
setToolActive: PropTypes.func.isRequired,
|
||||
setActiveViewportSpecificData: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
OHIF.hotkeysUtil.setup('viewer');
|
||||
super(props)
|
||||
|
||||
// Initialize hotkeys
|
||||
new OHIF.HotkeysUtil('viewer', {
|
||||
setViewportSpecificData: props.setViewportSpecificData,
|
||||
clearViewportSpecificData: props.clearViewportSpecificData,
|
||||
setToolActive: props.setToolActive,
|
||||
setActiveViewportSpecificData: props.setActiveViewportSpecificData,
|
||||
})
|
||||
|
||||
this.state = {
|
||||
displaySets: []
|
||||
displaySets: [],
|
||||
}
|
||||
}
|
||||
|
||||
getDisplaySets(studies) {
|
||||
const displaySets = [];
|
||||
const displaySets = []
|
||||
studies.forEach(study => {
|
||||
study.displaySets.forEach(dSet => {
|
||||
if (!dSet.plugin) {
|
||||
dSet.plugin = 'cornerstone';
|
||||
dSet.plugin = 'cornerstone'
|
||||
}
|
||||
displaySets.push(dSet);
|
||||
});
|
||||
});
|
||||
displaySets.push(dSet)
|
||||
})
|
||||
})
|
||||
|
||||
return displaySets;
|
||||
return displaySets
|
||||
}
|
||||
|
||||
findDisplaySet(studies, studyInstanceUid, displaySetInstanceUid) {
|
||||
const study = studies.find(study => {
|
||||
return study.studyInstanceUid === studyInstanceUid;
|
||||
});
|
||||
return study.studyInstanceUid === studyInstanceUid
|
||||
})
|
||||
|
||||
if (!study) {
|
||||
return;
|
||||
return
|
||||
}
|
||||
|
||||
return study.displaySets.find(displaySet => {
|
||||
return displaySet.displaySetInstanceUid === displaySetInstanceUid;
|
||||
});
|
||||
return displaySet.displaySetInstanceUid === displaySetInstanceUid
|
||||
})
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
@ -54,41 +63,50 @@ class ViewerMain extends Component {
|
||||
//window.addEventListener('beforeunload', unloadHandlers.beforeUnload);
|
||||
|
||||
// Get all the display sets for the viewer studies
|
||||
const displaySets = this.getDisplaySets(this.props.studies);
|
||||
const displaySets = this.getDisplaySets(this.props.studies)
|
||||
|
||||
this.setState({
|
||||
displaySets
|
||||
});
|
||||
displaySets,
|
||||
})
|
||||
}
|
||||
|
||||
getViewportData = () => {
|
||||
const viewportData = [];
|
||||
const { layout, viewportSpecificData } = this.props;
|
||||
const viewportData = []
|
||||
const { layout, viewportSpecificData } = this.props
|
||||
|
||||
for (let viewportIndex = 0; viewportIndex < layout.viewports.length; viewportIndex++) {
|
||||
let displaySet = viewportSpecificData[viewportIndex];
|
||||
for (
|
||||
let viewportIndex = 0;
|
||||
viewportIndex < layout.viewports.length;
|
||||
viewportIndex++
|
||||
) {
|
||||
let displaySet = viewportSpecificData[viewportIndex]
|
||||
|
||||
// If the viewport is empty, get one available in study
|
||||
if (!displaySet || !displaySet.displaySetInstanceUid) {
|
||||
const { displaySets } = this.state;
|
||||
displaySet = displaySets.find(ds => !viewportData.some(v => v.displaySetInstanceUid === ds.displaySetInstanceUid));
|
||||
const { displaySets } = this.state
|
||||
displaySet = displaySets.find(
|
||||
ds =>
|
||||
!viewportData.some(
|
||||
v => v.displaySetInstanceUid === ds.displaySetInstanceUid
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
viewportData.push(displaySet);
|
||||
viewportData.push(displaySet)
|
||||
}
|
||||
|
||||
return viewportData;
|
||||
};
|
||||
return viewportData
|
||||
}
|
||||
|
||||
setViewportData = ({ viewportIndex, item }) => {
|
||||
const displaySet = this.findDisplaySet(
|
||||
this.props.studies,
|
||||
item.studyInstanceUid,
|
||||
item.displaySetInstanceUid
|
||||
);
|
||||
)
|
||||
|
||||
this.props.setViewportSpecificData(viewportIndex, displaySet);
|
||||
};
|
||||
this.props.setViewportSpecificData(viewportIndex, displaySet)
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
@ -99,15 +117,15 @@ class ViewerMain extends Component {
|
||||
setViewportData={this.setViewportData}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
// Clear the entire viewport specific data
|
||||
const { viewportSpecificData } = this.props;
|
||||
Object.keys(viewportSpecificData).forEach((viewportIndex) => {
|
||||
this.props.clearViewportSpecificData(viewportIndex);
|
||||
});
|
||||
const { viewportSpecificData } = this.props
|
||||
Object.keys(viewportSpecificData).forEach(viewportIndex => {
|
||||
this.props.clearViewportSpecificData(viewportIndex)
|
||||
})
|
||||
|
||||
// Remove beforeUnload event handler...
|
||||
//window.removeEventListener('beforeunload', unloadHandlers.beforeUnload);
|
||||
@ -126,4 +144,4 @@ class ViewerMain extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
export default ViewerMain;
|
||||
export default ViewerMain
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
import { connect } from 'react-redux';
|
||||
import { connect } from 'react-redux'
|
||||
|
||||
import StudyListWithData from './StudyListWithData.js';
|
||||
import StudyListWithData from './StudyListWithData.js'
|
||||
|
||||
const isActive = (a) => a.active === true;
|
||||
const isActive = a => a.active === true
|
||||
|
||||
const mapStateToProps = state => {
|
||||
const activeServer = state.servers.servers.find(isActive);
|
||||
const activeServer = state.servers.servers.find(isActive)
|
||||
|
||||
return {
|
||||
server: activeServer,
|
||||
user: state.oidc.user,
|
||||
};
|
||||
};
|
||||
return {
|
||||
server: activeServer,
|
||||
user: state.oidc.user,
|
||||
}
|
||||
}
|
||||
|
||||
const ConnectedStudyList = connect(
|
||||
mapStateToProps,
|
||||
null
|
||||
)(StudyListWithData);
|
||||
mapStateToProps,
|
||||
null
|
||||
)(StudyListWithData)
|
||||
|
||||
export default ConnectedStudyList;
|
||||
export default ConnectedStudyList
|
||||
|
||||
@ -9674,10 +9674,10 @@ octokit-pagination-methods@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4"
|
||||
integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==
|
||||
|
||||
ohif-core@0.5.3:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/ohif-core/-/ohif-core-0.5.3.tgz#cf78f0e4b28ed5a602b032483cdd44f3baea34f2"
|
||||
integrity sha512-pdzVz9WkdXVm99TuBSx1JYEed9aPaD9/CKd/+YM4R3lgchDNLxuz0l76HBPHpFV2XDIKmu1q5EyETyMiOxhZsw==
|
||||
ohif-core@0.5.5:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.yarnpkg.com/ohif-core/-/ohif-core-0.5.5.tgz#78ace87fa06b3b23a004414a702cc23cb00edf9d"
|
||||
integrity sha512-BORJCxOWuVAx2CE6+LSdL5+1+PG6gkYgl6tyAZhHhAgT46DWAfbq8nkAIX7Rhwot0BWpAcHkkBWIavGOBOH24Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.2.0"
|
||||
ajv "^6.10.0"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user