From a813104ef4501fba2387d1c634cb09baa546b705 Mon Sep 17 00:00:00 2001 From: "Julien Carion (juca)" Date: Tue, 30 Jan 2024 10:59:42 +0000 Subject: [PATCH] [FIX] web: don't remove sample data on view switch This commit solves an issue where sample data would be erased when the user switches from a view with no sample data to another that should contain them. This commit also removes unnecessary usage of nextTick in assets loading. Steps to reproduce: - go to project and open one - enter a no match filter and save it as favorite - reload - switch from kanban to calendar view and switch back to kanban - after the fix, sample data should no longer be erased from kanban task-3701143 closes odoo/odoo#152666 X-original-commit: a8ff1465c6c31240d06c98fa5d61e146b3908cf0 Signed-off-by: Aaron Bohy (aab) Signed-off-by: Julien Carion (juca) --- addons/web/static/src/model/model.js | 12 ++-- .../views/calendar/calendar_view_tests.js | 58 +++++++++++++++++++ 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/model/model.js b/addons/web/static/src/model/model.js index c1945e98423..745a2fd2cb7 100644 --- a/addons/web/static/src/model/model.js +++ b/addons/web/static/src/model/model.js @@ -133,11 +133,9 @@ export function useModelWithSampleData(ModelClass, params, options = {}) { const globalState = component.props.globalState || {}; const localState = component.props.state || {}; - let useSampleModel = Boolean( - "useSampleModel" in globalState - ? globalState.useSampleModel - : component.props.useSampleModel - ); + let useSampleModel = + component.props.useSampleModel && + (!("useSampleModel" in globalState) || globalState.useSampleModel); model.useSampleModel = useSampleModel; const orm = model.orm; let sampleORM = localState.sampleORM; @@ -179,7 +177,9 @@ export function useModelWithSampleData(ModelClass, params, options = {}) { useSetupView({ getGlobalState() { - return { useSampleModel }; + if (component.props.useSampleModel) { + return { useSampleModel }; + } }, getLocalState: () => { return { sampleORM }; diff --git a/addons/web/static/tests/views/calendar/calendar_view_tests.js b/addons/web/static/tests/views/calendar/calendar_view_tests.js index 5d5e9ac5efc..3076a7c764b 100644 --- a/addons/web/static/tests/views/calendar/calendar_view_tests.js +++ b/addons/web/static/tests/views/calendar/calendar_view_tests.js @@ -5426,4 +5426,62 @@ QUnit.module("Views", ({ beforeEach }) => { "00 - bazar0 - chouette1 - brol10 - machin11 - chose100 - bidule1011000 - trucEdên@Hello#HelloJean-Paul 1Jean-Paul 2JeremyKévinRomelüThibaùltZoooroUndefined" ); }); + + QUnit.test( + "sample data are not removed when switching back from calendar view", + async function (assert) { + serverData.models.event.records = []; + serverData.actions = { + 1: { + id: 1, + name: "Partners", + res_model: "event", + type: "ir.actions.act_window", + views: [ + [false, "list"], + [false, "calendar"], + ], + }, + }; + + serverData.views = { + "event,false,calendar": ``, + "event,false,list": ` + + + `, + + "event,false,search": ``, + }; + + const webClient = await createWebClient({ + serverData, + async mockRPC(route, args) { + if (args.method === "check_access_rights") { + return true; + } + if (route.endsWith("/has_group")) { + return true; + } + }, + }); + + await doAction(webClient, 1); + + assert.containsOnce(target, ".o_list_view", "should have rendered a list view"); + assert.containsOnce(target, ".o_view_sample_data", "should have sample data"); + + await click(target, ".o_cp_switch_buttons .o_calendar"); + assert.containsOnce( + target, + ".o_calendar_container", + "should have rendered a calendar view" + ); + + await click(target, ".o_cp_switch_buttons .o_list"); + + assert.containsOnce(target, ".o_list_view", "should have rendered a list view"); + assert.containsOnce(target, ".o_view_sample_data", "should have sample data"); + } + ); });