Browse Source

HUE-8138 [dashboard] List available fields depending on selected metrics for dimensions

Romain Rigaux 7 years ago
parent
commit
febed80

+ 28 - 33
desktop/libs/dashboard/src/dashboard/static/dashboard/js/search.ko.js

@@ -630,7 +630,7 @@ var Collection = function (vm, collection) {
     });
     });
   }
   }
 
 
-  self.template.fields = ko.computed(function () {
+  self.template.fields = ko.pureComputed(function () {
     var _fields = [];
     var _fields = [];
     $.each(self.template.fieldsAttributes(), function (index, field) {
     $.each(self.template.fieldsAttributes(), function (index, field) {
       var position = self.template.fieldsSelected.indexOf(field.name());
       var position = self.template.fieldsSelected.indexOf(field.name());
@@ -639,22 +639,21 @@ var Collection = function (vm, collection) {
       }
       }
     });
     });
     return _fields;
     return _fields;
- });
+  });
 
 
- self.template.fieldsNames = ko.computed(function () {
-   return $.map(self.template.fieldsAttributes(), function(field) {
-     return field.name();
-   }).sort(function (a, b) {
-     return a.toLowerCase().localeCompare(b.toLowerCase());
-   });
- });
+  self.template.fieldsNames = ko.computed(function () {
+    return $.map(self.template.fieldsAttributes(), function(field) {
+      return field.name();
+    }).sort(function (a, b) {
+      return a.toLowerCase().localeCompare(b.toLowerCase());
+    });
+  });
 
 
- self.template.facetFieldsNames = ko.computed(function () {
-//	    return self.template.fieldsNames();
-  return self.template.fieldsAttributes();
- });
+  self.template.facetFieldsNames = ko.pureComputed(function () {
+    return self.template.fieldsAttributes();
+  });
 
 
-  self.template.fieldsSelected.subscribe(function () {
+ self.template.fieldsSelected.subscribe(function () {
     vm.search();
     vm.search();
     if (self.template.moreLikeThis) {
     if (self.template.moreLikeThis) {
       self.template.moreLikeThis(false);
       self.template.moreLikeThis(false);
@@ -757,21 +756,17 @@ var Collection = function (vm, collection) {
     return _field;
     return _field;
   };
   };
 
 
-  self._get_field_operations = function(field, facet) {console.log(field);
+  self._get_field_operations = function(field, facet) {
     if (! field) {
     if (! field) {
       return HIT_OPTIONS;
       return HIT_OPTIONS;
-    } else if (isNumericColumn(field.type())) {
-      return NUMERIC_HIT_OPTIONS;
-    } else if (isDateTimeColumn(field.type())) {
-      return DATETIME_HIT_OPTIONS;
     } else {
     } else {
-      return facet.widgetType() == 'hit-widget' ? ALPHA_HIT_COUNTER_OPTIONS : ALPHA_HIT_OPTIONS;
+      return facet.widgetType() == 'hit-widget' ? ALPHA_HIT_COUNTER_OPTIONS : HIT_OPTIONS;
     }
     }
   };
   };
 
 
   // Very top facet
   // Very top facet
   self._addObservablesToFacet = function(facet, vm) {
   self._addObservablesToFacet = function(facet, vm) {
-    if (facet.properties && facet.properties.facets_form && facet.properties.facets_form.aggregate) { // Only Solr 5+    	
+    if (facet.properties && facet.properties.facets_form && facet.properties.facets_form.aggregate) { // Only Solr 5+
       facet.properties.facets_form.aggregate.metrics = ko.computed(function() {
       facet.properties.facets_form.aggregate.metrics = ko.computed(function() {
         var _field = self.getTemplateField(facet.properties.facets_form.field(), self.template.fieldsAttributes());
         var _field = self.getTemplateField(facet.properties.facets_form.field(), self.template.fieldsAttributes());
         return self._get_field_operations(_field, facet);
         return self._get_field_operations(_field, facet);
@@ -912,17 +907,17 @@ var Collection = function (vm, collection) {
   self._getCompatibleMetricFields = function(nestedFacet) {
   self._getCompatibleMetricFields = function(nestedFacet) {
     var fields = null;
     var fields = null;
 
 
-  	if (['avg', 'sum', 'median', 'percentile', 'stddev', 'variance'].indexOf(nestedFacet.aggregate.function()) != -1) {
-  	  fields = $.grep(self.template.fieldsAttributes(), function(field) {
-   	    return isNumericColumn(field.type()) || isDateTimeColumn(field.type());
-   	  })
-   	} else {
-   	  fields = self.template.facetFieldsNames();
-  	}
-
-  	return fields.sort(function (a, b) {
-   	  return a.name().toLowerCase().localeCompare(b.name().toLowerCase());
- 	});
+    if (['avg', 'sum', 'median', 'percentile', 'stddev', 'variance'].indexOf(nestedFacet.aggregate.function()) != -1) {
+      fields = $.grep(self.template.fieldsAttributes(), function(field) {
+        return isNumericColumn(field.type()) || isDateTimeColumn(field.type());
+      })
+    } else {
+      fields = self.template.facetFieldsNames();
+    }
+
+    return fields.sort(function (a, b) {
+      return a.name().toLowerCase().localeCompare(b.name().toLowerCase());
+   });
   };
   };
 
 
   self.facets = ko.mapping.fromJS(collection.facets);
   self.facets = ko.mapping.fromJS(collection.facets);
@@ -1129,7 +1124,7 @@ var Collection = function (vm, collection) {
     pivot.aggregate.facetFieldsNames = ko.computed(function() {
     pivot.aggregate.facetFieldsNames = ko.computed(function() {
       return self._getCompatibleMetricFields(pivot);
       return self._getCompatibleMetricFields(pivot);
     }).extend({ trackArrayChanges: true });
     }).extend({ trackArrayChanges: true });
-    
+
     facet.properties.facets_form.field(null);
     facet.properties.facets_form.field(null);
     facet.properties.facets_form.limit(5);
     facet.properties.facets_form.limit(5);
     facet.properties.facets_form.mincount(1);
     facet.properties.facets_form.mincount(1);

+ 3 - 1
desktop/libs/dashboard/src/dashboard/templates/common_search.mako

@@ -2171,12 +2171,14 @@ ${ dashboard.layout_skeleton(suffix='search') }
       <input type="number" class="input-mini" data-bind="value: percentile"/>
       <input type="number" class="input-mini" data-bind="value: percentile"/>
       <!-- /ko -->
       <!-- /ko -->
 
 
+      <!-- ko if: $data.function() != 'formula' -->
       <select data-bind="selectize: facetFieldsNames, value: $parent.field, optionsValue: 'name', optionsText: 'name', optionsCaption: '${ _ko('Field...') }'" class="hit-options input-small" style="margin-bottom: 0"></select>
       <select data-bind="selectize: facetFieldsNames, value: $parent.field, optionsValue: 'name', optionsText: 'name', optionsCaption: '${ _ko('Field...') }'" class="hit-options input-small" style="margin-bottom: 0"></select>
+      <!-- /ko -->
 
 
       <div class="clearfix"></div>
       <div class="clearfix"></div>
       <br/>
       <br/>
 
 
-      <div data-bind="component: { name: 'hue-simple-ace-editor', params: { value: plain_formula, parsedValue: formula, autocomplete: { type: 'solrFormula', support: { fields: $root.collection.template.fieldsAttributes } }, singleLine: true, mode: $root.collection.engine() } }, visible: $data.function() == 'formula'" class="margin-bottom-10"></div>
+      <div data-bind="component: { name: 'hue-simple-ace-editor', params: { value: plain_formula, parsedValue: formula, autocomplete: { type: 'solrFormula', support: { fields: $root.collection.template.fieldsAttributes } }, singleLine: true, mode: $root.collection.engine() } }, visible: $data.function() == 'formula'" class="margin-bottom-10" style="min-width: 300px"></div>
 
 
       <!-- ko if: $parents[1].widgetType() != 'hit-widget' -->
       <!-- ko if: $parents[1].widgetType() != 'hit-widget' -->
         <div class="facet-field-cnt">
         <div class="facet-field-cnt">