ra-core
Version:
Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React
44 lines • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useTranslatable = void 0;
var react_1 = require("react");
var core_1 = require("../core");
var useLocaleState_1 = require("./useLocaleState");
var useTranslateLabel_1 = require("./useTranslateLabel");
/**
* Hook supplying the logic to translate a field value in multiple languages.
*
* @param options The hook options
* @param {string} options.defaultLocale The locale of the default selected locale. Defaults to 'en'.
* @param {string[]} options.locales An array of the supported locales. Each is an object with a locale and a name property. For example { locale: 'en', name: 'English' }.
*
* @returns
* An object with following properties and methods:
* - selectedLocale: The locale of the currently selected locale
* - locales: An array of the supported locales
* - getLabel: A function which returns the translated label for the given field
* - getSource: A function which returns the source for the given field
* - selectLocale: A function which set the selected locale
*/
var useTranslatable = function (options) {
var localeFromUI = (0, useLocaleState_1.useLocaleState)()[0];
var _a = options.defaultLocale, defaultLocale = _a === void 0 ? localeFromUI : _a, locales = options.locales;
var _b = (0, react_1.useState)(defaultLocale), selectedLocale = _b[0], setSelectedLocale = _b[1];
var resource = (0, core_1.useResourceContext)({});
var translateLabel = (0, useTranslateLabel_1.useTranslateLabel)();
var context = (0, react_1.useMemo)(function () { return ({
getSource: function (source, locale) {
if (locale === void 0) { locale = selectedLocale; }
return "".concat(source, ".").concat(locale);
},
getLabel: function (source, label) {
return translateLabel({ source: source, resource: resource, label: label });
},
locales: locales,
selectedLocale: selectedLocale,
selectLocale: setSelectedLocale,
}); }, [locales, resource, selectedLocale, translateLabel]);
return context;
};
exports.useTranslatable = useTranslatable;
//# sourceMappingURL=useTranslatable.js.map