From 9fd3fc588977947c6b36daf4146e10368e5a3986 Mon Sep 17 00:00:00 2001 From: Achraf Date: Thu, 4 Apr 2024 11:42:39 +0000 Subject: [PATCH] [FIX] web: Use kanban-menu template in arch kanban_arch_parser This commit modifies the way kanban_arch_parser retrieves `colorField`. Previously, the parser tried to retrieve only `colorField` (the `data-field` attribute of `.oe_kanban_colorpicker`) from `kanban-box`. Except that in most cases `.oe_kanban_colorpicker` is defined in `kanban-menu` and not `kanban-box`. for example: https://github.com/odoo/odoo/blob/31107fb4cc9cf5dc2da21cbfef58dae722c73922/addons/crm/views/crm_lead_views.xml#L554-L559 https://github.com/odoo/odoo/blob/c6978c3fc4f828d970d45ebdaa4a35b44f3d09ce/addons/project/views/project_task_views.xml#L544-L550 https://github.com/odoo/odoo/blob/c6978c3fc4f828d970d45ebdaa4a35b44f3d09ce/addons/project_todo/views/project_task_views.xml#L28-L31 etc. As a result, this code was always ignored and we always fallbacked on `||"color"`. ```js const colorField = (colorEl && colorEl.getAttribute("data-field")) || "color"; ``` Now `KanbanArchParser` checks both `kanban-box` and `kanban-menu` and finally fallbacks to `color`. Part-of: odoo/odoo#161645 --- .../src/views/kanban/kanban_arch_parser.js | 2 +- .../views/kanban/kanban_arch_parser_tests.js | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 addons/web/static/tests/views/kanban/kanban_arch_parser_tests.js diff --git a/addons/web/static/src/views/kanban/kanban_arch_parser.js b/addons/web/static/src/views/kanban/kanban_arch_parser.js index 9825b256120..0de83a740a6 100644 --- a/addons/web/static/src/views/kanban/kanban_arch_parser.js +++ b/addons/web/static/src/views/kanban/kanban_arch_parser.js @@ -154,7 +154,7 @@ export class KanbanArchParser { const cardColorEl = cardDoc.querySelector("[color]"); const cardColorField = cardColorEl && cardColorEl.getAttribute("color"); - const colorEl = cardDoc.querySelector(".oe_kanban_colorpicker[data-field]"); + const colorEl = xmlDoc.querySelector("templates .oe_kanban_colorpicker[data-field]"); const colorField = (colorEl && colorEl.getAttribute("data-field")) || "color"; if (!defaultOrder.length && handleField) { diff --git a/addons/web/static/tests/views/kanban/kanban_arch_parser_tests.js b/addons/web/static/tests/views/kanban/kanban_arch_parser_tests.js new file mode 100644 index 00000000000..120f4e1df9d --- /dev/null +++ b/addons/web/static/tests/views/kanban/kanban_arch_parser_tests.js @@ -0,0 +1,36 @@ +/** @odoo-module **/ + +import { KanbanArchParser } from "@web/views/kanban/kanban_arch_parser"; +import { parseXML } from "@web/core/utils/xml"; + +function parseArch(arch, options = {}) { + const parser = new KanbanArchParser(); + const xmlDoc = parseXML(arch); + return parser.parse(xmlDoc, { fake: {name: { string: "Name", type: "char" },} }, "fake"); +} +QUnit.module("KanbanView - ArchParser"); + +QUnit.test("oe_kanban_colorpicker in kanban-menu and kanban-box", (assert) => { + const archInfo = parseArch(` + + + +