From b7c44aa389583a741dc3d99d9ff05b987a69e3bf Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 16 Mar 2018 16:49:15 +0100
Subject: [PATCH] icons are merged on the map

---
 frontend-js/src/main/js/map/CustomMap.js      |  8 ++-
 .../main/js/map/overlay/SearchDbOverlay.js    | 55 ++++++++++++++-----
 2 files changed, 47 insertions(+), 16 deletions(-)

diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js
index 96041ec35c..c04d494f09 100644
--- a/frontend-js/src/main/js/map/CustomMap.js
+++ b/frontend-js/src/main/js/map/CustomMap.js
@@ -1084,7 +1084,13 @@ CustomMap.prototype.fetchIdentifiedElements = function (elements, complete) {
     var modelId = modelIds[i];
     promises.push(this.getSubmapById(modelId).getModel().getByIdentifiedElements(modelElements[modelId], complete));
   }
-  return Promise.all(promises);
+  var result = [];
+  return Promise.all(promises).then(function (data) {
+    for (var i = 0; i < data.length; i++) {
+      result.push.apply(result, data[i]);
+    }
+    return result;
+  });
 
 };
 
diff --git a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js
index 3256bf80c9..a642c3ff7e 100644
--- a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js
+++ b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js
@@ -11,6 +11,8 @@ var Alias = require('../data/Alias');
 var IdentifiedElement = require('../data/IdentifiedElement');
 var InvalidArgumentException = require('../../InvalidArgumentError');
 var Reaction = require('../data/Reaction');
+var SearchBioEntityGroup = require('../data/SearchBioEntityGroup');
+
 
 var ServerConnector = require('../../ServerConnector');
 
@@ -236,27 +238,50 @@ SearchDbOverlay.prototype.searchByTarget = function (element) {
 
 SearchDbOverlay.prototype.getIdentifiedElements = function () {
   var self = this;
+  var queries = self.getQueries();
+  var result = [];
 
-  return new Promise(function (resolve) {
-    var queries = self.getQueries();
-    var result = [];
-    for (var i = 0; i < queries.length; i++) {
-      var query = queries[i];
-      var elements = self._elementsByQuery[query];
-
+  return Promise.each(queries, function (query, index) {
+    var identifiedElements = self._elementsByQuery[query];
+    return self.getMap().fetchIdentifiedElements(identifiedElements).then(function (elements) {
       var iconCounter = 1;
-      for (var j = 0; j < elements.length; j++) {
-        var element = elements[j];
+      var groups = [];
+      for (var i = 0; i < elements.length; i++) {
+        var element = elements[i];
+        var alreadyExists = false;
+        var icon = null;
+        var group;
+        for (var j = 0; j < groups.length; j++) {
+          group = groups[j];
+          if (group.bioEntityMatch(element)) {
+            alreadyExists = true;
+            group.addBioEntity(element);
+            icon = group.getIcon();
+          }
+        }
+
+        if (!alreadyExists) {
+          if (element instanceof Alias) {
+            icon = self.getIcon(index, iconCounter++)
+          }
+          group = new SearchBioEntityGroup(element);
+          group.setIcon(icon);
+          groups.push(group);
+
+        }
         var ie = new IdentifiedElement(element);
-        if (element.getType() === "ALIAS") {
-          ie.setIcon(self.getIcon(i, iconCounter++));
-        } else if (element.getType() !== "REACTION") {
-          throw new Error("Unknown element type: " + element.getType());
+        if (element instanceof Alias) {
+          ie.setIcon(icon);
+        } else if (!(element instanceof Reaction)) {
+          throw new Error("Unknown element type: " + ie.getType());
         }
         result.push(ie);
+
       }
-    }
-    resolve(result);
+    });
+
+  }).then(function () {
+    return result;
   });
 };
 
-- 
GitLab