From beaf1af8c59fb0cca0d41cd633fe736fae794ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Lef=C3=A8vre=20=28lul=29?= Date: Wed, 17 Jan 2024 12:54:43 +0100 Subject: [PATCH] [FIX] spreadsheet: avoid useless rpc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - define a relational global filter without any default value. - reference that filter with `ODOO.FILTER.VALUE` => when loading the spreadsheet, a `read` RPC is triggered with an empty list of ids. This is: - useless network call - useless evaluation when the RPC resolves closes odoo/odoo#149741 Signed-off-by: Rémi Rahir (rar) --- .../plugins/global_filters_ui_plugin.js | 2 +- .../global_filters_model_test.js | 92 ++++++++++--------- 2 files changed, 48 insertions(+), 46 deletions(-) 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 7151e0bda72..4626350260f 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 @@ -253,7 +253,7 @@ export class GlobalFiltersUIPlugin extends spreadsheet.UIPlugin { return periodStr ? periodStr + "/" + year : year; } case "relation": - if (!value || !this.orm) { + if (!value?.length || !this.orm) { return ""; } if (!this.recordsDisplayName[filter.id]) { 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 c4599fd84c3..fe88ca7edbf 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 @@ -892,7 +892,6 @@ QUnit.module("spreadsheet > Global filters model", {}, () => { }); QUnit.test("ODOO.FILTER.VALUE relation filter", async function (assert) { - assert.expect(6); const model = await createModelWithDataSource({ mockRPC: function (route, { method, args }) { if (method === "read") { @@ -913,10 +912,11 @@ QUnit.module("spreadsheet > Global filters model", {}, () => { type: "relation", label: "Relation Filter", modelName: "partner", + defaultValue: [], }); await nextTick(); const [filter] = model.getters.getGlobalFilters(); - + assert.verifySteps([]); // One record; displayNames not defined => rpc await setGlobalFilterValue(model, { id: filter.id, @@ -1700,50 +1700,52 @@ QUnit.module("spreadsheet > Global filters model", {}, () => { ); }); - QUnit.test("A date filter without a yearOffset value yields an empty domain", async function (assert) { - patchDate(2022, 4, 16, 0, 0, 0); - const { model } = await createSpreadsheetWithPivot(); - const filter = { - id: "43", - type: "date", - label: "This Year", - rangeType: "fixedPeriod", - defaultValue: "this_year" - }; - await addGlobalFilter( - model, - filter, - { pivot: { 1: { chain: "date", type: "date", offset: 0 } } } - ); - let computedDomain = model.getters.getPivotComputedDomain("1"); - assertDateDomainEqual(assert, "date", "2022-01-01", "2022-12-31", computedDomain); - model.dispatch("CLEAR_GLOBAL_FILTER_VALUE", { id: filter.id }); - computedDomain = model.getters.getPivotComputedDomain("1"); - assert.deepEqual(computedDomain, []); - }); + QUnit.test( + "A date filter without a yearOffset value yields an empty domain", + async function (assert) { + patchDate(2022, 4, 16, 0, 0, 0); + const { model } = await createSpreadsheetWithPivot(); + const filter = { + id: "43", + type: "date", + label: "This Year", + rangeType: "fixedPeriod", + defaultValue: "this_year", + }; + await addGlobalFilter(model, filter, { + pivot: { 1: { chain: "date", type: "date", offset: 0 } }, + }); + let computedDomain = model.getters.getPivotComputedDomain("1"); + assertDateDomainEqual(assert, "date", "2022-01-01", "2022-12-31", computedDomain); + model.dispatch("CLEAR_GLOBAL_FILTER_VALUE", { id: filter.id }); + computedDomain = model.getters.getPivotComputedDomain("1"); + assert.deepEqual(computedDomain, []); + } + ); - QUnit.test("Date filter with automatic default without a yearOffset value yields an empty domain", async function (assert) { - patchDate(2022, 4, 16, 0, 0, 0); - const { model } = await createSpreadsheetWithPivot(); - const filter = { - id: "43", - type: "date", - label: "This Year", - rangeType: "fixedPeriod", - defaultValue: "this_year", - defaultsToCurrentPeriod: true - }; - await addGlobalFilter( - model, - filter, - { pivot: { 1: { chain: "date", type: "date", offset: 0 } } } - ); - let computedDomain = model.getters.getPivotComputedDomain("1"); - assertDateDomainEqual(assert, "date", "2022-01-01", "2022-12-31", computedDomain); - model.dispatch("CLEAR_GLOBAL_FILTER_VALUE", { id: filter.id }); - computedDomain = model.getters.getPivotComputedDomain("1"); - assert.deepEqual(computedDomain, []); - }); + QUnit.test( + "Date filter with automatic default without a yearOffset value yields an empty domain", + async function (assert) { + patchDate(2022, 4, 16, 0, 0, 0); + const { model } = await createSpreadsheetWithPivot(); + const filter = { + id: "43", + type: "date", + label: "This Year", + rangeType: "fixedPeriod", + defaultValue: "this_year", + defaultsToCurrentPeriod: true, + }; + await addGlobalFilter(model, filter, { + pivot: { 1: { chain: "date", type: "date", offset: 0 } }, + }); + let computedDomain = model.getters.getPivotComputedDomain("1"); + assertDateDomainEqual(assert, "date", "2022-01-01", "2022-12-31", computedDomain); + model.dispatch("CLEAR_GLOBAL_FILTER_VALUE", { id: filter.id }); + computedDomain = model.getters.getPivotComputedDomain("1"); + assert.deepEqual(computedDomain, []); + } + ); QUnit.test( "Can set a value to a relation filter from the SET_MANY_GLOBAL_FILTER_VALUE command",