wip on react transition 2

This commit is contained in:
Erik Ziegler committed 2018-11-30 14:28:15 -05:00
1 parent 7425c2beb8
commit f821ea2b80
9 files changed
+51 -113

No files matched your search

@@ -1,6 +1,8 @@
import viewer from './viewer/index.js';
export {
const components = {
viewer
};
export default components;
@@ -14,6 +14,7 @@ import './CornerstoneViewport.css';
import cloneDeep from 'lodash.clonedeep';
import debounce from 'lodash.debounce';
import {StackManager} from "../../lib/StackManager";
const EVENT_RESIZE = 'resize';
const loadIndicatorDelay = 45;
@@ -42,11 +43,22 @@ class CornerstoneViewport extends Component {
constructor(props) {
super(props);
const stack = props.viewportData.stack;
const { displaySetInstanceUid, studyInstanceUid } = this.props.viewportData;
// Create shortcut to displaySet
const study = OHIF.viewer.Studies.findBy({ studyInstanceUid });
const displaySet = study.displaySets.find(set => {
return set.displaySetInstanceUid === displaySetInstanceUid;
});
// Get stack from Stack Manager
const stack = StackManager.findOrCreateStack(study, displaySet);
// TODO: Allow viewport as a prop
this.state = {
stack,
displaySetInstanceUid,
imageId: stack.imageIds[0],
viewportHeight: '100%',
isLoading: true,
@@ -388,10 +400,10 @@ class CornerstoneViewport extends Component {
componentDidUpdate(prevProps) {
// TODO: Add a real object shallow comparison here?
if (
this.state.stack.imageIds[0] !== this.props.viewportData.stack.imageIds[0]
this.state.displaySetInstanceUid !== this.props.viewportData.displaySetInstanceUid
) {
this.setState({
stack: this.props.viewportData.stack
displaySetInstanceUid: this.props.viewportData.displaySetInstanceUid
});
const stackData = cornerstoneTools.getToolState(this.element, 'stack');
@@ -413,7 +425,7 @@ class CornerstoneViewport extends Component {
const imageId = currentStack.imageIds[currentStack.currentImageIdIndex];
cornerstone.loadAndCacheImage(imageId).then(image => {
/*cornerstone.loadAndCacheImage(imageId).then(image => {
try {
cornerstone.getEnabledElement(this.element);
} catch (error) {
@@ -426,7 +438,7 @@ class CornerstoneViewport extends Component {
cornerstoneTools.stackPrefetch.disable(this.element);
cornerstoneTools.stackPrefetch.enable(this.element);
});
});*/
}
if (this.props.activeTool !== prevProps.activeTool) {
@@ -438,54 +450,6 @@ class CornerstoneViewport extends Component {
isTouchActive: true
});
}
if (this.props.currentLesion !== prevProps.currentLesion) {
const currentToolData = this.props.toolData[this.props.currentLesion - 1];
if (currentToolData) {
const { imageId } = currentToolData;
const toolState = cornerstoneTools.globalImageIdSpecificToolStateManager.saveToolState();
const toolData = toolState[imageId][currentToolData.toolType].data;
toolData.forEach(data => {
if (data._id === currentToolData._id) {
data.active = true;
} else {
data.active = false;
}
});
cornerstoneTools.globalImageIdSpecificToolStateManager.restoreToolState(
toolState
);
if (this.state.imageId === imageId) {
cornerstone.setViewport(this.element, currentToolData.viewport);
cornerstone.updateImage(this.element);
} else {
cornerstone.loadAndCacheImage(imageId).then(image => {
try {
cornerstone.getEnabledElement(this.element);
} catch (error) {
// Handle cases where the user ends the session before the image is displayed.
console.error(error);
return;
}
cornerstone.displayImage(
this.element,
image,
currentToolData.viewport
);
this.setState({
imageId
});
});
}
} else {
cornerstone.updateImage(this.element);
}
}
}
setActiveTool = activeTool => {
@@ -636,9 +600,9 @@ class CornerstoneViewport extends Component {
}
CornerstoneViewport.propTypes = {
measurementsAddedOrRemoved: PropTypes.func.isRequired,
measurementsChanged: PropTypes.func.isRequired,
activeTool: PropTypes.string.isRequired,
measurementsAddedOrRemoved: PropTypes.func,
measurementsChanged: PropTypes.func,
activeTool: PropTypes.string,
viewportData: PropTypes.object.isRequired
};
@@ -74,39 +74,43 @@ class GridLayout extends Component {
viewportData = viewportData.slice(0, numViewports);
}
const viewports = viewportData.map((viewport, index) => {
const className = `viewportContainer ${this.getClass(index)} ${getActiveClass(index)}`;
const viewports = viewportData.map((data, index) => {
const className = `viewportContainer ${this.getClass(index)} ${this.getActiveClass(index)}`;
const styles = {
height: `${height}%`,
width: `${width}%`,
};
const cornerstoneViewport = (viewport) => (
const cornerstoneViewport = (data) => (
<div className="removable">
<CornerstoneViewport/>
<CornerstoneViewport viewportData={data}/>
</div>
);
const pluginViewport = (viewport) => (
<div className={`viewport-plugin-${viewport.plugin}`} style="height:100%; width: 100%">
const pluginViewport = (data) => (
<div className={`viewport-plugin-${data.plugin}`} style="height:100%; width: 100%">
</div>
);
return (
<div className={className} style={styles}>
{viewport.plugin === 'cornerstone' ?
cornerstoneViewport(viewport) :
pluginViewport(viewport)
<div key={index} className={className} style={styles}>
{data.plugin === 'cornerstone' ?
cornerstoneViewport(data) :
pluginViewport(data)
}
{/*{>seriesQuickSwitch (clone this viewport=viewport viewportIndex=@index)}*/}
</div>
)
})
const layoutClass = `layout-${rows}-${columns}`;
return (
<div id='imageViewerViewports'>
{ viewports }
<div id='layoutManagerTarget' className={layoutClass}>
{ viewports }
</div>
</div>
)
}
@@ -89,7 +89,7 @@ class LoadingIndicator extends Component {
return (<>
<div className="imageViewerLoadingIndicator loadingIndicator">
<div className="indicatorContents">
<p>Loading... <i className="fa fa-spin fa-circle-o-notch fa-fw"></i> {{percComplete}}</p>
<p>Loading... <i className="fa fa-spin fa-circle-o-notch fa-fw"></i> {percComplete}</p>
</div>
</div>
<div className="imageViewerErrorLoadingIndicator loadingIndicator">
@@ -104,7 +104,7 @@ class LoadingIndicator extends Component {
}
LoadingIndicator.propTypes = {
percentComplete: PropTypes.number.isRequired
percentComplete: PropTypes.number
};
export default LoadingIndicator;
@@ -59,9 +59,8 @@ class ViewerMain extends Component {
Session.set('OHIFViewerMainRendered', Math.random());
}
setContents(component, data) {
const Comp = this.props.component;
const contents = (<Comp data={data}/>);
setContents(Component, props) {
const contents = (<Component {...props}/>);
this.setState({
contents
@@ -6,7 +6,7 @@ import ImageScrollbar from './ImageScrollbar.js';
import ToolContextMenu from './ToolContextMenu.js';
import ViewportOverlay from './ViewportOverlay.js';
export {
const viewer = {
ViewerMain,
GridLayout,
LoadingIndicator,
@@ -14,4 +14,7 @@ export {
ImageScrollbar,
ToolContextMenu,
ViewportOverlay,
test: 'test2'
};
export default viewer;