From f0fdfbf44e1db97f9d9b1425be81b53138c01bd6 Mon Sep 17 00:00:00 2001 From: Jinal Patel Date: Fri, 9 Aug 2019 05:09:01 +0000 Subject: [PATCH] [FIX] web: add support for TRUE_LEAF and FALSE_LEAF in ModelFieldSelector before this commit, domain selector widget does not support TRUE_LEAF and FALSE_LEAF i.e. [(1, '=', 1)] and [(0, '=', 1)] respectively, the reason is the chain part of the domain i.e. field name has value 1/0 and we don't have field name like 1 and 0 in domain and hence ModelFieldSelector don't accept it after this commit, domain selector can handle this special two domains which is [(1, '=', 1)] and [(0, '=', 1)], add support for chain with 1/0 in ModelFieldSelector task- 1998145 closes odoo/odoo#35603 Signed-off-by: Nicolas Martinelli (nim) Co-authored-by: Mohammed Shekha --- .../static/src/js/widgets/domain_selector.js | 2 +- .../src/js/widgets/model_field_selector.js | 7 +++- addons/web/static/src/xml/base.xml | 12 +++++- .../widgets/model_field_selector_tests.js | 40 +++++++++++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/js/widgets/domain_selector.js b/addons/web/static/src/js/widgets/domain_selector.js index ed71679699c..755ee32979e 100644 --- a/addons/web/static/src/js/widgets/domain_selector.js +++ b/addons/web/static/src/js/widgets/domain_selector.js @@ -652,7 +652,7 @@ var DomainLeaf = DomainNode.extend({ this.fieldSelector = new ModelFieldSelector( this, this.model, - this.chain ? this.chain.split(".") : [], + this.chain !== undefined ? this.chain.toString().split(".") : [], this.options ); defs.push(this.fieldSelector.appendTo($("
")).then((function () { diff --git a/addons/web/static/src/js/widgets/model_field_selector.js b/addons/web/static/src/js/widgets/model_field_selector.js index 08a7ae47c81..ed74b2da44a 100644 --- a/addons/web/static/src/js/widgets/model_field_selector.js +++ b/addons/web/static/src/js/widgets/model_field_selector.js @@ -301,11 +301,16 @@ var ModelFieldSelector = Widget.extend({ }).bind(this)); function processChain(chain) { - var field = this._getLastPageField(chain.pop()); + var fieldName = chain.pop(); + var field = this._getLastPageField(fieldName); if (field && field.relation && chain.length > 0) { // Fetch next chain node if any and possible return this._pushPageData(field.relation).then(processChain.bind(this, chain)); } else if (field && chain.length === 0) { // Last node fetched return Promise.resolve(); + } else if (!field && fieldName === "1") { // TRUE_LEAF + this._validate(true); + } else if (!field && fieldName === "0") { // FALSE_LEAF + this._validate(true); } else { // Wrong node chain this._validate(false); } diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index c925809fab5..062571646b6 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -767,8 +767,16 @@ - - + + + + + + + + + + diff --git a/addons/web/static/tests/widgets/model_field_selector_tests.js b/addons/web/static/tests/widgets/model_field_selector_tests.js index 76c18b91f5b..c45bcb9dabe 100644 --- a/addons/web/static/tests/widgets/model_field_selector_tests.js +++ b/addons/web/static/tests/widgets/model_field_selector_tests.js @@ -248,6 +248,46 @@ QUnit.module('ModelFieldSelector', { fieldSelector.destroy(); }); + + QUnit.test("create a field chain with value 1 i.e. TRUE_LEAF", async function (assert) { + assert.expect(1); + + var $target = $("#qunit-fixture"); + + //create the field selector with domain value ["1"] + var fieldSelector = new ModelFieldSelector(null, "partner", ["1"], { + readonly: false, + showSearchInput: false, + }); + testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); + await fieldSelector.appendTo($target); + + var $fieldName = fieldSelector.$('.o_field_selector_chain_part'); + assert.strictEqual($fieldName.text().trim(), "1", + "field name value should be 1."); + + fieldSelector.destroy(); + }); + + QUnit.test("create a field chain with value 0 i.e. FALSE_LEAF", async function (assert) { + assert.expect(1); + + var $target = $("#qunit-fixture"); + + //create the field selector with domain value ["0"] + var fieldSelector = new ModelFieldSelector(null, "partner", ["0"], { + readonly: false, + showSearchInput: false, + }); + testUtils.mock.addMockEnvironment(fieldSelector, {data: this.data}); + await fieldSelector.appendTo($target); + + var $fieldName = fieldSelector.$('.o_field_selector_chain_part'); + assert.strictEqual($fieldName.text().trim(), "0", + "field name value should be 0."); + + fieldSelector.destroy(); + }); }); }); });