76 lines
2.6 KiB
JavaScript
76 lines
2.6 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { registry } from "@web/core/registry";
|
|
import { BoardController } from "./board_controller";
|
|
import { visitXML } from "@web/core/utils/xml";
|
|
import { Domain } from "@web/core/domain";
|
|
export class BoardArchParser {
|
|
parse(arch, customViewId) {
|
|
let nextId = 1;
|
|
const archInfo = {
|
|
title: null,
|
|
layout: null,
|
|
colNumber: 0,
|
|
isEmpty: true,
|
|
columns: [{ actions: [] }, { actions: [] }, { actions: [] }],
|
|
customViewId,
|
|
};
|
|
let currentIndex = -1;
|
|
|
|
visitXML(arch, (node) => {
|
|
switch (node.tagName) {
|
|
case "form":
|
|
archInfo.title = node.getAttribute("string");
|
|
break;
|
|
case "board":
|
|
archInfo.layout = node.getAttribute("style");
|
|
archInfo.colNumber = archInfo.layout.split("-").length;
|
|
break;
|
|
case "column":
|
|
currentIndex++;
|
|
break;
|
|
case "action": {
|
|
archInfo.isEmpty = false;
|
|
const isFolded = Boolean(
|
|
node.hasAttribute("fold") ? parseInt(node.getAttribute("fold"), 10) : 0
|
|
);
|
|
const action = {
|
|
id: nextId++,
|
|
title: node.getAttribute("string"),
|
|
actionId: parseInt(node.getAttribute("name"), 10),
|
|
viewMode: node.getAttribute("view_mode"),
|
|
context: node.getAttribute("context"),
|
|
isFolded,
|
|
};
|
|
if (node.hasAttribute("domain")) {
|
|
const domain = node.getAttribute("domain");
|
|
action.domain = new Domain(domain).toList();
|
|
// so it can be serialized when reexporting board xml
|
|
action.domain.toString = () => node.getAttribute("domain");
|
|
}
|
|
archInfo.columns[currentIndex].actions.push(action);
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
return archInfo;
|
|
}
|
|
}
|
|
|
|
export const boardView = {
|
|
type: "form",
|
|
Controller: BoardController,
|
|
|
|
props: (genericProps, view) => {
|
|
const { arch, info } = genericProps;
|
|
const board = new BoardArchParser().parse(arch, info.customViewId);
|
|
return {
|
|
...genericProps,
|
|
className: "o_dashboard",
|
|
board,
|
|
};
|
|
},
|
|
};
|
|
|
|
registry.category("views").add("board", boardView);
|