odoo18/addons/web/static/src/views/fields/translation_button.js

64 lines
1.7 KiB
JavaScript

import { localization } from "@web/core/l10n/localization";
import { useOwnedDialogs } from "@web/core/utils/hooks";
import { user } from "@web/core/user";
import { TranslationDialog } from "./translation_dialog";
import { Component } from "@odoo/owl";
/**
* Prepares a function that will open the dialog that allows to edit translation
* values for a given field.
*
* It is mainly a factorization of the feature that is also used
* in legacy_fields. We expect it to be fully implemented in TranslationButton
* when legacy code is removed.
*/
export function useTranslationDialog() {
const addDialog = useOwnedDialogs();
async function openTranslationDialog({ record, fieldName }) {
const saved = await record.save();
if (!saved) {
return;
}
const { resModel, resId } = record;
addDialog(TranslationDialog, {
fieldName: fieldName,
resId: resId,
resModel: resModel,
userLanguageValue: record.data[fieldName] || "",
isComingFromTranslationAlert: false,
onSave: async () => {
await record.load();
},
});
}
return openTranslationDialog;
}
export class TranslationButton extends Component {
static template = "web.TranslationButton";
static props = {
fieldName: { type: String },
record: { type: Object },
};
setup() {
this.translationDialog = useTranslationDialog();
}
get isMultiLang() {
return localization.multiLang;
}
get lang() {
return new Intl.Locale(user.lang).language.toUpperCase();
}
onClick() {
const { fieldName, record } = this.props;
this.translationDialog({ fieldName, record });
}
}