diff --git a/addons/spreadsheet/static/src/global_filters/plugins/global_filters_ui_plugin.js b/addons/spreadsheet/static/src/global_filters/plugins/global_filters_ui_plugin.js index 71c0e178f39..d951661d17e 100644 --- a/addons/spreadsheet/static/src/global_filters/plugins/global_filters_ui_plugin.js +++ b/addons/spreadsheet/static/src/global_filters/plugins/global_filters_ui_plugin.js @@ -3,7 +3,8 @@ /** * @typedef {import("@spreadsheet/data_sources/metadata_repository").Field} Field * @typedef {import("./global_filters_core_plugin").GlobalFilter} GlobalFilter - * + * @typedef {import("./global_filters_core_plugin").FieldMatching} FieldMatching + */ import { _t } from "@web/core/l10n/translation"; @@ -324,14 +325,14 @@ export default class GlobalFiltersUIPlugin extends spreadsheet.UIPlugin { * @param {GlobalFilter} filter * @param {FieldMatching} fieldMatching * - * @returns {Domain|undefined} + * @returns {Domain} */ _getDateDomain(filter, fieldMatching) { - if (!this.isGlobalFilterActive(filter.id)) { - return undefined; - } let granularity; const value = this.getGlobalFilterValue(filter.id); + if (!value || !fieldMatching.chain) { + return new Domain(); + } const field = fieldMatching.chain; const type = fieldMatching.type; const offset = fieldMatching.offset || 0; @@ -380,12 +381,12 @@ export default class GlobalFiltersUIPlugin extends spreadsheet.UIPlugin { * @param {GlobalFilter} filter * @param {FieldMatching} fieldMatching * - * @returns {Domain|undefined} + * @returns {Domain} */ _getTextDomain(filter, fieldMatching) { const value = this.getGlobalFilterValue(filter.id); if (!value || !fieldMatching.chain) { - return undefined; + return new Domain(); } const field = fieldMatching.chain; return new Domain([[field, "ilike", value]]); @@ -399,12 +400,12 @@ export default class GlobalFiltersUIPlugin extends spreadsheet.UIPlugin { * @param {GlobalFilter} filter * @param {FieldMatching} fieldMatching * - * @returns {Domain|undefined} + * @returns {Domain} */ _getRelationDomain(filter, fieldMatching) { const values = this.getGlobalFilterValue(filter.id); if (!values || values.length === 0 || !fieldMatching.chain) { - return undefined; + return new Domain(); } const field = fieldMatching.chain; return new Domain([[field, "in", values]]); diff --git a/addons/spreadsheet/static/tests/global_filters/global_filters_chart_test.js b/addons/spreadsheet/static/tests/global_filters/global_filters_chart_test.js index 8350e6e900d..c72d2c7f540 100644 --- a/addons/spreadsheet/static/tests/global_filters/global_filters_chart_test.js +++ b/addons/spreadsheet/static/tests/global_filters/global_filters_chart_test.js @@ -63,7 +63,7 @@ QUnit.module("spreadsheet > Global filters chart", {}, () => { ); model.updateMode("dashboard"); let computedDomain = model.getters.getChartDataSource(chartId).getComputedDomain(); - assert.equal(computedDomain.length, 0); + assert.deepEqual(computedDomain, []); await setGlobalFilterValue(model, { id: "42", value: { yearOffset: -1 }, diff --git a/addons/spreadsheet/static/tests/global_filters/global_filters_model_test.js b/addons/spreadsheet/static/tests/global_filters/global_filters_model_test.js index 74fa6e15dab..c083e12bf76 100644 --- a/addons/spreadsheet/static/tests/global_filters/global_filters_model_test.js +++ b/addons/spreadsheet/static/tests/global_filters/global_filters_model_test.js @@ -93,6 +93,15 @@ QUnit.module("spreadsheet > Global filters model", {}, () => { assert.equal(computedDomain[0], "&"); }); + QUnit.test("Can add a global filter with an empty field matching (no field chain)", async function (assert) { + const { model } = await createSpreadsheetWithPivotAndList(); + assert.equal(model.getters.getGlobalFilters().length, 0); + await addGlobalFilter(model, LAST_YEAR_FILTER, { pivot: {1: {}} }); + assert.equal(model.getters.getGlobalFilters().length, 1); + const computedDomain = model.getters.getPivotComputedDomain("1"); + assert.deepEqual(computedDomain, []); + }); + QUnit.test("Can delete a global filter", async function (assert) { assert.expect(4); @@ -105,7 +114,7 @@ QUnit.module("spreadsheet > Global filters model", {}, () => { assert.deepEqual(result, DispatchResult.Success); assert.equal(model.getters.getGlobalFilters().length, 0); const computedDomain = model.getters.getPivotComputedDomain("1"); - assert.equal(computedDomain.length, 0); + assert.deepEqual(computedDomain, []); }); QUnit.test("Can edit a global filter", async function (assert) {