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
48aec02

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

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

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

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

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

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

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

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

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

@@ -135,6 +135,11 @@ from desktop.views import _ko
       color: #338bb8;
       color: #338bb8;
     }
     }
 
 
+    .assist-errors {
+      padding: 4px 5px;
+      font-style: italic;
+    }
+
     .assist-tables > li {
     .assist-tables > li {
       position: relative;
       position: relative;
       padding-top: 2px;
       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 }">
     <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 template: { if: definition.isTable, name: 'assist-table-entry' } --><!-- /ko -->
       <!-- ko ifnot: definition.isTable -->
       <!-- 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 -->
         <!-- 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 }">
         <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 -->
           <!-- 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>
         <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 -->
         <!-- ko template: { if: open, name: 'assist-entries'  } --><!-- /ko -->
       </li>
       </li>
+      <li class="assist-errors" data-bind="visible: hasErrors() && definition.isTable">
+        <span >${ _('Error loading columns.') }</span>
+      </li>
+
       <!-- /ko -->
       <!-- /ko -->
     </ul>
     </ul>
     <!-- ko template: { if: ! hasEntries() && ! loading() && (definition.isTable || definition.isView), name: 'assist-no-table-entries' } --><!-- /ko -->
     <!-- 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]-->
           <!--[if IE]><img src="${ static('desktop/art/spinner.gif') }"/><![endif]-->
         </li>
         </li>
 
 
-        <li>
+        <li data-bind="visible: ! hasErrors()">
           <ul class="assist-tables" data-bind="hueach: {data: entries, itemHeight: 20, scrollable: '.assist-stretchable-list', considerStretching: true}">
           <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' }">
             <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;" >
               <div class="assist-actions table-actions" style="opacity: 0;" >
@@ -402,6 +411,9 @@ from desktop.views import _ko
           </ul>
           </ul>
           <!-- /ko -->
           <!-- /ko -->
         </li>
         </li>
+        <li class="assist-errors" data-bind="visible: hasErrors">
+          <span>${ _('Error loading contents.') }</span>
+        </li>
       </ul>
       </ul>
       <!-- /ko -->
       <!-- /ko -->
     </div>
     </div>
@@ -424,7 +436,7 @@ from desktop.views import _ko
   <script type="text/html" id="assist-documents-inner-panel">
   <script type="text/html" id="assist-documents-inner-panel">
     <div class="assist-inner-panel">
     <div class="assist-inner-panel">
       <!-- ko with: documents -->
       <!-- 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">
         <li class="assist-table">
           <a class="assist-entry assist-table-link" href="javascript: void(0);" data-bind="click: function () { open(! open()) }">
           <a class="assist-entry assist-table-link" href="javascript: void(0);" data-bind="click: function () { open(! open()) }">
             <!-- ko if: type == 'query-hive' || type == 'query' -->
             <!-- ko if: type == 'query-hive' || type == 'query' -->
@@ -463,6 +475,11 @@ from desktop.views import _ko
           </ul>
           </ul>
         </li>
         </li>
       </ul>
       </ul>
+      <ul class="nav assist-tables" data-bind="visible: hasErrors">
+        <li class="assist-errors">
+          <span>${ _('Error loading documents.') }</span>
+        </li>
+      </ul>
       <!-- /ko -->
       <!-- /ko -->
     </div>
     </div>
   </script>
   </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]><!--><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]-->
         <!--[if IE]><img src="${ static('desktop/art/spinner.gif') }"/><![endif]-->
       </li>
       </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>
       </li>
     </ul>
     </ul>
   </script>
   </script>
@@ -538,13 +555,16 @@ from desktop.views import _ko
       </li>
       </li>
     </ul>
     </ul>
     <ul class="nav assist-stretchable-list" data-bind="stretchDown">
     <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()">
         <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]><!--><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]-->
           <!--[if IE]><img src="${ static('desktop/art/spinner.gif') }"/><![endif]-->
         </div>
         </div>
         <!-- ko template: { ifnot: loading() || $parent.loading(), name: 'assist-entries' } --><!-- /ko -->
         <!-- ko template: { ifnot: loading() || $parent.loading(), name: 'assist-entries' } --><!-- /ko -->
       </li>
       </li>
+      <li class="assist-errors" data-bind="visible: hasErrors">
+        <span>${ _('Error loading tables.') }</span>
+      </li>
     </ul>
     </ul>
     <div id="assistQuickLook" class="modal hide fade">
     <div id="assistQuickLook" class="modal hide fade">
       <div class="modal-header">
       <div class="modal-header">