[IMP] extract key-creation in custom filters, store complete filter descriptor as well (in a separate mapping)

bzr revid: xmo@openerp.com-20120523104959-859cuucade83u11o
This commit is contained in:
Xavier Morel 2012-05-23 12:49:59 +02:00
parent a83e6221c8
commit c54383d4e5
1 changed files with 25 additions and 4 deletions

View File

@ -1540,6 +1540,7 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
var self = this;
this.model = new instance.web.Model('ir.filters');
this.filters = {};
this.$filters = {};
this.$element.on('submit', 'form', this.proxy('save_current'));
this.$element.on('click', 'h4', function () {
self.$element.toggleClass('oe_opened');
@ -1549,16 +1550,34 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
model: this.view.model
}).pipe(this.proxy('set_filters'));
},
/**
* Generates a mapping key (in the filters and $filter mappings) for the
* filter descriptor object provided (as returned by ``get_filters``).
*
* The mapping key is guaranteed to be unique for a given (user_id, name)
* pair.
*
* @param {Object} filter
* @param {String} filter.name
* @param {Number|Pair<Number, String>} [filter.user_id]
* @return {String} mapping key corresponding to the filter
*/
key_for: function (filter) {
var user_id = filter.user_id;
var uid = (user_id instanceof Array) ? user_id[0] : user_id;
return _.str.sprintf('(%s)%s', uid, filter.name);
},
append_filter: function (filter) {
var self = this;
var key = _.str.sprintf('(%s)%s', filter.user_id, filter.name);
var key = this.key_for(filter);
var $filter;
if (key in this.filters) {
$filter = this.filters[key];
if (key in this.$filters) {
$filter = this.$filters[key];
} else {
var id = filter.id;
$filter = this.filters[key] = $('<li></li>')
this.filters[key] = filter;
$filter = this.$filters[key] = $('<li></li>')
.appendTo(this.$element.find('.oe_searchview_custom_list'))
.addClass(filter.user_id ? 'oe_searchview_custom_private'
: 'oe_searchview_custom_public')
@ -1570,6 +1589,8 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
e.stopPropagation();
self.model.call('unlink', [id]).then(function () {
$filter.remove();
delete self.$filters[key];
delete self.filters[key];
});
})
.appendTo($filter);