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 (