Browse Source

[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 10 years ago
parent
commit
48aec02ab4

+ 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">