You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.9 KiB
55 lines
1.9 KiB
odoo.define('web_search_with_and', function (require) {
|
|
"use strict";
|
|
|
|
var SearchView = require('web.SearchView');
|
|
var Backbone = window.Backbone;
|
|
|
|
SearchView.include({
|
|
// Override the base method to detect a 'shift' event
|
|
select_completion: function (e, ui) {
|
|
if (e.shiftKey
|
|
&& ui.item.facet.values
|
|
&& ui.item.facet.values.length
|
|
&& String(ui.item.facet.values[0].value).trim() !== "") {
|
|
// In case of an 'AND' search a new facet is added regarding of the previous facets
|
|
e.preventDefault();
|
|
|
|
this.query.add(ui.item.facet, {shiftKey: true});
|
|
} else {
|
|
|
|
return this._super.apply(this, arguments);
|
|
}
|
|
}
|
|
});
|
|
|
|
SearchView.SearchQuery.prototype = SearchView.SearchQuery.extend({
|
|
// Override the odoo method to (conditionally) add a search facet even if a existing
|
|
// facet for the same field/category already exists.
|
|
// The prototype is used to override the 'add' function in order to execute the
|
|
// following code before the Odoo native override (trick)
|
|
add: function (values, options) {
|
|
options = options || {};
|
|
if (options.shiftKey) {
|
|
|
|
if (!values) {
|
|
values = [];
|
|
}
|
|
else if (!(values instanceof Array)) {
|
|
values = [values];
|
|
}
|
|
|
|
delete options.shiftKey;
|
|
_(values).each(function (value) {
|
|
var model = this._prepareModel(value, options);
|
|
Backbone.Collection.prototype.add.call(this, model, options);
|
|
}, this);
|
|
|
|
return this;
|
|
}
|
|
else {
|
|
return this.constructor.__super__.add.call(this, values, options);
|
|
}
|
|
}
|
|
}).prototype;
|
|
|
|
});
|