164 lines
5.3 KiB
JavaScript
164 lines
5.3 KiB
JavaScript
import { Component } from 'react';
|
|
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import cornerstone from 'cornerstone-core';
|
|
import cornerstoneTools from 'cornerstone-tools';
|
|
import { LayoutManager } from 'react-viewerbase';
|
|
import { OHIF } from 'ohif-core';
|
|
import ConnectedCornerstoneViewport from './ConnectedCornerstoneViewport.js';
|
|
import StackManager from '../lib/StackManager.js';
|
|
import './ViewerMain.css';
|
|
|
|
//const { StudyLoadingListener, StudyPrefetcher, ResizeViewportManager } = OHIF.classes;
|
|
|
|
|
|
//window.ResizeViewportManager = window.ResizeViewportManager || new ResizeViewportManager();
|
|
|
|
function getCornerstoneStack(studies, viewportData) {
|
|
const {
|
|
displaySetInstanceUid,
|
|
studyInstanceUid,
|
|
} = viewportData;
|
|
|
|
// Create shortcut to displaySet
|
|
const study = studies.find(study => study.studyInstanceUid === studyInstanceUid);
|
|
|
|
const displaySet = study.displaySets.find((set) => {
|
|
return set.displaySetInstanceUid === displaySetInstanceUid;
|
|
});
|
|
|
|
// Get stack from Stack Manager
|
|
const stack = StackManager.findOrCreateStack(study, displaySet);
|
|
stack.currentImageIdIndex = 0;
|
|
|
|
return stack;
|
|
}
|
|
|
|
class ViewerMain extends Component {
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
this.state = {
|
|
displaySets: [],
|
|
viewportData: [],
|
|
};
|
|
|
|
this.getCornerstoneViewport = this.getCornerstoneViewport.bind(this);
|
|
}
|
|
|
|
componentDidMount() {
|
|
// Attach the Window resize listener
|
|
// Don't use jQuery here. "window.onresize" will always be null
|
|
// If its necessary, check all the code for window.onresize getter
|
|
// and change it to jQuery._data(window, 'events')['resize'].
|
|
// Otherwise this function will be probably overrided.
|
|
// See cineDialog instance.setResizeHandler function
|
|
//window.addEventListener('resize', window.ResizeViewportManager.getResizeHandler());
|
|
|
|
// Add beforeUnload event handler to check for unsaved changes
|
|
//window.addEventListener('beforeunload', unloadHandlers.beforeUnload);
|
|
|
|
const { studies } = this.props;
|
|
//this.studyPrefetcher = StudyPrefetcher.getInstance();
|
|
//this.studyPrefetcher.setStudies(studies);
|
|
//this.studyLoadingListener = StudyLoadingListener.getInstance();
|
|
//this.studyLoadingListener.clear();
|
|
//this.studyLoadingListener.addStudies(studies);
|
|
|
|
// Get all the display sets for the viewer studies
|
|
const displaySets = [];
|
|
studies.forEach((study) => {
|
|
study.displaySets.forEach(dSet => dSet.images.length && displaySets.push(dSet));
|
|
});
|
|
|
|
// TODO: re-add plugins back in
|
|
// TODO: We shouldn't just show hang display sets by default
|
|
const viewportData = displaySets.map((dSet, index) => {
|
|
return this.getCornerstoneViewport(dSet, index);
|
|
});
|
|
|
|
debugger;
|
|
|
|
this.setState({
|
|
displaySets,
|
|
viewportData
|
|
});
|
|
}
|
|
|
|
getCornerstoneViewport(data, index) {
|
|
debugger;
|
|
const stack = getCornerstoneStack(this.props.studies, data)
|
|
const viewportData = {
|
|
stack,
|
|
...data
|
|
};
|
|
|
|
return (<ConnectedCornerstoneViewport
|
|
key={index}
|
|
viewportData={viewportData}
|
|
cornerstone={cornerstone}
|
|
cornerstoneTools={cornerstoneTools}
|
|
/>);
|
|
};
|
|
|
|
setViewportData = ({viewportIndex, item}) => {
|
|
// TODO: Replace this with mapDispatchToProps call
|
|
// if we decide to put viewport info into redux
|
|
|
|
const updatedViewportData = this.state.viewportData;
|
|
const data = {
|
|
studyInstanceUid: item.studyInstanceUid,
|
|
displaySetInstanceUid: item.displaySetInstanceUid
|
|
};
|
|
|
|
updatedViewportData[viewportIndex] = this.getCornerstoneViewport(data, viewportIndex);
|
|
|
|
this.setState({
|
|
viewportData: updatedViewportData
|
|
});
|
|
}
|
|
|
|
render() {
|
|
// TODO: Connect LayoutManager to redux
|
|
return (
|
|
<div className="ViewerMain">
|
|
<LayoutManager viewportData={this.state.viewportData} setViewportData={this.setViewportData}/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
// Remove the Window resize listener
|
|
//window.removeEventListener('resize', window.ResizeViewportManager.getResizeHandler());
|
|
|
|
// Remove beforeUnload event handler...
|
|
//window.removeEventListener('beforeunload', unloadHandlers.beforeUnload);
|
|
|
|
// Destroy the synchronizer used to update reference lines
|
|
OHIF.viewer.updateImageSynchronizer.destroy();
|
|
|
|
// Stop prefetching when we close the viewer
|
|
//this.studyPrefetcher.destroy();
|
|
|
|
// Destroy stack loading listeners when we close the viewer
|
|
//this.studyLoadingListener.clear();
|
|
|
|
// Clear references to all stacks in the StackManager
|
|
//OHIF.viewerbase.stackManager.clearStacks();
|
|
|
|
// @TypeSafeStudies
|
|
// Clears OHIF.viewer.Studies collection
|
|
//OHIF.viewer.Studies.removeAll();
|
|
|
|
// @TypeSafeStudies
|
|
// Clears OHIF.viewer.StudyMetadataList collection
|
|
//OHIF.viewer.StudyMetadataList.removeAll();
|
|
}
|
|
}
|
|
|
|
ViewerMain.propTypes = {
|
|
studies: PropTypes.array.isRequired
|
|
};
|
|
|
|
export default ViewerMain;
|