Преглед изворни кода

HUE-6670 [editor] Avoid js error when hints recommendation switches

Romain Rigaux пре 8 година
родитељ
комит
bb65f9b

+ 1 - 1
desktop/core/src/desktop/templates/assist.mako

@@ -1801,7 +1801,7 @@ from notebook.conf import get_ordered_interpreters
         self.activeColumns = ko.observableArray();
         self.activeRisks = ko.observable({});
         self.hasActiveRisks = ko.pureComputed(function () {
-           return self.activeRisks().hints && self.activeRisks().length > 0;
+           return self.activeRisks().hints && self.activeRisks().hints.length > 0;
         });
         self.statementCount = ko.observable(0);
         self.activeStatementIndex = ko.observable(0);

+ 11 - 4
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -835,12 +835,19 @@ var EditorViewModel = (function() {
       };
     };
 
-    self.complexity = ko.observable({});
+    self.complexity = ko.observable();
     self.hasComplexity = ko.pureComputed(function () {
-      return Object.keys(self.complexity()).length > 0;
+      return self.complexity() && Object.keys(self.complexity()).length > 0;
     });
     self.hasRisks = ko.pureComputed(function () {
-      return self.hasComplexity() && self.complexity()['hints'].length > 0;
+      return self.hasComplexity() && self.complexity()['hints'] && self.complexity()['hints'].length > 0;
+    });
+    self.topRisk = ko.pureComputed(function () {
+      if (self.hasRisks()) {
+        return self.complexity()['hints'][0];
+      } else {
+        return null;
+      }
     });
 
     self.suggestion = ko.observable('');
@@ -917,8 +924,8 @@ var EditorViewModel = (function() {
           },
           success: function(data) {
             if (data.status == 0) {
-              self.complexity(data.query_complexity);
               self.hasSuggestion('');
+              self.complexity(data.query_complexity);
             } else {
               self.hasSuggestion('error');
               self.complexity({'hints': []});

+ 8 - 5
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -1039,22 +1039,25 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, ENABLE_
       <!-- /ko -->
       <!-- /ko -->
     <!-- /ko -->
-    <!-- ko if: ! hasSuggestion() && hasRisks() -->
-      <!-- ko if: complexity()['hints'][0].risk === 'low' -->
+    <!-- ko if: ! hasSuggestion() && topRisk() -->
+      <!-- ko if: topRisk().risk === 'low' -->
         <div class="round-icon success" data-bind="click: function(){ showOptimizer(! showOptimizer()) }, attr: { 'title': showOptimizer() ? '${ _ko('Close Validator') }' : '${ _ko('Open Validator') }'}">
           <i class="fa fa-check"></i>
         </div>
       <!-- /ko -->
-      <!-- ko if: complexity()['hints'][0].risk != 'low' -->
+      <!-- ko if: topRisk().risk != 'low' -->
         <div class="round-icon error" data-bind="click: function(){ showOptimizer(! showOptimizer()) }">
           <i class="fa fa-exclamation"></i>
         </div>
         <!-- ko if: showOptimizer -->
-        <span class="optimizer-explanation alert-error alert-neutral"><strong data-bind="text: complexity()['hints'][0].riskAnalysis"></strong> <span data-bind="text: complexity()['hints'][0].riskRecommendation"></span></span>
+        <span class="optimizer-explanation alert-error alert-neutral">
+          <strong data-bind="text: topRisk().riskAnalysis"></strong>
+          <span data-bind="text: topRisk().riskRecommendation"></span>
+        </span>
         <!-- /ko -->
       <!-- /ko -->
     <!-- /ko -->
-    <!-- ko if: hasSuggestion() == '' && ! hasRisks() -->
+    <!-- ko if: hasSuggestion() == '' && ! topRisk() -->
       <div class="round-icon success" data-bind="click: function(){ showOptimizer(! showOptimizer()) }, attr: { 'title': showOptimizer() ? '${ _ko('Close Validator') }' : '${ _ko('Open Validator') }'}">
         <i class="fa fa-check"></i>
       </div>