Files
public/translation_helper/static/src/menus/menu_translation_button.js

93 lines
2.7 KiB
JavaScript

/** @odoo-module **/
import {Component, useState} from "@odoo/owl";
import {useOwnedDialogs, useService} from "@web/core/utils/hooks";
import {TranslationDialog} from "@web/views/fields/translation_dialog";
/**
* @param {Object} env - OWL environment from the component (this.env)
* @returns {Function} openTranslationDialog
*/
export function useTranslationDialog(env) {
const addDialog = useOwnedDialogs();
async function openTranslationDialog({name, id}) {
addDialog(TranslationDialog, {
fieldName: "name",
resId: id,
resModel: "ir.ui.menu",
userLanguageValue: name || "",
isComingFromTranslationAlert: false,
userUserCurrentLang: true,
onSave: async () => {
env.bus.trigger("CLEAR-CACHES");
await env.services.action.doAction({
type: "ir.actions.client",
tag: "reload",
});
},
});
}
return openTranslationDialog;
}
export class MenuTranslationButton extends Component {
setup() {
this.orm = useService("orm");
this.state = useState({record: {}});
this.translationDialog = useTranslationDialog(this.env);
}
async onClick() {
const xmlId = this.props.menuXmlId;
const [module, name] = xmlId.split(".");
if (!module || !name) {
console.error("Неверный формат menuXmlId");
return;
}
try {
const [menuIdRecord] = await this.orm.searchRead(
"ir.model.data",
[
["model", "=", "ir.ui.menu"],
["name", "=", name],
["module", "=", module],
],
["res_id"]
);
if (!menuIdRecord) {
console.error("Меню не найдено по XML ID");
return;
}
const menuId = menuIdRecord.res_id;
const [menuRecord] = await this.orm.searchRead("ir.ui.menu", [["id", "=", menuId]], ["id", "name", "action"]);
if (!menuRecord) {
console.error("Запись меню не найдена");
return;
}
this.state.record = menuRecord;
this.translationDialog({
name: menuRecord.name,
id: menuRecord.id,
});
} catch (error) {
console.error("Ошибка при получении меню:", error);
}
}
}
MenuTranslationButton.template = "translation_helper.MenuTranslationButton";
MenuTranslationButton.props = {
menuXmlId: {
type: String,
optional: false,
},
};