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);