[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) <aab@odoo.com>
Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
This commit is contained in:
Lucas Perais
2022-11-21 15:56:52 +01:00
parent 85916dab1b
commit 42be866e9f
@@ -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],