import { Component } from 'react'; import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { LayoutManager } from 'react-viewerbase'; import { OHIF } from 'ohif-core'; // Local Modules import { unloadHandlers } from '../../../lib/unloadHandlers'; import { cornerstone, cornerstoneTools } from 'meteor/ohif:cornerstone'; import ConnectedCornerstoneViewport from '../ConnectedCornerstoneViewport.js'; import StackManager from '../../../lib/StackManager.js'; const { StudyLoadingListener, StudyPrefetcher, ResizeViewportManager } = OHIF.classes; import './ViewerMain.styl'; window.ResizeViewportManager = window.ResizeViewportManager || new ResizeViewportManager(); function getCornerstoneStack(viewportData) { const { displaySetInstanceUid, studyInstanceUid, } = 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); stack.currentImageIdIndex = 0; return stack; } class ViewerMain extends Component { constructor(props) { super(props); this.state = { displaySets: [] }; 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)); }); this.setState({ displaySets }); } getCornerstoneViewport(data, index) { const stack = getCornerstoneStack(data) const viewportData = { stack, ...data }; return (); }; render() { // TODO: re-add plugins back in const viewportData = this.state.displaySets.map((dSet, index) => { return this.getCornerstoneViewport(dSet, index); }) // TODO: Connect LayoutManager to redux return (
); } 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(); ProtocolEngine = null; // 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;