Switched studies in Session to ViewerStudies and WorklistStudies Collections. Fixes studyDate selector issues

This commit is contained in:
Erik Ziegler 2015-11-17 18:17:51 +01:00
parent aa7982b11b
commit 1511642000
17 changed files with 82 additions and 78 deletions

View File

@ -83,7 +83,12 @@ Template.viewer.onCreated(function() {
Session.set('activeViewport', ViewerData[contentId].activeViewport || 0);
Session.set("studies", this.data.studies);
// Update the ViewerStudies collection with the loaded studies
ViewerStudies = new Meteor.Collection(null);
this.data.studies.forEach(function(study) {
study.selected = true;
ViewerStudies.insert(study);
});
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer("CornerstoneNewImage", cornerstoneTools.updateImageSynchronizer);
});

View File

@ -88,7 +88,12 @@ Template.viewer.onCreated(function() {
Session.set('activeViewport', ViewerData[contentId].activeViewport || 0);
Session.set("studies", this.data.studies);
// Update the ViewerStudies collection with the loaded studies
ViewerStudies = new Meteor.Collection(null);
this.data.studies.forEach(function(study) {
study.selected = true;
ViewerStudies.insert(study);
});
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer("CornerstoneNewImage", cornerstoneTools.updateImageSynchronizer);
});

View File

