You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					132 lines
				
				5.1 KiB
			
		
		
			
		
	
	
					132 lines
				
				5.1 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.useTranslation = useTranslation; | ||
|  | 
 | ||
|  | var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); | ||
|  | 
 | ||
|  | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); | ||
|  | 
 | ||
|  | var _react = require("react"); | ||
|  | 
 | ||
|  | var _context = require("./context"); | ||
|  | 
 | ||
|  | var _utils = require("./utils"); | ||
|  | 
 | ||
|  | 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; } | ||
|  | 
 | ||
|  | 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; } | ||
|  | 
 | ||
|  | var usePrevious = function usePrevious(value, ignore) { | ||
|  |   var ref = (0, _react.useRef)(); | ||
|  |   (0, _react.useEffect)(function () { | ||
|  |     ref.current = ignore ? ref.current : value; | ||
|  |   }, [value, ignore]); | ||
|  |   return ref.current; | ||
|  | }; | ||
|  | 
 | ||
|  | function useTranslation(ns) { | ||
|  |   var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
|  |   var i18nFromProps = props.i18n; | ||
|  | 
 | ||
|  |   var _ref = (0, _react.useContext)(_context.I18nContext) || {}, | ||
|  |       i18nFromContext = _ref.i18n, | ||
|  |       defaultNSFromContext = _ref.defaultNS; | ||
|  | 
 | ||
|  |   var i18n = i18nFromProps || i18nFromContext || (0, _context.getI18n)(); | ||
|  |   if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new _context.ReportNamespaces(); | ||
|  | 
 | ||
|  |   if (!i18n) { | ||
|  |     (0, _utils.warnOnce)('You will need to pass in an i18next instance by using initReactI18next'); | ||
|  | 
 | ||
|  |     var notReadyT = function notReadyT(k) { | ||
|  |       return Array.isArray(k) ? k[k.length - 1] : k; | ||
|  |     }; | ||
|  | 
 | ||
|  |     var retNotReady = [notReadyT, {}, false]; | ||
|  |     retNotReady.t = notReadyT; | ||
|  |     retNotReady.i18n = {}; | ||
|  |     retNotReady.ready = false; | ||
|  |     return retNotReady; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (i18n.options.react && i18n.options.react.wait !== undefined) (0, _utils.warnOnce)('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.'); | ||
|  | 
 | ||
|  |   var i18nOptions = _objectSpread(_objectSpread(_objectSpread({}, (0, _context.getDefaults)()), i18n.options.react), props); | ||
|  | 
 | ||
|  |   var useSuspense = i18nOptions.useSuspense, | ||
|  |       keyPrefix = i18nOptions.keyPrefix; | ||
|  |   var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS; | ||
|  |   namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation']; | ||
|  |   if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces); | ||
|  |   var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) { | ||
|  |     return (0, _utils.hasLoadedNamespace)(n, i18n, i18nOptions); | ||
|  |   }); | ||
|  | 
 | ||
|  |   function getT() { | ||
|  |     return i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix); | ||
|  |   } | ||
|  | 
 | ||
|  |   var _useState = (0, _react.useState)(getT), | ||
|  |       _useState2 = (0, _slicedToArray2["default"])(_useState, 2), | ||
|  |       t = _useState2[0], | ||
|  |       setT = _useState2[1]; | ||
|  | 
 | ||
|  |   var joinedNS = namespaces.join(); | ||
|  |   var previousJoinedNS = usePrevious(joinedNS); | ||
|  |   var isMounted = (0, _react.useRef)(true); | ||
|  |   (0, _react.useEffect)(function () { | ||
|  |     var bindI18n = i18nOptions.bindI18n, | ||
|  |         bindI18nStore = i18nOptions.bindI18nStore; | ||
|  |     isMounted.current = true; | ||
|  | 
 | ||
|  |     if (!ready && !useSuspense) { | ||
|  |       (0, _utils.loadNamespaces)(i18n, namespaces, function () { | ||
|  |         if (isMounted.current) setT(getT); | ||
|  |       }); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) { | ||
|  |       setT(getT); | ||
|  |     } | ||
|  | 
 | ||
|  |     function boundReset() { | ||
|  |       if (isMounted.current) setT(getT); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (bindI18n && i18n) i18n.on(bindI18n, boundReset); | ||
|  |     if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset); | ||
|  |     return function () { | ||
|  |       isMounted.current = false; | ||
|  |       if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) { | ||
|  |         return i18n.off(e, boundReset); | ||
|  |       }); | ||
|  |       if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) { | ||
|  |         return i18n.store.off(e, boundReset); | ||
|  |       }); | ||
|  |     }; | ||
|  |   }, [i18n, joinedNS]); | ||
|  |   var isInitial = (0, _react.useRef)(true); | ||
|  |   (0, _react.useEffect)(function () { | ||
|  |     if (isMounted.current && !isInitial.current) { | ||
|  |       setT(getT); | ||
|  |     } | ||
|  | 
 | ||
|  |     isInitial.current = false; | ||
|  |   }, [i18n, keyPrefix]); | ||
|  |   var ret = [t, i18n, ready]; | ||
|  |   ret.t = t; | ||
|  |   ret.i18n = i18n; | ||
|  |   ret.ready = ready; | ||
|  |   if (ready) return ret; | ||
|  |   if (!ready && !useSuspense) return ret; | ||
|  |   throw new Promise(function (resolve) { | ||
|  |     (0, _utils.loadNamespaces)(i18n, namespaces, function () { | ||
|  |       resolve(); | ||
|  |     }); | ||
|  |   }); | ||
|  | } |