Browse Source

[impala] Toggle selected facet

Romain Rigaux 11 năm trước cách đây
mục cha
commit
091d984f02

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

@@ -207,15 +207,18 @@ ${ dashboard.layout_skeleton() }
 <script type="text/html" id="facet-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())">
       <input type="text" data-bind="value: field" />
       <input type="text" data-bind="value: properties.limit" />
     </div>
   
     <span data-bind="foreach: data()">
-      <a href="javascript: void(0)">
-        <span data-bind="text: $data, click: function(){ $root.query.toggleFacet({facet: $data, widget: $parent}) }"></span>
-      </a>
+      <div>
+        <a href="javascript: void(0)">
+          <span data-bind="text: $data, click: function(){ $root.query.toggleFacet({facet: $data, widget: $parent}) }"></span>
+          <i class="fa fa-times" data-bind="visible: $parent.data().length == 1"></i>
+        </a>
+      </div>
     </span>
   </div>
   <!-- /ko -->

+ 16 - 5
apps/impala/src/impala/views.py

@@ -37,7 +37,7 @@ def dashboard(request):
   return render('dashboard.mako', request, {
     'query_json': json.dumps({}),
     'dashboard_json': json.dumps({'layout': [
-              {"size":2,"rows":[{"widgets":[{"size":12,"name":"Pie Results","id":"52f07188-f30f-1296-2450-f77e02e1a5c1","widgetType":"facet-widget",
+              {"size":2,"rows":[{"widgets":[{"size":12,"name":"Top salaries","id":"52f07188-f30f-1296-2450-f77e02e1a5c1","widgetType":"facet-widget",
                    "properties":{},"offset":0,"isLoading":True,"klass":"card card-widget span12"}]}],"drops":["temp"],"klass":"card card-home card-column span2"},
               {"size":10,"rows":[{"widgets":[
                   {"size":12,"name":"Grid Results","id":"52f07188-f30f-1296-2450-f77e02e1a5c0","widgetType":"resultset-widget",
@@ -56,22 +56,33 @@ def query(request):
     'status': -1,
     'data': {}
   }
-  print request.POST
-  
+    
+  fqs = json.loads(request.POST['query'])['fqs']
+
+  if fqs:
+    filters = ' AND '.join(['%s = %s' % (fq['field'], value) for fq in fqs for value in fq['filter']])
+  else:
+    filters = ''
+
   if 'facet' in request.POST: 
     facet = json.loads(request.POST['facet'])
     database = 'default'
     table = 'sample_07'  
-    hql = "SELECT %(field)s FROM %(database)s.%(table)s WHERE %(field)s IS NOT NULL ORDER BY %(field)s DESC LIMIT %(limit)s" % {
+    hql = "SELECT %(field)s FROM %(database)s.%(table)s WHERE %(field)s IS NOT NULL %(filters)s ORDER BY %(field)s DESC LIMIT %(limit)s" % {
         'database': database, 'table': table, 'limit': facet['properties']['limit'],
-        'field': facet['field']
+        'field': facet['field'],
+        'filters': (' AND ' + filters) if filters else ''
     }
     result['id'] = facet['id']
     result['field'] = facet['field']
+    fields = [fq['field'] for fq in fqs]
+    result['selected'] = facet['field'] in fields
   else:
     database = 'default'
     table = 'sample_07'    
     hql = "SELECT * FROM %s.%s" % (database, table,)
+    if filters:
+      hql += ' WHERE ' + filters
 
   query_server = get_query_server_config(name='impala')
   query = hql_query(hql)