Public release from ruodoo-project: 19.0 - 2026-05-10 21:19:01 UTC
This commit is contained in:
@ -0,0 +1,92 @@
|
||||
/** @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,
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user