From f50c3298bb938cd044636956719d986bb91160ae Mon Sep 17 00:00:00 2001 From: Julien Mougenot Date: Mon, 20 Apr 2020 07:37:42 +0000 Subject: [PATCH] [FIX] web: set selection fields' default value in custom filters Before this commit, the 'selection' fields were treated like 'char' fields in the "Add Custom Filter" menu of the control panel's filter menu. This meant that their value was defaulted to "". Now, the default value of a selection field is its first selection value. closes odoo/odoo#49772 X-original-commit: 62b62570725bc8eb3d3fa77fd1e8efd7a4fb5d2b Signed-off-by: Aaron Bohy (aab) Signed-off-by: Julien Mougenot (jum) --- .../js/control_panel/custom_filter_item.js | 4 ++ .../control_panel/custom_filter_item_tests.js | 42 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/addons/web/static/src/js/control_panel/custom_filter_item.js b/addons/web/static/src/js/control_panel/custom_filter_item.js index b1f414eac5f..592a948d135 100644 --- a/addons/web/static/src/js/control_panel/custom_filter_item.js +++ b/addons/web/static/src/js/control_panel/custom_filter_item.js @@ -122,6 +122,10 @@ odoo.define('web.CustomFilterItem', function (require) { condition.value.push(moment('23:59:59', 'hh:mm:ss')); } break; + case 'selection': + const [firstValue] = this.fields[condition.field].selection[0]; + condition.value = firstValue; + break; default: condition.value = ""; } diff --git a/addons/web/static/tests/control_panel/custom_filter_item_tests.js b/addons/web/static/tests/control_panel/custom_filter_item_tests.js index 0d9cfac7bf2..52a5aa738a6 100644 --- a/addons/web/static/tests/control_panel/custom_filter_item_tests.js +++ b/addons/web/static/tests/control_panel/custom_filter_item_tests.js @@ -29,6 +29,7 @@ odoo.define('web.filter_menu_generator_tests', function (require) { boolean_field: { name: 'boolean_field', string: "Boolean Field", type: 'boolean', default: true, searchable: true }, char_field: { name: 'char_field', string: "Char Field", type: 'char', default: "foo", trim: true, searchable: true }, float_field: { name: 'float_field', string: "Floaty McFloatface", type: 'float', searchable: true }, + color: { name: 'color', string: "Color", type: 'selection', selection: [['black', "Black"], ['white', "White"]], searchable: true }, }; }, }, function () { @@ -80,6 +81,47 @@ odoo.define('web.filter_menu_generator_tests', function (require) { cfi.destroy(); }); + QUnit.test('selection field: default and updated value', async function (assert) { + assert.expect(2); + + let expectedFilters; + class MockedControlPanelModel extends Model { + createNewFilters(preFilters) { + assert.deepEqual(preFilters, expectedFilters); + } + } + const controlPanelModel = new MockedControlPanelModel(); + const cfi = await createComponent(CustomFilterItem, { + props: { + fields: this.fields, + }, + env: { controlPanelModel }, + }); + + // Default value + expectedFilters = [{ + description: 'Color is "black"', + domain: '[["color","=","black"]]', + type: 'filter', + }]; + await cpHelpers.toggleAddCustomFilter(cfi); + await testUtils.fields.editSelect(cfi.el.querySelector('.o_generator_menu_field'), 'color'); + await cpHelpers.applyFilter(cfi); + + // Updated value + expectedFilters = [{ + description: 'Color is "white"', + domain: '[["color","=","white"]]', + type: 'filter', + }]; + await cpHelpers.toggleAddCustomFilter(cfi); + await testUtils.fields.editSelect(cfi.el.querySelector('.o_generator_menu_field'), 'color'); + await testUtils.fields.editSelect(cfi.el.querySelector('.o_generator_menu_value select'), 'white'); + await cpHelpers.applyFilter(cfi); + + cfi.destroy(); + }); + QUnit.test('adding a simple filter works', async function (assert) { assert.expect(5);