Bläddra i källkod

HUE-7671 [frontend] Include names in the inline autocomplete suggestions

Johan Ahlen 8 år sedan
förälder
incheckning
1affd33552

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

@@ -116,6 +116,17 @@ var AssistDbEntry = (function () {
       });
     });
 
+    self.autocompleteFromEntries = function (nonPartial, partial) {
+      var result = [];
+      var partialLower = partial.toLowerCase();
+      self.entries().forEach(function (entry) {
+        if (entry.definition.name.toLowerCase().indexOf(partialLower) === 0) {
+          result.push(nonPartial + partial + entry.definition.name.substring(partial.length))
+        }
+      });
+      return result;
+    };
+
     self.tableName = null;
     self.columnName = null;
     self.type = null;

+ 11 - 0
desktop/core/src/desktop/static/desktop/js/assist/assistDbSource.js

@@ -106,6 +106,17 @@ var AssistDbSource = (function () {
       return result;
     });
 
+    self.autocompleteFromEntries = function (nonPartial, partial) {
+      var result = [];
+      var partialLower = partial.toLowerCase();
+      self.databases().forEach(function (db) {
+        if (db.definition.name.toLowerCase().indexOf(partialLower) === 0) {
+          result.push(nonPartial + partial + db.definition.name.substring(partial.length))
+        }
+      });
+      return result;
+    };
+
     self.selectedDatabase = ko.observable();
 
     self.selectedDatabase.subscribe(function () {

+ 25 - 3
desktop/core/src/desktop/templates/assist.mako

@@ -849,7 +849,8 @@ from desktop.views import _ko
             params: {
               querySpec: filter.querySpec,
               facets: [],
-              knownFacetValues: {}
+              knownFacetValues: {},
+              autocompleteFromEntries: autocompleteFromEntries
             }
           } --><!-- /ko -->
       </div>
@@ -931,7 +932,8 @@ from desktop.views import _ko
           params: {
             querySpec: filter.querySpec,
             facets: ['type'],
-            knownFacetValues: sourceType === 'solr' ? SOLR_ASSIST_KNOWN_FACET_VALUES : SQL_ASSIST_KNOWN_FACET_VALUES
+            knownFacetValues: sourceType === 'solr' ? SOLR_ASSIST_KNOWN_FACET_VALUES : SQL_ASSIST_KNOWN_FACET_VALUES,
+            autocompleteFromEntries: autocompleteFromEntries
           }
         } --><!-- /ko -->
       </div>
@@ -2226,7 +2228,8 @@ from desktop.views import _ko
               params: {
                 querySpec: filter.querySpec,
                 facets: ['type'],
-                knownFacetValues: isSolr() ? SOLR_ASSIST_KNOWN_FACET_VALUES : SQL_ASSIST_KNOWN_FACET_VALUES
+                knownFacetValues: isSolr() ? SOLR_ASSIST_KNOWN_FACET_VALUES : SQL_ASSIST_KNOWN_FACET_VALUES,
+                autocompleteFromEntries: autocompleteFromEntries
               }
             } --><!-- /ko -->
           </div>
@@ -2441,6 +2444,25 @@ from desktop.views import _ko
           }, 2000);
         };
 
+        self.autocompleteFromEntries = function (nonPartial, partial) {
+          var added = {};
+          var result = [];
+          var partialLower = partial.toLowerCase();
+          self.activeTables().forEach(function (table) {
+            if (!added[table.definition.name] && table.definition.name.toLowerCase().indexOf(partialLower) === 0) {
+              added[table.definition.name] = true;
+              result.push(nonPartial + partial + table.definition.name.substring(partial.length))
+            }
+            table.entries().forEach(function (col) {
+              if (!added[col.definition.name] && col.definition.name.toLowerCase().indexOf(partialLower) === 0) {
+                added[col.definition.name] = true;
+                result.push(nonPartial + partial + col.definition.name.substring(partial.length))
+              }
+            })
+          });
+          return result;
+        };
+
         var activeTablesSub = self.activeTables.subscribe(loadEntries);
         self.disposals.push(function () {
           window.clearTimeout(loadEntriesTimeout);

+ 1 - 1
desktop/core/src/desktop/templates/ko_components/ko_inline_autocomplete.mako

@@ -62,7 +62,7 @@ from desktop.views import _ko
           facets: {},
           text: []
         });
-        self.autocompleteFromEntries = params.autocompleteFromEntries || function () {};
+        self.autocompleteFromEntries = params.autocompleteFromEntries || function () { return []; };
         self.facets = params.facets || [];
         self.knownFacetValues = params.knownFacetValues || {};
         self.uniqueFacets = !!params.uniqueFacets;

+ 16 - 4
desktop/core/src/desktop/templates/ko_components/ko_sql_columns_table.mako

@@ -33,7 +33,8 @@ from desktop.views import _ko
             params: {
               querySpec: querySpec,
               facets: Object.keys(SQL_COLUMNS_KNOWN_FACET_VALUES),
-              knownFacetValues: SQL_COLUMNS_KNOWN_FACET_VALUES
+              knownFacetValues: SQL_COLUMNS_KNOWN_FACET_VALUES,
+              autocompleteFromEntries: autocompleteFromEntries
             }
           } --><!-- /ko -->
         </div>
@@ -98,7 +99,7 @@ from desktop.views import _ko
 
       function SqlColumnsTable(params) {
         var self = this;
-        var columns = params.columns;
+        self.columns = params.columns;
         self.scrollToColumns = typeof params.scrollToColumns !== 'undefined' ?  params.scrollToColumns : true;
         self.searchInput = ko.observable('');
         self.searchVisible = ko.observable(true);
@@ -113,14 +114,14 @@ from desktop.views import _ko
 
         self.filteredColumns = ko.pureComputed(function () {
           if (!self.querySpec() || self.querySpec().query === '') {
-            return columns;
+            return self.columns;
           }
 
           var facets = self.querySpec().facets;
           var isFacetMatch = !facets || Object.keys(facets).length === 0 || !facets['type']; // So far only type facet is used for SQL
           var isTextMatch = !self.querySpec().text || self.querySpec().text.length === 0;
 
-          return columns.filter(function (column) {
+          return self.columns.filter(function (column) {
             var match = true;
 
             if (!isFacetMatch) {
@@ -136,6 +137,17 @@ from desktop.views import _ko
             return match;
           })
         });
+
+        self.autocompleteFromEntries = function (nonPartial, partial) {
+          var result = [];
+          var partialLower = partial.toLowerCase();
+          self.columns.forEach(function (column) {
+            if (column.name.toLowerCase().indexOf(partialLower) === 0) {
+              result.push(nonPartial + partial + column.name.substring(partial.length))
+            }
+          });
+          return result;
+        };
       }
 
       ko.components.register('sql-columns-table', {