[v2,2/4] filters: Pre-populate delegate, submitter filters

Message ID 20180929212610.29905-2-stephen@that.guru
State Accepted
Headers show
Series
  • [v2,1/4] filters: Return dictionaries
Related show

Commit Message

Stephen Finucane Sept. 29, 2018, 9:26 p.m.
This appears to have got lost in the transition to 'selectize.js'. In
brief, this will ensure that a previously selected delegate or submitter
is still enabled post-filtering. For more information, see [1].

[1] https://stackoverflow.com/a/45124779

Signed-off-by: Stephen Finucane <stephen@that.guru>
Cc: Thomas Monjalon <thomas@monjalon.net>
Closes: #78
---
v2:
- Handle non-specific searches
---
 patchwork/templates/patchwork/filters.html | 71 +++++++++-------------
 1 file changed, 30 insertions(+), 41 deletions(-)

Patch

diff --git a/patchwork/templates/patchwork/filters.html b/patchwork/templates/patchwork/filters.html
index e760310b..9b0c4cb2 100644
--- a/patchwork/templates/patchwork/filters.html
+++ b/patchwork/templates/patchwork/filters.html
@@ -16,8 +16,6 @@  function filter_click()
         form.style['display'] = 'block';
         filterform_displayed = true;
     }
-
-
 }
 
 Selectize.define('enter_key_submit', function (options) {
@@ -39,9 +37,6 @@  Selectize.define('enter_key_submit', function (options) {
 
 $(document).ready(function() {
     $('#submitter_input').selectize({
-        valueField: 'pk',
-        labelField: 'name',
-        searchField: ['name', 'email'],
         plugins: ['enter_key_submit'],
         maxItems: 1,
         persist: false,
@@ -52,43 +47,37 @@  $(document).ready(function() {
                 this.$input.closest('form').submit();
             }, this);
         },
-        render: {
-            option: function(item, escape) {
-                if (item.name)
-                    return '<div>' + escape(item.name) + ' &lt;' +
-                                     escape(item.email) + '&gt;' + '</div>';
-                return '<div>' + escape(item.email) + '</div>';
+{% if "submitter" in filters.applied_filters %}
+{% with submitter_filter=filters.applied_filters.submitter %}
+        options: [
+            {
+                value: "{{ submitter_filter.key }}",
+                text: "{{ submitter_filter.condition }}",
             },
-            item: function(item, escape) {
-                if (item.name)
-                    return '<div>' + escape(item.name) + '</div>';
-                return '<div>' + escape(item.email) + '</div>';
-            }
-        },
+        ],
+        items: ["{{ submitter_filter.key }}"],
+{% endwith %}
+{% endif %}
         load: function(query, callback) {
             if (query.length < 4)
                 return callback();
 
             req = $.ajax({
-                url: '{% url 'api-submitters' %}?q=' +
-                      encodeURIComponent(query) + '&l=10',
+                url: "{% url 'api-submitters' %}",
+                data: {q: query, l: 10},
                 error: function() {
                     callback();
                 },
                 success: function(res) {
-                    callback(res);
+                    callback($.map(res, function (obj) {
+                        return {value: obj.pk, text: `${obj.name} <${obj.email}>`};
+                    }));
                 }
             });
         }
     });
-});
-
 
-$(document).ready(function() {
     $('#delegate_input').selectize({
-        valueField: 'pk',
-        labelField: 'name',
-        searchField: ['name'],
         plugins: ['enter_key_submit'],
         maxItems: 1,
         persist: false,
@@ -99,26 +88,28 @@  $(document).ready(function() {
                 this.$input.closest('form').submit();
             }, this);
         },
-        render: {
-            option: function(item, escape) {
-                if (item.email)
-                    return '<div>' + escape(item.name) + ' &lt;' +
-                                     escape(item.email) + '&gt;' + '</div>';
-                return '<div>' + escape(item.name) + '</div>';
+{% if "delegate" in filters.applied_filters %}
+{% with delegate_filter=filters.applied_filters.delegate %}
+        options: [
+            {
+                value: "{{ delegate_filter.key }}",
+                text: "{{ delegate_filter.condition }}",
             },
-            item: function(item, escape) {
-                return '<div>' + escape(item.name) + '</div>';
-            }
-        },
+        ],
+        items: ["{{ delegate_filter.key }}"],
+{% endwith %}
+{% endif %}
         load: function(query, callback) {
             req = $.ajax({
-                url: '{% url 'api-delegates' %}?q=' +
-                      encodeURIComponent(query) + '&l=10',
+                url: "{% url 'api-delegates' %}",
+                data: {q: query, l: 10},
                 error: function() {
                     callback();
                 },
                 success: function(res) {
-                    callback(res);
+                    callback($.map(res, function (obj) {
+                        return {value: obj.pk, text: obj.name};
+                    }));
                 }
             });
         }
@@ -167,5 +158,3 @@  $(document).ready(function() {
   </form>
  </div>
 </div>
-
-