소스 검색

[core] Fix never-ending spinner issue when reloading the assist panel

Johan Ahlen 10 년 전
부모
커밋
5a78365
2개의 변경된 파일20개의 추가작업 그리고 12개의 파일을 삭제
  1. 17 11
      desktop/core/src/desktop/static/desktop/js/assistHelper.js
  2. 3 1
      desktop/core/src/desktop/templates/ko_components.mako

+ 17 - 11
desktop/core/src/desktop/static/desktop/js/assistHelper.js

@@ -35,7 +35,7 @@ function AssistHelper (options) {
   self.loading = ko.observable(false);
 }
 
-AssistHelper.prototype.load = function (snippet) {
+AssistHelper.prototype.load = function (snippet, callback) {
   var self = this;
   if (self.loading() || self.loaded()) {
     return;
@@ -44,19 +44,22 @@ AssistHelper.prototype.load = function (snippet) {
     // Blacklist of system databases
     self.availableDatabases($.grep(data.databases, function(database) { return database !== "_impala_builtins" }));
 
-    if ($.inArray(self.activeDatabase(), self.availableDatabases()) > -1) {
-      return;
-    }
-    var lastSelectedDb = $.totalStorage("hue.assist.lastSelectedDb." + self.getTotalStorageUserPrefix(snippet));
-    if ($.inArray(lastSelectedDb, self.availableDatabases()) > -1) {
-      self.activeDatabase(lastSelectedDb);
-    } else if ($.inArray("default", self.availableDatabases()) > -1) {
-      self.activeDatabase("default");
-    } else if (self.availableDatabases().length > 0) {
-      self.activeDatabase(self.availableDatabases()[0]);
+    if ($.inArray(self.activeDatabase(), self.availableDatabases()) === -1) {
+      var lastSelectedDb = $.totalStorage("hue.assist.lastSelectedDb." + self.getTotalStorageUserPrefix(snippet));
+      if ($.inArray(lastSelectedDb, self.availableDatabases()) > -1) {
+        self.activeDatabase(lastSelectedDb);
+      } else if ($.inArray("default", self.availableDatabases()) > -1) {
+        self.activeDatabase("default");
+      } else if (self.availableDatabases().length > 0) {
+        self.activeDatabase(self.availableDatabases()[0]);
+      }
     }
+
     self.loaded(true);
     self.loading(false);
+    if (callback) {
+      callback();
+    }
   }, function(message) {
     if (message.statusText) {
       $(document).trigger("error", "There was a problem loading the databases:" + message.statusText);
@@ -65,6 +68,9 @@ AssistHelper.prototype.load = function (snippet) {
     } else {
       $(document).trigger("error", "There was a problem loading the databases");
     }
+    if (callback) {
+      callback();
+    }
   });
 };
 

+ 3 - 1
desktop/core/src/desktop/templates/ko_components.mako

@@ -790,7 +790,9 @@ from desktop.views import _ko
         self.selectedDatabase(null);
         self.assistHelper.clearCache(self.snippet);
         self.assistHelper.loaded(false);
-        self.assistHelper.load(self.snippet);
+        self.assistHelper.load(self.snippet, function() {
+          self.reloading(false);
+        });
       };
 
       ko.components.register('assist-panel', {