From a4bfcd3403a220282ec6e7a2f1a189b60d40e5e5 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 17 Sep 2018 18:20:04 +0200
Subject: [PATCH] when icon is clicked and there is proper searchtab in the
 panel open it's focused on it

---
 .../js/gui/leftPanel/GenericSearchPanel.js    | 37 ++++++++++++++++++-
 .../src/main/js/map/data/IdentifiedElement.js |  2 +-
 2 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/frontend-js/src/main/js/gui/leftPanel/GenericSearchPanel.js b/frontend-js/src/main/js/gui/leftPanel/GenericSearchPanel.js
index d0352ecdec..0b0ee47231 100644
--- a/frontend-js/src/main/js/gui/leftPanel/GenericSearchPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/GenericSearchPanel.js
@@ -6,6 +6,7 @@ var Promise = require("bluebird");
 
 var AbstractDbPanel = require('./AbstractDbPanel');
 var Alias = require('../../map/data/Alias');
+var IdentifiedElement = require('../../map/data/IdentifiedElement');
 var InvalidArgumentError = require('../../InvalidArgumentError');
 var PanelControlElementType = require('../PanelControlElementType');
 var Reaction = require('../../map/data/Reaction');
@@ -22,15 +23,47 @@ var Functions = require('../../Functions');
  * @extends AbstractDbPanel
  */
 function GenericSearchPanel(params) {
+  var self = this;
   params.panelName = "search";
   params.helpTip = "<p>search tab allows to search for particular elements or interactions in the map</p>"
     + "<p>perfect match tick box active: only terms with an exact match to the query will be returned</p>"
     + "<p>separate multiple search by semicolon</p>";
   params.placeholder = "keyword";
 
-  AbstractDbPanel.call(this, params);
+  AbstractDbPanel.call(self, params);
+
+  self.createSearchGui();
+
+  self.getMap().addListener("onBioEntityClick", function (e) {
+    var identifiedElement = e.arg;
+    var queries = self.getOverlayDb().getQueries();
+    var promises = [];
+    for (var i = 0; i < queries.length; i++) {
+      promises.push(self.getOverlayDb().getElementsByQuery(queries[i]));
+    }
+    return Promise.all(promises).then(function (elements) {
+      var tab = -1;
+      for (var i = 0; i < elements.length; i++) {
+        for (var j = 0; j < elements[i].length; j++) {
+          var element = elements[i][j].element;
+          if (element instanceof SearchBioEntityGroup) {
+            for (var k = 0; k < element.getBioEntities().length; k++) {
+              if (new IdentifiedElement(element.getBioEntities()[k]).equals(identifiedElement)) {
+                tab = i;
+              }
+            }
+          } else if (new IdentifiedElement(element).equals(identifiedElement)) {
+            tab = i;
+          }
+        }
+      }
+      var link = $(".parentTabs > .nav-tabs > li > a", self.getElement())[tab];
+      if (link !== undefined) {
+        return link.click();
+      }
+    });
+  });
 
-  this.createSearchGui();
 }
 
 GenericSearchPanel.prototype = Object.create(AbstractDbPanel.prototype);
diff --git a/frontend-js/src/main/js/map/data/IdentifiedElement.js b/frontend-js/src/main/js/map/data/IdentifiedElement.js
index c2bbe28b91..5b2e69861f 100644
--- a/frontend-js/src/main/js/map/data/IdentifiedElement.js
+++ b/frontend-js/src/main/js/map/data/IdentifiedElement.js
@@ -267,7 +267,7 @@ IdentifiedElement.prototype.setLineColor = function (lineColor) {
 
 /**
  *
- * @param {IdentifiedElement} argument
+ * @param {Object} argument
  * @returns {boolean}
  */
 IdentifiedElement.prototype.equals = function (argument) {
-- 
GitLab