From 8a862e8aa11633d2a21e8f075e9ad264da2af5b9 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 31 Jan 2019 11:36:23 +0100
Subject: [PATCH] filtering by submap added

---
 frontend-js/src/main/js/ServerConnector.js    | 12 ++++-
 .../js/gui/leftPanel/PublicationListDialog.js | 52 +++++++++++++++----
 2 files changed, 53 insertions(+), 11 deletions(-)

diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 4fb3598f50..d048676ae1 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -770,6 +770,14 @@ ServerConnector.pointToString = function (point) {
   return point.x.toFixed(2) + "," + point.y.toFixed(2);
 };
 
+/**
+ *
+ * @param {Object} queryParams
+ * @param {string} queryParams.projectId
+ * @param {number} [queryParams.modelId]
+ * @param {number} [queryParams.overlayId]
+ * @return {string}
+ */
 ServerConnector.getModelsUrl = function (queryParams) {
   var modelId = this.getIdOrAsterisk(queryParams.modelId);
   var overlayId = queryParams.overlayId;
@@ -2348,7 +2356,9 @@ ServerConnector.getPublications = function (params) {
     params = {};
   }
 
-  var queryParams = {};
+  var queryParams = {
+    modelId: params.modelId
+  };
   var filterParams = {
     start: params.start,
     length: params.length,
diff --git a/frontend-js/src/main/js/gui/leftPanel/PublicationListDialog.js b/frontend-js/src/main/js/gui/leftPanel/PublicationListDialog.js
index 7bd867414b..3535cb44bd 100644
--- a/frontend-js/src/main/js/gui/leftPanel/PublicationListDialog.js
+++ b/frontend-js/src/main/js/gui/leftPanel/PublicationListDialog.js
@@ -31,6 +31,11 @@ function PublicationListDialog(params) {
   AbstractGuiElement.call(this, params);
   var self = this;
   self.createPublicationListDialogGui();
+
+  $(self.getElement()).on("change", ".minerva-submap-filter", function () {
+    $(self.tableElement).DataTable().ajax.reload();
+  });
+
 }
 
 PublicationListDialog.prototype = Object.create(AbstractGuiElement.prototype);
@@ -41,6 +46,7 @@ PublicationListDialog.prototype.constructor = PublicationListDialog;
  */
 PublicationListDialog.prototype.createPublicationListDialogGui = function () {
   var self = this;
+  var submapFilterString = self.createSubmapFilter();
   var head = Functions.createElement({
     type: "thead",
     content: "<tr>" + "<th>Pubmed ID</th>" +
@@ -49,9 +55,11 @@ PublicationListDialog.prototype.createPublicationListDialogGui = function () {
       "<th>Journal</th>" +
       "<th>Year</th>" +
       "<th>Elements on map</th>" +
-      "<th>Submaps</th>" +
-      "</tr>"
+      "<th>Submaps" + submapFilterString + "</th>" +
+      "</tr>",
+    xss: false
   });
+
   var body = Functions.createElement({
     type: "tbody"
   });
@@ -82,7 +90,8 @@ PublicationListDialog.prototype._dataTableAjaxCall = function (data, callback) {
     length: data.length,
     sortColumn: self.getColumnsDefinition()[data.order[0].column].name,
     sortOrder: data.order[0].dir,
-    search: data.search.value
+    search: data.search.value,
+    modelId: self.getSubmapFilterValue()
   }).then(function (publicationList) {
     var out = [];
     var allElements = [];
@@ -187,7 +196,8 @@ PublicationListDialog.prototype.show = function () {
                 length: data.page.info().recordsDisplay,
                 sortColumn: self.getColumnsDefinition()[data.order()[0][0]].name,
                 sortOrder: data.order()[0][1],
-                search: data.search()
+                search: data.search(),
+                modelId: self.getSubmapFilterValue()
               }).then(function (publicationList) {
                 return self.publicationListAsCsvString(publicationList);
               }).then(function (result) {
@@ -196,9 +206,9 @@ PublicationListDialog.prototype.show = function () {
                 });
                 var FileSaver = require("file-saver");
                 return FileSaver.saveAs(blob, "publications.csv");
-              }).catch(function(error){
+              }).catch(function (error) {
                 GuiConnector.alert(error);
-              }).finally(function(){
+              }).finally(function () {
                 GuiConnector.hideProcessing();
               });
 
@@ -271,7 +281,7 @@ PublicationListDialog.prototype.publicationListToArray = function (publicationLi
       elementsToFetch.push(new IdentifiedElement(elements[j]));
     }
   });
-  return self.getProject().getBioEntitiesByIdentifiedElements(elementsToFetch).then(function(){
+  return self.getProject().getBioEntitiesByIdentifiedElements(elementsToFetch).then(function () {
     return Promise.all(publicationList.data.map(function (entry) {
       var publication = entry.publication.article;
       var elements = entry.elements;
@@ -310,13 +320,35 @@ PublicationListDialog.prototype.publicationListToArray = function (publicationLi
 PublicationListDialog.prototype.publicationListAsCsvString = function (publicationList) {
   var self = this;
 
-  return self.publicationListToArray(publicationList).then(function(data){
-    return new Promise(function(resolve){
-      stringify(data,function(err, output){
+  return self.publicationListToArray(publicationList).then(function (data) {
+    return new Promise(function (resolve) {
+      stringify(data, function (err, output) {
         resolve(output);
       });
     });
   });
 };
 
+/**
+ *
+ * @return {string}
+ */
+PublicationListDialog.prototype.createSubmapFilter = function () {
+  var result = "<select class='minerva-submap-filter'>";
+  result += "<option value>---</option>";
+
+  var maps = this.getProject().getModels();
+  for (var i = 0; i < maps.length; i++) {
+    var map = maps[i];
+    result += "<option value='" + map.getId() + "'>" + map.getName() + "</option>";
+  }
+  result += "</select>";
+  return result;
+};
+
+PublicationListDialog.prototype.getSubmapFilterValue = function () {
+  var select = $(".minerva-submap-filter", this.getElement());
+  return select.val();
+};
+
 module.exports = PublicationListDialog;
-- 
GitLab