From 34dc70ae5ac078d30a4841cfafc89022ca80631b Mon Sep 17 00:00:00 2001 From: Romain Estievenart Date: Thu, 1 Jun 2023 14:20:04 +0000 Subject: [PATCH] [FIX] board: use single column layout on small screen Steps to reproduce: - Create My dashboard on PC with two views set one next to the other - Open My dashboard on mobile devices, and you see the desktop view => bug On small screens, we don't have enough available space on the screen to allow other layout then "1". opw-3145706 closes odoo/odoo#123561 X-original-commit: 9e1f79156e9440b953e9d476a608f9ce117c0d5b Signed-off-by: Pierre Paridans (app) --- addons/board/__manifest__.py | 4 + addons/board/static/src/board_controller.js | 6 +- addons/board/static/src/board_controller.scss | 2 +- addons/board/static/src/board_controller.xml | 3 +- .../board/static/tests/mobile/board_test.js | 81 +++++++++++++++++++ 5 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 addons/board/static/tests/mobile/board_test.js diff --git a/addons/board/__manifest__.py b/addons/board/__manifest__.py index 41ab66e6f76..d0ffac2efd5 100644 --- a/addons/board/__manifest__.py +++ b/addons/board/__manifest__.py @@ -26,6 +26,10 @@ Allows users to create custom dashboard. ], 'web.qunit_suite_tests': [ 'board/static/tests/**/*', + ('remove', 'board/static/tests/mobile/**/*'), # mobile test + ], + 'web.qunit_mobile_suite_tests': [ + 'board/static/tests/mobile/**/*', ], }, 'license': 'LGPL-3', diff --git a/addons/board/static/src/board_controller.js b/addons/board/static/src/board_controller.js index 5f7304ce25a..0081898c70e 100644 --- a/addons/board/static/src/board_controller.js +++ b/addons/board/static/src/board_controller.js @@ -17,6 +17,10 @@ export class BoardController extends Component { this.board = useState(this.props.board); this.rpc = useService("rpc"); this.dialogService = useService("dialog"); + if (this.env.isSmall) { + this.board.layout = "1"; + this.board.colNumber = 1; + } const mainRef = useRef("main"); useSortable({ ref: mainRef, @@ -107,7 +111,7 @@ export class BoardController extends Component { const root = document.createElement("rendertostring"); blockDom.mount(bdom, root); const result = xmlSerializer.serializeToString(root); - const arch = result.slice(result.indexOf('<', 1), result.indexOf('')); + const arch = result.slice(result.indexOf("<", 1), result.indexOf("")); this.rpc("/web/view/edit_custom", { custom_id: this.board.customViewId, diff --git a/addons/board/static/src/board_controller.scss b/addons/board/static/src/board_controller.scss index 3e849619c94..d793a7f6b58 100644 --- a/addons/board/static/src/board_controller.scss +++ b/addons/board/static/src/board_controller.scss @@ -36,7 +36,7 @@ } } - .o_column_quick_create { + .o_column_quick_create, .o_control_panel { display: none; } } diff --git a/addons/board/static/src/board_controller.xml b/addons/board/static/src/board_controller.xml index 553a25f0fc3..b03249d33a8 100644 --- a/addons/board/static/src/board_controller.xml +++ b/addons/board/static/src/board_controller.xml @@ -13,8 +13,7 @@ - -
+
diff --git a/addons/board/static/tests/mobile/board_test.js b/addons/board/static/tests/mobile/board_test.js new file mode 100644 index 00000000000..8675fe88bf1 --- /dev/null +++ b/addons/board/static/tests/mobile/board_test.js @@ -0,0 +1,81 @@ +/** @odoo-module **/ + +import { getFixture } from "@web/../tests/helpers/utils"; +import { makeView, setupViewRegistries } from "@web/../tests/views/helpers"; + +let serverData; +let target; + +QUnit.module("Board", (hooks) => { + hooks.beforeEach(async () => { + target = getFixture(); + + serverData = { + models: { + board: { + fields: {}, + records: [], + }, + partner: { + fields: { + foo: { + string: "Foo", + type: "char", + default: "My little Foo Value", + searchable: true, + }, + }, + records: [ + { + id: 1, + foo: "yop", + }, + ], + }, + }, + views: { + "partner,100000001,form": "
", + "partner,100000002,search": "", + }, + }; + setupViewRegistries(); + }); + + QUnit.module("BoardView"); + + QUnit.test("can't switch views in the dashboard", async (assert) => { + serverData.views["partner,4,list"] = ''; + + await makeView({ + serverData, + type: "form", + resModel: "board", + arch: ` + + + + + + + `, + mockRPC(route, args) { + if (route === "/web/action/load") { + return Promise.resolve({ + res_model: "partner", + views: [ + [4, "list"], + [5, "form"], + ], + }); + } + }, + }); + + assert.containsNone(target, ".o-dashboard-header", "Couldn't allow user to Change layout"); + assert.containsOnce(target, ".o-dashboard-layout-1", "The display layout is force to 1"); + assert.isNotVisible( + target.querySelector(".o-dashboard-action .o_control_panel"), + "views in the dashboard do not have a control panel" + ); + }); +});