Explorar o código

HUE-1193 [beeswax] Add filter for Saved Queries, History, and Tables

Added backend filtering for the history page
Enrico Berti %!s(int64=12) %!d(string=hai) anos
pai
achega
65a0bdd

+ 32 - 0
apps/beeswax/src/beeswax/templates/list_history.mako

@@ -21,6 +21,7 @@ from beeswax import models
 from beeswax.views import collapse_whitespace
 %>
 
+<%namespace name="actionbar" file="actionbar.mako" />
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="comps" file="beeswax_components.mako" />
 
@@ -65,12 +66,16 @@ ${ layout.menubar(section='history') }
                           <%
                             my_querydict = filter_params.copy()
                             my_querydict[prefix + 'user'] = request.user.username
+                            if filter:
+                              my_querydict[prefix + 'search'] = filter
                           %>
                         <li><a href="?${my_querydict.urlencode()}">${_('Show my queries')}</a></li>
                         % else:
                           <%
                             my_querydict = filter_params.copy()
                             my_querydict[prefix + 'user'] = ':all'
+                            if filter:
+                              my_querydict[prefix + 'search'] = filter
                           %>
                           <li><a href="?${my_querydict.urlencode()}">${_("Show everyone's queries")}</a></li>
                         % endif
@@ -80,12 +85,16 @@ ${ layout.menubar(section='history') }
                       <%
                         my_querydict = filter_params.copy()
                         my_querydict[prefix + 'auto_query'] = ''
+                        if filter:
+                          my_querydict[prefix + 'search'] = filter
                       %>
                       <li><a href="?${my_querydict.urlencode()}">${_('Show user queries')}</a></li>
                     % else:
                       <%
                         my_querydict = filter_params.copy()
                         my_querydict[prefix + 'auto_query'] = 'on'
+                        if filter:
+                          my_querydict[prefix + 'search'] = filter
                       %>
                       <li><a href="?${my_querydict.urlencode()}">${_('Show auto actions')}</a></li>
                     % endif
@@ -94,6 +103,15 @@ ${ layout.menubar(section='history') }
         </div>
         <div class="span10">
         <h1>${_('History')}</h1>
+
+        <%actionbar:render>
+          <%def name="search()">
+            <input id="filter" type="text" class="input-xxlarge search-query" placeholder="${_('Search for name, query, etc...')}" value="${ filter }">
+          </%def>
+        </%actionbar:render>
+
+        <img id="spinner" src="/static/art/spinner.gif" class="hide" />
+
         <table class="table table-striped table-condensed datatables">
             <thead>
               <tr>
@@ -172,6 +190,20 @@ ${ layout.menubar(section='history') }
       "bStateSave": true
     });
 
+    var filterTimeout = -1;
+    $(".search-query").keyup(function () {
+      window.clearTimeout(filterTimeout);
+      filterTimeout = window.setTimeout(function () {
+        $("#spinner").show();
+        $(".datatables").hide();
+        $(".pagination").hide();
+        location.href = '?${ filter_params.get(prefix + 'user') and (prefix + 'user=' + filter_params.get(prefix + 'user') + '&') or '' }${ prefix }search='+$(".search-query").val();
+      }, 500);
+    });
+
+    var _val = $(".search-query").val();
+    $(".search-query").focus().val("").val(_val);
+
     $("a[data-row-selector='true']").jHueRowSelector();
   });
 </script>

+ 8 - 0
apps/beeswax/src/beeswax/views.py

@@ -334,12 +334,15 @@ def list_query_history(request):
 
   page, filter_params = _list_query_history(request.user, querydict_query, DEFAULT_PAGE_SIZE, prefix)
 
+  filter = request.GET.get(prefix + 'search') and request.GET.get(prefix + 'search') or ''
+
   return render('list_history.mako', request, {
     'request': request,
     'page': page,
     'filter_params': filter_params,
     'share_queries': share_queries,
     'prefix': prefix,
+    'filter': filter,
   })
 
 
@@ -1348,6 +1351,11 @@ def _list_query_history(user, querydict, page_size, prefix=""):
   if design_id:
     db_queryset = db_queryset.filter(design__id=int(design_id))
 
+  # Search
+  search_filter = querydict.get(prefix + 'search')
+  if search_filter:
+    db_queryset = db_queryset.filter(Q(design__name__icontains=search_filter) | Q(query__icontains=search_filter) | Q(owner__username__icontains=search_filter))
+
   # Design type
   d_type = querydict.get(prefix + 'type')
   if d_type: