UNPKG

@u-wave/react-translate

Version:

Small translations for React apps with @u-wave/translate.

92 lines (87 loc) 2.93 kB
'use strict'; 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;