oca-ocb-report/odoo-bringout-oca-ocb-spreadsheet/spreadsheet/static/src/ir_ui_menu/index.js
2025-08-29 15:20:51 +02:00

73 lines
2.7 KiB
JavaScript

/** @odoo-module */
import { registry } from "@web/core/registry";
import spreadsheet from "@spreadsheet/o_spreadsheet/o_spreadsheet_extended";
import IrMenuPlugin from "./ir_ui_menu_plugin";
import {
isMarkdownIrMenuIdLink,
isMarkdownIrMenuXmlLink,
isMarkdownViewLink,
parseIrMenuXmlLink,
OdooViewLinkCell,
OdooMenuLinkCell,
parseViewLink,
parseIrMenuIdLink,
} from "./odoo_menu_link_cell";
const { cellRegistry, corePluginRegistry } = spreadsheet.registries;
const { parseMarkdownLink } = spreadsheet.helpers;
corePluginRegistry.add("ir_ui_menu_plugin", IrMenuPlugin);
export const spreadsheetLinkMenuCellService = {
dependencies: ["menu"],
start(env) {
function _getIrMenuByXmlId(xmlId) {
const menu = env.services.menu.getAll().find((menu) => menu.xmlid === xmlId);
if (!menu) {
throw new Error(
`Menu ${xmlId} not found. You may not have the required access rights.`
);
}
return menu;
}
cellRegistry
.add("OdooMenuIdLink", {
sequence: 65,
match: isMarkdownIrMenuIdLink,
createCell: (id, content, properties, sheetId, getters) => {
const { url } = parseMarkdownLink(content);
const menuId = parseIrMenuIdLink(url);
const menuName = env.services.menu.getMenu(menuId).name;
return new OdooMenuLinkCell(id, content, menuId, menuName, properties);
},
})
.add("OdooMenuXmlLink", {
sequence: 66,
match: isMarkdownIrMenuXmlLink,
createCell: (id, content, properties, sheetId, getters) => {
const { url } = parseMarkdownLink(content);
const xmlId = parseIrMenuXmlLink(url);
const menuId = _getIrMenuByXmlId(xmlId).id;
const menuName = _getIrMenuByXmlId(xmlId).name;
return new OdooMenuLinkCell(id, content, menuId, menuName, properties);
},
})
.add("OdooIrFilterLink", {
sequence: 67,
match: isMarkdownViewLink,
createCell: (id, content, properties, sheetId, getters) => {
const { url } = parseMarkdownLink(content);
const actionDescription = parseViewLink(url);
return new OdooViewLinkCell(id, content, actionDescription, properties);
},
});
return true;
},
};
registry.category("services").add("spreadsheetLinkMenuCell", spreadsheetLinkMenuCellService);