@ -12,7 +12,8 @@ var hangingProtocol;
* @returns {Array}
*/
function defaultHangingProtocol(inputData) {
var studies = inputData.studies;
// TODO = Update this to use Collection logic
var studies = inputData.studies.find().fetch();
var viewportRows = inputData.viewportRows;
var viewportColumns = inputData.viewportColumns;

View File

@ -1,9 +1,7 @@
<template name="studyDateList">
<select id="selectStudyDate">
{{#each patientStudies}}
<option value="{{studyDate}}">{{studyDate}}</option>
<option value="{{studyInstanceUid}}">{{studyDate}}</option>
{{/each}}
</select>
</template>

View File

@ -6,16 +6,8 @@ Template.studyDateList.onCreated(function(){
this.selectedDate = "";
});
function cleanTimepoints() {
var timepoints = Timepoints.find();
timepoints.forEach(function (timepoint) {
Timepoints.remove({_id: timepoint._id});
});
}
Template.studyDateList.onRendered(function(){
//cleanTimepoints();
// Add Study dates to Timepoints
this.patientStudies.forEach(function(study) {
Timepoints.insert({
@ -35,7 +27,12 @@ Template.studyDateList.helpers({
var studyData = this.studies[0]; // study which is loaded in tab
self.selectedDate = studyData.studyDate;
var studies = Studies.find().fetch(); // All studies list
// TODO= Fix this! This won't work to retrieve all studies
// related to this patient. We will need to do a real search
// since the WorklistStudies Collection only contains the studies on-screen
var studies = WorklistStudies.find({}).fetch(); // All studies list
var patientStudies = []; // Holds studies of patient
// Get all studies of patient with patientID
@ -53,26 +50,31 @@ Template.studyDateList.helpers({
Template.studyDateList.events({
'change select#selectStudyDate': function(e, template) {
var selector = e.currentTarget;
var selectedStudyDate = $(selector).val();
var patientStudies = template.patientStudies;
var studies = []; // all studies that has the same date and get with studyInstanceUId
patientStudies.forEach(function(study) {
if(study.studyDate === selectedStudyDate) {
studies.push(study);
var studyInstanceUid = $(e.currentTarget).val();
Meteor.call('GetStudyMetadata', studyInstanceUid, function(error, study) {
sortStudy(study);
// Set "Selected" to false for the entire collection
ViewerStudies.update({},
{$set: {selected: false}},
{ multi: true });
// Check if this study already exists in the ViewerStudies collection
// of loaded studies. If it does, set it's 'selected' value to true.
var existingStudy = ViewerStudies.findOne({studyInstanceUid: studyInstanceUid});
if (existingStudy) {
// Set the current finding in the collection to true
ViewerStudies.update(existingStudy._id, {
$set: {selected: true}
});
return;
}
// If the study does not exist, add the 'selected' key to the object
// with the value True, and insert it into the ViewerStudies Collection
study.selected = true;
ViewerStudies.insert(study);
});
studies.forEach(function(studyData) {
var studyInstanceUid = studyData.studyInstanceUid;
Meteor.call('GetStudyMetadata', studyInstanceUid, function(error, study) {
sortStudy(study);
// TODO:
Session.set('studies', [study]);
// TODO: Change thumbnails only
});
});
}
});

View File

@ -40,7 +40,6 @@ Package.onUse(function (api) {
api.addFiles('components/nonTargetLesionDialog/nonTargetLesionDialog.js', 'client');
api.addFiles('components/studyDateList/studyDateList.html', 'client');
api.addFiles('components/studyDateList/studyDateList.css', 'client');
api.addFiles('components/studyDateList/studyDateList.js', 'client');

View File

@ -1,6 +1,10 @@
Template.imageThumbnail.onRendered(function() {
var instance = this.data.stack.instances[0];
var element = this.find('.imageThumbnail');
cornerstone.disable(element);
$(element).find('canvas').remove();
cornerstone.enable(element);
var imageId = getImageId(instance);

View File

@ -1,15 +1,5 @@
Template.studyBrowser.helpers({
studies : function() {
var studies = Session.get('studies');
console.log(studies);
var array = [];
studies.forEach(function(study, index) {
array.push({
studyIndex: index,
study: study
});
});
return array;
}
studies : function() {
return ViewerStudies.find({selected: true});
}
});

View File

@ -190,6 +190,7 @@ function thumbnailDragEndHandler(e, target) {
}
Template.thumbnailEntry.onRendered(function() {
console.log(this.data);
var entry = this.find('.thumbnailEntry');
$(entry).data('seriesInstanceUid', Template.parentData(0).seriesInstanceUid);
$(entry).data('studyInstanceUid', Template.parentData(1).studyInstanceUid);

View File

@ -1,12 +1,12 @@
Template.thumbnails.helpers({
thumbnails: function() {
var stacks = createStacks(this.study);
var studyIndex = this.studyIndex;
var study = this;
var stacks = createStacks(study);
var array = [];
stacks.forEach(function(stack, index) {
array.push({
thumbnailIndex: index * (studyIndex + 1),
thumbnailIndex: index,
stack: stack
});
});

View File

@ -399,30 +399,31 @@ Template.imageViewerViewport.onRendered(function() {
return;
}
// Retrieve the current set of studies from the Meteor Session
var studies = Session.get('studies');
// Look through the ViewerStudies collection for a
// study with this studyInstanceUid
var study = ViewerStudies.findOne({
studyInstanceUid: this.data.studyInstanceUid
});
// Look through every study and their series' until we find the
// series that matches the seriesInstanceUid and studyInstanceUid
var studyInstanceUid = this.data.studyInstanceUid;
// If we didn't find anything, stop here
if (!study) {
return;
}
data.study = study;
// Look through this study for a series with this seriesInstanceUid
var seriesInstanceUid = this.data.seriesInstanceUid;
studies.every(function(study) {
if (study.studyInstanceUid === studyInstanceUid) {
data.study = study;
study.seriesList.every(function(series) {
if (series.seriesInstanceUid === seriesInstanceUid) {
data.series = series;
return false;
}
return true;
});
study.seriesList.every(function(series) {
if (series.seriesInstanceUid === seriesInstanceUid) {
data.series = series;
return false;
}
return true;
});
// If we didn't find anything, stop here
if (!data.study || !data.series) {
if (!data.series) {
return;
}

View File

@ -21,8 +21,6 @@ Template.imageViewerViewports.helpers({
viewportArray: function() {
log.info("imageViewerViewports viewportArray");
var studies = Session.get('studies');
var viewportRows = this.viewportRows || 1;
var viewportColumns = this.viewportColumns || 1;
@ -49,7 +47,7 @@ Template.imageViewerViewports.helpers({
var inputData = {
viewportColumns: viewportColumns,
viewportRows: viewportRows,
studies: studies
studies: ViewerStudies
};
var hangingProtocolViewportData = hangingProtocol(inputData);

View File

@ -17,6 +17,9 @@ var StudyMetaData = {};
// Create the WorklistTabs collection
WorklistTabs = new Meteor.Collection(null);
// Create the WorklistStudies collection
WorklistStudies = new Meteor.Collection(null);
/**
* Retrieves study metadata using a server call, and fires a callback
* when completed.
@ -105,9 +108,6 @@ switchToTab = function(contentId) {
studies: [study]
};
// Update the Session variable with the loaded studies
Session.set('studies', data.studies);
// Remove the loading text template that is inside the tab container by default
container.innerHTML = "";

View File

@ -10,6 +10,6 @@ Template.worklistResult.helpers({
* by Patient name and Study Date in Ascending order.
*/
studies : function() {
return Studies.find({}, {sort: {patientName : 1, studyDate : 1}});
return WorklistStudies.find({}, {sort: {patientName : 1, studyDate : 1}});
}
});

View File

@ -69,7 +69,7 @@ function search() {
var modality = replaceUndefinedColumnValue($('#modality').val());
// Clear all current studies
Studies.remove({});
WorklistStudies.remove({});
Meteor.call('WorklistSearch', filter, function(error, studies) {
if (!studies) {
@ -85,7 +85,7 @@ function search() {
(convertStringToStudyDate(study.studyDate) <= new Date(studyDateTo).setHours(0,0,0,0) || !checkTo)) {
// Insert any matching studies into the Studies Collection
Studies.insert(study);
WorklistStudies.insert(study);
}
});
});

View File

@ -57,8 +57,8 @@ Package.onUse(function (api) {
// Export the global ViewerData object
api.export('ViewerData', 'client');
// Export the WorklistTabs Collection
// Export the Collections
api.export('WorklistTabs', 'client');
api.export('Studies', 'client');
api.export('WorklistStudies', 'client');
});