Эх сурвалжийг харах

[core] Fix issue with missing preselected database in the assist panel

Johan Ahlen 10 жил өмнө
parent
commit
1370f7be78

+ 14 - 10
desktop/core/src/desktop/static/desktop/js/assistHelper.js

@@ -65,16 +65,20 @@
       self.availableDatabases($.grep(databases, function(database) { return database !== "_impala_builtins" }));
 
       if ($.inArray(self.activeDatabase(), self.availableDatabases()) === -1) {
-        var lastSelectedDb = $.totalStorage("hue.assist.lastSelectedDb." + self.getTotalStorageUserPrefix());
-        if ($.inArray(self.initialDatabase, self.availableDatabases()) > -1) {
-          self.activeDatabase(self.initialDatabase);
-        } else 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]);
-        }
+        // Defer this, select2 will update the activeDatabase to undefined when loading so this should make sure we set
+        // it afterwards.
+        window.setTimeout(function() {
+          var lastSelectedDb = $.totalStorage("hue.assist.lastSelectedDb." + self.getTotalStorageUserPrefix());
+          if ($.inArray(self.initialDatabase, self.availableDatabases()) > -1) {
+            self.activeDatabase(self.initialDatabase);
+          } else 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]);
+          }
+        }, 1);
       }
 
       self.loaded(true);

+ 32 - 22
desktop/core/src/desktop/static/desktop/spec/sqlAutocompleterSpec.js

@@ -26,23 +26,32 @@ define([
       responseForUrls: {}
     };
 
-    var createOptions = function (type) {
-      var assistHelper = new AssistHelper({
-        notebook: {
-          getContext: function() { return ko.mapping.fromJS(null) }
-        },
-        activeDatabase: "testDb",
-        user: "testUser"
-      });
-
-      return {
-        snippet: {
-          type: ko.observable(type),
-          isSqlDialect: function () { return true; },
-          getContext: function () { return ko.mapping.fromJS(null) },
-          getAssistHelper: function () { return assistHelper }
-        }
+    var assistHelper = new AssistHelper({
+      notebook: {
+        getContext: function() { return ko.mapping.fromJS(null) }
+      },
+      activeDatabase: "testDb",
+      user: "testUser"
+    });
+
+    var snippet = {
+      type: ko.observable(),
+      isSqlDialect: function () { return true; },
+      getContext: function () { return ko.mapping.fromJS(null) },
+      getAssistHelper: function () { return assistHelper }
+    };
+
+    var changeType = function (newType, callback) {
+      if (snippet.type() === newType) {
+        callback();
+        return;
       }
+      snippet.type(newType);
+      assistHelper.load(snippet, $.noop);
+      window.setTimeout(function() {
+        callback();
+      }, 10);
+
     };
 
     beforeAll(function() {
@@ -80,8 +89,9 @@ define([
       })
     });
 
-    beforeEach(function() {
-      subject = new SqlAutocompleter(createOptions("genericSqlType"));
+    beforeEach(function(done) {
+      changeType("genericSqlType", done);
+      subject = new SqlAutocompleter({ snippet: snippet });
       ajaxHelper.responseForUrls = {};
     });
 
@@ -212,8 +222,8 @@ define([
     });
 
     describe("hive-specific stuff", function() {
-      beforeEach(function() {
-        subject = new SqlAutocompleter(createOptions("hive"));
+      beforeEach(function(done) {
+        changeType("hive", done);
         ajaxHelper.responseForUrls = {};
       });
 
@@ -492,8 +502,8 @@ define([
     });
 
     describe("impala-specific stuff", function() {
-      beforeEach(function () {
-        subject = new SqlAutocompleter(createOptions("impala"));
+      beforeEach(function (done) {
+        changeType("impala", done);
         ajaxHelper.responseForUrls = {};
       });
 

+ 1 - 0
desktop/core/src/desktop/templates/common_jasmine.mako

@@ -33,6 +33,7 @@
     <script type="text/javascript" charset="utf-8">
       // Adds the jasmine dependencies to the existing require config.
       require.config({
+        urlArgs: "random=" + Math.random(),
         baseUrl: "${ static('') }",
         paths: {
           'jasmine': 'desktop/ext/js/jasmine-2.3.4/jasmine',

+ 0 - 2
desktop/core/src/desktop/templates/ko_components.mako

@@ -279,7 +279,6 @@ from desktop.views import _ko
         factory(ko, AssistHelper);
       }
     }(function (ko, AssistHelper) {
-      (function() {
       function AssistEntry (definition, parent, assistSource, filter) {
         var self = this;
         self.definition = definition;
@@ -819,7 +818,6 @@ from desktop.views import _ko
         viewModel: AssistPanel,
         template: { element: 'assist-panel-template' }
       });
-    }());
     }));
   </script>
 </%def>