Browse Source

Fix multiple filters behavior

Denis K 8 years ago
parent
commit
a62d5f1b5c
2 changed files with 37 additions and 9 deletions
  1. 0 0
      jet/static/jet/js/build/bundle.min.js
  2. 37 9
      jet/static/jet/js/src/features/filters.js

File diff suppressed because it is too large
+ 0 - 0
jet/static/jet/js/build/bundle.min.js


+ 37 - 9
jet/static/jet/js/src/features/filters.js

@@ -6,17 +6,45 @@ var Filters = function($toolbar) {
 
 Filters.prototype = {
     initFiltersInteraction: function($toolbar) {
-        $toolbar.find('.changelist-filter-select').on('change', function () {
+        $toolbar.find('.changelist-filter-select').each(function() {
             var $select = $(this);
-            var $selectedOption = $select.find('option:selected');
-            var url = $selectedOption.data('url');
-            var querysetLookup = $select.data('queryset--lookup');
-
-            if (url) {
-                document.location = $selectedOption.data('url');
-            } else if (querysetLookup) {
-                document.location = '?' + querysetLookup + '=' + $selectedOption.val();
+            var multiple = $select.attr('multiple');
+
+            if (multiple) {
+                $select.data('previous-options', $select.find('option:selected'));
             }
+
+            $select.on('change', function() {
+                var $select = $(this);
+                var $selectedOption = $select.find('option:selected');
+
+                if (multiple) {
+                    if ($select.data('previous-options').length < $selectedOption.length) {
+                        $selectedOption = $selectedOption.filter(function (index, option) {
+                            return $select.data('previous-options').filter(function(index, initialOption) {
+                                    return initialOption == option;
+                                }).length == 0;
+                        });
+                    } else if ($select.data('previous-options').length > $selectedOption.length) {
+                        $selectedOption = $select.data('previous-options').filter(function(index, initialOption) {
+                            return $selectedOption.filter(function (index, option) {
+                                    return initialOption == option;
+                                }).length == 0;
+                        });
+                    }
+
+                    $select.data('previous-options', $select.find('option:selected'));
+                }
+
+                var url = $selectedOption.data('url');
+                var querysetLookup = $select.data('queryset--lookup');
+
+                if (url) {
+                    document.location = $selectedOption.data('url');
+                } else if (querysetLookup) {
+                    document.location = '?' + querysetLookup + '=' + $selectedOption.val();
+                }
+            });
         });
     },
     run: function() {

Some files were not shown because too many files changed in this diff