diff --git a/Packages/lesiontracker/client/components/lesionTrackerProgressDialog/lesionTrackerProgressDialog.js b/Packages/viewerbase/client/components/basic/progressDialog/progressDialog.js
similarity index 89%
rename from Packages/lesiontracker/client/components/lesionTrackerProgressDialog/lesionTrackerProgressDialog.js
rename to Packages/viewerbase/client/components/basic/progressDialog/progressDialog.js
index 12286d8a0..602c6f3dc 100644
--- a/Packages/lesiontracker/client/components/lesionTrackerProgressDialog/lesionTrackerProgressDialog.js
+++ b/Packages/viewerbase/client/components/basic/progressDialog/progressDialog.js
@@ -2,7 +2,7 @@ progressDialog = {
'show': function(title, numberOfTotal) {
Session.set("progressDialogSettings", { title: title, numberOfCompleted: 0, numberOfTotal: numberOfTotal });
- $('#lesionTrackerProgressDialog').css('display', 'block');
+ $('#progressDialog').css('display', 'block');
},
'update': function(numberOfCompleted) {
var progressDialogSettings = Session.get("progressDialogSettings");
@@ -16,11 +16,11 @@ progressDialog = {
},
'close': function() {
Session.set("progressDialogSettings", { title: "", numberOfCompleted: 0, numberOfTotal: 1 });
- $('#lesionTrackerProgressDialog').css('display', 'none');
+ $('#progressDialog').css('display', 'none');
},
};
-Template.lesionTrackerProgressDialog.helpers({
+Template.progressDialog.helpers({
'progressDialogTitle': function () {
if (Session.get("progressDialogSettings") && Session.get("progressDialogSettings").title) {
return Session.get("progressDialogSettings").title;
diff --git a/Packages/lesiontracker/client/components/lesionTrackerProgressDialog/lesionTrackerProgressDialog.styl b/Packages/viewerbase/client/components/basic/progressDialog/progressDialog.styl
similarity index 90%
rename from Packages/lesiontracker/client/components/lesionTrackerProgressDialog/lesionTrackerProgressDialog.styl
rename to Packages/viewerbase/client/components/basic/progressDialog/progressDialog.styl
index a4966225d..6aa0bd6b7 100644
--- a/Packages/lesiontracker/client/components/lesionTrackerProgressDialog/lesionTrackerProgressDialog.styl
+++ b/Packages/viewerbase/client/components/basic/progressDialog/progressDialog.styl
@@ -1,4 +1,4 @@
-#lesionTrackerProgressDialog
+#progressDialog
display: none
position: absolute
top: 0
diff --git a/Packages/lesiontracker/lib/exportStudies.js b/Packages/viewerbase/lib/exportStudies.js
similarity index 76%
rename from Packages/lesiontracker/lib/exportStudies.js
rename to Packages/viewerbase/lib/exportStudies.js
index f5fb1b377..b97551c71 100644
--- a/Packages/lesiontracker/lib/exportStudies.js
+++ b/Packages/viewerbase/lib/exportStudies.js
@@ -3,19 +3,44 @@
* @param studiesToExport Studies to export
*/
exportStudies = function(studiesToExport) {
+ if (studiesToExport.length < 1) {
+ return;
+ }
+
+ var studiesQueried = [];
+ var numberOfStudiesToQuery = studiesToExport.length;
+
+ progressDialog.show("Querying Studies...", numberOfStudiesToQuery);
+
+ studiesToExport.forEach(function(selectedStudy) {
+ getStudyMetadata(selectedStudy.studyInstanceUid, function(study) {
+ studiesQueried.push(study);
+
+ var numberOfStudiesQueried = studiesQueried.length;
+
+ progressDialog.update(numberOfStudiesQueried);
+
+ if (numberOfStudiesQueried === numberOfStudiesToQuery) {
+ exportQueriedStudies(studiesQueried);
+ }
+ });
+ });
+};
+
+function exportQueriedStudies(studiesToExport) {
var numberOfFilesToExport = getNumberOfFilesToExport(studiesToExport);
progressDialog.show("Exporting Studies...", numberOfFilesToExport);
try {
- exportStudiesInternal(studiesToExport, numberOfFilesToExport);
+ exportQueriedStudiesInternal(studiesToExport, numberOfFilesToExport);
} catch (err) {
progressDialog.close();
console.error("Failed to export studies: " + err.message);
}
-};
+}
-function exportStudiesInternal(studiesToExport, numberOfFilesToExport) {
+function exportQueriedStudiesInternal(studiesToExport, numberOfFilesToExport) {
var zip = new JSZip();
var exportFailed = false;
diff --git a/Packages/viewerbase/package.js b/Packages/viewerbase/package.js
index bd8602a72..684c68fd6 100644
--- a/Packages/viewerbase/package.js
+++ b/Packages/viewerbase/package.js
@@ -110,6 +110,10 @@ Package.onUse(function(api) {
api.addFiles('client/components/viewer/toolbar/toolbar.js', 'client');
api.addFiles('client/components/viewer/toolbar/toolbar.styl', 'client');
+ api.addFiles('client/components/basic/progressDialog/progressDialog.html', 'client');
+ api.addFiles('client/components/basic/progressDialog/progressDialog.styl', 'client');
+ api.addFiles('client/components/basic/progressDialog/progressDialog.js', 'client');
+
// Library functions
api.addFiles('lib/accountsConfig.js', 'client');
api.addFiles('lib/createStacks.js', 'client');
@@ -131,6 +135,7 @@ Package.onUse(function(api) {
api.addFiles('lib/resizeViewportElements.js', 'client');
api.addFiles('lib/setFocusToActiveViewport.js', 'client');
api.addFiles('lib/updateAllViewports.js', 'client');
+ api.addFiles('lib/exportStudies.js', 'client');
api.addFiles('lib/encodeQueryData.js', 'server');
//api.export('accountsConfig', 'client');
@@ -149,6 +154,7 @@ Package.onUse(function(api) {
api.export('updateOrientationMarkers', 'client');
api.export('setFocusToActiveViewport', 'client');
api.export('updateAllViewports', 'client');
+ api.export('exportStudies', 'client');
api.export('encodeQueryData', 'server');
// Viewer management objects
@@ -158,6 +164,7 @@ Package.onUse(function(api) {
// Global objects
api.export('OHIF', 'client');
api.export('ClientId', 'client');
+ api.export('progressDialog', 'client');
// Collections
api.export('ViewerStudies', 'client');
diff --git a/Packages/worklist/client/components/studyContextMenu/studyContextMenu.html b/Packages/worklist/client/components/studyContextMenu/studyContextMenu.html
index 9ddfeeb17..9e344f348 100644
--- a/Packages/worklist/client/components/studyContextMenu/studyContextMenu.html
+++ b/Packages/worklist/client/components/studyContextMenu/studyContextMenu.html
@@ -12,7 +12,9 @@
Delete
Send
-
Export
+
+ Export
Download
View Series Details
diff --git a/Packages/worklist/client/components/studyContextMenu/studyContextMenu.js b/Packages/worklist/client/components/studyContextMenu/studyContextMenu.js
index 73bd6a06e..0c1091b79 100644
--- a/Packages/worklist/client/components/studyContextMenu/studyContextMenu.js
+++ b/Packages/worklist/client/components/studyContextMenu/studyContextMenu.js
@@ -12,6 +12,8 @@ function closeHandler(dialog) {
* @param e
*/
openStudyContextMenu = function(e) {
+ Worklist.functions['exportSelectedStudies'] = exportSelectedStudies;
+
Template.studyContextMenu.study = $(e.currentTarget);
var dialog = $('#studyContextMenu');
@@ -55,6 +57,19 @@ openStudyContextMenu = function(e) {
});
};
+/**
+ * Exports all selected studies on the worklist
+ */
+function exportSelectedStudies() {
+ var selectedStudies = WorklistSelectedStudies.find({}, {
+ sort: {
+ studyDate: 1
+ }
+ }).fetch() || [];
+
+ exportStudies(selectedStudies);
+}
+
Template.studyContextMenu.events({
'click a': function(e) {
var study = Template.studyContextMenu.study;
diff --git a/Packages/worklist/client/components/worklist.html b/Packages/worklist/client/components/worklist.html
index 775973943..5c5305250 100644
--- a/Packages/worklist/client/components/worklist.html
+++ b/Packages/worklist/client/components/worklist.html
@@ -3,9 +3,9 @@
Study List
- {{ #each worklistTabs }}
- {{ >tabTitle }}
- {{ /each }}
+ {{#each worklistTabs }}
+ {{>tabTitle }}
+ {{/each }}
@@ -13,12 +13,13 @@
{{> worklistResult }}
- {{ #each worklistTabs }}
- {{ >tabContent }}
- {{ /each }}
+ {{#each worklistTabs }}
+ {{>tabContent }}
+ {{/each }}
{{#each additionalTemplates}}
{{> UI.dynamic template=this}}
{{/each}}
- {{ >studyContextMenu }}
+ {{>studyContextMenu }}
+ {{>progressDialog}}