Kaynağa Gözat

[impala] Toggle facet selection

Romain Rigaux 11 yıl önce
ebeveyn
işleme
cac47b9

+ 4 - 2
apps/impala/src/impala/templates/dashboard.mako

@@ -100,12 +100,14 @@ ${ dashboard.layout_skeleton() }
 <script type="text/html" id="pie-widget">
   <!-- ko if: $root.getFacetFromResult(id()) -->
   <div class="row-fluid" data-bind="with: $root.getFacetFromResult(id())">
-    <div data-bind="visible: $root.isEditing, with: $root.dashboard.getFacetById ($parent.id())" style="margin-bottom: 20px">
+    <div data-bind="visible: $root.isEditing, with: $root.dashboard.getFacetById($parent.id())" style="margin-bottom: 20px">
       <input type="text" data-bind="value: properties.limit"></input>
     </div>
   
     <span data-bind="foreach: data()">
-      <span data-bind="text: $data"></span>
+      <a href="javascript: void(0)">
+        <span data-bind="text: $data, click: function(){ $root.query.toggleFacet({facet: $data, widget: $parent}) }"></span>
+      </a>
     </span>
   </div>
   <!-- /ko -->

+ 3 - 3
apps/impala/src/impala/views.py

@@ -57,13 +57,15 @@ def query(request):
     'status': -1,
     'data': {}
   }
-    
+  print request.POST
+  
   if 'facet' in request.POST: 
     facet = json.loads(request.POST['facet'])
     database = 'default'
     table = 'sample_07'  
     hql = "SELECT salary FROM %s.%s WHERE salary IS NOT NULL ORDER BY salary DESC LIMIT %s" % (database, table, facet['properties']['limit'])
     result['id'] = facet['id']
+    result['field'] = facet['field']
   else:
     database = 'default'
     table = 'sample_07'    
@@ -80,5 +82,3 @@ def query(request):
     db.close(handle)
     
   return HttpResponse(json.dumps(result), mimetype="application/json")
-
-  

+ 41 - 3
apps/impala/static/js/search.ko.js

@@ -51,13 +51,51 @@ function loadLayout(viewModel, json_layout) {
 
 var Query = function (vm, query) {
   var self = this;
-  // current select
+
   self.qs = ko.mapping.fromJS([{'q': ''}]);
-  self.fqs = ko.mapping.fromJS([{'q': ''}]);
+  self.fqs = ko.mapping.fromJS([]);
+  
+  self.toggleFacet = function (data) {
+    var fq = self.getFacetFilter(data.widget.id());
+
+    if (fq == null) {
+      self.fqs.push(ko.mapping.fromJS({
+        'id': data.widget.id(),
+        'field': data.widget.field(),
+        'filter': [data.facet[0]],
+        'type': 'field'
+      }));
+    } else {
+      $.each(self.fqs(), function (index, fq) {
+        if (fq.id() == data.widget.id()) {
+          if (fq.filter.indexOf(data.facet[0]) > -1) {
+            fq.filter.remove(data.facet[0]);
+            if (fq.filter().length == 0) {
+              self.fqs.remove(fq);
+            }
+          } else {
+            fq.filter.push(data.facet[0]);
+          }
+        }
+      });
+    }
+
+    vm.search();
+  }  
+  
+  self.getFacetFilter = function (facet_id) {
+    var _facet = null;
+    $.each(self.fqs(), function (index, facet) {
+      if (facet.id() == facet_id) {
+        _facet = facet;
+        return false;
+      }
+    });
+    return _facet;	  
+  }
 }
 
 var Dashboard = function (vm, dashboard) { 
-  // id from DB
   var self = this;
   
   self.facets = ko.observable(dashboard.facets);