From 42be866e9fa2eb94f057acf8da5fff3c6789079e Mon Sep 17 00:00:00 2001 From: Lucas Perais Date: Fri, 28 Oct 2022 08:23:45 +0000 Subject: [PATCH] [FIX] web: listArchParser is more extensible Before this commit, the listArchParser did not offer ways to be extended. Specifically, when extracting fields and widgets, there was no way to add information from the outside. After this commit, the functions that parse fields, widgets and button are methods of the class hence offering extension points. Specifically, studio uses those to add information. closes odoo/odoo#105970 X-original-commit: 4c1e0ba228f294c7bd5dd067431a1b660960d8b5 Related: odoo/enterprise#34074 Signed-off-by: Aaron Bohy (aab) Signed-off-by: Lucas Perais (lpe) --- .../static/src/views/list/list_arch_parser.js | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/views/list/list_arch_parser.js b/addons/web/static/src/views/list/list_arch_parser.js index 38f26d9a331..dada4c7baaf 100644 --- a/addons/web/static/src/views/list/list_arch_parser.js +++ b/addons/web/static/src/views/list/list_arch_parser.js @@ -37,6 +37,22 @@ export class GroupListArchParser extends XMLParser { } export class ListArchParser extends XMLParser { + isColumnVisible(columnInvisibleModifier) { + return columnInvisibleModifier !== true; + } + + parseFieldNode(node, models, modelName) { + return Field.parseFieldNode(node, models, modelName, "list"); + } + + parseWidgetNode(node, models, modelName) { + return Widget.parseWidgetNode(node); + } + + processButton(node) { + return processButton(node); + } + parse(arch, models, modelName) { const xmlDoc = this.parseXML(arch); const fieldNodes = {}; @@ -62,9 +78,9 @@ export class ListArchParser extends XMLParser { } if (node.tagName === "button") { const modifiers = JSON.parse(node.getAttribute("modifiers") || "{}"); - if (modifiers.column_invisible !== true) { + if (this.isColumnVisible(modifiers.column_invisible)) { const button = { - ...processButton(node), + ...this.processButton(node), defaultRank: "btn-link", type: "button", id: buttonId++, @@ -82,7 +98,7 @@ export class ListArchParser extends XMLParser { } } } else if (node.tagName === "field") { - const fieldInfo = Field.parseFieldNode(node, models, modelName, "list"); + const fieldInfo = this.parseFieldNode(node, models, modelName); fieldNodes[fieldInfo.name] = fieldInfo; node.setAttribute("field_id", fieldInfo.name); if (fieldInfo.widget === "handle") { @@ -93,7 +109,7 @@ export class ListArchParser extends XMLParser { models[modelName], fieldInfo.FieldComponent.fieldDependencies ); - if (fieldInfo.modifiers.column_invisible !== true) { + if (this.isColumnVisible(fieldInfo.modifiers.column_invisible)) { const label = fieldInfo.FieldComponent.label; columns.push({ ...fieldInfo, @@ -107,7 +123,7 @@ export class ListArchParser extends XMLParser { } return false; } else if (node.tagName === "widget") { - const widgetInfo = Widget.parseWidgetNode(node); + const widgetInfo = this.parseWidgetNode(node); addFieldDependencies( activeFields, models[modelName],