@u-wave/react-translate
Version:
Small translations for React apps with @u-wave/translate.
87 lines (83 loc) • 2.69 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import { jsx } from 'react/jsx-runtime';
function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function (n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, _extends.apply(null, arguments);
}
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (e.includes(n)) continue;
t[n] = r[n];
}
return t;
}
var _excluded = ["i18nKey"];
var TranslateContext = /*#__PURE__*/React.createContext();
var Provider = TranslateContext.Provider,
Consumer = TranslateContext.Consumer;
function TranslateProvider(_ref) {
var translator = _ref.translator,
children = _ref.children;
return /*#__PURE__*/jsx(Provider, {
value: translator,
children: children
});
}
/* istanbul ignore next */
if (process.env.NODE_ENV !== 'production') {
TranslateProvider.propTypes = {
translator: PropTypes.shape({
t: PropTypes.func.isRequired,
parts: PropTypes.func.isRequired
}).isRequired,
children: PropTypes.node.isRequired
};
}
var translate = function translate() {
return function (Component) {
return function (props) {
return /*#__PURE__*/jsx(Consumer, {
children: function children(translator) {
return /*#__PURE__*/jsx(Component, _extends({}, props, {
// eslint-disable-line react/jsx-props-no-spreading
t: translator.t
}));
}
});
};
};
};
var useTranslator = function useTranslator() {
return React.useContext(TranslateContext);
};
function Interpolate(_ref2) {
var i18nKey = _ref2.i18nKey,
props = _objectWithoutPropertiesLoose(_ref2, _excluded);
return /*#__PURE__*/jsx(Consumer, {
children: function children(translator) {
return (
/*#__PURE__*/
// Manually use createElement so we're not passing an array as children to React.
// Passing the array would require us to add keys to each interpolated element
// but we know that the shape will stay the same so it's safe to spread it and act
// as if they were all written as separate children by the user.
React.createElement.apply(React, [React.Fragment, {}].concat(translator.parts(i18nKey, props)))
);
}
});
}
/* istanbul ignore next */
if (process.env.NODE_ENV !== 'production') {
Interpolate.propTypes = {
i18nKey: PropTypes.string.isRequired
};
}
export { Interpolate, TranslateProvider, translate, useTranslator };