@tolgee/react 5.10.2-prerelease.efacb842.0 → 5.10.2

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.
package/dist/T.d.ts CHANGED
@@ -1,5 +1,21 @@
1
1
  /// <reference types="react" />
2
- import { TProps } from './types';
2
+ import { NsType, TranslateParams, TranslationKey } from '@tolgee/web';
3
+ import { ParamsTags } from './types';
4
+ interface PropsBase {
5
+ params?: TranslateParams<ParamsTags>;
6
+ noWrap?: boolean;
7
+ ns?: NsType;
8
+ defaultValue?: string;
9
+ language?: string;
10
+ }
11
+ interface PropsWithKeyName extends PropsBase {
12
+ children?: string;
13
+ keyName: TranslationKey;
14
+ }
15
+ interface PropsWithoutKeyName extends PropsBase {
16
+ children: TranslationKey;
17
+ }
18
+ export type TProps = PropsWithKeyName | PropsWithoutKeyName;
3
19
  interface TInterface {
4
20
  (props: TProps): JSX.Element;
5
21
  }
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { TolgeeInstance } from '@tolgee/web';
3
3
  import { ReactOptions, TolgeeReactContext } from './types';
4
4
  export declare const DEFAULT_REACT_OPTIONS: ReactOptions;
5
- export declare const getProviderInstance: () => React.Context<TolgeeReactContext | undefined>;
5
+ export declare const TolgeeProviderContext: React.Context<TolgeeReactContext | undefined>;
6
6
  export interface TolgeeProviderProps {
7
7
  children?: React.ReactNode;
8
8
  tolgee: TolgeeInstance;
package/dist/index.d.ts CHANGED
@@ -1,9 +1,8 @@
1
1
  export { useTranslate, UseTranslateResult } from './useTranslate';
2
- export { TolgeeProvider, TolgeeProviderProps, getProviderInstance, } from './TolgeeProvider';
3
- export { T } from './T';
2
+ export { TolgeeProvider, TolgeeProviderProps, TolgeeProviderContext, } from './TolgeeProvider';
3
+ export { T, TProps } from './T';
4
4
  export { useTolgee } from './useTolgee';
5
5
  export { GlobalContextPlugin } from './GlobalContextPlugin';
6
6
  export { useTolgeeSSR } from './useTolgeeSSR';
7
- export { TBase } from './TBase';
8
7
  export * from './types';
9
8
  export * from '@tolgee/web';
@@ -12,13 +12,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
12
  const DEFAULT_REACT_OPTIONS = {
13
13
  useSuspense: true,
14
14
  };
15
- let ProviderInstance;
16
- const getProviderInstance = () => {
17
- if (!ProviderInstance) {
18
- ProviderInstance = React__default["default"].createContext(undefined);
19
- }
20
- return ProviderInstance;
21
- };
15
+ const TolgeeProviderContext = React__default["default"].createContext(undefined);
22
16
  const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
23
17
  const [loading, setLoading] = React.useState(!tolgee.isLoaded());
24
18
  React.useEffect(() => {
@@ -33,7 +27,6 @@ const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
33
27
  });
34
28
  }, [tolgee]);
35
29
  const optionsWithDefault = Object.assign(Object.assign({}, DEFAULT_REACT_OPTIONS), options);
36
- const TolgeeProviderContext = getProviderInstance();
37
30
  if (optionsWithDefault.useSuspense) {
38
31
  return (React__default["default"].createElement(TolgeeProviderContext.Provider, { value: { tolgee, options: optionsWithDefault } }, loading ? (fallback) : (React__default["default"].createElement(React.Suspense, { fallback: fallback || null }, children))));
39
32
  }
@@ -53,7 +46,6 @@ function getGlobalContext() {
53
46
  }
54
47
 
