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

HUE-6851 [metastore] Don't show the database while loading a table

Johan Ahlen 8 жил өмнө
parent
commit
84b503f

+ 16 - 5
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -48,7 +48,13 @@ var MetastoreViewModel = (function () {
     });
 
     self.reloading = ko.observable(false);
-    self.loading = ko.observable(false);
+    self.loadingDatabases = ko.observable(false);
+    self.loadingTable = ko.observable(false);
+
+    self.loading = ko.pureComputed(function () {
+      return self.loadingDatabases() || self.loadingTable() || self.reloading();
+    });
+
     self.databases = ko.observableArray();
 
     self.selectedDatabases = ko.observableArray();
@@ -171,7 +177,7 @@ var MetastoreViewModel = (function () {
 
   MetastoreViewModel.prototype.loadDatabases = function (successCallback) {
     var self = this;
-    if (self.loading()) {
+    if (self.loadingDatabases()) {
       if (lastLoadDatabasesDeferred !== null) {
         lastLoadDatabasesDeferred.done(successCallback);
       }
@@ -181,7 +187,7 @@ var MetastoreViewModel = (function () {
     lastLoadDatabasesDeferred = $.Deferred();
     lastLoadDatabasesDeferred.done(successCallback);
 
-    self.loading(true);
+    self.loadingDatabases(true);
     self.apiHelper.loadDatabases({
       sourceType: self.sourceType(),
       successCallback: function (databaseNames) {
@@ -193,7 +199,7 @@ var MetastoreViewModel = (function () {
             sourceType: self.sourceType
           })
         }));
-        self.loading(false);
+        self.loadingDatabases(false);
         lastLoadDatabasesDeferred.resolve();
       },
       errorCallback: function () {
@@ -205,9 +211,11 @@ var MetastoreViewModel = (function () {
 
   MetastoreViewModel.prototype.loadTableDef = function (tableDef, callback) {
     var self = this;
+    self.loadingTable(true);
     self.setDatabaseByName(tableDef.database, function () {
       if (self.database()) {
         if (self.database().table() && self.database().table().name == tableDef.name) {
+          self.loadingTable(false);
           if (callback) {
             callback();
           }
@@ -219,6 +227,7 @@ var MetastoreViewModel = (function () {
             return table.name === tableDef.name;
           });
           if (foundTables.length === 1) {
+            self.loadingTable(false);
             self.database().setTable(foundTables[0], callback);
           } else if (clearDbCacheOnMissing) {
             huePubSub.publish('assist.clear.db.cache', {
@@ -229,6 +238,8 @@ var MetastoreViewModel = (function () {
             self.database().load(function () {
               setTableAfterLoad(false);
             }, self.optimizerEnabled(), self.navigatorEnabled(), self.sourceType());
+          } else {
+            self.loadingTable(false);
           }
         };
 
@@ -275,7 +286,7 @@ var MetastoreViewModel = (function () {
       }
     };
 
-    if (self.loading() && lastLoadDatabasesDeferred !== null) {
+    if (self.loadingDatabases() && lastLoadDatabasesDeferred !== null) {
       lastLoadDatabasesDeferred.done(whenLoaded);
     } else {
       whenLoaded();

+ 3 - 1
apps/metastore/src/metastore/templates/metastore.mako

@@ -1180,13 +1180,14 @@ ${ components.menubar(is_embeddable) }
       % endif
       <div class="content-panel" ${ not is_embeddable and 'data-bind="niceScroll"' or ''}>
         <div class="metastore-main">
+          <!-- ko hueSpinner: { spin: loading, center: true, size: 'xlarge' } --><!-- /ko -->
+          <!-- ko ifnot: loading -->
           <h1>
             <!-- ko template: { if: database() !== null && database().table() !== null, name: 'metastore-describe-table-actions' }--><!-- /ko -->
             <!-- ko template: { if: database() !== null && database().table() === null, name: 'metastore-tables-actions' }--><!-- /ko -->
             <!-- ko template: { if: database() === null, name: 'metastore-databases-actions' }--><!-- /ko -->
             <!-- ko template: 'metastore-breadcrumbs' --><!-- /ko -->
           </h1>
-          <i data-bind="visible: loading" class="fa fa-spinner fa-spin fa-2x margin-left-10" style="color: #999; display: none;"></i>
           <!-- ko template: { if: !loading() && database() === null, name: 'metastore-databases' } --><!-- /ko -->
           <!-- ko with: database -->
           <i data-bind="visible: loading" class="fa fa-spinner fa-spin fa-2x margin-left-10" style="color: #999; display: none;"></i>
@@ -1195,6 +1196,7 @@ ${ components.menubar(is_embeddable) }
             <!-- ko template: 'metastore-describe-table' --><!-- /ko -->
           <!-- /ko -->
           <!-- /ko -->
+          <!-- /ko -->
         </div>
       </div>
     </div>