[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
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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(`
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<ul class="oe_kanban_colorpicker" data-field="kanban_menu_colorpicker" role="menu"/>
|
||||
</t>
|
||||
<t t-name="kanban-box"/>
|
||||
</templates>
|
||||
</kanban>
|
||||
`);
|
||||
assert.strictEqual(archInfo.colorField, "kanban_menu_colorpicker", "colorField should be 'kanban_menu_colorpicker'");
|
||||
const archInfo_1 = parseArch(`
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-menu"/>
|
||||
<t t-name="kanban-box">
|
||||
<ul class="oe_kanban_colorpicker" data-field="kanban_box_color" role="menu"/>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
`);
|
||||
assert.strictEqual(archInfo_1.colorField, "kanban_box_color", "colorField should be 'kanban_box_color'");
|
||||
});
|
||||
Reference in New Issue
Block a user