浏览代码

HUE-6349 [assist] Show a spinner when uploading table stats

This also adds an initial message instead of “…”
Johan Ahlen 8 年之前
父节点
当前提交
27ad62e

文件差异内容过多而无法显示
+ 0 - 0
desktop/core/src/desktop/static/desktop/css/hue.css


文件差异内容过多而无法显示
+ 0 - 0
desktop/core/src/desktop/static/desktop/css/hue3-extra.css


+ 3 - 2
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -533,7 +533,8 @@
       var options = {
         size: 'default',
         center: false,
-        overlay: false
+        overlay: false,
+        inline: false
       };
 
       var spin = false;
@@ -548,7 +549,7 @@
 
       if (spin) {
         var $container = $('<div>');
-        $container.addClass(options.overlay ? 'hue-spinner-overlay' : 'hue-spinner');
+        $container.addClass(options.overlay ? 'hue-spinner-overlay' : ( options.inline ? 'hue-spinner-inline' : 'hue-spinner'));
         if (!options.overlay) {
           var $spinner = $('<i>');
           $spinner.addClass('fa fa-spinner fa-spin');

+ 10 - 2
desktop/core/src/desktop/static/desktop/less/components/hue-spinner.less

@@ -36,6 +36,12 @@
   .hue-fade-in();
 }
 
+.hue-spinner-inline {
+  display: inline-block;
+  position: relative;
+  .hue-fade-in();
+}
+
 .hue-spinner-center {
   position: absolute;
   left: 50%;
@@ -62,7 +68,9 @@
   font-size: 60px !important;
 }
 
-.hue-spinner i {
+.hue-spinner i,
+.hue-spinner-overlay i,
+.hue-spinner-inline i {
   font-size: 16px;
-  color: #aaa;
+  color: @cui-gray-600;
 }

+ 1 - 0
desktop/core/src/desktop/static/desktop/less/hue-assist.less

@@ -461,6 +461,7 @@
 .assist-no-entries {
   color: @cui-gray-600;
   font-style: italic;
+  white-space: normal;
 }
 
 .assist-flex-panel {

+ 18 - 2
desktop/core/src/desktop/templates/assist.mako

@@ -1790,7 +1790,7 @@ from notebook.conf import get_ordered_interpreters
         <div class="assist-flex-header assist-divider"><div class="assist-inner-header">${ _('Suggestions') }</div></div>
         <div class="assist-flex-half">
           <!-- ko if: ! activeRisks().hints -->
-          <div class="assist-no-entries">...</div>
+          <div class="assist-no-entries">${ _('Select a query or start typing to get optimization hints.') }</div>
           <!-- /ko -->
           <!-- ko if: activeRisks().hints && activeRisks().hints.length === 0 -->
           <div class="assist-no-entries">${ _('No optimizations identified.') }</div>
@@ -1805,9 +1805,12 @@ from notebook.conf import get_ordered_interpreters
           <!-- /ko -->
           <!-- ko if: hasMissingRisks() -->
           <div class="margin-top-20">
-            <a href="javascript:void(0)" data-bind="visible: activeTables().length > 0, click: function() { huePubSub.publish('editor.table.stats.upload', activeTables()); }, attr: { 'title': ('${ _("Add missing table and columns ") }'  + (isMissingDDL() ? 'DDL' : '') + (isMissingDDL() && isMissingStats() ? ' ${ _("and") } ' : '') + (isMissingStats() ? 'stats' : '')) }">
+            <!-- ko hueSpinner: { spin: uploadingTableStats, inline: true} --><!-- /ko -->
+            <!-- ko ifnot: uploadingTableStats -->
+            <a href="javascript:void(0)" data-bind="visible: activeTables().length > 0, click: uploadTableStats, attr: { 'title': ('${ _("Add missing table and columns ") }'  + (isMissingDDL() ? 'DDL' : '') + (isMissingDDL() && isMissingStats() ? ' ${ _("and") } ' : '') + (isMissingStats() ? 'stats' : '')) }">
               <i class="fa fa-fw fa-plus-circle"></i> ${_('Improve Analysis')}
             </a>
+            <!-- /ko -->
           </div>
           <!-- /ko -->
         </div>
@@ -1838,6 +1841,7 @@ from notebook.conf import get_ordered_interpreters
         self.hasMissingRisks = ko.pureComputed(function () {
           return self.isMissingDDL() || self.isMissingStats();
         });
+        self.uploadingTableStats = ko.observable(false);
         self.isMissingDDL = ko.pureComputed(function () {
           return self.activeRisks().noDDL && self.activeRisks().noDDL.length > 0
         });
@@ -2003,6 +2007,18 @@ from notebook.conf import get_ordered_interpreters
         huePubSub.publish('get.active.editor.locations');
       }
 
+      AssistantPanel.prototype.uploadTableStats = function () {
+        var self = this;
+        if (self.uploadingTableStats()) {
+          return;
+        }
+        self.uploadingTableStats(true);
+        huePubSub.publish('editor.upload.table.stats', { activeTables: activeTables(), callback: function () {
+            self.uploadingTableStats(false);
+          }
+        });
+      };
+
       AssistantPanel.prototype.dispose = function () {
         var self = this;
         self.disposals.forEach(function (dispose) {

+ 7 - 3
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -1641,12 +1641,12 @@ var EditorViewModel = (function() {
       });
     };
 
-    self.uploadTableStats = function (activeTables) {
+    self.uploadTableStats = function (options) {
       hueAnalytics.log('notebook', 'load_table_stats');
       $(document).trigger("info", "Preparing table data...");
 
       $.post("/metadata/api/optimizer/upload/table_stats", {
-        db_tables: ko.mapping.toJSON($.map(activeTables, function(table) {
+        db_tables: ko.mapping.toJSON($.map(options.activeTables, function(table) {
           return table.database.name + '.' + table.name;
         })),
         sourcePlatform: ko.mapping.toJSON(self.type()),
@@ -1654,13 +1654,17 @@ var EditorViewModel = (function() {
         with_ddl: ko.mapping.toJSON(true)
       }, function(data) {
         if (data.status == 0) {
-          $(document).trigger("info", $.map(activeTables, function(table) { return table.name; }) + " stats sent to analyse");
+          $(document).trigger("info", $.map(options.activeTables, function(table) { return table.name; }) + " stats sent to analyse");
           if (data.upload_table_ddl) {
             self.watchUploadStatus(data.upload_table_ddl.status.workloadId);
           }
         } else {
           $(document).trigger("error", data.message);
         }
+      }).always(function () {
+        if (options.callback) {
+          options.callback();
+        }
       });
     };
 

+ 2 - 2
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -3099,8 +3099,8 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, ENABLE_
       ko.applyBindings(viewModel, $('#${ bindableElement }')[0]);
       viewModel.init();
 
-      huePubSub.subscribe("editor.table.stats.upload", function (activeTables) {
-        viewModel.selectedNotebook().snippets()[0].uploadTableStats(activeTables);
+      huePubSub.subscribe('editor.upload.table.stats', function (options) {
+        viewModel.selectedNotebook().snippets()[0].uploadTableStats(options);
       });
 
       huePubSub.subscribe("editor.upload.history", function () {

部分文件因为文件数量过多而无法显示