55
48
  const useTolgeeContext = () => {
56
- const TolgeeProviderContext = getProviderInstance();
57
49
  const context = React.useContext(TolgeeProviderContext) || getGlobalContext();
58
50
  if (!context) {
59
51
  throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");
@@ -158,7 +150,7 @@ const addReactKeys = (val) => {
158
150
  }
159
151
  };
160
152
 
161
- const TBase = (props) => {
153
+ const T = (props) => {
162
154
  const key = props.keyName || props.children;
163
155
  if (key === undefined) {
164
156
  // eslint-disable-next-line no-console
@@ -166,7 +158,8 @@ const TBase = (props) => {
166
158
  }
167
159
  const defaultValue = props.defaultValue ||
168
160
  (props.keyName ? props.children : undefined);
169
- const translation = addReactKeys(props.t({
161
+ const { t } = useTranslateInternal();
162
+ const translation = addReactKeys(t({
170
163
  key: key,
171
164
  params: wrapTagHandlers(props.params),
172
165
  defaultValue,
@@ -177,11 +170,6 @@ const TBase = (props) => {
177
170
  return React__default["default"].createElement(React__default["default"].Fragment, null, translation);
178
171
  };
179
172
 
180
- const T = (props) => {
181
- const { t } = useTranslateInternal();
182
- return React__default["default"].createElement(TBase, Object.assign({ t: t }, props));
183
- };
184
-
185
173
  const useTolgee = (events) => {
186
174
  const { tolgee } = useTolgeeContext();
187
175
  const { rerender } = useRerender();
@@ -201,18 +189,7 @@ function getTolgeeWithDeactivatedWrapper(tolgee) {
201
189
  return tolgee.t(Object.assign(Object.assign({}, props), { noWrap: true }));
202
190
  } });
203
191
  }
204
- /**
205
- * Updates tolgee static data and language, to be ready right away for the first render
206
- * and therefore compatible with SSR.
207
- *
208
- * It also ensures that the first render is done without wrapping and so it avoids
209
- * "client different than server" issues.
210
- *
211
- * @param tolgeeInstance initialized Tolgee instance
212
- * @param language language that is obtained outside of Tolgee on the server and client
213
- * @param staticData static data for the language
214
- */
215
- function useTolgeeSSR(tolgeeInstance, language, staticData) {
192
+ function useTolgeeSSR(tolgeeInstance, locale, staticData) {
216
193
  const initialInstance = React.useMemo(() => getTolgeeWithDeactivatedWrapper(tolgeeInstance), []);
217
194
  const [tolgee, setTolgee] = React.useState(initialInstance);
218
195
  React.useEffect(() => {
@@ -224,17 +201,16 @@ function useTolgeeSSR(tolgeeInstance, language, staticData) {
224
201
  // events emitting must be off, to not trigger re-render while rendering
225
202
  tolgee.setEmitterActive(false);
226
203
  tolgee.addStaticData(staticData);
227
- tolgee.changeLanguage(language);
204
+ tolgee.changeLanguage(locale);
228
205
  tolgee.setEmitterActive(true);
229
- }, [language, staticData, tolgee]);
206
+ }, [locale, staticData, tolgee]);
230
207
  return tolgee;
231
208
  }
232
209
 
233
210
  exports.GlobalContextPlugin = GlobalContextPlugin;
234
211
  exports.T = T;
235
- exports.TBase = TBase;
236
212
  exports.TolgeeProvider = TolgeeProvider;
237
- exports.getProviderInstance = getProviderInstance;
213
+ exports.TolgeeProviderContext = TolgeeProviderContext;
238
214
  exports.useTolgee = useTolgee;
239
215
  exports.useTolgeeSSR = useTolgeeSSR;
240
216
  exports.useTranslate = useTranslate;
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-react.cjs.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/useTranslate.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nexport interface TolgeeProviderProps {\n children?: React.ReactNode;\n tolgee: TolgeeInstance;\n options?: ReactOptions;\n fallback?: React.ReactNode;\n}\n\nexport const TolgeeProvider: React.FC<TolgeeProviderProps> = ({\n tolgee,\n options,\n children,\n fallback,\n}) => {\n const [loading, setLoading] = useState(!tolgee.isLoaded());\n\n useEffect(() => {\n tolgee\n .run()\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [tolgee]);\n\n const optionsWithDefault = { ...DEFAULT_REACT_OPTIONS, ...options };\n\n const TolgeeProviderContext = getProviderInstance();\n\n if (optionsWithDefault.useSuspense) {\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? (\n fallback\n ) : (\n <Suspense fallback={fallback || null}>{children}</Suspense>\n )}\n </TolgeeProviderContext.Provider>\n );\n }\n\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? fallback : children}\n </TolgeeProviderContext.Provider>\n );\n};\n","import type { TolgeePlugin } from '@tolgee/web';\nimport { DEFAULT_REACT_OPTIONS } from './TolgeeProvider';\nimport type { ReactOptions, TolgeeReactContext } from './types';\n\nlet globalContext: TolgeeReactContext | undefined;\n\nexport const GlobalContextPlugin =\n (options?: Partial<ReactOptions>): TolgeePlugin =>\n (tolgee) => {\n globalContext = {\n tolgee,\n options: { ...DEFAULT_REACT_OPTIONS, ...options },\n };\n return tolgee;\n };\n\nexport function getGlobalContext() {\n return globalContext;\n}\n","import { useContext } from 'react';\nimport { getGlobalContext } from './GlobalContextPlugin';\nimport { getProviderInstance } from './TolgeeProvider';\n\nexport const useTolgeeContext = () => {\n const TolgeeProviderContext = getProviderInstance();\n const context = useContext(TolgeeProviderContext) || getGlobalContext();\n if (!context) {\n throw new Error(\n \"Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?\"\n );\n }\n return context;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useRerender = () => {\n const [instance, setCounter] = useState(0);\n\n const rerender = useCallback(() => {\n setCounter((num) => num + 1);\n }, [setCounter]);\n return { instance, rerender };\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport {\n SubscriptionSelective,\n TranslateProps,\n NsFallback,\n getFallbackArray,\n getFallback,\n} from '@tolgee/web';\n\nimport { useTolgeeContext } from './useTolgeeContext';\nimport { ReactOptions } from './types';\nimport { useRerender } from './hooks';\n\nexport const useTranslateInternal = (\n ns?: NsFallback,\n options?: ReactOptions\n) => {\n const { tolgee, options: defaultOptions } = useTolgeeContext();\n const namespaces = getFallback(ns);\n const namespacesJoined = getFallbackArray(namespaces).join(':');\n\n const currentOptions = {\n ...defaultOptions,\n ...options,\n };\n\n // dummy state to enable re-rendering\n const { rerender, instance } = useRerender();\n\n const subscriptionRef = useRef<SubscriptionSelective>();\n\n const subscriptionQueue = useRef([] as NsFallback[]);\n subscriptionQueue.current = [];\n\n const subscribeToNs = (ns: NsFallback) => {\n subscriptionQueue.current.push(ns);\n subscriptionRef.current?.subscribeNs(ns);\n };\n\n const isLoaded = tolgee.isLoaded(namespaces);\n\n useEffect(() => {\n const subscription = tolgee.onNsUpdate(rerender);\n subscriptionRef.current = subscription;\n if (!isLoaded) {\n subscription.subscribeNs(namespaces);\n }\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [isLoaded, namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport { PropsWithKeyName, TBaseInterface } from './types';\n\nexport const TBase: TBaseInterface = (props) => {\n const key = (props as PropsWithKeyName).keyName || props.children;\n if (key === undefined) {\n // eslint-disable-next-line no-console\n console.error('T component: keyName not defined');\n }\n const defaultValue =\n props.defaultValue ||\n ((props as PropsWithKeyName).keyName ? props.children : undefined);\n\n const translation = addReactKeys(\n props.t({\n key: key!,\n params: wrapTagHandlers(props.params),\n defaultValue,\n noWrap: props.noWrap,\n ns: props.ns,\n language: props.language,\n })\n );\n\n return <>{translation}</>;\n};\n","import React from 'react';\nimport { ParamsTags, TProps } from './types';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { TFnType } from '@tolgee/web';\nimport { TBase } from './TBase';\n\ninterface TInterface {\n (props: TProps): JSX.Element;\n}\n\nexport const T: TInterface = (props) => {\n const { t } = useTranslateInternal();\n\n return <TBase t={t as TFnType<ParamsTags>} {...props} />;\n};\n","import { TolgeeEvent, TolgeeInstance } from '@tolgee/web';\nimport { useEffect } from 'react';\nimport { useRerender } from './hooks';\nimport { useTolgeeContext } from './useTolgeeContext';\n\nexport const useTolgee = (events?: TolgeeEvent[]): TolgeeInstance => {\n const { tolgee } = useTolgeeContext();\n\n const { rerender } = useRerender();\n\n useEffect(() => {\n const listeners = events?.map((e) => tolgee.on(e, rerender));\n return () => {\n listeners?.forEach((listener) => listener.unsubscribe());\n };\n }, [events?.join(':')]);\n\n return tolgee;\n};\n","import {\n getTranslateProps,\n TolgeeInstance,\n TolgeeStaticData,\n} from '@tolgee/web';\nimport { useEffect, useMemo, useState } from 'react';\n\nfunction getTolgeeWithDeactivatedWrapper(\n tolgee: TolgeeInstance\n): TolgeeInstance {\n return {\n ...tolgee,\n t(...args) {\n // @ts-ignore\n const props = getTranslateProps(...args);\n return tolgee.t({ ...props, noWrap: true });\n },\n };\n}\n\n/**\n * Updates tolgee static data and language, to be ready right away for the first render\n * and therefore compatible with SSR.\n *\n * It also ensures that the first render is done without wrapping and so it avoids\n * \"client different than server\" issues.\n *\n * @param tolgeeInstance initialized Tolgee instance\n * @param language language that is obtained outside of Tolgee on the server and client\n * @param staticData static data for the language\n */\nexport function useTolgeeSSR(\n tolgeeInstance: TolgeeInstance,\n language?: string,\n staticData?: TolgeeStaticData | undefined\n) {\n const initialInstance = useMemo(\n () => getTolgeeWithDeactivatedWrapper(tolgeeInstance),\n []\n );\n\n const [tolgee, setTolgee] = useState(initialInstance);\n\n useEffect(() => {\n setTolgee(tolgeeInstance);\n }, []);\n\n useMemo(() => {\n // we have to prepare tolgee before rendering children\n // so translations are available right away\n // events emitting must be off, to not trigger re-render while rendering\n tolgee.setEmitterActive(false);\n tolgee.addStaticData(staticData);\n tolgee.changeLanguage(language!);\n tolgee.setEmitterActive(true);\n }, [language, staticData, tolgee]);\n\n return tolgee;\n}\n"],"names":["React","useState","useEffect","Suspense","useContext","useCallback","getFallback","getFallbackArray","useRef","getTranslateProps","useMemo"],"mappings":"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"}
1
+ {"version":3,"file":"tolgee-react.cjs.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/useTranslate.ts","../src/tagsTools.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nexport const TolgeeProviderContext = React.createContext<\n TolgeeReactContext | undefined\n>(undefined);\n\nexport interface TolgeeProviderProps {\n children?: React.ReactNode;\n tolgee: TolgeeInstance;\n options?: ReactOptions;\n fallback?: React.ReactNode;\n}\n\nexport const TolgeeProvider: React.FC<TolgeeProviderProps> = ({\n tolgee,\n options,\n children,\n fallback,\n}) => {\n const [loading, setLoading] = useState(!tolgee.isLoaded());\n\n useEffect(() => {\n tolgee\n .run()\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [tolgee]);\n\n const optionsWithDefault = { ...DEFAULT_REACT_OPTIONS, ...options };\n\n if (optionsWithDefault.useSuspense) {\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? (\n fallback\n ) : (\n <Suspense fallback={fallback || null}>{children}</Suspense>\n )}\n </TolgeeProviderContext.Provider>\n );\n }\n\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? fallback : children}\n </TolgeeProviderContext.Provider>\n );\n};\n","import type { TolgeePlugin } from '@tolgee/web';\nimport { DEFAULT_REACT_OPTIONS } from './TolgeeProvider';\nimport type { ReactOptions, TolgeeReactContext } from './types';\n\nlet globalContext: TolgeeReactContext | undefined;\n\nexport const GlobalContextPlugin =\n (options?: Partial<ReactOptions>): TolgeePlugin =>\n (tolgee) => {\n globalContext = {\n tolgee,\n options: { ...DEFAULT_REACT_OPTIONS, ...options },\n };\n return tolgee;\n };\n\nexport function getGlobalContext() {\n return globalContext;\n}\n","import { useContext } from 'react';\nimport { getGlobalContext } from './GlobalContextPlugin';\nimport { TolgeeProviderContext } from './TolgeeProvider';\n\nexport const useTolgeeContext = () => {\n const context = useContext(TolgeeProviderContext) || getGlobalContext();\n if (!context) {\n throw new Error(\n \"Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?\"\n );\n }\n return context;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useRerender = () => {\n const [instance, setCounter] = useState(0);\n\n const rerender = useCallback(() => {\n setCounter((num) => num + 1);\n }, [setCounter]);\n return { instance, rerender };\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport {\n SubscriptionSelective,\n TranslateProps,\n NsFallback,\n getFallbackArray,\n getFallback,\n} from '@tolgee/web';\n\nimport { useTolgeeContext } from './useTolgeeContext';\nimport { ReactOptions } from './types';\nimport { useRerender } from './hooks';\n\nexport const useTranslateInternal = (\n ns?: NsFallback,\n options?: ReactOptions\n) => {\n const { tolgee, options: defaultOptions } = useTolgeeContext();\n const namespaces = getFallback(ns);\n const namespacesJoined = getFallbackArray(namespaces).join(':');\n\n const currentOptions = {\n ...defaultOptions,\n ...options,\n };\n\n // dummy state to enable re-rendering\n const { rerender, instance } = useRerender();\n\n const subscriptionRef = useRef<SubscriptionSelective>();\n\n const subscriptionQueue = useRef([] as NsFallback[]);\n subscriptionQueue.current = [];\n\n const subscribeToNs = (ns: NsFallback) => {\n subscriptionQueue.current.push(ns);\n subscriptionRef.current?.subscribeNs(ns);\n };\n\n const isLoaded = tolgee.isLoaded(namespaces);\n\n useEffect(() => {\n const subscription = tolgee.onNsUpdate(rerender);\n subscriptionRef.current = subscription;\n if (!isLoaded) {\n subscription.subscribeNs(namespaces);\n }\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [isLoaded, namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import { NsType, TranslateParams, TranslationKey } from '@tolgee/web';\nimport React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport { ParamsTags } from './types';\n\nimport { useTranslateInternal } from './useTranslateInternal';\n\ninterface PropsBase {\n params?: TranslateParams<ParamsTags>;\n noWrap?: boolean;\n ns?: NsType;\n defaultValue?: string;\n language?: string;\n}\n\ninterface PropsWithKeyName extends PropsBase {\n children?: string;\n keyName: TranslationKey;\n}\n\ninterface PropsWithoutKeyName extends PropsBase {\n children: TranslationKey;\n}\n\nexport type TProps = PropsWithKeyName | PropsWithoutKeyName;\n\ninterface TInterface {\n (props: TProps): JSX.Element;\n}\n\nexport const T: TInterface = (props) => {\n const key = (props as PropsWithKeyName).keyName || props.children;\n if (key === undefined) {\n // eslint-disable-next-line no-console\n console.error('T component: keyName not defined');\n }\n const defaultValue =\n props.defaultValue ||\n ((props as PropsWithKeyName).keyName ? props.children : undefined);\n\n const { t } = useTranslateInternal();\n\n const translation = addReactKeys(\n t({\n key: key!,\n params: wrapTagHandlers(props.params),\n defaultValue,\n noWrap: props.noWrap,\n ns: props.ns,\n language: props.language,\n })\n );\n\n return <>{translation}</>;\n};\n","import { TolgeeEvent, TolgeeInstance } from '@tolgee/web';\nimport { useEffect } from 'react';\nimport { useRerender } from './hooks';\nimport { useTolgeeContext } from './useTolgeeContext';\n\nexport const useTolgee = (events?: TolgeeEvent[]): TolgeeInstance => {\n const { tolgee } = useTolgeeContext();\n\n const { rerender } = useRerender();\n\n useEffect(() => {\n const listeners = events?.map((e) => tolgee.on(e, rerender));\n return () => {\n listeners?.forEach((listener) => listener.unsubscribe());\n };\n }, [events?.join(':')]);\n\n return tolgee;\n};\n","import {\n getTranslateProps,\n TolgeeInstance,\n TolgeeStaticData,\n} from '@tolgee/web';\nimport { useEffect, useMemo, useState } from 'react';\n\nfunction getTolgeeWithDeactivatedWrapper(\n tolgee: TolgeeInstance\n): TolgeeInstance {\n return {\n ...tolgee,\n t(...args) {\n // @ts-ignore\n const props = getTranslateProps(...args);\n return tolgee.t({ ...props, noWrap: true });\n },\n };\n}\n\nexport function useTolgeeSSR(\n tolgeeInstance: TolgeeInstance,\n locale?: string,\n staticData?: TolgeeStaticData | undefined\n) {\n const initialInstance = useMemo(\n () => getTolgeeWithDeactivatedWrapper(tolgeeInstance),\n []\n );\n\n const [tolgee, setTolgee] = useState(initialInstance);\n\n useEffect(() => {\n setTolgee(tolgeeInstance);\n }, []);\n\n useMemo(() => {\n // we have to prepare tolgee before rendering children\n // so translations are available right away\n // events emitting must be off, to not trigger re-render while rendering\n tolgee.setEmitterActive(false);\n tolgee.addStaticData(staticData);\n tolgee.changeLanguage(locale!);\n tolgee.setEmitterActive(true);\n }, [locale, staticData, tolgee]);\n\n return tolgee;\n}\n"],"names":["React","useState","useEffect","Suspense","useContext","useCallback","getFallback","getFallbackArray","useRef","getTranslateProps","useMemo"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@tolgee/web");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e);const s={useSuspense:!0};let o;const a=()=>(o||(o=r.default.createContext(void 0)),o);let u;const c=()=>{const t=a(),n=e.useContext(t)||u;if(!n)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return n},l=()=>{const[t,n]=e.useState(0);return{instance:t,rerender:e.useCallback((()=>{n((e=>e+1))}),[n])}},i=(n,r)=>{const{tolgee:s,options:o}=c(),a=t.getFallback(n),u=t.getFallbackArray(a).join(":"),i=Object.assign(Object.assign({},o),r),{rerender:d,instance:f}=l(),g=e.useRef(),b=e.useRef([]);b.current=[];const p=s.isLoaded(a);e.useEffect((()=>{const e=s.onNsUpdate(d);return g.current=e,p||e.subscribeNs(a),b.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[p,u,s]),e.useEffect((()=>(s.addActiveNs(a),()=>s.removeActiveNs(a))),[u,s]);const v=e.useCallback((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==a?void 0:a[0];return(e=>{var t;b.current.push(e),null===(t=g.current)||void 0===t||t.subscribeNs(e)})(n),s.t(Object.assign(Object.assign({},e),{ns:n}))}),[s,f]);if(i.useSuspense&&!p)throw s.addActiveNs(a,!0);return{t:v,isLoading:!p}},d=e=>{if(!e)return;const t={};return Object.entries(e||{}).forEach((([e,n])=>{if("function"==typeof n)t[e]=e=>n(f(e));else if(r.default.isValidElement(n)){const s=n;t[e]=e=>void 0===s.props.children&&(null==e?void 0:e.length)?r.default.cloneElement(s,{},f(e)):r.default.cloneElement(s)}else t[e]=n})),t},f=e=>Array.isArray(e)?r.default.Children.toArray(e):e,g=e=>{const t=e.keyName||e.children;void 0===t&&console.error("T component: keyName not defined");const n=e.defaultValue||(e.keyName?e.children:void 0),s=f(e.t({key:t,params:d(e.params),defaultValue:n,noWrap:e.noWrap,ns:e.ns,language:e.language}));return r.default.createElement(r.default.Fragment,null,s)};exports.GlobalContextPlugin=e=>t=>(u={tolgee:t,options:Object.assign(Object.assign({},s),e)},t),exports.T=e=>{const{t:t}=i();return r.default.createElement(g,Object.assign({t:t},e))},exports.TBase=g,exports.TolgeeProvider=({tolgee:t,options:n,children:o,fallback:u})=>{const[c,l]=e.useState(!t.isLoaded());e.useEffect((()=>{t.run().catch((e=>{console.error(e)})).finally((()=>{l(!1)}))}),[t]);const i=Object.assign(Object.assign({},s),n),d=a();return i.useSuspense?r.default.createElement(d.Provider,{value:{tolgee:t,options:i}},c?u:r.default.createElement(e.Suspense,{fallback:u||null},o)):r.default.createElement(d.Provider,{value:{tolgee:t,options:i}},c?u:o)},exports.getProviderInstance=a,exports.useTolgee=t=>{const{tolgee:n}=c(),{rerender:r}=l();return e.useEffect((()=>{const e=null==t?void 0:t.map((e=>n.on(e,r)));return()=>{null==e||e.forEach((e=>e.unsubscribe()))}}),[null==t?void 0:t.join(":")]),n},exports.useTolgeeSSR=function(n,r,s){const o=e.useMemo((()=>function(e){return Object.assign(Object.assign({},e),{t(...n){const r=t.getTranslateProps(...n);return e.t(Object.assign(Object.assign({},r),{noWrap:!0}))}})}(n)),[]),[a,u]=e.useState(o);return e.useEffect((()=>{u(n)}),[]),e.useMemo((()=>{a.setEmitterActive(!1),a.addStaticData(s),a.changeLanguage(r),a.setEmitterActive(!0)}),[r,s,a]),a},exports.useTranslate=(n,r)=>{const{t:s,isLoading:o}=i(n,r);return{t:e.useCallback(((...e)=>{const n=t.getTranslateProps(...e);return s(n)}),[s]),isLoading:o}},Object.keys(t).forEach((function(e){"default"===e||exports.hasOwnProperty(e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})}));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@tolgee/web");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e);const s={useSuspense:!0},o=r.default.createContext(void 0);let a;const u=()=>{const t=e.useContext(o)||a;if(!t)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return t},l=()=>{const[t,n]=e.useState(0);return{instance:t,rerender:e.useCallback((()=>{n((e=>e+1))}),[n])}},c=(n,r)=>{const{tolgee:s,options:o}=u(),a=t.getFallback(n),c=t.getFallbackArray(a).join(":"),i=Object.assign(Object.assign({},o),r),{rerender:d,instance:f}=l(),g=e.useRef(),b=e.useRef([]);b.current=[];const p=s.isLoaded(a);e.useEffect((()=>{const e=s.onNsUpdate(d);return g.current=e,p||e.subscribeNs(a),b.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[p,c,s]),e.useEffect((()=>(s.addActiveNs(a),()=>s.removeActiveNs(a))),[c,s]);const v=e.useCallback((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==a?void 0:a[0];return(e=>{var t;b.current.push(e),null===(t=g.current)||void 0===t||t.subscribeNs(e)})(n),s.t(Object.assign(Object.assign({},e),{ns:n}))}),[s,f]);if(i.useSuspense&&!p)throw s.addActiveNs(a,!0);return{t:v,isLoading:!p}},i=e=>{if(!e)return;const t={};return Object.entries(e||{}).forEach((([e,n])=>{if("function"==typeof n)t[e]=e=>n(d(e));else if(r.default.isValidElement(n)){const s=n;t[e]=e=>void 0===s.props.children&&(null==e?void 0:e.length)?r.default.cloneElement(s,{},d(e)):r.default.cloneElement(s)}else t[e]=n})),t},d=e=>Array.isArray(e)?r.default.Children.toArray(e):e;exports.GlobalContextPlugin=e=>t=>(a={tolgee:t,options:Object.assign(Object.assign({},s),e)},t),exports.T=e=>{const t=e.keyName||e.children;void 0===t&&console.error("T component: keyName not defined");const n=e.defaultValue||(e.keyName?e.children:void 0),{t:s}=c(),o=d(s({key:t,params:i(e.params),defaultValue:n,noWrap:e.noWrap,ns:e.ns,language:e.language}));return r.default.createElement(r.default.Fragment,null,o)},exports.TolgeeProvider=({tolgee:t,options:n,children:a,fallback:u})=>{const[l,c]=e.useState(!t.isLoaded());e.useEffect((()=>{t.run().catch((e=>{console.error(e)})).finally((()=>{c(!1)}))}),[t]);const i=Object.assign(Object.assign({},s),n);return i.useSuspense?r.default.createElement(o.Provider,{value:{tolgee:t,options:i}},l?u:r.default.createElement(e.Suspense,{fallback:u||null},a)):r.default.createElement(o.Provider,{value:{tolgee:t,options:i}},l?u:a)},exports.TolgeeProviderContext=o,exports.useTolgee=t=>{const{tolgee:n}=u(),{rerender:r}=l();return e.useEffect((()=>{const e=null==t?void 0:t.map((e=>n.on(e,r)));return()=>{null==e||e.forEach((e=>e.unsubscribe()))}}),[null==t?void 0:t.join(":")]),n},exports.useTolgeeSSR=function(n,r,s){const o=e.useMemo((()=>function(e){return Object.assign(Object.assign({},e),{t(...n){const r=t.getTranslateProps(...n);return e.t(Object.assign(Object.assign({},r),{noWrap:!0}))}})}(n)),[]),[a,u]=e.useState(o);return e.useEffect((()=>{u(n)}),[]),e.useMemo((()=>{a.setEmitterActive(!1),a.addStaticData(s),a.changeLanguage(r),a.setEmitterActive(!0)}),[r,s,a]),a},exports.useTranslate=(n,r)=>{const{t:s,isLoading:o}=c(n,r);return{t:e.useCallback(((...e)=>{const n=t.getTranslateProps(...e);return s(n)}),[s]),isLoading:o}},Object.keys(t).forEach((function(e){"default"===e||exports.hasOwnProperty(e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})}));
2
2
  //# sourceMappingURL=tolgee-react.cjs.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-react.cjs.min.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts","../src/useTranslate.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nexport interface TolgeeProviderProps {\n children?: React.ReactNode;\n tolgee: TolgeeInstance;\n options?: ReactOptions;\n fallback?: React.ReactNode;\n}\n\nexport const TolgeeProvider: React.FC<TolgeeProviderProps> = ({\n tolgee,\n options,\n children,\n fallback,\n}) => {\n const [loading, setLoading] = useState(!tolgee.isLoaded());\n\n useEffect(() => {\n tolgee\n .run()\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [tolgee]);\n\n const optionsWithDefault = { ...DEFAULT_REACT_OPTIONS, ...options };\n\n const TolgeeProviderContext = getProviderInstance();\n\n if (optionsWithDefault.useSuspense) {\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? (\n fallback\n ) : (\n <Suspense fallback={fallback || null}>{children}</Suspense>\n )}\n </TolgeeProviderContext.Provider>\n );\n }\n\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? fallback : children}\n </TolgeeProviderContext.Provider>\n );\n};\n","import type { TolgeePlugin } from '@tolgee/web';\nimport { DEFAULT_REACT_OPTIONS } from './TolgeeProvider';\nimport type { ReactOptions, TolgeeReactContext } from './types';\n\nlet globalContext: TolgeeReactContext | undefined;\n\nexport const GlobalContextPlugin =\n (options?: Partial<ReactOptions>): TolgeePlugin =>\n (tolgee) => {\n globalContext = {\n tolgee,\n options: { ...DEFAULT_REACT_OPTIONS, ...options },\n };\n return tolgee;\n };\n\nexport function getGlobalContext() {\n return globalContext;\n}\n","import { useContext } from 'react';\nimport { getGlobalContext } from './GlobalContextPlugin';\nimport { getProviderInstance } from './TolgeeProvider';\n\nexport const useTolgeeContext = () => {\n const TolgeeProviderContext = getProviderInstance();\n const context = useContext(TolgeeProviderContext) || getGlobalContext();\n if (!context) {\n throw new Error(\n \"Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?\"\n );\n }\n return context;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useRerender = () => {\n const [instance, setCounter] = useState(0);\n\n const rerender = useCallback(() => {\n setCounter((num) => num + 1);\n }, [setCounter]);\n return { instance, rerender };\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport {\n SubscriptionSelective,\n TranslateProps,\n NsFallback,\n getFallbackArray,\n getFallback,\n} from '@tolgee/web';\n\nimport { useTolgeeContext } from './useTolgeeContext';\nimport { ReactOptions } from './types';\nimport { useRerender } from './hooks';\n\nexport const useTranslateInternal = (\n ns?: NsFallback,\n options?: ReactOptions\n) => {\n const { tolgee, options: defaultOptions } = useTolgeeContext();\n const namespaces = getFallback(ns);\n const namespacesJoined = getFallbackArray(namespaces).join(':');\n\n const currentOptions = {\n ...defaultOptions,\n ...options,\n };\n\n // dummy state to enable re-rendering\n const { rerender, instance } = useRerender();\n\n const subscriptionRef = useRef<SubscriptionSelective>();\n\n const subscriptionQueue = useRef([] as NsFallback[]);\n subscriptionQueue.current = [];\n\n const subscribeToNs = (ns: NsFallback) => {\n subscriptionQueue.current.push(ns);\n subscriptionRef.current?.subscribeNs(ns);\n };\n\n const isLoaded = tolgee.isLoaded(namespaces);\n\n useEffect(() => {\n const subscription = tolgee.onNsUpdate(rerender);\n subscriptionRef.current = subscription;\n if (!isLoaded) {\n subscription.subscribeNs(namespaces);\n }\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [isLoaded, namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport { PropsWithKeyName, TBaseInterface } from './types';\n\nexport const TBase: TBaseInterface = (props) => {\n const key = (props as PropsWithKeyName).keyName || props.children;\n if (key === undefined) {\n // eslint-disable-next-line no-console\n console.error('T component: keyName not defined');\n }\n const defaultValue =\n props.defaultValue ||\n ((props as PropsWithKeyName).keyName ? props.children : undefined);\n\n const translation = addReactKeys(\n props.t({\n key: key!,\n params: wrapTagHandlers(props.params),\n defaultValue,\n noWrap: props.noWrap,\n ns: props.ns,\n language: props.language,\n })\n );\n\n return <>{translation}</>;\n};\n","import React from 'react';\nimport { ParamsTags, TProps } from './types';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { TFnType } from '@tolgee/web';\nimport { TBase } from './TBase';\n\ninterface TInterface {\n (props: TProps): JSX.Element;\n}\n\nexport const T: TInterface = (props) => {\n const { t } = useTranslateInternal();\n\n return <TBase t={t as TFnType<ParamsTags>} {...props} />;\n};\n","import { TolgeeEvent, TolgeeInstance } from '@tolgee/web';\nimport { useEffect } from 'react';\nimport { useRerender } from './hooks';\nimport { useTolgeeContext } from './useTolgeeContext';\n\nexport const useTolgee = (events?: TolgeeEvent[]): TolgeeInstance => {\n const { tolgee } = useTolgeeContext();\n\n const { rerender } = useRerender();\n\n useEffect(() => {\n const listeners = events?.map((e) => tolgee.on(e, rerender));\n return () => {\n listeners?.forEach((listener) => listener.unsubscribe());\n };\n }, [events?.join(':')]);\n\n return tolgee;\n};\n","import {\n getTranslateProps,\n TolgeeInstance,\n TolgeeStaticData,\n} from '@tolgee/web';\nimport { useEffect, useMemo, useState } from 'react';\n\nfunction getTolgeeWithDeactivatedWrapper(\n tolgee: TolgeeInstance\n): TolgeeInstance {\n return {\n ...tolgee,\n t(...args) {\n // @ts-ignore\n const props = getTranslateProps(...args);\n return tolgee.t({ ...props, noWrap: true });\n },\n };\n}\n\n/**\n * Updates tolgee static data and language, to be ready right away for the first render\n * and therefore compatible with SSR.\n *\n * It also ensures that the first render is done without wrapping and so it avoids\n * \"client different than server\" issues.\n *\n * @param tolgeeInstance initialized Tolgee instance\n * @param language language that is obtained outside of Tolgee on the server and client\n * @param staticData static data for the language\n */\nexport function useTolgeeSSR(\n tolgeeInstance: TolgeeInstance,\n language?: string,\n staticData?: TolgeeStaticData | undefined\n) {\n const initialInstance = useMemo(\n () => getTolgeeWithDeactivatedWrapper(tolgeeInstance),\n []\n );\n\n const [tolgee, setTolgee] = useState(initialInstance);\n\n useEffect(() => {\n setTolgee(tolgeeInstance);\n }, []);\n\n useMemo(() => {\n // we have to prepare tolgee before rendering children\n // so translations are available right away\n // events emitting must be off, to not trigger re-render while rendering\n tolgee.setEmitterActive(false);\n tolgee.addStaticData(staticData);\n tolgee.changeLanguage(language!);\n tolgee.setEmitterActive(true);\n }, [language, staticData, tolgee]);\n\n return tolgee;\n}\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","globalContext","useTolgeeContext","TolgeeProviderContext","context","useContext","Error","useRerender","instance","setCounter","useState","rerender","useCallback","num","useTranslateInternal","ns","options","tolgee","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","Object","assign","subscriptionRef","useRef","subscriptionQueue","current","isLoaded","useEffect","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","wrapTagHandlers","params","result","entries","key","value","chunk","addReactKeys","isValidElement","el","children","length","cloneElement","val","Array","isArray","Children","toArray","TBase","keyName","console","error","defaultValue","translation","noWrap","language","createElement","Fragment","fallback","loading","setLoading","run","catch","e","finally","optionsWithDefault","Provider","Suspense","events","listeners","map","on","listener","tolgeeInstance","staticData","initialInstance","useMemo","args","getTranslateProps","getTolgeeWithDeactivatedWrapper","setTolgee","setEmitterActive","addStaticData","changeLanguage","tInternal"],"mappings":"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"}
1
+ {"version":3,"file":"tolgee-react.cjs.min.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/tagsTools.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts","../src/useTranslate.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nexport const TolgeeProviderContext = React.createContext<\n TolgeeReactContext | undefined\n>(undefined);\n\nexport interface TolgeeProviderProps {\n children?: React.ReactNode;\n tolgee: TolgeeInstance;\n options?: ReactOptions;\n fallback?: React.ReactNode;\n}\n\nexport const TolgeeProvider: React.FC<TolgeeProviderProps> = ({\n tolgee,\n options,\n children,\n fallback,\n}) => {\n const [loading, setLoading] = useState(!tolgee.isLoaded());\n\n useEffect(() => {\n tolgee\n .run()\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [tolgee]);\n\n const optionsWithDefault = { ...DEFAULT_REACT_OPTIONS, ...options };\n\n if (optionsWithDefault.useSuspense) {\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? (\n fallback\n ) : (\n <Suspense fallback={fallback || null}>{children}</Suspense>\n )}\n </TolgeeProviderContext.Provider>\n );\n }\n\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? fallback : children}\n </TolgeeProviderContext.Provider>\n );\n};\n","import type { TolgeePlugin } from '@tolgee/web';\nimport { DEFAULT_REACT_OPTIONS } from './TolgeeProvider';\nimport type { ReactOptions, TolgeeReactContext } from './types';\n\nlet globalContext: TolgeeReactContext | undefined;\n\nexport const GlobalContextPlugin =\n (options?: Partial<ReactOptions>): TolgeePlugin =>\n (tolgee) => {\n globalContext = {\n tolgee,\n options: { ...DEFAULT_REACT_OPTIONS, ...options },\n };\n return tolgee;\n };\n\nexport function getGlobalContext() {\n return globalContext;\n}\n","import { useContext } from 'react';\nimport { getGlobalContext } from './GlobalContextPlugin';\nimport { TolgeeProviderContext } from './TolgeeProvider';\n\nexport const useTolgeeContext = () => {\n const context = useContext(TolgeeProviderContext) || getGlobalContext();\n if (!context) {\n throw new Error(\n \"Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?\"\n );\n }\n return context;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useRerender = () => {\n const [instance, setCounter] = useState(0);\n\n const rerender = useCallback(() => {\n setCounter((num) => num + 1);\n }, [setCounter]);\n return { instance, rerender };\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport {\n SubscriptionSelective,\n TranslateProps,\n NsFallback,\n getFallbackArray,\n getFallback,\n} from '@tolgee/web';\n\nimport { useTolgeeContext } from './useTolgeeContext';\nimport { ReactOptions } from './types';\nimport { useRerender } from './hooks';\n\nexport const useTranslateInternal = (\n ns?: NsFallback,\n options?: ReactOptions\n) => {\n const { tolgee, options: defaultOptions } = useTolgeeContext();\n const namespaces = getFallback(ns);\n const namespacesJoined = getFallbackArray(namespaces).join(':');\n\n const currentOptions = {\n ...defaultOptions,\n ...options,\n };\n\n // dummy state to enable re-rendering\n const { rerender, instance } = useRerender();\n\n const subscriptionRef = useRef<SubscriptionSelective>();\n\n const subscriptionQueue = useRef([] as NsFallback[]);\n subscriptionQueue.current = [];\n\n const subscribeToNs = (ns: NsFallback) => {\n subscriptionQueue.current.push(ns);\n subscriptionRef.current?.subscribeNs(ns);\n };\n\n const isLoaded = tolgee.isLoaded(namespaces);\n\n useEffect(() => {\n const subscription = tolgee.onNsUpdate(rerender);\n subscriptionRef.current = subscription;\n if (!isLoaded) {\n subscription.subscribeNs(namespaces);\n }\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [isLoaded, namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import { NsType, TranslateParams, TranslationKey } from '@tolgee/web';\nimport React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport { ParamsTags } from './types';\n\nimport { useTranslateInternal } from './useTranslateInternal';\n\ninterface PropsBase {\n params?: TranslateParams<ParamsTags>;\n noWrap?: boolean;\n ns?: NsType;\n defaultValue?: string;\n language?: string;\n}\n\ninterface PropsWithKeyName extends PropsBase {\n children?: string;\n keyName: TranslationKey;\n}\n\ninterface PropsWithoutKeyName extends PropsBase {\n children: TranslationKey;\n}\n\nexport type TProps = PropsWithKeyName | PropsWithoutKeyName;\n\ninterface TInterface {\n (props: TProps): JSX.Element;\n}\n\nexport const T: TInterface = (props) => {\n const key = (props as PropsWithKeyName).keyName || props.children;\n if (key === undefined) {\n // eslint-disable-next-line no-console\n console.error('T component: keyName not defined');\n }\n const defaultValue =\n props.defaultValue ||\n ((props as PropsWithKeyName).keyName ? props.children : undefined);\n\n const { t } = useTranslateInternal();\n\n const translation = addReactKeys(\n t({\n key: key!,\n params: wrapTagHandlers(props.params),\n defaultValue,\n noWrap: props.noWrap,\n ns: props.ns,\n language: props.language,\n })\n );\n\n return <>{translation}</>;\n};\n","import { TolgeeEvent, TolgeeInstance } from '@tolgee/web';\nimport { useEffect } from 'react';\nimport { useRerender } from './hooks';\nimport { useTolgeeContext } from './useTolgeeContext';\n\nexport const useTolgee = (events?: TolgeeEvent[]): TolgeeInstance => {\n const { tolgee } = useTolgeeContext();\n\n const { rerender } = useRerender();\n\n useEffect(() => {\n const listeners = events?.map((e) => tolgee.on(e, rerender));\n return () => {\n listeners?.forEach((listener) => listener.unsubscribe());\n };\n }, [events?.join(':')]);\n\n return tolgee;\n};\n","import {\n getTranslateProps,\n TolgeeInstance,\n TolgeeStaticData,\n} from '@tolgee/web';\nimport { useEffect, useMemo, useState } from 'react';\n\nfunction getTolgeeWithDeactivatedWrapper(\n tolgee: TolgeeInstance\n): TolgeeInstance {\n return {\n ...tolgee,\n t(...args) {\n // @ts-ignore\n const props = getTranslateProps(...args);\n return tolgee.t({ ...props, noWrap: true });\n },\n };\n}\n\nexport function useTolgeeSSR(\n tolgeeInstance: TolgeeInstance,\n locale?: string,\n staticData?: TolgeeStaticData | undefined\n) {\n const initialInstance = useMemo(\n () => getTolgeeWithDeactivatedWrapper(tolgeeInstance),\n []\n );\n\n const [tolgee, setTolgee] = useState(initialInstance);\n\n useEffect(() => {\n setTolgee(tolgeeInstance);\n }, []);\n\n useMemo(() => {\n // we have to prepare tolgee before rendering children\n // so translations are available right away\n // events emitting must be off, to not trigger re-render while rendering\n tolgee.setEmitterActive(false);\n tolgee.addStaticData(staticData);\n tolgee.changeLanguage(locale!);\n tolgee.setEmitterActive(true);\n }, [locale, staticData, tolgee]);\n\n return tolgee;\n}\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","TolgeeProviderContext","React","createContext","undefined","globalContext","useTolgeeContext","context","useContext","Error","useRerender","instance","setCounter","useState","rerender","useCallback","num","useTranslateInternal","ns","options","tolgee","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","Object","assign","subscriptionRef","useRef","subscriptionQueue","current","isLoaded","useEffect","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","wrapTagHandlers","params","result","entries","key","value","chunk","addReactKeys","isValidElement","el","children","length","cloneElement","val","Array","isArray","Children","toArray","keyName","console","error","defaultValue","translation","noWrap","language","createElement","Fragment","fallback","loading","setLoading","run","catch","e","finally","optionsWithDefault","Provider","Suspense","events","listeners","map","on","listener","tolgeeInstance","locale","staticData","initialInstance","useMemo","args","getTranslateProps","getTolgeeWithDeactivatedWrapper","setTolgee","setEmitterActive","addStaticData","changeLanguage","tInternal"],"mappings":"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"}
@@ -5,13 +5,7 @@ export * from '@tolgee/web';
5
5
  const DEFAULT_REACT_OPTIONS = {
6
6
  useSuspense: true,
7
7
  };
8
- let ProviderInstance;
9
- const getProviderInstance = () => {
10
- if (!ProviderInstance) {
11
- ProviderInstance = React.createContext(undefined);
12
- }
13
- return ProviderInstance;
14
- };
8
+ const TolgeeProviderContext = React.createContext(undefined);
15
9
  const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
16
10
  const [loading, setLoading] = useState(!tolgee.isLoaded());
17
11
  useEffect(() => {
@@ -26,7 +20,6 @@ const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
26
20
  });
27
21
  }, [tolgee]);
28
22
  const optionsWithDefault = Object.assign(Object.assign({}, DEFAULT_REACT_OPTIONS), options);
29
- const TolgeeProviderContext = getProviderInstance();
30
23
  if (optionsWithDefault.useSuspense) {
31
24
  return (React.createElement(TolgeeProviderContext.Provider, { value: { tolgee, options: optionsWithDefault } }, loading ? (fallback) : (React.createElement(Suspense, { fallback: fallback || null }, children))));
32
25
  }
@@ -46,7 +39,6 @@ function getGlobalContext() {
46
39
  }
47
40
 
48
41
  const useTolgeeContext = () => {
49
- const TolgeeProviderContext = getProviderInstance();
50
42
  const context = useContext(TolgeeProviderContext) || getGlobalContext();
51
43
  if (!context) {
52
44
  throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");
@@ -151,7 +143,7 @@ const addReactKeys = (val) => {
151
143
  }
152
144
  };
153
145
 
154
- const TBase = (props) => {
146
+ const T = (props) => {
155
147
  const key = props.keyName || props.children;
156
148
  if (key === undefined) {
157
149
  // eslint-disable-next-line no-console
@@ -159,7 +151,8 @@ const TBase = (props) => {
159
151
  }
160
152
  const defaultValue = props.defaultValue ||
161
153
  (props.keyName ? props.children : undefined);
162
- const translation = addReactKeys(props.t({
154
+ const { t } = useTranslateInternal();
155
+ const translation = addReactKeys(t({
163
156
  key: key,
164
157
  params: wrapTagHandlers(props.params),
165
158
  defaultValue,
@@ -170,11 +163,6 @@ const TBase = (props) => {
170
163
  return React.createElement(React.Fragment, null, translation);
171
164
  };
172
165
 
173
- const T = (props) => {
174
- const { t } = useTranslateInternal();
175
- return React.createElement(TBase, Object.assign({ t: t }, props));
176
- };
177
-
178
166
  const useTolgee = (events) => {
179
167
  const { tolgee } = useTolgeeContext();
180
168
  const { rerender } = useRerender();
@@ -194,18 +182,7 @@ function getTolgeeWithDeactivatedWrapper(tolgee) {
194
182
  return tolgee.t(Object.assign(Object.assign({}, props), { noWrap: true }));
195
183
  } });
196
184
  }
197
- /**
198
- * Updates tolgee static data and language, to be ready right away for the first render
199
- * and therefore compatible with SSR.
200
- *
201
- * It also ensures that the first render is done without wrapping and so it avoids
202
- * "client different than server" issues.
203
- *
204
- * @param tolgeeInstance initialized Tolgee instance
205
- * @param language language that is obtained outside of Tolgee on the server and client
206
- * @param staticData static data for the language
207
- */
208
- function useTolgeeSSR(tolgeeInstance, language, staticData) {
185
+ function useTolgeeSSR(tolgeeInstance, locale, staticData) {
209
186
  const initialInstance = useMemo(() => getTolgeeWithDeactivatedWrapper(tolgeeInstance), []);
210
187
  const [tolgee, setTolgee] = useState(initialInstance);
211
188
  useEffect(() => {
@@ -217,11 +194,11 @@ function useTolgeeSSR(tolgeeInstance, language, staticData) {
217
194
  // events emitting must be off, to not trigger re-render while rendering
218
195
  tolgee.setEmitterActive(false);
219
196
  tolgee.addStaticData(staticData);
220
- tolgee.changeLanguage(language);
197
+ tolgee.changeLanguage(locale);
221
198
  tolgee.setEmitterActive(true);
222
- }, [language, staticData, tolgee]);
199
+ }, [locale, staticData, tolgee]);
223
200
  return tolgee;
224
201
  }
225
202
 
226
- export { GlobalContextPlugin, T, TBase, TolgeeProvider, getProviderInstance, useTolgee, useTolgeeSSR, useTranslate };
203
+ export { GlobalContextPlugin, T, TolgeeProvider, TolgeeProviderContext, useTolgee, useTolgeeSSR, useTranslate };
227
204
  //# sourceMappingURL=tolgee-react.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-react.esm.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/useTranslate.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nexport interface TolgeeProviderProps {\n children?: React.ReactNode;\n tolgee: TolgeeInstance;\n options?: ReactOptions;\n fallback?: React.ReactNode;\n}\n\nexport const TolgeeProvider: React.FC<TolgeeProviderProps> = ({\n tolgee,\n options,\n children,\n fallback,\n}) => {\n const [loading, setLoading] = useState(!tolgee.isLoaded());\n\n useEffect(() => {\n tolgee\n .run()\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [tolgee]);\n\n const optionsWithDefault = { ...DEFAULT_REACT_OPTIONS, ...options };\n\n const TolgeeProviderContext = getProviderInstance();\n\n if (optionsWithDefault.useSuspense) {\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? (\n fallback\n ) : (\n <Suspense fallback={fallback || null}>{children}</Suspense>\n )}\n </TolgeeProviderContext.Provider>\n );\n }\n\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? fallback : children}\n </TolgeeProviderContext.Provider>\n );\n};\n","import type { TolgeePlugin } from '@tolgee/web';\nimport { DEFAULT_REACT_OPTIONS } from './TolgeeProvider';\nimport type { ReactOptions, TolgeeReactContext } from './types';\n\nlet globalContext: TolgeeReactContext | undefined;\n\nexport const GlobalContextPlugin =\n (options?: Partial<ReactOptions>): TolgeePlugin =>\n (tolgee) => {\n globalContext = {\n tolgee,\n options: { ...DEFAULT_REACT_OPTIONS, ...options },\n };\n return tolgee;\n };\n\nexport function getGlobalContext() {\n return globalContext;\n}\n","import { useContext } from 'react';\nimport { getGlobalContext } from './GlobalContextPlugin';\nimport { getProviderInstance } from './TolgeeProvider';\n\nexport const useTolgeeContext = () => {\n const TolgeeProviderContext = getProviderInstance();\n const context = useContext(TolgeeProviderContext) || getGlobalContext();\n if (!context) {\n throw new Error(\n \"Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?\"\n );\n }\n return context;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useRerender = () => {\n const [instance, setCounter] = useState(0);\n\n const rerender = useCallback(() => {\n setCounter((num) => num + 1);\n }, [setCounter]);\n return { instance, rerender };\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport {\n SubscriptionSelective,\n TranslateProps,\n NsFallback,\n getFallbackArray,\n getFallback,\n} from '@tolgee/web';\n\nimport { useTolgeeContext } from './useTolgeeContext';\nimport { ReactOptions } from './types';\nimport { useRerender } from './hooks';\n\nexport const useTranslateInternal = (\n ns?: NsFallback,\n options?: ReactOptions\n) => {\n const { tolgee, options: defaultOptions } = useTolgeeContext();\n const namespaces = getFallback(ns);\n const namespacesJoined = getFallbackArray(namespaces).join(':');\n\n const currentOptions = {\n ...defaultOptions,\n ...options,\n };\n\n // dummy state to enable re-rendering\n const { rerender, instance } = useRerender();\n\n const subscriptionRef = useRef<SubscriptionSelective>();\n\n const subscriptionQueue = useRef([] as NsFallback[]);\n subscriptionQueue.current = [];\n\n const subscribeToNs = (ns: NsFallback) => {\n subscriptionQueue.current.push(ns);\n subscriptionRef.current?.subscribeNs(ns);\n };\n\n const isLoaded = tolgee.isLoaded(namespaces);\n\n useEffect(() => {\n const subscription = tolgee.onNsUpdate(rerender);\n subscriptionRef.current = subscription;\n if (!isLoaded) {\n subscription.subscribeNs(namespaces);\n }\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [isLoaded, namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport { PropsWithKeyName, TBaseInterface } from './types';\n\nexport const TBase: TBaseInterface = (props) => {\n const key = (props as PropsWithKeyName).keyName || props.children;\n if (key === undefined) {\n // eslint-disable-next-line no-console\n console.error('T component: keyName not defined');\n }\n const defaultValue =\n props.defaultValue ||\n ((props as PropsWithKeyName).keyName ? props.children : undefined);\n\n const translation = addReactKeys(\n props.t({\n key: key!,\n params: wrapTagHandlers(props.params),\n defaultValue,\n noWrap: props.noWrap,\n ns: props.ns,\n language: props.language,\n })\n );\n\n return <>{translation}</>;\n};\n","import React from 'react';\nimport { ParamsTags, TProps } from './types';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { TFnType } from '@tolgee/web';\nimport { TBase } from './TBase';\n\ninterface TInterface {\n (props: TProps): JSX.Element;\n}\n\nexport const T: TInterface = (props) => {\n const { t } = useTranslateInternal();\n\n return <TBase t={t as TFnType<ParamsTags>} {...props} />;\n};\n","import { TolgeeEvent, TolgeeInstance } from '@tolgee/web';\nimport { useEffect } from 'react';\nimport { useRerender } from './hooks';\nimport { useTolgeeContext } from './useTolgeeContext';\n\nexport const useTolgee = (events?: TolgeeEvent[]): TolgeeInstance => {\n const { tolgee } = useTolgeeContext();\n\n const { rerender } = useRerender();\n\n useEffect(() => {\n const listeners = events?.map((e) => tolgee.on(e, rerender));\n return () => {\n listeners?.forEach((listener) => listener.unsubscribe());\n };\n }, [events?.join(':')]);\n\n return tolgee;\n};\n","import {\n getTranslateProps,\n TolgeeInstance,\n TolgeeStaticData,\n} from '@tolgee/web';\nimport { useEffect, useMemo, useState } from 'react';\n\nfunction getTolgeeWithDeactivatedWrapper(\n tolgee: TolgeeInstance\n): TolgeeInstance {\n return {\n ...tolgee,\n t(...args) {\n // @ts-ignore\n const props = getTranslateProps(...args);\n return tolgee.t({ ...props, noWrap: true });\n },\n };\n}\n\n/**\n * Updates tolgee static data and language, to be ready right away for the first render\n * and therefore compatible with SSR.\n *\n * It also ensures that the first render is done without wrapping and so it avoids\n * \"client different than server\" issues.\n *\n * @param tolgeeInstance initialized Tolgee instance\n * @param language language that is obtained outside of Tolgee on the server and client\n * @param staticData static data for the language\n */\nexport function useTolgeeSSR(\n tolgeeInstance: TolgeeInstance,\n language?: string,\n staticData?: TolgeeStaticData | undefined\n) {\n const initialInstance = useMemo(\n () => getTolgeeWithDeactivatedWrapper(tolgeeInstance),\n []\n );\n\n const [tolgee, setTolgee] = useState(initialInstance);\n\n useEffect(() => {\n setTolgee(tolgeeInstance);\n }, []);\n\n useMemo(() => {\n // we have to prepare tolgee before rendering children\n // so translations are available right away\n // events emitting must be off, to not trigger re-render while rendering\n tolgee.setEmitterActive(false);\n tolgee.addStaticData(staticData);\n tolgee.changeLanguage(language!);\n tolgee.setEmitterActive(true);\n }, [language, staticData, tolgee]);\n\n return tolgee;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tolgee-react.esm.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/useTranslate.ts","../src/tagsTools.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nexport const TolgeeProviderContext = React.createContext<\n TolgeeReactContext | undefined\n>(undefined);\n\nexport interface TolgeeProviderProps {\n children?: React.ReactNode;\n tolgee: TolgeeInstance;\n options?: ReactOptions;\n fallback?: React.ReactNode;\n}\n\nexport const TolgeeProvider: React.FC<TolgeeProviderProps> = ({\n tolgee,\n options,\n children,\n fallback,\n}) => {\n const [loading, setLoading] = useState(!tolgee.isLoaded());\n\n useEffect(() => {\n tolgee\n .run()\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [tolgee]);\n\n const optionsWithDefault = { ...DEFAULT_REACT_OPTIONS, ...options };\n\n if (optionsWithDefault.useSuspense) {\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? (\n fallback\n ) : (\n <Suspense fallback={fallback || null}>{children}</Suspense>\n )}\n </TolgeeProviderContext.Provider>\n );\n }\n\n return (\n <TolgeeProviderContext.Provider\n value={{ tolgee, options: optionsWithDefault }}\n >\n {loading ? fallback : children}\n </TolgeeProviderContext.Provider>\n );\n};\n","import type { TolgeePlugin } from '@tolgee/web';\nimport { DEFAULT_REACT_OPTIONS } from './TolgeeProvider';\nimport type { ReactOptions, TolgeeReactContext } from './types';\n\nlet globalContext: TolgeeReactContext | undefined;\n\nexport const GlobalContextPlugin =\n (options?: Partial<ReactOptions>): TolgeePlugin =>\n (tolgee) => {\n globalContext = {\n tolgee,\n options: { ...DEFAULT_REACT_OPTIONS, ...options },\n };\n return tolgee;\n };\n\nexport function getGlobalContext() {\n return globalContext;\n}\n","import { useContext } from 'react';\nimport { getGlobalContext } from './GlobalContextPlugin';\nimport { TolgeeProviderContext } from './TolgeeProvider';\n\nexport const useTolgeeContext = () => {\n const context = useContext(TolgeeProviderContext) || getGlobalContext();\n if (!context) {\n throw new Error(\n \"Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?\"\n );\n }\n return context;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useRerender = () => {\n const [instance, setCounter] = useState(0);\n\n const rerender = useCallback(() => {\n setCounter((num) => num + 1);\n }, [setCounter]);\n return { instance, rerender };\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport {\n SubscriptionSelective,\n TranslateProps,\n NsFallback,\n getFallbackArray,\n getFallback,\n} from '@tolgee/web';\n\nimport { useTolgeeContext } from './useTolgeeContext';\nimport { ReactOptions } from './types';\nimport { useRerender } from './hooks';\n\nexport const useTranslateInternal = (\n ns?: NsFallback,\n options?: ReactOptions\n) => {\n const { tolgee, options: defaultOptions } = useTolgeeContext();\n const namespaces = getFallback(ns);\n const namespacesJoined = getFallbackArray(namespaces).join(':');\n\n const currentOptions = {\n ...defaultOptions,\n ...options,\n };\n\n // dummy state to enable re-rendering\n const { rerender, instance } = useRerender();\n\n const subscriptionRef = useRef<SubscriptionSelective>();\n\n const subscriptionQueue = useRef([] as NsFallback[]);\n subscriptionQueue.current = [];\n\n const subscribeToNs = (ns: NsFallback) => {\n subscriptionQueue.current.push(ns);\n subscriptionRef.current?.subscribeNs(ns);\n };\n\n const isLoaded = tolgee.isLoaded(namespaces);\n\n useEffect(() => {\n const subscription = tolgee.onNsUpdate(rerender);\n subscriptionRef.current = subscription;\n if (!isLoaded) {\n subscription.subscribeNs(namespaces);\n }\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [isLoaded, namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import { NsType, TranslateParams, TranslationKey } from '@tolgee/web';\nimport React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport { ParamsTags } from './types';\n\nimport { useTranslateInternal } from './useTranslateInternal';\n\ninterface PropsBase {\n params?: TranslateParams<ParamsTags>;\n noWrap?: boolean;\n ns?: NsType;\n defaultValue?: string;\n language?: string;\n}\n\ninterface PropsWithKeyName extends PropsBase {\n children?: string;\n keyName: TranslationKey;\n}\n\ninterface PropsWithoutKeyName extends PropsBase {\n children: TranslationKey;\n}\n\nexport type TProps = PropsWithKeyName | PropsWithoutKeyName;\n\ninterface TInterface {\n (props: TProps): JSX.Element;\n}\n\nexport const T: TInterface = (props) => {\n const key = (props as PropsWithKeyName).keyName || props.children;\n if (key === undefined) {\n // eslint-disable-next-line no-console\n console.error('T component: keyName not defined');\n }\n const defaultValue =\n props.defaultValue ||\n ((props as PropsWithKeyName).keyName ? props.children : undefined);\n\n const { t } = useTranslateInternal();\n\n const translation = addReactKeys(\n t({\n key: key!,\n params: wrapTagHandlers(props.params),\n defaultValue,\n noWrap: props.noWrap,\n ns: props.ns,\n language: props.language,\n })\n );\n\n return <>{translation}</>;\n};\n","import { TolgeeEvent, TolgeeInstance } from '@tolgee/web';\nimport { useEffect } from 'react';\nimport { useRerender } from './hooks';\nimport { useTolgeeContext } from './useTolgeeContext';\n\nexport const useTolgee = (events?: TolgeeEvent[]): TolgeeInstance => {\n const { tolgee } = useTolgeeContext();\n\n const { rerender } = useRerender();\n\n useEffect(() => {\n const listeners = events?.map((e) => tolgee.on(e, rerender));\n return () => {\n listeners?.forEach((listener) => listener.unsubscribe());\n };\n }, [events?.join(':')]);\n\n return tolgee;\n};\n","import {\n getTranslateProps,\n TolgeeInstance,\n TolgeeStaticData,\n} from '@tolgee/web';\nimport { useEffect, useMemo, useState } from 'react';\n\nfunction getTolgeeWithDeactivatedWrapper(\n tolgee: TolgeeInstance\n): TolgeeInstance {\n return {\n ...tolgee,\n t(...args) {\n // @ts-ignore\n const props = getTranslateProps(...args);\n return tolgee.t({ ...props, noWrap: true });\n },\n };\n}\n\nexport function useTolgeeSSR(\n tolgeeInstance: TolgeeInstance,\n locale?: string,\n staticData?: TolgeeStaticData | undefined\n) {\n const initialInstance = useMemo(\n () => getTolgeeWithDeactivatedWrapper(tolgeeInstance),\n []\n );\n\n const [tolgee, setTolgee] = useState(initialInstance);\n\n useEffect(() => {\n setTolgee(tolgeeInstance);\n }, []);\n\n useMemo(() => {\n // we have to prepare tolgee before rendering children\n // so translations are available right away\n // events emitting must be off, to not trigger re-render while rendering\n tolgee.setEmitterActive(false);\n tolgee.addStaticData(staticData);\n tolgee.changeLanguage(locale!);\n tolgee.setEmitterActive(true);\n }, [locale, staticData, tolgee]);\n\n return tolgee;\n}\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import e,{useState as t,useEffect as n,Suspense as r,useContext as s,useCallback as o,useRef as c,useMemo as i}from"react";import{getFallback as a,getFallbackArray as l,getTranslateProps as u}from"@tolgee/web";export*from"@tolgee/web";const d={useSuspense:!0};let g;const b=()=>(g||(g=e.createContext(void 0)),g),m=({tolgee:s,options:o,children:c,fallback:i})=>{const[a,l]=t(!s.isLoaded());n((()=>{s.run().catch((e=>{console.error(e)})).finally((()=>{l(!1)}))}),[s]);const u=Object.assign(Object.assign({},d),o),g=b();return u.useSuspense?e.createElement(g.Provider,{value:{tolgee:s,options:u}},a?i:e.createElement(r,{fallback:i||null},c)):e.createElement(g.Provider,{value:{tolgee:s,options:u}},a?i:c)};let p;const f=e=>t=>(p={tolgee:t,options:Object.assign(Object.assign({},d),e)},t);const v=()=>{const e=b(),t=s(e)||p;if(!t)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return t},j=()=>{const[e,n]=t(0);return{instance:e,rerender:o((()=>{n((e=>e+1))}),[n])}},h=(e,t)=>{const{tolgee:r,options:s}=v(),i=a(e),u=l(i).join(":"),d=Object.assign(Object.assign({},s),t),{rerender:g,instance:b}=j(),m=c(),p=c([]);p.current=[];const f=r.isLoaded(i);n((()=>{const e=r.onNsUpdate(g);return m.current=e,f||e.subscribeNs(i),p.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[f,u,r]),n((()=>(r.addActiveNs(i),()=>r.removeActiveNs(i))),[u,r]);const h=o((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==i?void 0:i[0];return(e=>{var t;p.current.push(e),null===(t=m.current)||void 0===t||t.subscribeNs(e)})(n),r.t(Object.assign(Object.assign({},e),{ns:n}))}),[r,b]);if(d.useSuspense&&!f)throw r.addActiveNs(i,!0);return{t:h,isLoading:!f}},E=(e,t)=>{const{t:n,isLoading:r}=h(e,t);return{t:o(((...e)=>{const t=u(...e);return n(t)}),[n]),isLoading:r}},O=t=>{if(!t)return;const n={};return Object.entries(t||{}).forEach((([t,r])=>{if("function"==typeof r)n[t]=e=>r(y(e));else if(e.isValidElement(r)){const s=r;n[t]=t=>void 0===s.props.children&&(null==t?void 0:t.length)?e.cloneElement(s,{},y(t)):e.cloneElement(s)}else n[t]=r})),n},y=t=>Array.isArray(t)?e.Children.toArray(t):t,N=t=>{const n=t.keyName||t.children;void 0===n&&console.error("T component: keyName not defined");const r=t.defaultValue||(t.keyName?t.children:void 0),s=y(t.t({key:n,params:O(t.params),defaultValue:r,noWrap:t.noWrap,ns:t.ns,language:t.language}));return e.createElement(e.Fragment,null,s)},A=t=>{const{t:n}=h();return e.createElement(N,Object.assign({t:n},t))},k=e=>{const{tolgee:t}=v(),{rerender:r}=j();return n((()=>{const n=null==e?void 0:e.map((e=>t.on(e,r)));return()=>{null==n||n.forEach((e=>e.unsubscribe()))}}),[null==e?void 0:e.join(":")]),t};function L(e,r,s){const o=i((()=>function(e){return Object.assign(Object.assign({},e),{t(...t){const n=u(...t);return e.t(Object.assign(Object.assign({},n),{noWrap:!0}))}})}(e)),[]),[c,a]=t(o);return n((()=>{a(e)}),[]),i((()=>{c.setEmitterActive(!1),c.addStaticData(s),c.changeLanguage(r),c.setEmitterActive(!0)}),[r,s,c]),c}export{f as GlobalContextPlugin,A as T,N as TBase,m as TolgeeProvider,b as getProviderInstance,k as useTolgee,L as useTolgeeSSR,E as useTranslate};
1
+ import e,{useState as n,useEffect as t,Suspense as r,useContext as o,useCallback as s,useRef as c,useMemo as i}from"react";import{getFallback as a,getFallbackArray as l,getTranslateProps as u}from"@tolgee/web";export*from"@tolgee/web";const d={useSuspense:!0},g=e.createContext(void 0),b=({tolgee:o,options:s,children:c,fallback:i})=>{const[a,l]=n(!o.isLoaded());t((()=>{o.run().catch((e=>{console.error(e)})).finally((()=>{l(!1)}))}),[o]);const u=Object.assign(Object.assign({},d),s);return u.useSuspense?e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?i:e.createElement(r,{fallback:i||null},c)):e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?i:c)};let p;const f=e=>n=>(p={tolgee:n,options:Object.assign(Object.assign({},d),e)},n);const m=()=>{const e=o(g)||p;if(!e)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return e},v=()=>{const[e,t]=n(0);return{instance:e,rerender:s((()=>{t((e=>e+1))}),[t])}},j=(e,n)=>{const{tolgee:r,options:o}=m(),i=a(e),u=l(i).join(":"),d=Object.assign(Object.assign({},o),n),{rerender:g,instance:b}=v(),p=c(),f=c([]);f.current=[];const j=r.isLoaded(i);t((()=>{const e=r.onNsUpdate(g);return p.current=e,j||e.subscribeNs(i),f.current.forEach((n=>{e.subscribeNs(n)})),()=>{e.unsubscribe()}}),[j,u,r]),t((()=>(r.addActiveNs(i),()=>r.removeActiveNs(i))),[u,r]);const h=s((e=>{var n;const t=null!==(n=e.ns)&&void 0!==n?n:null==i?void 0:i[0];return(e=>{var n;f.current.push(e),null===(n=p.current)||void 0===n||n.subscribeNs(e)})(t),r.t(Object.assign(Object.assign({},e),{ns:t}))}),[r,b]);if(d.useSuspense&&!j)throw r.addActiveNs(i,!0);return{t:h,isLoading:!j}},h=(e,n)=>{const{t:t,isLoading:r}=j(e,n);return{t:s(((...e)=>{const n=u(...e);return t(n)}),[t]),isLoading:r}},E=n=>{if(!n)return;const t={};return Object.entries(n||{}).forEach((([n,r])=>{if("function"==typeof r)t[n]=e=>r(O(e));else if(e.isValidElement(r)){const o=r;t[n]=n=>void 0===o.props.children&&(null==n?void 0:n.length)?e.cloneElement(o,{},O(n)):e.cloneElement(o)}else t[n]=r})),t},O=n=>Array.isArray(n)?e.Children.toArray(n):n,y=n=>{const t=n.keyName||n.children;void 0===t&&console.error("T component: keyName not defined");const r=n.defaultValue||(n.keyName?n.children:void 0),{t:o}=j(),s=O(o({key:t,params:E(n.params),defaultValue:r,noWrap:n.noWrap,ns:n.ns,language:n.language}));return e.createElement(e.Fragment,null,s)},N=e=>{const{tolgee:n}=m(),{rerender:r}=v();return t((()=>{const t=null==e?void 0:e.map((e=>n.on(e,r)));return()=>{null==t||t.forEach((e=>e.unsubscribe()))}}),[null==e?void 0:e.join(":")]),n};function A(e,r,o){const s=i((()=>function(e){return Object.assign(Object.assign({},e),{t(...n){const t=u(...n);return e.t(Object.assign(Object.assign({},t),{noWrap:!0}))}})}(e)),[]),[c,a]=n(s);return t((()=>{a(e)}),[]),i((()=>{c.setEmitterActive(!1),c.addStaticData(o),c.changeLanguage(r),c.setEmitterActive(!0)}),[r,o,c]),c}export{f as GlobalContextPlugin,y as T,b as TolgeeProvider,g as TolgeeProviderContext,N as useTolgee,A as useTolgeeSSR,h as useTranslate};
2
2
  //# sourceMappingURL=tolgee-react.esm.min.js.map