From 846cedf43dd233598b29a50cc14c14849da8fd40 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 26 Jun 2012 10:10:55 +0200 Subject: [PATCH] [FIX] correctly deselect custom filter when removing it from search bzr revid: xmo@openerp.com-20120626081055-x1j3em2v8zf54m4o --- addons/web/static/src/js/search.js | 15 ++++++++++++--- addons/web/static/test/search.js | 29 +++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 58f601cfc10..27a2ad53196 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1540,9 +1540,14 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({ var self = this; this.model = new instance.web.Model('ir.filters'); this.filters = {}; - this.view.query.on('reset', function () { - self.$element.find('li.oe_selected').removeClass('oe_selected'); - }); + this.view.query + .on('remove', function (facet) { + if (!facet.get('is_custom_filter')) { + return; + } + self.clear_selection(); + }) + .on('reset', this.proxy('clear_selection')); this.$element.on('submit', 'form', this.proxy('save_current')); this.$element.on('click', 'h4', function () { self.$element.toggleClass('oe_opened'); @@ -1552,6 +1557,9 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({ model: this.view.model }).pipe(this.proxy('set_filters')); }, + clear_selection: function () { + this.$element.find('li.oe_selected').removeClass('oe_selected'); + }, append_filter: function (filter) { var self = this; var key = _.str.sprintf('(%s)%s', filter.user_id, filter.name); @@ -1586,6 +1594,7 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({ get_groupby: function () { return [filter.context]; }, get_domain: function () { return filter.domain; } }, + is_custom_filter: true, values: [{label: filter.name, value: null}] }]); $filter.addClass('oe_selected'); diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index 9aac84578ac..706a308be79 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -1109,7 +1109,7 @@ $(document).ready(function () { mockifyRPC(instance.connection); } }); - asyncTest('checkboxing', function () { + asyncTest('checkboxing', 6, function () { var view = makeSearchView(); instance.connection.responses['/web/searchview/get_filters'] = function () { return {result: [{ @@ -1129,15 +1129,36 @@ $(document).ready(function () { ok($row.hasClass("oe_searchview_custom_private"), "should have private filter note/class"); equal(view.query.length, 1, "should have only one facet"); - var values = view.query.at(0).values; - equal(values.length, 1, - "should have only one value in the facet"); + var values = view.query.at(0).values; + equal(values.length, 1, + "should have only one value in the facet"); equal(values.at(0).get('label'), 'filter name', "displayed label should be the name of the filter"); equal(values.at(0).get('value'), null, "should have no value set"); }) }); + asyncTest('removal', 1, function () { + var view = makeSearchView(); + instance.connection.responses['/web/searchview/get_filters'] = function () { + return {result: [{ + name: "filter name", + user_id: 42 + }]}; + }; + var $fix = $('#qunit-fixture'); + + view.appendTo($fix) + .always(start) + .fail(function (error) { ok(false, error.message); }) + .done(function () { + var $row = $fix.find('.oe_searchview_custom li:first').click(); + + view.query.remove(view.query.at(0)); + ok(!$row.hasClass('oe_selected'), + "should not be checked anymore"); + }) + }); module('advanced', { setup: function () {