diff --git a/web_advanced_search/__openerp__.py b/web_advanced_search/__openerp__.py
index e2fac3284..f74f45b40 100644
--- a/web_advanced_search/__openerp__.py
+++ b/web_advanced_search/__openerp__.py
@@ -5,7 +5,7 @@
{
"name": "Search x2x fields",
- "version": "10.0.1.0.0",
+ "version": "10.0.2.0.2",
"author": "Therp BV, "
"Tecnativa, "
"Odoo Community Association (OCA)",
@@ -13,7 +13,7 @@
"category": "Usability",
"summary": "Use a search widget in advanced search for x2x fields",
"depends": [
- 'web',
+ 'web_widget_domain_v11',
],
"data": [
'views/templates.xml',
diff --git a/web_advanced_search/static/src/css/web_advanced_search_x2x.less b/web_advanced_search/static/src/css/web_advanced_search_x2x.less
index 008e4b561..b41fa4a2f 100644
--- a/web_advanced_search/static/src/css/web_advanced_search_x2x.less
+++ b/web_advanced_search/static/src/css/web_advanced_search_x2x.less
@@ -1,7 +1,9 @@
-.openerp {
- .oe-search-options {
- .searchview_extended_prop_value {
- .oe_form {
+.o_search_options {
+ .o_filters_menu {
+ .o_filter_condition {
+ max-width: inherit;
+
+ .o_searchview_extended_prop_value {
.ui-autocomplete-input {
.form-control();
}
@@ -10,6 +12,10 @@
top: 6px;
right: 2px;
}
+
+ .o_form_field_domain {
+ min-width: 400px;
+ }
}
}
}
diff --git a/web_advanced_search/static/src/js/web_advanced_search_x2x.js b/web_advanced_search/static/src/js/web_advanced_search_x2x.js
index 69fa621c6..33153cc48 100644
--- a/web_advanced_search/static/src/js/web_advanced_search_x2x.js
+++ b/web_advanced_search/static/src/js/web_advanced_search_x2x.js
@@ -15,8 +15,8 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
var X2XAdvancedSearchPropositionMixin = {
template: "web_advanced_search_x2x.proposition",
- init: function()
- {
+
+ init: function () {
// Make equal and not equal appear 1st and 2nd
this.operators = _.sortBy(
this.operators,
@@ -36,30 +36,41 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
this.operators.push({
'value': 'domain', 'text': core._lt('is in selection'),
});
+ // Avoid hiding filter when using special widgets
+ this.events["click"] = function (event) {
+ event.stopPropagation();
+ }
return this._super.apply(this, arguments);
},
+
get_field_desc: function()
{
return this.field;
},
+
/**
- * Add the right relational field to the template.
+ * Add x2x widget after rendering.
*/
- renderElement: function () {
- try {
- this._x2x_field.destroy();
- } catch (error) {}
- this.relational = this.x2x_widget_name();
- this._super.apply(this, arguments);
- if (this.relational) {
+ renderElement: function() {
+ var result = this._super.apply(this, arguments);
+ if (this.x2x_widget_name()) {
this.x2x_field().appendTo(this.$el);
this._x2x_field.$el.on(
"autocompleteopen",
this.proxy('x2x_autocomplete_open')
);
}
- delete this.relational;
+ return result;
},
+
+ /**
+ * Re-render widget when operator changes.
+ */
+ show_inputs: function () {
+ this.renderElement();
+ return this._super.apply(this, arguments);
+ },
+
/**
* Create a relational field for the user.
*
@@ -77,12 +88,13 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
this.x2x_field_create_options()
);
this._x2x_field.on(
- "change:value",
+ "domain_selected",
this,
this.proxy("x2x_value_changed")
);
return this._x2x_field;
},
+
x2x_field_create_options: function () {
return {
attrs: {
@@ -95,6 +107,7 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
},
};
},
+
x2x_value_changed: function () {
switch (this.x2x_widget_name()) {
case "char_domain":
@@ -103,10 +116,18 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
break;
}
},
+
x2x_widget: function () {
var name = this.x2x_widget_name();
return name && core.form_widget_registry.get(name);
},
+
+ /**
+ * Return the widget that should be used to render this proposition.
+ *
+ * If it returns `undefined`, it means you should use a simple
+ * ``.
+ */
x2x_widget_name: function () {
switch (this.get_operator()) {
case "=":
@@ -116,6 +137,7 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
return "char_domain";
}
},
+
x2x_autocomplete_open: function()
{
var widget = this._x2x_field.$input.autocomplete("widget");
@@ -123,6 +145,7 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
event.stopPropagation();
});
},
+
get_domain: function () {
// Special way to get domain if user chose "domain" filter
if (this.get_operator() == "domain") {
@@ -130,28 +153,38 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
var domain = new data.CompoundDomain(),
name = this.field.name;
$.map(value, function (el) {
- domain.add([[
- _.str.sprintf("%s.%s", name, el[0]),
- el[1],
- el[2],
- ]]);
+ var leaf = el;
+ if (typeof el !== "string") {
+ leaf = [
+ _.str.sprintf("%s.%s", name, el[0]),
+ el[1],
+ el[2],
+ ];
+ }
+ domain.add([leaf]);
});
return domain;
} else {
return this._super.apply(this, arguments);
}
},
+
get_operator: function () {
return !this.isDestroyed() &&
this.getParent().$('.o_searchview_extended_prop_op').val();
},
+
get_value: function () {
try {
+ if (!this.x2x_widget_name()) {
+ throw "No x2x widget, fallback to default";
+ }
return this._x2x_field.get_value();
} catch (error) {
return this._super.apply(this, arguments);
}
},
+
format_label: function (format, field, operator) {
if (this.x2x_widget()) {
var value = String(this._x2x_field.get_value());
@@ -180,30 +213,6 @@ odoo.define('web_advanced_search_x2x.search_filters', function (require) {
X2XAdvancedSearchPropositionMixin
);
- ExtendedSearchProposition.include({
- /**
- * Force re-rendering the value widget if needed.
- */
- operator_changed: function (event) {
- if (this.value instanceof X2XAdvancedSearchProposition) {
- this.value_rerender();
- }
- return this._super.apply(this, arguments);
- },
- /**
- * Re-render proposition's value widget.
- *
- * @return {jQuery.Deferred}
- */
- value_rerender: function () {
- this.value._x2x_field && this.value._x2x_field.destroy();
- delete this.value._x2x_field;
- return this.value.appendTo(
- this.$(".o_searchview_extended_prop_value").show().empty()
- );
- },
- });
-
// Register this search proposition for relational fields
$.each(affected_types, function (index, value) {
core.search_filters_registry.add(value, X2XAdvancedSearchProposition);
diff --git a/web_advanced_search/static/src/xml/web_advanced_search_x2x.xml b/web_advanced_search/static/src/xml/web_advanced_search_x2x.xml
index 1440acf21..78a79a1dc 100644
--- a/web_advanced_search/static/src/xml/web_advanced_search_x2x.xml
+++ b/web_advanced_search/static/src/xml/web_advanced_search_x2x.xml
@@ -3,12 +3,11 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
-
-
-
+
+
-
-
+
+