im inheriting the Field fiel js from "@web/views/fields/field"; and it contain a function that i want to inherit
Field.parseFieldNode = function (node, models, modelName, viewType, jsClass) { const name = node.getAttribute("name"); const widget = node.getAttribute("widget");const fields = models[modelName];
if (!fields[name]) { throw new Error(`"${modelName}"."${name}" field is undefined.`);}
const field = getFieldFromRegistry(fields[name].type, widget, viewType, jsClass);
const fieldInfo = {name,
type: fields[name].type,
viewType,
widget,
field,
context: "{}",string: fields[name].string,
help: undefined,
onChange: false,
forceSave: false,
options: {}, decorations: {}, attrs: {},domain: undefined,
};
for (const attr of ["invisible", "column_invisible", "readonly", "required"]) {fieldInfo[attr] = node.getAttribute(attr);
if (fieldInfo[attr] === "True") { if (attr === "column_invisible") {fieldInfo.invisible = "True";
}
} else if (fieldInfo[attr] === null && fields[name][attr]) {fieldInfo[attr] = "True";
}
}
for (const { name, value } of node.attributes) { if (["name", "widget"].includes(name)) {// avoid adding name and widget to attrs
continue;
}
if (["context", "string", "help", "domain"].includes(name)) {fieldInfo[name] = value;
} else if (name === "on_change") {fieldInfo.onChange = archParseBoolean(value);
} else if (name === "options") {fieldInfo.options = evaluateExpr(value);
} else if (name === "force_save") {fieldInfo.forceSave = archParseBoolean(value);
} else if (name.startsWith("decoration-")) {// prepare field decorations
fieldInfo.decorations[name.replace("decoration-", "")] = value; } else if (!name.startsWith("t-att")) {// all other (non dynamic) attributes
fieldInfo.attrs[name] = value;
}
}
if (name === "id") {fieldInfo.readonly = "True";
}
if (widget === "handle") {fieldInfo.isHandle = true;
}
if (X2M_TYPES.includes(fields[name].type)) { const views = {};let relatedFields = fieldInfo.field.relatedFields;
if (relatedFields) { if (relatedFields instanceof Function) {relatedFields = relatedFields(fieldInfo);
}
for (const relatedField of relatedFields) { if (!("readonly" in relatedField)) {relatedField.readonly = true;
}
}
relatedFields = Object.fromEntries(relatedFields.map((f) => [f.name, f]));
views.default = { fieldNodes: relatedFields, fields: relatedFields }; if (!fieldInfo.field.useSubView) {fieldInfo.viewMode = "default";
}
}
for (const child of node.children) {const viewType = child.tagName === "tree" ? "list" : child.tagName;
const { ArchParser } = viewRegistry.get(viewType);// We copy and hence isolate the subview from the main view's tree
// This way, the subview's tree is autonomous and CSS selectors will work normally
const childCopy = child.cloneNode(true);
const archInfo = new ArchParser().parse(childCopy, models, fields[name].relation);
views[viewType] = {...archInfo,
limit: archInfo.limit || 40,
fields: models[fields[name].relation],
};
}
let viewMode = node.getAttribute("mode"); if (viewMode) { if (viewMode.split(",").length !== 1) {viewMode = isSmall() ? "kanban" : "list";
} else {viewMode = viewMode === "tree" ? "list" : viewMode;
}
} else { if (views.list && !views.kanban) {viewMode = "list";
} else if (!views.list && views.kanban) {viewMode = "kanban";
} else if (views.list && views.kanban) {viewMode = isSmall() ? "kanban" : "list";
}
}
if (viewMode) {fieldInfo.viewMode = viewMode;
}
if (Object.keys(views).length) {fieldInfo.relatedFields = models[fields[name].relation];
fieldInfo.views = views;
}
}
return fieldInfo;
};
is there a way to inherit it without crashing something in it?