From 5b2ef9e2e3e1489e5b214f0293d94155cff76974 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 2 Aug 2018 17:36:57 +0200
Subject: [PATCH] lost promise is back in the flow

---
 frontend-js/src/main/css/global.css           |  2 +-
 .../main/js/gui/admin/AbstractAdminPanel.js   | 11 +++++-
 .../js/gui/admin/ConfigurationAdminPanel.js   | 38 +++++++++++--------
 3 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/frontend-js/src/main/css/global.css b/frontend-js/src/main/css/global.css
index feb97f677a..7acaa90659 100644
--- a/frontend-js/src/main/css/global.css
+++ b/frontend-js/src/main/css/global.css
@@ -522,7 +522,7 @@ h1 {
     font-weight: 400;
 }
 
-.minerva-projects-tab, .minerva-users-tab, .minerva-configuration-tab, .minerva-genome-tab {
+.minerva-projects-tab, .minerva-users-tab, .minerva-configuration-tab .tab-pane, .minerva-genome-tab {
     margin-left: 10px;
     margin-top: 10px;
 }
diff --git a/frontend-js/src/main/js/gui/admin/AbstractAdminPanel.js b/frontend-js/src/main/js/gui/admin/AbstractAdminPanel.js
index 6d0c3434a8..fd6ec59613 100644
--- a/frontend-js/src/main/js/gui/admin/AbstractAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/AbstractAdminPanel.js
@@ -50,6 +50,7 @@ AbstractAdminPanel.prototype._createHeader = function (name) {
  * @returns {Promise}
  */
 AbstractAdminPanel.prototype.init = function () {
+  this._initialized = true;
   return Promise.all(this._initPromises);
 };
 
@@ -77,12 +78,18 @@ AbstractAdminPanel.prototype.bindUserGuiPreference = function (params) {
       }
     }).catch(GuiConnector.alert);
   });
-  this._initPromises.push(ServerConnector.getLoggedUser().then(function (user) {
+  var promise = ServerConnector.getLoggedUser().then(function (user) {
     var value = user.getPreferences().getGuiPreference(params.preferenceName, params.defaultValue);
     return params.setter(value);
-  }));
+  });
 
   this._eventBinds.push(params);
+  if (!this._initialized) {
+    this._initPromises.push(promise);
+  } else {
+    return promise;
+  }
+
 };
 
 /**
diff --git a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
index 425efcb4bc..1d0a6c1c4d 100644
--- a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
@@ -112,18 +112,6 @@ ConfigurationAdminPanel.prototype.createOptionsTable = function (options, type)
     }],
     order: [[1, "asc"]]
   });
-  self.bindUserGuiPreference({
-    jQueryObject: $(configurationTable),
-    event: 'length.dt',
-    preferenceName: 'admin-configuration-datatable-length',
-    defaultValue: '10',
-    getter: function () {
-      return $(configurationTable).DataTable().page.len() + '';
-    },
-    setter: function (value) {
-      return $(configurationTable).DataTable().page.len(value).draw();
-    }
-  });
 
   var data = [];
 
@@ -138,6 +126,19 @@ ConfigurationAdminPanel.prototype.createOptionsTable = function (options, type)
   dataTable.clear().rows.add(data).draw();
 
   self.getGuiUtils().addTab(self, {name: type, content: configurationDiv});
+
+  return self.bindUserGuiPreference({
+    jQueryObject: $(configurationTable),
+    event: 'length.dt',
+    preferenceName: 'admin-configuration-datatable-length',
+    defaultValue: '10',
+    getter: function () {
+      return $(configurationTable).DataTable().page.len() + '';
+    },
+    setter: function (value) {
+      return $(configurationTable).DataTable().page.len(value).draw();
+    }
+  });
 };
 
 /**
@@ -146,35 +147,40 @@ ConfigurationAdminPanel.prototype.createOptionsTable = function (options, type)
  */
 ConfigurationAdminPanel.prototype.init = function () {
   var self = this;
-  return self.getServerConnector().getLoggedUser().then(function (user) {
+  return AbstractAdminPanel.prototype.init.call(this).then(function () {
+    return self.getServerConnector().getLoggedUser();
+  }).then(function (user) {
     var configuration = self.getConfiguration();
     var privilege = configuration.getPrivilegeType(PrivilegeType.CONFIGURATION_MANAGE);
     if (user.hasPrivilege(privilege)) {
-      self.setOptions(configuration.getOptions());
+      return self.setOptions(configuration.getOptions());
     } else {
       self.disablePanel("You have no privilege to manage configuration");
     }
-  }).then(function(){
   });
 };
 
 /**
  *
  * @param {ConfigurationOption[]} options
+ *
+ * @returns {Promise}
  */
 ConfigurationAdminPanel.prototype.setOptions = function (options) {
   var self = this;
 
   var categories = {"": true};
+  var promises = [];
   for (var i = 0; i < options.length; i++) {
     var option = options[i];
 
     var group = option.getGroup();
     if (categories[group] === undefined && group !== undefined) {
       categories[group] = true;
-      self.createOptionsTable(options, group);
+      promises.push(self.createOptionsTable(options, group));
     }
   }
+  return Promise.all(promises);
 };
 
 /**
-- 
GitLab