Ver Fonte

HUE-5727 [assist] Add column popularity to the assist

Johan Ahlen há 8 anos atrás
pai
commit
bc7eb25

+ 4 - 0
desktop/core/src/desktop/static/desktop/css/hue.css

@@ -509,6 +509,10 @@ a {
 .popular-color {
   color: #EDB233;
 }
+.top-star {
+  vertical-align: text-top;
+  font-size: 70%;
+}
 /*
  Licensed to Cloudera, Inc. under one
  or more contributor license agreements.  See the NOTICE file

+ 4 - 0
desktop/core/src/desktop/static/desktop/css/hue3-extra.css

@@ -509,6 +509,10 @@ a {
 .popular-color {
   color: #EDB233;
 }
+.top-star {
+  vertical-align: text-top;
+  font-size: 70%;
+}
 /*
  Licensed to Cloudera, Inc. under one
  or more contributor license agreements.  See the NOTICE file

+ 34 - 0
desktop/core/src/desktop/static/desktop/js/assist/assistDbEntry.js

@@ -251,6 +251,8 @@ var AssistDbEntry = (function () {
     }
     self.loading(true);
 
+    var loadEntriesDeferred = $.Deferred();
+
     var successCallback = function(data) {
       self.entries([]);
       self.hasErrors(false);
@@ -353,6 +355,7 @@ var AssistDbEntry = (function () {
         newEntries.sort(self.sortFunctions[self.assistDbSource.activeSort()]);
         self.entries(newEntries);
       }
+      loadEntriesDeferred.resolve(newEntries);
       if (typeof callback === 'function') {
         callback();
       }
@@ -361,8 +364,39 @@ var AssistDbEntry = (function () {
     var errorCallback = function () {
       self.hasErrors(true);
       self.loading(false);
+      loadEntriesDeferred.resolve([]);
     };
 
+    if (self.definition.isTable) {
+      self.assistDbSource.apiHelper.fetchNavOptTopColumns({
+        sourceType: self.assistDbSource.sourceType,
+        successCallback: function (data) {
+          if (data.status === 0 && data.values && data.values.selectColumns && data.values.selectColumns.length > 0) {
+            var colIndex = {};
+            data.values.selectColumns.forEach(function (col) {
+              colIndex[col.columnName] = col;
+            });
+            $.when(loadEntriesDeferred).done(function () {
+              if (!self.hasErrors()) {
+                self.entries().forEach(function (entry) {
+                  if (colIndex[entry.definition.name]) {
+                    entry.popularity(colIndex[entry.definition.name].columnCount);
+                  }
+                });
+
+                if (self.assistDbSource.activeSort() === 'popular') {
+                  self.entries.sort(self.sortFunctions.popular);
+                }
+              }
+            })
+          }
+        },
+        silenceErrors: true,
+        tables: [{ identifierChain: [{ name: self.definition.name }] }],
+        defaultDatabase: self.parent.definition.name
+      })
+    }
+
     self.assistDbSource.apiHelper.fetchPanelData({
       sourceType: self.assistDbSource.sourceType,
       hierarchy: self.getHierarchy(),

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

@@ -582,4 +582,9 @@
 
 .popular-color {
   color: @cui-orange-300;
+}
+
+.top-star {
+  vertical-align: text-top;
+  font-size: 70%;
 }

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

@@ -134,7 +134,7 @@ from notebook.conf import ENABLE_QUERY_BUILDER
       </div>
       <a class="assist-entry assist-table-link" href="javascript:void(0)" data-bind="click: toggleOpen, attr: {'title': definition.title }, draggableText: { text: editorText,  meta: {'type': 'sql', 'table': tableName, 'database': databaseName} }">
         <i class="fa fa-fw fa-table muted valign-middle" data-bind="css: { 'fa-eye': definition.isView, 'fa-table': definition.isTable }"></i>
-        <span data-bind="text: definition.displayName, css: { 'highlight': highlight }"></span> <!-- ko if: popularity() > 0 --><i title="${ _('Popular') }" class="fa fa-star-o popular-color"></i> <!-- /ko -->
+        <span data-bind="text: definition.displayName, css: { 'highlight': highlight }"></span> <!-- ko if: assistDbSource.activeSort() === 'popular' && popularity() > 0 --><i title="${ _('Popular') }" class="fa fa-star-o top-star"></i> <!-- /ko -->
       </a>
       <div class="center" data-bind="visible: loading"><i class="fa fa-spinner fa-spin assist-spinner"></i></div>
       <!-- ko template: { if: open, name: 'assist-db-entries'  } --><!-- /ko -->
@@ -153,7 +153,7 @@ from notebook.conf import ENABLE_QUERY_BUILDER
       <!-- /ko -->
       <!-- ko ifnot: expandable -->
       <div style="cursor: default;" class="assist-entry assist-field-link" href="javascript:void(0)" data-bind="event: { dblClick: dblClick }, attr: {'title': definition.title }">
-        <span class="highlightable" data-bind="css: { 'highlight': highlight}, attr: {'column': columnName, 'table': tableName, 'database': databaseName}, text: definition.displayName, draggableText: { text: editorText, meta: {'type': 'sql', 'column': columnName, 'table': tableName, 'database': databaseName} }"></span><!-- ko if: definition.primary_key --> <i class="fa fa-key"></i><!-- /ko -->
+        <span class="highlightable" data-bind="css: { 'highlight': highlight}, attr: {'column': columnName, 'table': tableName, 'database': databaseName}, text: definition.displayName, draggableText: { text: editorText, meta: {'type': 'sql', 'column': columnName, 'table': tableName, 'database': databaseName} }"></span><!-- ko if: definition.primary_key --> <i class="fa fa-key"></i><!-- /ko --><!-- ko if: assistDbSource.activeSort() === 'popular' && popularity() > 0 --> <i title="${ _('Popular') }" class="fa fa-star-o top-star"></i> <!-- /ko -->
       </div>
       <!-- /ko -->
       <div class="center" data-bind="visible: loading"><i class="fa fa-spinner fa-spin assist-spinner"></i></div>