Public release from ruodoo-project: 19.0 - 2026-05-10 21:19:01 UTC

This commit is contained in:
CI Publish Bot
2026-05-10 21:19:11 +00:00
commit cbf9e6e6d6
1213 changed files with 183945 additions and 0 deletions

View File

@ -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,
},
};