93 lines
2.7 KiB
JavaScript
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,
|
|
},
|
|
};
|