react-i18next 11.3.3 → 11.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,8 +5,6 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.usedI18nextProvider = usedI18nextProvider;
9
- exports.getHasUsedI18nextProvider = getHasUsedI18nextProvider;
10
8
  exports.setDefaults = setDefaults;
11
9
  exports.getDefaults = getDefaults;
12
10
  exports.setI18n = setI18n;
@@ -25,7 +23,7 @@ var _react = _interopRequireDefault(require("react"));
25
23
 
26
24
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
27
25
 
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
26
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29
27
 
30
28
  var defaultOptions = {
31
29
  bindI18n: 'languageChanged',
@@ -38,20 +36,11 @@ var defaultOptions = {
38
36
  useSuspense: true
39
37
  };
40
38
  var i18nInstance;
41
- var hasUsedI18nextProvider;
42
39
 
43
40
  var I18nContext = _react["default"].createContext();
44
41
 
45
42
  exports.I18nContext = I18nContext;
46
43
 
47
- function usedI18nextProvider(used) {
48
- hasUsedI18nextProvider = used;
49
- }
50
-
51
- function getHasUsedI18nextProvider() {
52
- return hasUsedI18nextProvider;
53
- }
54
-
55
44
  function setDefaults() {
56
45
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
57
46
  defaultOptions = _objectSpread({}, defaultOptions, {}, options);
@@ -61,9 +50,7 @@ function getDefaults() {
61
50
  return defaultOptions;
62
51
  }
63
52
 
64
- var ReportNamespaces =
65
- /*#__PURE__*/
66
- function () {
53
+ var ReportNamespaces = /*#__PURE__*/function () {
67
54
  function ReportNamespaces() {
68
55
  (0, _classCallCheck2["default"])(this, ReportNamespaces);
69
56
  this.usedNamespaces = {};
@@ -12,12 +12,11 @@ var _context = require("./context");
12
12
  function useSSR(initialI18nStore, initialLanguage) {
13
13
  var props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
14
14
  var i18nFromProps = props.i18n;
15
- var ReactI18nContext = (0, _react.useContext)(_context.I18nContext);
16
15
 
17
- var _ref = (0, _context.getHasUsedI18nextProvider)() ? ReactI18nContext || {} : {},
16
+ var _ref = (0, _react.useContext)(_context.I18nContext) || {},
18
17
  i18nFromContext = _ref.i18n;
19
18
 
20
- var i18n = i18nFromProps || i18nFromContext || (0, _context.getI18n)(); // opt out if is a cloned instance, eg. created by i18next-express-middleware on request
19
+ var i18n = i18nFromProps || i18nFromContext || (0, _context.getI18n)(); // opt out if is a cloned instance, eg. created by i18next-http-middleware on request
21
20
  // -> do not set initial stuff on server side
22
21
 
23
22
  if (i18n.options && i18n.options.isClone) return; // nextjs / SSR: getting data from next.js or other ssr stack
@@ -19,15 +19,14 @@ var _utils = require("./utils");
19
19
 
20
20
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
21
21
 
22
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
23
23
 
24
24
  function useTranslation(ns) {
25
25
  var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
26
26
  // assert we have the needed i18nInstance
27
27
  var i18nFromProps = props.i18n;
28
- var ReactI18nContext = (0, _react.useContext)(_context.I18nContext);
29
28
 
30
- var _ref = (0, _context.getHasUsedI18nextProvider)() ? ReactI18nContext || {} : {},
29
+ var _ref = (0, _react.useContext)(_context.I18nContext) || {},
31
30
  i18nFromContext = _ref.i18n,
32
31
  defaultNSFromContext = _ref.defaultNS;
33
32
 
@@ -73,20 +72,21 @@ function useTranslation(ns) {
73
72
  setT = _useState2[1]; // seems we can't have functions as value -> wrap it in obj
74
73
 
75
74
 
75
+ var isMounted = (0, _react.useRef)(true);
76
76
  (0, _react.useEffect)(function () {
77
- var isMounted = true;
78
77
  var bindI18n = i18nOptions.bindI18n,
79
- bindI18nStore = i18nOptions.bindI18nStore; // if not ready and not using suspense load the namespaces
78
+ bindI18nStore = i18nOptions.bindI18nStore;
79
+ isMounted.current = true; // if not ready and not using suspense load the namespaces
80
80
  // in side effect and do not call resetT if unmounted
81
81
 
82
82
  if (!ready && !useSuspense) {
83
83
  (0, _utils.loadNamespaces)(i18n, namespaces, function () {
84
- if (isMounted) setT(getT());
84
+ if (isMounted.current) setT(getT());
85
85
  });
86
86
  }
87
87
 
88
88
  function boundReset() {
89
- if (isMounted) setT(getT());
89
+ if (isMounted.current) setT(getT());
90
90
  } // bind events to trigger change, like languageChanged
91
91
 
92
92
 
@@ -94,7 +94,7 @@ function useTranslation(ns) {
94
94
  if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset); // unbinding on unmount
95
95
 
96
96
  return function () {
97
- isMounted = false;
97
+ isMounted.current = false;
98
98
  if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {
99
99
  return i18n.off(e, boundReset);
100
100
  });
@@ -115,7 +115,7 @@ function useTranslation(ns) {
115
115
 
116
116
  throw new Promise(function (resolve) {
117
117
  (0, _utils.loadNamespaces)(i18n, namespaces, function () {
118
- setT(getT());
118
+ if (isMounted.current) setT(getT());
119
119
  resolve();
120
120
  });
121
121
  });
@@ -21,7 +21,7 @@ var _utils = require("./utils");
21
21
 
22
22
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
23
23
 
24
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
24
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
25
25
 
26
26
  function withSSR() {
27
27
  return function Extend(WrappedComponent) {
@@ -21,7 +21,7 @@ var _utils = require("./utils");
21
21
 
22
22
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
23
23
 
24
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
24
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
25
25
 
26
26
  function withTranslation(ns) {
27
27
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -1,11 +1,10 @@
1
- import React from 'react';
2
- import { I18nContext, usedI18nextProvider } from './context';
1
+ import { createElement } from 'react';
2
+ import { I18nContext } from './context';
3
3
  export function I18nextProvider(_ref) {
4
4
  var i18n = _ref.i18n,
5
5
  defaultNS = _ref.defaultNS,
6
6
  children = _ref.children;
7
- usedI18nextProvider(true);
8
- return React.createElement(I18nContext.Provider, {
7
+ return createElement(I18nContext.Provider, {
9
8
  value: {
10
9
  i18n: i18n,
11
10
  defaultNS: defaultNS
package/dist/es/Trans.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  import _typeof from "@babel/runtime/helpers/typeof";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
4
 
5
5
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
6
6
 
7
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8
8
 
9
9
  import React, { useContext } from 'react';
10
10
  import HTML from 'html-parse-stringify2';
11
- import { getI18n, getHasUsedI18nextProvider, I18nContext, getDefaults } from './context';
11
+ import { getI18n, I18nContext, getDefaults } from './context';
12
12
  import { warn, warnOnce } from './utils';
13
13
 
14
14
  function hasChildren(node) {
@@ -31,44 +31,63 @@ function getAsArray(data) {
31
31
  return Array.isArray(data) ? data : [data];
32
32
  }
33
33
 
34
- export function nodesToString(startingString, children, index, i18nOptions) {
34
+ function mergeProps(source, target) {
35
+ var newTarget = _objectSpread({}, target); // overwrite source.props when target.props already set
36
+
37
+
38
+ newTarget.props = Object.assign(source.props, target.props);
39
+ return newTarget;
40
+ }
41
+
42
+ export function nodesToString(children, i18nOptions) {
35
43
  if (!children) return '';
36
- var stringNode = startingString;
44
+ var stringNode = ''; // do not use `React.Children.toArray`, will fail at object children
45
+
37
46
  var childrenArray = getAsArray(children);
38
- var keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];
39
- childrenArray.forEach(function (child, i) {
40
- var elementKey = "".concat(i);
47
+ var keepArray = i18nOptions.transKeepBasicHtmlNodesFor || []; // e.g. lorem <br/> ipsum {{ messageCount, format }} dolor <strong>bold</strong> amet
41
48
 
49
+ childrenArray.forEach(function (child, childIndex) {
42
50
  if (typeof child === 'string') {
43
- stringNode = "".concat(stringNode).concat(child);
44
- } else if (hasChildren(child)) {
45
- var elementTag = keepArray.indexOf(child.type) > -1 && Object.keys(child.props).length === 1 && typeof hasChildren(child) === 'string' ? child.type : elementKey;
46
-
47
- if (child.props && child.props.i18nIsDynamicList) {
48
- // we got a dynamic list like "<ul>{['a', 'b'].map(item => ( <li key={item}>{item}</li> ))}</ul>""
49
- // the result should be "<0></0>" and not "<0><0>a</0><1>b</1></0>"
50
- stringNode = "".concat(stringNode, "<").concat(elementTag, "></").concat(elementTag, ">");
51
- } else {
52
- // regular case mapping the inner children
53
- stringNode = "".concat(stringNode, "<").concat(elementTag, ">").concat(nodesToString('', getChildren(child), i + 1, i18nOptions), "</").concat(elementTag, ">");
54
- }
51
+ // actual e.g. lorem
52
+ // expected e.g. lorem
53
+ stringNode += "".concat(child);
55
54
  } else if (React.isValidElement(child)) {
56
- if (keepArray.indexOf(child.type) > -1 && Object.keys(child.props).length === 0) {
57
- stringNode = "".concat(stringNode, "<").concat(child.type, "/>");
55
+ var childPropsCount = Object.keys(child.props).length;
56
+ var shouldKeepChild = keepArray.indexOf(child.type) > -1;
57
+ var childChildren = child.props.children;
58
+
59
+ if (!childChildren && shouldKeepChild && childPropsCount === 0) {
60
+ // actual e.g. lorem <br/> ipsum
61
+ // expected e.g. lorem <br/> ipsum
62
+ stringNode += "<".concat(child.type, "/>");
63
+ } else if (!childChildren && (!shouldKeepChild || childPropsCount !== 0)) {
64
+ // actual e.g. lorem <hr className="test" /> ipsum
65
+ // expected e.g. lorem <0></0> ipsum
66
+ stringNode += "<".concat(childIndex, "></").concat(childIndex, ">");
67
+ } else if (child.props.i18nIsDynamicList) {
68
+ // we got a dynamic list like
69
+ // e.g. <ul i18nIsDynamicList>{['a', 'b'].map(item => ( <li key={item}>{item}</li> ))}</ul>
70
+ // expected e.g. "<0></0>", not e.g. "<0><0>a</0><1>b</1></0>"
71
+ stringNode += "<".concat(childIndex, "></").concat(childIndex, ">");
72
+ } else if (shouldKeepChild && childPropsCount === 1 && typeof childChildren === 'string') {
73
+ // actual e.g. dolor <strong>bold</strong> amet
74
+ // expected e.g. dolor <strong>bold</strong> amet
75
+ stringNode += "<".concat(child.type, ">").concat(childChildren, "</").concat(child.type, ">");
58
76
  } else {
59
- stringNode = "".concat(stringNode, "<").concat(elementKey, "></").concat(elementKey, ">");
77
+ // regular case mapping the inner children
78
+ var content = nodesToString(childChildren, i18nOptions);
79
+ stringNode += "<".concat(childIndex, ">").concat(content, "</").concat(childIndex, ">");
60
80
  }
61
81
  } else if (_typeof(child) === 'object') {
62
- var clone = _objectSpread({}, child);
82
+ // e.g. lorem {{ value, format }} ipsum
83
+ var format = child.format,
84
+ clone = _objectWithoutProperties(child, ["format"]);
63
85
 
64
- var format = clone.format;
65
- delete clone.format;
66
86
  var keys = Object.keys(clone);
67
87
 
68
- if (format && keys.length === 1) {
69
- stringNode = "".concat(stringNode, "{{").concat(keys[0], ", ").concat(format, "}}");
70
- } else if (keys.length === 1) {
71
- stringNode = "".concat(stringNode, "{{").concat(keys[0], "}}");
88
+ if (keys.length === 1) {
89
+ var value = format ? "".concat(keys[0], ", ").concat(format) : keys[0];
90
+ stringNode += "{{".concat(value, "}}");
72
91
  } else {
73
92
  // not a valid interpolation object (can only contain one value plus format)
74
93
  warn("react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.", child);
@@ -111,7 +130,10 @@ function renderNodes(children, targetString, i18n, i18nOptions, combinedTOpts) {
111
130
  var translationContent = node.children && node.children[0] && node.children[0].content;
112
131
 
113
132
  if (node.type === 'tag') {
114
- var child = reactNodes[parseInt(node.name, 10)] || {};
133
+ var tmp = reactNodes[parseInt(node.name, 10)] || {};
134
+ var child = Object.keys(node.attrs).length !== 0 ? mergeProps({
135
+ props: node.attrs
136
+ }, tmp) : tmp;
115
137
  var isElement = React.isValidElement(child);
116
138
 
117
139
  if (typeof child === 'string') {
@@ -210,9 +232,7 @@ export function Trans(_ref) {
210
232
  tFromProps = _ref.t,
211
233
  additionalProps = _objectWithoutProperties(_ref, ["children", "count", "parent", "i18nKey", "tOptions", "values", "defaults", "components", "ns", "i18n", "t"]);
212
234
 
213
- var ReactI18nContext = useContext(I18nContext);
214
-
215
- var _ref2 = getHasUsedI18nextProvider() ? ReactI18nContext || {} : {},
235
+ var _ref2 = useContext(I18nContext) || {},
216
236
  i18nFromContext = _ref2.i18n,
217
237
  defaultNSFromContext = _ref2.defaultNS;
218
238
 
@@ -227,13 +247,12 @@ export function Trans(_ref) {
227
247
  return k;
228
248
  };
229
249
 
230
- var reactI18nextOptions = _objectSpread({}, getDefaults(), {}, i18n.options && i18n.options.react);
250
+ var reactI18nextOptions = _objectSpread({}, getDefaults(), {}, i18n.options && i18n.options.react); // prepare having a namespace
231
251
 
232
- var useAsParent = parent !== undefined ? parent : reactI18nextOptions.defaultTransParent; // prepare having a namespace
233
252
 
234
253
  var namespaces = ns || t.ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;
235
254
  namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];
236
- var defaultValue = defaults || nodesToString('', children, 0, reactI18nextOptions) || reactI18nextOptions.transEmptyNodeValue;
255
+ var defaultValue = defaults || nodesToString(children, reactI18nextOptions) || reactI18nextOptions.transEmptyNodeValue || i18nKey;
237
256
  var hashTransKey = reactI18nextOptions.hashTransKey;
238
257
  var key = i18nKey || (hashTransKey ? hashTransKey(defaultValue) : defaultValue);
239
258
  var interpolationOverride = values ? {} : {
@@ -251,6 +270,9 @@ export function Trans(_ref) {
251
270
  });
252
271
 
253
272
  var translation = key ? t(key, combinedTOpts) : defaultValue;
254
- if (!useAsParent) return renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts);
255
- return React.createElement(useAsParent, additionalProps, renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts));
273
+ var content = renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts); // allows user to pass `null` to `parent`
274
+ // and override `defaultTransParent` if is present
275
+
276
+ var useAsParent = parent !== undefined ? parent : reactI18nextOptions.defaultTransParent;
277
+ return useAsParent ? React.createElement(useAsParent, additionalProps, content) : content;
256
278
  }
@@ -4,7 +4,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
4
 
5
5
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
6
6
 
7
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8
8
 
9
9
  import React from 'react';
10
10
  var defaultOptions = {
@@ -18,14 +18,7 @@ var defaultOptions = {
18
18
  useSuspense: true
19
19
  };
20
20
  var i18nInstance;
21
- var hasUsedI18nextProvider;
22
21
  export var I18nContext = React.createContext();
23
- export function usedI18nextProvider(used) {
24
- hasUsedI18nextProvider = used;
25
- }
26
- export function getHasUsedI18nextProvider() {
27
- return hasUsedI18nextProvider;
28
- }
29
22
  export function setDefaults() {
30
23
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
31
24
  defaultOptions = _objectSpread({}, defaultOptions, {}, options);
@@ -33,9 +26,7 @@ export function setDefaults() {
33
26
  export function getDefaults() {
34
27
  return defaultOptions;
35
28
  }
36
- export var ReportNamespaces =
37
- /*#__PURE__*/
38
- function () {
29
+ export var ReportNamespaces = /*#__PURE__*/function () {
39
30
  function ReportNamespaces() {
40
31
  _classCallCheck(this, ReportNamespaces);
41
32
 
package/dist/es/useSSR.js CHANGED
@@ -1,14 +1,13 @@
1
1
  import { useContext } from 'react';
2
- import { getI18n, getHasUsedI18nextProvider, I18nContext } from './context';
2
+ import { getI18n, I18nContext } from './context';
3
3
  export function useSSR(initialI18nStore, initialLanguage) {
4
4
  var props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
5
5
  var i18nFromProps = props.i18n;
6
- var ReactI18nContext = useContext(I18nContext);
7
6
 
8
- var _ref = getHasUsedI18nextProvider() ? ReactI18nContext || {} : {},
7
+ var _ref = useContext(I18nContext) || {},
9
8
  i18nFromContext = _ref.i18n;
10
9
 
11
- var i18n = i18nFromProps || i18nFromContext || getI18n(); // opt out if is a cloned instance, eg. created by i18next-express-middleware on request
10
+ var i18n = i18nFromProps || i18nFromContext || getI18n(); // opt out if is a cloned instance, eg. created by i18next-http-middleware on request
12
11
  // -> do not set initial stuff on server side
13
12
 
14
13
  if (i18n.options && i18n.options.isClone) return; // nextjs / SSR: getting data from next.js or other ssr stack
@@ -3,18 +3,17 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
 
4
4
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
5
5
 
6
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7
7
 
8
- import { useState, useEffect, useContext } from 'react';
9
- import { getI18n, getDefaults, ReportNamespaces, getHasUsedI18nextProvider, I18nContext } from './context';
8
+ import { useState, useEffect, useContext, useRef } from 'react';
9
+ import { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context';
10
10
  import { warnOnce, loadNamespaces, hasLoadedNamespace } from './utils';
11
11
  export function useTranslation(ns) {
12
12
  var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
13
13
  // assert we have the needed i18nInstance
14
14
  var i18nFromProps = props.i18n;
15
- var ReactI18nContext = useContext(I18nContext);
16
15
 
17
- var _ref = getHasUsedI18nextProvider() ? ReactI18nContext || {} : {},
16
+ var _ref = useContext(I18nContext) || {},
18
17
  i18nFromContext = _ref.i18n,
19
18
  defaultNSFromContext = _ref.defaultNS;
20
19
 
@@ -60,20 +59,21 @@ export function useTranslation(ns) {
60
59
  setT = _useState2[1]; // seems we can't have functions as value -> wrap it in obj
61
60
 
62
61
 
62
+ var isMounted = useRef(true);
63
63
  useEffect(function () {
64
- var isMounted = true;
65
64
  var bindI18n = i18nOptions.bindI18n,
66
- bindI18nStore = i18nOptions.bindI18nStore; // if not ready and not using suspense load the namespaces
65
+ bindI18nStore = i18nOptions.bindI18nStore;
66
+ isMounted.current = true; // if not ready and not using suspense load the namespaces
67
67
  // in side effect and do not call resetT if unmounted
68
68
 
69
69
  if (!ready && !useSuspense) {
70
70
  loadNamespaces(i18n, namespaces, function () {
71
- if (isMounted) setT(getT());
71
+ if (isMounted.current) setT(getT());
72
72
  });
73
73
  }
74
74
 
75
75
  function boundReset() {
76
- if (isMounted) setT(getT());
76
+ if (isMounted.current) setT(getT());
77
77
  } // bind events to trigger change, like languageChanged
78
78
 
79
79
 
@@ -81,7 +81,7 @@ export function useTranslation(ns) {
81
81
  if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset); // unbinding on unmount
82
82
 
83
83
  return function () {
84
- isMounted = false;
84
+ isMounted.current = false;
85
85
  if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {
86
86
  return i18n.off(e, boundReset);
87
87
  });
@@ -102,7 +102,7 @@ export function useTranslation(ns) {
102
102
 
103
103
  throw new Promise(function (resolve) {
104
104
  loadNamespaces(i18n, namespaces, function () {
105
- setT(getT());
105
+ if (isMounted.current) setT(getT());
106
106
  resolve();
107
107
  });
108
108
  });
@@ -3,7 +3,7 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
3
3
 
4
4
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
5
5
 
6
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7
7
 
8
8
  import React from 'react';
9
9
  import { useSSR } from './useSSR';
@@ -4,7 +4,7 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
4
4
 
5
5
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
6
6
 
7
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8
8
 
9
9
  import React from 'react';
10
10
  import { useTranslation } from './useTranslation';