Explorar o código

[assist] Show errors in the assist panel

This adds a short generic error message when an error occurs in the assist panel, the detailed message is always shown in the upper right and the console.
Johan Ahlen %!s(int64=10) %!d(string=hai) anos
pai
achega
48aec02

+ 4 - 1
desktop/core/src/desktop/static/desktop/js/assist/assistDbEntry.js

@@ -62,6 +62,8 @@
     self.entries = ko.observableArray([]);
     self.statsVisible = ko.observable(false);
 
+    self.hasErrors = ko.observable(false);
+
     self.navigationSettings = navigationSettings;
 
     self.open.subscribe(function(newValue) {
@@ -147,6 +149,7 @@
 
     var successCallback = function(data) {
       self.entries([]);
+      self.hasErrors(false);
       var newEntries = [];
       if (typeof data.tables_meta !== "undefined") {
         newEntries = $.map(data.tables_meta, function(table) {
@@ -244,7 +247,7 @@
     };
 
     var errorCallback = function () {
-      self.assistDbSource.hasErrors(true);
+      self.hasErrors(true);
       self.loading(false);
     };
 

+ 5 - 1
desktop/core/src/desktop/static/desktop/js/assist/assistDbSource.js

@@ -158,8 +158,12 @@
       self.loading(true);
       self.assistHelper.loadDatabases({
         sourceType: self.type,
-        successCallback: updateDatabases,
+        successCallback: function(data) {
+          self.hasErrors(false);
+          updateDatabases(data)
+        },
         errorCallback: function() {
+          self.hasErrors(true);
           updateDatabases([]);
         }
       });

+ 3 - 0
desktop/core/src/desktop/static/desktop/js/assist/assistDocuments.js

@@ -53,6 +53,7 @@
     self.assistHelper = assistHelper;
     self.i18n = i18n;
     self.loading = ko.observable(false);
+    self.hasErrors = ko.observable(false);
     self.availableTypes = ko.observableArray();
   }
 
@@ -64,6 +65,7 @@
     self.loading(true);
 
     var successCallback = function(data) {
+      self.hasErrors(false);
       var documentsByType = {};
       $.each(data.documents, function (idx, document) {
         if (!documentsByType[document.type]) {
@@ -82,6 +84,7 @@
     };
 
     var errorCallback = function () {
+      self.hasErrors(true);
       self.loading(false);
     };
 

+ 4 - 1
desktop/core/src/desktop/static/desktop/js/assist/assistHdfsEntry.js

@@ -50,6 +50,7 @@
 
     self.loaded = false;
     self.loading = ko.observable(false);
+    self.hasErrors = ko.observable(false);
     self.open = ko.observable(false);
 
     self.open.subscribe(function(newValue) {
@@ -76,6 +77,7 @@
     self.loading(true);
 
     var successCallback = function(data) {
+      self.hasErrors(false);
       var filteredFiles = $.grep(data.files, function (file) {
         return file.name !== '.' && file.name !== '..';
       });
@@ -94,6 +96,7 @@
     };
 
     var errorCallback = function () {
+      self.hasErrors(true);
       self.loading(false);
       if (callback) {
         callback();
@@ -122,7 +125,7 @@
       });
       if (foundEntry.length === 1) {
         foundEntry[0].loadDeep(folders, callback);
-      } else {
+      } else if (! self.hasErrors()) {
         callback(self);
       }
     };

+ 26 - 6
desktop/core/src/desktop/templates/assist.mako

@@ -135,6 +135,11 @@ from desktop.views import _ko
       color: #338bb8;
     }
 
+    .assist-errors {
+      padding: 4px 5px;
+      font-style: italic;
+    }
+
     .assist-tables > li {
       position: relative;
       padding-top: 2px;
@@ -294,7 +299,7 @@ from desktop.views import _ko
     <ul data-bind="hueach: {data: filteredEntries, itemHeight: 20, scrollable: '.assist-stretchable-list', considerStretching: true}, css: { 'assist-tables': definition.isDatabase }">
       <!-- ko template: { if: definition.isTable, name: 'assist-table-entry' } --><!-- /ko -->
       <!-- ko ifnot: definition.isTable -->
-      <li data-bind="visibleOnHover: { override: statsVisible, selector: definition.isView ? '.table-actions' : '.column-actions' }, css: { 'assist-table': definition.isView, 'assist-column': definition.isColumn }">
+      <li data-bind="visible: ! hasErrors(), visibleOnHover: { override: statsVisible, selector: definition.isView ? '.table-actions' : '.column-actions' }, css: { 'assist-table': definition.isView, 'assist-column': definition.isColumn }">
         <!-- ko template: { if: definition.isView || definition.isColumn, name: 'assist-entry-actions' } --><!-- /ko -->
         <a class="assist-entry" href="javascript:void(0)" data-bind="multiClick: { click: toggleOpen, dblClick: dblClick }, attr: {'title': definition.title }, css: { 'assist-field-link': !definition.isView, 'assist-table-link': definition.isView }">
           <!-- ko if: definition.isView -->
@@ -305,6 +310,10 @@ from desktop.views import _ko
         <div class="center" data-bind="visible: loading" style="display:none;"><i class="fa fa-spinner fa-spin assist-spinner"></i></div>
         <!-- ko template: { if: open, name: 'assist-entries'  } --><!-- /ko -->
       </li>
+      <li class="assist-errors" data-bind="visible: hasErrors() && definition.isTable">
+        <span >${ _('Error loading columns.') }</span>
+      </li>
+
       <!-- /ko -->
     </ul>
     <!-- ko template: { if: ! hasEntries() && ! loading() && (definition.isTable || definition.isView), name: 'assist-no-table-entries' } --><!-- /ko -->
@@ -376,7 +385,7 @@ from desktop.views import _ko
           <!--[if IE]><img src="${ static('desktop/art/spinner.gif') }"/><![endif]-->
         </li>
 
-        <li>
+        <li data-bind="visible: ! hasErrors()">
           <ul class="assist-tables" data-bind="hueach: {data: entries, itemHeight: 20, scrollable: '.assist-stretchable-list', considerStretching: true}">
             <li class="assist-entry assist-table-link" style="position: relative;" data-bind="visibleOnHover: { 'selector': '.assist-actions' }">
               <div class="assist-actions table-actions" style="opacity: 0;" >
@@ -402,6 +411,9 @@ from desktop.views import _ko
           </ul>
           <!-- /ko -->
         </li>
+        <li class="assist-errors" data-bind="visible: hasErrors">
+          <span>${ _('Error loading contents.') }</span>
+        </li>
       </ul>
       <!-- /ko -->
     </div>
@@ -424,7 +436,7 @@ from desktop.views import _ko
   <script type="text/html" id="assist-documents-inner-panel">
     <div class="assist-inner-panel">
       <!-- ko with: documents -->
-      <ul class="nav assist-tables assist-stretchable-list" data-bind="stretchDown, foreach: availableTypes">
+      <ul class="nav assist-tables assist-stretchable-list" data-bind="visible: ! hasErrors(), stretchDown, foreach: availableTypes">
         <li class="assist-table">
           <a class="assist-entry assist-table-link" href="javascript: void(0);" data-bind="click: function () { open(! open()) }">
             <!-- ko if: type == 'query-hive' || type == 'query' -->
@@ -463,6 +475,11 @@ from desktop.views import _ko
           </ul>
         </li>
       </ul>
+      <ul class="nav assist-tables" data-bind="visible: hasErrors">
+        <li class="assist-errors">
+          <span>${ _('Error loading documents.') }</span>
+        </li>
+      </ul>
       <!-- /ko -->
     </div>
   </script>
@@ -520,8 +537,8 @@ from desktop.views import _ko
         <!--[if !IE]><!--><i class="fa fa-spinner fa-spin" style="font-size: 20px; color: #BBB"></i><!--<![endif]-->
         <!--[if IE]><img src="${ static('desktop/art/spinner.gif') }"/><![endif]-->
       </li>
-      <li data-bind="visible: hasErrors">
-        <span>${ _('The database list cannot be loaded.') }</span>
+      <li class="assist-errors" data-bind="visible: hasErrors">
+        <span>${ _('Error loading databases.') }</span>
       </li>
     </ul>
   </script>
@@ -538,13 +555,16 @@ from desktop.views import _ko
       </li>
     </ul>
     <ul class="nav assist-stretchable-list" data-bind="stretchDown">
-      <li class="table-container">
+      <li class="table-container" data-bind="visible: ! hasErrors()">
         <div class="center" data-bind="visible: loading() || $parent.loading()">
           <!--[if !IE]><!--><i class="fa fa-spinner fa-spin" style="font-size: 20px; color: #BBB"></i><!--<![endif]-->
           <!--[if IE]><img src="${ static('desktop/art/spinner.gif') }"/><![endif]-->
         </div>
         <!-- ko template: { ifnot: loading() || $parent.loading(), name: 'assist-entries' } --><!-- /ko -->
       </li>
+      <li class="assist-errors" data-bind="visible: hasErrors">
+        <span>${ _('Error loading tables.') }</span>
+      </li>
     </ul>
     <div id="assistQuickLook" class="modal hide fade">
       <div class="modal-header">