ohif-viewer/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js
Evren Ozkan 77182d1916 Make the persistence method of hanging protocols configurable
- Implement ProtocolStore interface to allow persisting hanging protocols using different strategies
- Implement and set default strategy to persist hanging protocols in the MongoDB collection “HangingProtocols” in the application server
2017-01-04 17:49:31 -05:00

108 lines
4.2 KiB
JavaScript

import { OHIF } from 'meteor/ohif:core';
import { unloadHandlers } from '../../../lib/unloadHandlers.js';
Template.viewerMain.onCreated(() => {
// 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', handleResize);
// Add beforeUnload event handler to check for unsaved changes
window.addEventListener('beforeunload', unloadHandlers.beforeUnload);
// Create the synchronizer used to update reference lines
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer('CornerstoneNewImage', cornerstoneTools.updateImageSynchronizer);
});
Template.viewerMain.onRendered(() => {
const instance = Template.instance();
HP.ProtocolStore.onReady(() => {
const { studies, currentTimepointId, measurementApi, timepointIds } = instance.data;
const parentElement = instance.$('#layoutManagerTarget').get(0);
window.layoutManager = new LayoutManager(parentElement, studies);
// Default actions for Associated Studies
if(currentTimepointId) {
// Follow-up studies: same as the first measurement in the table
// Baseline studies: target-tool
if(studies[0]) {
let activeTool;
// In follow-ups, get the baseline timepointId
const timepointId = timepointIds.find(id => id !== currentTimepointId);
// Follow-up studies
if(studies[0].timepointType === 'followup' && timepointId) {
const measurementTools = OHIF.measurements.MeasurementApi.getConfiguration().measurementTools;
// Create list of measurement tools
const measurementTypes = measurementTools.map(
tool => {
const { id, cornerstoneToolType } = tool;
return {
id,
cornerstoneToolType
}
}
);
// Iterate over each measurment tool to find the first baseline
// measurment. If so, stops the loop and prevent fetching from all
// collections
measurementTypes.every(({id, cornerstoneToolType}) => {
// Get measurement
if(measurementApi[id]) {
const measurement = measurementApi[id].findOne({ timepointId });
// Found a measurement, save tool and stop loop
if(measurement) {
activeTool = cornerstoneToolType;
return false;
}
}
return true;
});
}
// If not set, for associated studies default is target-tool
toolManager.setActiveTool(activeTool || 'bidirectional');
}
// Toggle Measurement Table
instance.data.state.set('rightSidebar', 'measurements');
}
// Hide as default for single study
else {
instance.data.state.set('rightSidebar', null);
}
ProtocolEngine = new HP.ProtocolEngine(window.layoutManager, studies);
HP.setEngine(ProtocolEngine);
// Enable hotkeys
enableHotkeys();
Session.set('ViewerMainReady', Random.id());
});
});
Template.viewerMain.onDestroyed(() => {
OHIF.log.info('viewerMain onDestroyed');
// Remove the Window resize listener
window.removeEventListener('resize', handleResize);
// Remove beforeUnload event handler...
window.removeEventListener('beforeunload', unloadHandlers.beforeUnload);
// Destroy the synchronizer used to update reference lines
OHIF.viewer.updateImageSynchronizer.destroy();
delete window.layoutManager;
delete ProtocolEngine;
});