diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 85521a14651..27a2ad53196 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -1540,6 +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('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'); @@ -1549,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); @@ -1583,8 +1594,10 @@ 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'); }); }, set_filters: function (filters) { diff --git a/addons/web/static/test/search.js b/addons/web/static/test/search.js index e5beab22498..706a308be79 100644 --- a/addons/web/static/test/search.js +++ b/addons/web/static/test/search.js @@ -1094,6 +1094,72 @@ $(document).ready(function () { }); }); + module('saved_filters', { + setup: function () { + instance = window.openerp.init([]); + window.openerp.web.corelib(instance); + window.openerp.web.coresetup(instance); + window.openerp.web.chrome(instance); + window.openerp.web.data(instance); + window.openerp.web.formats(instance); + window.openerp.web.search(instance); + + instance.web.qweb.add_template(doc); + + mockifyRPC(instance.connection); + } + }); + asyncTest('checkboxing', 6, 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(); + + ok($row.hasClass('oe_selected'), "should check/select the filter's row"); + 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"); + 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 () { instance = window.openerp.init([]);