@u-wave/react-translate
Version:
Small translations for React apps with @u-wave/translate.
92 lines (87 loc) • 2.93 kB
JavaScript
;
var React = require('react');
var PropTypes = require('prop-types');
var jsxRuntime = require('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.default.createContext();
var Provider = TranslateContext.Provider,
Consumer = TranslateContext.Consumer;
function TranslateProvider(_ref) {
var translator = _ref.translator,
children = _ref.children;
return /*#__PURE__*/jsxRuntime.jsx(Provider, {
value: translator,
children: children
});
}
/* istanbul ignore next */
if (process.env.NODE_ENV !== 'production') {
TranslateProvider.propTypes = {
translator: PropTypes.default.shape({
t: PropTypes.default.func.isRequired,
parts: PropTypes.default.func.isRequired
}).isRequired,
children: PropTypes.default.node.isRequired
};
}
var translate = function translate() {
return function (Component) {
return function (props) {
return /*#__PURE__*/jsxRuntime.jsx(Consumer, {
children: function children(translator) {
return /*#__PURE__*/jsxRuntime.jsx(Component, _extends({}, props, {
// eslint-disable-line react/jsx-props-no-spreading
t: translator.t
}));
}
});
};
};
};
var useTranslator = function useTranslator() {
return React.default.useContext(TranslateContext);
};
function Interpolate(_ref2) {
var i18nKey = _ref2.i18nKey,
props = _objectWithoutPropertiesLoose(_ref2, _excluded);
return /*#__PURE__*/jsxRuntime.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.default.createElement.apply(React.default, [React.default.Fragment, {}].concat(translator.parts(i18nKey, props)))
);
}
});
}
/* istanbul ignore next */
if (process.env.NODE_ENV !== 'production') {
Interpolate.propTypes = {
i18nKey: PropTypes.default.string.isRequired
};
}
exports.Interpolate = Interpolate;
exports.TranslateProvider = TranslateProvider;
exports.translate = translate;
exports.useTranslator = useTranslator;