@tolgee/react 5.10.1 → 5.10.2-prerelease.4bd654a9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/T.d.ts +1 -17
- package/dist/TBase.d.ts +2 -0
- package/dist/TolgeeProvider.d.ts +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/tolgee-react.cjs.js +32 -8
- package/dist/tolgee-react.cjs.js.map +1 -1
- package/dist/tolgee-react.cjs.min.js +1 -1
- package/dist/tolgee-react.cjs.min.js.map +1 -1
- package/dist/tolgee-react.esm.js +31 -8
- package/dist/tolgee-react.esm.js.map +1 -1
- package/dist/tolgee-react.esm.min.js +1 -1
- package/dist/tolgee-react.esm.min.js.map +1 -1
- package/dist/tolgee-react.esm.min.mjs +1 -1
- package/dist/tolgee-react.esm.min.mjs.map +1 -1
- package/dist/tolgee-react.esm.mjs +31 -8
- package/dist/tolgee-react.esm.mjs.map +1 -1
- package/dist/tolgee-react.umd.js +32 -8
- package/dist/tolgee-react.umd.js.map +1 -1
- package/dist/tolgee-react.umd.min.js +1 -1
- package/dist/tolgee-react.umd.min.js.map +1 -1
- package/dist/types.d.ts +22 -1
- package/dist/useTolgeeSSR.d.ts +12 -1
- package/lib/T.d.ts +1 -17
- package/lib/TBase.d.ts +2 -0
- package/lib/TolgeeProvider.d.ts +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/types.d.ts +22 -1
- package/lib/useTolgeeSSR.d.ts +12 -1
- package/package.json +5 -5
- package/src/T.tsx +4 -43
- package/src/TBase.tsx +27 -0
- package/src/TolgeeProvider.tsx +13 -3
- package/src/index.ts +3 -2
- package/src/types.ts +31 -1
- package/src/useTolgeeContext.ts +2 -1
- package/src/useTolgeeSSR.ts +14 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tolgee-react.esm.min.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":["DEFAULT_REACT_OPTIONS","useSuspense","TolgeeProviderContext","React","createContext","undefined","TolgeeProvider","tolgee","options","children","fallback","loading","setLoading","useState","isLoaded","useEffect","run","catch","e","console","error","finally","optionsWithDefault","Object","assign","createElement","Provider","value","Suspense","globalContext","GlobalContextPlugin","useTolgeeContext","context","useContext","Error","useRerender","instance","setCounter","rerender","useCallback","num","useTranslateInternal","ns","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","subscriptionRef","useRef","subscriptionQueue","current","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","useTranslate","tInternal","params","getTranslateProps","wrapTagHandlers","result","entries","key","chunk","addReactKeys","isValidElement","el","length","cloneElement","val","Array","isArray","Children","toArray","T","keyName","defaultValue","translation","noWrap","language","Fragment","useTolgee","events","listeners","map","on","listener","useTolgeeSSR","tolgeeInstance","locale","staticData","initialInstance","useMemo","args","getTolgeeWithDeactivatedWrapper","setTolgee","setEmitterActive","addStaticData","changeLanguage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tolgee-react.esm.min.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":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","TolgeeProvider","tolgee","options","children","fallback","loading","setLoading","useState","isLoaded","useEffect","run","catch","e","console","error","finally","optionsWithDefault","Object","assign","TolgeeProviderContext","createElement","Provider","value","Suspense","globalContext","GlobalContextPlugin","useTolgeeContext","context","useContext","Error","useRerender","instance","setCounter","rerender","useCallback","num","useTranslateInternal","ns","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","subscriptionRef","useRef","subscriptionQueue","current","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","useTranslate","tInternal","params","getTranslateProps","wrapTagHandlers","result","entries","key","chunk","addReactKeys","isValidElement","el","length","cloneElement","val","Array","isArray","Children","toArray","TBase","keyName","defaultValue","translation","noWrap","language","Fragment","T","useTolgee","events","listeners","map","on","listener","useTolgeeSSR","tolgeeInstance","staticData","initialInstance","useMemo","args","getTolgeeWithDeactivatedWrapper","setTolgee","setEmitterActive","addStaticData","changeLanguage"],"mappings":"2OAIO,MAAMA,EAAsC,CACjDC,aAAa,GAGf,IAAIC,EAEG,MAAMC,EAAsB,KAC5BD,IACHA,EAAmBE,EAAMC,mBACvBC,IAIGJ,GAUIK,EAAgD,EAC3DC,SACAC,UACAC,WACAC,eAEA,MAAOC,EAASC,GAAcC,GAAUN,EAAOO,YAE/CC,GAAU,KACRR,EACGS,MACAC,OAAOC,IAENC,QAAQC,MAAMF,EAAE,IAEjBG,SAAQ,KACPT,GAAW,EAAM,GACjB,GACH,CAACL,IAEJ,MAAMe,EAA0BC,OAAAC,OAAAD,OAAAC,OAAA,GAAAzB,GAA0BS,GAEpDiB,EAAwBvB,IAE9B,OAAIoB,EAAmBtB,YAEnBG,EAACuB,cAAAD,EAAsBE,SAAQ,CAC7BC,MAAO,CAAErB,SAAQC,QAASc,IAEzBX,EACC,EAEAR,EAAAuB,cAACG,EAAS,CAAAnB,SAAUA,GAAY,MAAOD,IAO7CN,EAACuB,cAAAD,EAAsBE,SACrB,CAAAC,MAAO,CAAErB,SAAQC,QAASc,IAEzBX,EAAUD,EAAWD,EAExB,ECnEJ,IAAIqB,EAEG,MAAMC,EACVvB,GACAD,IACCuB,EAAgB,CACdvB,SACAC,QAAce,OAAAC,OAAAD,OAAAC,OAAA,GAAAzB,GAA0BS,IAEnCD,GCTJ,MAAMyB,EAAmB,KAC9B,MAAMP,EAAwBvB,IACxB+B,EAAUC,EAAWT,IDWpBK,ECVP,IAAKG,EACH,MAAM,IAAIE,MACR,0EAGJ,OAAOF,CAAO,ECVHG,EAAc,KACzB,MAAOC,EAAUC,GAAczB,EAAS,GAKxC,MAAO,CAAEwB,WAAUE,SAHFC,GAAY,KAC3BF,GAAYG,GAAQA,EAAM,GAAE,GAC3B,CAACH,IACyB,ECKlBI,EAAuB,CAClCC,EACAnC,KAEA,MAAMD,OAAEA,EAAQC,QAASoC,GAAmBZ,IACtCa,EAAaC,EAAYH,GACzBI,EAAmBC,EAAiBH,GAAYI,KAAK,KAErDC,EACD3B,OAAAC,OAAAD,OAAAC,OAAA,GAAAoB,GACApC,IAIC+B,SAAEA,EAAQF,SAAEA,GAAaD,IAEzBe,EAAkBC,IAElBC,EAAoBD,EAAO,IACjCC,EAAkBC,QAAU,GAE5B,MAKMxC,EAAWP,EAAOO,SAAS+B,GAEjC9B,GAAU,KACR,MAAMwC,EAAehD,EAAOiD,WAAWjB,GASvC,OARAY,EAAgBG,QAAUC,EACrBzC,GACHyC,EAAaE,YAAYZ,GAE3BQ,EAAkBC,QAAQI,SAASf,IACjCY,EAAcE,YAAYd,EAAG,IAGxB,KACLY,EAAaI,aAAa,CAC3B,GACA,CAAC7C,EAAUiC,EAAkBxC,IAEhCQ,GAAU,KACRR,EAAOqD,YAAYf,GACZ,IAAMtC,EAAOsD,eAAehB,KAClC,CAACE,EAAkBxC,IAEtB,MAAMuD,EAAItB,GACPuB,UACC,MAAMC,EAAqB,QAARC,EAAAF,EAAMpB,UAAE,IAAAsB,EAAAA,EAAIpB,aAAA,EAAAA,EAAa,GAE5C,MA/BkB,CAACF,UACrBU,EAAkBC,QAAQY,KAAKvB,GACR,QAAvBsB,EAAAd,EAAgBG,eAAO,IAAAW,GAAAA,EAAER,YAAYd,EAAG,EA4BtCwB,CAAcH,GACPzD,EAAOuD,EAAOvC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAuC,IAAOpB,GAAIqB,IAAoB,GAEtD,CAACzD,EAAQ8B,IAGX,GAAIa,EAAelD,cAAgBc,EACjC,MAAMP,EAAOqD,YAAYf,GAAY,GAGvC,MAAO,CAAEiB,IAAGM,WAAYtD,EAAU,EC1DvBuD,EAAe,CAC1B1B,EACAnC,KAEA,MAAQsD,EAAGQ,EAASF,UAAEA,GAAc1B,EAAqBC,EAAInC,GAW7D,MAAO,CAAEsD,EATCtB,GACR,IAAI+B,KAEF,MAAMR,EAAQS,KAAqBD,GACnC,OAAOD,EAAUP,EAAM,GAEzB,CAACO,IAGSF,YAAW,EC1BZK,EACXF,IAEA,IAAKA,EACH,OAGF,MAAMG,EAAc,CAAA,EAmBpB,OAjBAnD,OAAOoD,QAAQJ,GAAU,CAAE,GAAEb,SAAQ,EAAEkB,EAAKhD,MAC1C,GAAqB,mBAAVA,EACT8C,EAAOE,GAAQC,GACNjD,EAAMkD,EAAaD,SAEvB,GAAI1E,EAAM4E,eAAenD,GAAe,CAC7C,MAAMoD,EAAKpD,EACX8C,EAAOE,GAAQC,QACgBxE,IAAtB2E,EAAGjB,MAAMtD,WAA0BoE,aAAK,EAALA,EAAOI,QAC7C9E,EAAM+E,aAAaF,EAAI,CAAE,EAAEF,EAAaD,IACxC1E,EAAM+E,aAAaF,EAE1B,MACCN,EAAOE,GAAOhD,CACf,IAGI8C,CAAM,EAGFI,EACXK,GAEIC,MAAMC,QAAQF,GACThF,EAAMmF,SAASC,QAAQJ,GAEvBA,ECpCEK,EAAyBzB,IACpC,MAAMa,EAAOb,EAA2B0B,SAAW1B,EAAMtD,cAC7CJ,IAARuE,GAEFzD,QAAQC,MAAM,oCAEhB,MAAMsE,EACJ3B,EAAM2B,eACJ3B,EAA2B0B,QAAU1B,EAAMtD,cAAWJ,GAEpDsF,EAAcb,EAClBf,EAAMD,EAAE,CACNc,IAAKA,EACLL,OAAQE,EAAgBV,EAAMQ,QAC9BmB,eACAE,OAAQ7B,EAAM6B,OACdjD,GAAIoB,EAAMpB,GACVkD,SAAU9B,EAAM8B,YAIpB,OAAO1F,EAAAuB,cAAAvB,EAAA2F,SAAA,KAAGH,EAAe,ECddI,EAAiBhC,IAC5B,MAAMD,EAAEA,GAAMpB,IAEd,OAAOvC,EAAAuB,cAAC8D,EAAMjE,OAAAC,OAAA,CAAAsC,EAAGA,GAA8BC,GAAS,ECT7CiC,EAAaC,IACxB,MAAM1F,OAAEA,GAAWyB,KAEbO,SAAEA,GAAaH,IASrB,OAPArB,GAAU,KACR,MAAMmF,EAAYD,eAAAA,EAAQE,KAAKjF,GAAMX,EAAO6F,GAAGlF,EAAGqB,KAClD,MAAO,KACL2D,SAAAA,EAAWxC,SAAS2C,GAAaA,EAAS1C,eAAc,CACzD,GACA,CAACsC,aAAA,EAAAA,EAAQhD,KAAK,OAEV1C,CAAM,WCcC+F,EACdC,EACAV,EACAW,GAEA,MAAMC,EAAkBC,GACtB,IA9BJ,SACEnG,GAEA,OAAAgB,OAAAC,OAAAD,OAAAC,OAAA,GACKjB,GAAM,CACTuD,KAAK6C,GAEH,MAAM5C,EAAQS,KAAqBmC,GACnC,OAAOpG,EAAOuD,EAAOvC,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAuC,IAAO6B,QAAQ,IACrC,GAEL,CAmBUgB,CAAgCL,IACtC,KAGKhG,EAAQsG,GAAahG,EAAS4F,GAgBrC,OAdA1F,GAAU,KACR8F,EAAUN,EAAe,GACxB,IAEHG,GAAQ,KAINnG,EAAOuG,kBAAiB,GACxBvG,EAAOwG,cAAcP,GACrBjG,EAAOyG,eAAenB,GACtBtF,EAAOuG,kBAAiB,EAAK,GAC5B,CAACjB,EAAUW,EAAYjG,IAEnBA,CACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e,{useState as
|
|
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};
|
|
2
2
|
//# sourceMappingURL=tolgee-react.esm.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tolgee-react.esm.min.mjs","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":["DEFAULT_REACT_OPTIONS","useSuspense","TolgeeProviderContext","React","createContext","undefined","TolgeeProvider","tolgee","options","children","fallback","loading","setLoading","useState","isLoaded","useEffect","run","catch","e","console","error","finally","optionsWithDefault","Object","assign","createElement","Provider","value","Suspense","globalContext","GlobalContextPlugin","useTolgeeContext","context","useContext","Error","useRerender","instance","setCounter","rerender","useCallback","num","useTranslateInternal","ns","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","subscriptionRef","useRef","subscriptionQueue","current","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","useTranslate","tInternal","params","getTranslateProps","wrapTagHandlers","result","entries","key","chunk","addReactKeys","isValidElement","el","length","cloneElement","val","Array","isArray","Children","toArray","T","keyName","defaultValue","translation","noWrap","language","Fragment","useTolgee","events","listeners","map","on","listener","useTolgeeSSR","tolgeeInstance","locale","staticData","initialInstance","useMemo","args","getTolgeeWithDeactivatedWrapper","setTolgee","setEmitterActive","addStaticData","changeLanguage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tolgee-react.esm.min.mjs","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":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","TolgeeProvider","tolgee","options","children","fallback","loading","setLoading","useState","isLoaded","useEffect","run","catch","e","console","error","finally","optionsWithDefault","Object","assign","TolgeeProviderContext","createElement","Provider","value","Suspense","globalContext","GlobalContextPlugin","useTolgeeContext","context","useContext","Error","useRerender","instance","setCounter","rerender","useCallback","num","useTranslateInternal","ns","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","subscriptionRef","useRef","subscriptionQueue","current","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","useTranslate","tInternal","params","getTranslateProps","wrapTagHandlers","result","entries","key","chunk","addReactKeys","isValidElement","el","length","cloneElement","val","Array","isArray","Children","toArray","TBase","keyName","defaultValue","translation","noWrap","language","Fragment","T","useTolgee","events","listeners","map","on","listener","useTolgeeSSR","tolgeeInstance","staticData","initialInstance","useMemo","args","getTolgeeWithDeactivatedWrapper","setTolgee","setEmitterActive","addStaticData","changeLanguage"],"mappings":"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"}
|
|
@@ -5,7 +5,13 @@ export * from '@tolgee/web';
|
|
|
5
5
|
const DEFAULT_REACT_OPTIONS = {
|
|
6
6
|
useSuspense: true,
|
|
7
7
|
};
|
|
8
|
-
|
|
8
|
+
let ProviderInstance;
|
|
9
|
+
const getProviderInstance = () => {
|
|
10
|
+
if (!ProviderInstance) {
|
|
11
|
+
ProviderInstance = React.createContext(undefined);
|
|
12
|
+
}
|
|
13
|
+
return ProviderInstance;
|
|
14
|
+
};
|
|
9
15
|
const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
|
|
10
16
|
const [loading, setLoading] = useState(!tolgee.isLoaded());
|
|
11
17
|
useEffect(() => {
|
|
@@ -20,6 +26,7 @@ const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
|
|
|
20
26
|
});
|
|
21
27
|
}, [tolgee]);
|
|
22
28
|
const optionsWithDefault = Object.assign(Object.assign({}, DEFAULT_REACT_OPTIONS), options);
|
|
29
|
+
const TolgeeProviderContext = getProviderInstance();
|
|
23
30
|
if (optionsWithDefault.useSuspense) {
|
|
24
31
|
return (React.createElement(TolgeeProviderContext.Provider, { value: { tolgee, options: optionsWithDefault } }, loading ? (fallback) : (React.createElement(Suspense, { fallback: fallback || null }, children))));
|
|
25
32
|
}
|
|
@@ -39,6 +46,7 @@ function getGlobalContext() {
|
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
const useTolgeeContext = () => {
|
|
49
|
+
const TolgeeProviderContext = getProviderInstance();
|
|
42
50
|
const context = useContext(TolgeeProviderContext) || getGlobalContext();
|
|
43
51
|
if (!context) {
|
|
44
52
|
throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");
|
|
@@ -143,7 +151,7 @@ const addReactKeys = (val) => {
|
|
|
143
151
|
}
|
|
144
152
|
};
|
|
145
153
|
|
|
146
|
-
const
|
|
154
|
+
const TBase = (props) => {
|
|
147
155
|
const key = props.keyName || props.children;
|
|
148
156
|
if (key === undefined) {
|
|
149
157
|
// eslint-disable-next-line no-console
|
|
@@ -151,8 +159,7 @@ const T = (props) => {
|
|
|
151
159
|
}
|
|
152
160
|
const defaultValue = props.defaultValue ||
|
|
153
161
|
(props.keyName ? props.children : undefined);
|
|
154
|
-
const
|
|
155
|
-
const translation = addReactKeys(t({
|
|
162
|
+
const translation = addReactKeys(props.t({
|
|
156
163
|
key: key,
|
|
157
164
|
params: wrapTagHandlers(props.params),
|
|
158
165
|
defaultValue,
|
|
@@ -163,6 +170,11 @@ const T = (props) => {
|
|
|
163
170
|
return React.createElement(React.Fragment, null, translation);
|
|
164
171
|
};
|
|
165
172
|
|
|
173
|
+
const T = (props) => {
|
|
174
|
+
const { t } = useTranslateInternal();
|
|
175
|
+
return React.createElement(TBase, Object.assign({ t: t }, props));
|
|
176
|
+
};
|
|
177
|
+
|
|
166
178
|
const useTolgee = (events) => {
|
|
167
179
|
const { tolgee } = useTolgeeContext();
|
|
168
180
|
const { rerender } = useRerender();
|
|
@@ -182,7 +194,18 @@ function getTolgeeWithDeactivatedWrapper(tolgee) {
|
|
|
182
194
|
return tolgee.t(Object.assign(Object.assign({}, props), { noWrap: true }));
|
|
183
195
|
} });
|
|
184
196
|
}
|
|
185
|
-
|
|
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) {
|
|
186
209
|
const initialInstance = useMemo(() => getTolgeeWithDeactivatedWrapper(tolgeeInstance), []);
|
|
187
210
|
const [tolgee, setTolgee] = useState(initialInstance);
|
|
188
211
|
useEffect(() => {
|
|
@@ -194,11 +217,11 @@ function useTolgeeSSR(tolgeeInstance, locale, staticData) {
|
|
|
194
217
|
// events emitting must be off, to not trigger re-render while rendering
|
|
195
218
|
tolgee.setEmitterActive(false);
|
|
196
219
|
tolgee.addStaticData(staticData);
|
|
197
|
-
tolgee.changeLanguage(
|
|
220
|
+
tolgee.changeLanguage(language);
|
|
198
221
|
tolgee.setEmitterActive(true);
|
|
199
|
-
}, [
|
|
222
|
+
}, [language, staticData, tolgee]);
|
|
200
223
|
return tolgee;
|
|
201
224
|
}
|
|
202
225
|
|
|
203
|
-
export { GlobalContextPlugin, T, TolgeeProvider,
|
|
226
|
+
export { GlobalContextPlugin, T, TBase, TolgeeProvider, getProviderInstance, useTolgee, useTolgeeSSR, useTranslate };
|
|
204
227
|
//# sourceMappingURL=tolgee-react.esm.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tolgee-react.esm.mjs","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
|
+
{"version":3,"file":"tolgee-react.esm.mjs","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":";;;;AAIO,MAAM,qBAAqB,GAAiB;AACjD,IAAA,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,IAAI,gBAA+D,CAAC;AAE7D,MAAM,mBAAmB,GAAG,MAAK;IACtC,IAAI,CAAC,gBAAgB,EAAE;AACrB,QAAA,gBAAgB,GAAG,KAAK,CAAC,aAAa,CACpC,SAAS,CACV,CAAC;AACH,KAAA;AAED,IAAA,OAAO,gBAAgB,CAAC;AAC1B,EAAE;AASK,MAAM,cAAc,GAAkC,CAAC,EAC5D,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,KAAI;AACH,IAAA,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3D,SAAS,CAAC,MAAK;QACb,MAAM;AACH,aAAA,GAAG,EAAE;AACL,aAAA,KAAK,CAAC,CAAC,CAAC,KAAI;;AAEX,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,SAAC,CAAC;aACD,OAAO,CAAC,MAAK;YACZ,UAAU,CAAC,KAAK,CAAC,CAAC;AACpB,SAAC,CAAC,CAAC;AACP,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEb,IAAA,MAAM,kBAAkB,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,qBAAqB,CAAK,EAAA,OAAO,CAAE,CAAC;AAEpE,IAAA,MAAM,qBAAqB,GAAG,mBAAmB,EAAE,CAAC;IAEpD,IAAI,kBAAkB,CAAC,WAAW,EAAE;AAClC,QAAA,QACE,KAAC,CAAA,aAAA,CAAA,qBAAqB,CAAC,QAAQ,EAAA,EAC7B,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAE7C,EAAA,OAAO,IACN,QAAQ,KAER,KAAA,CAAA,aAAA,CAAC,QAAQ,EAAC,EAAA,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAG,EAAA,QAAQ,CAAY,CAC5D,CAC8B,EACjC;AACH,KAAA;IAED,QACE,KAAC,CAAA,aAAA,CAAA,qBAAqB,CAAC,QAAQ,EAC7B,EAAA,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAE7C,EAAA,OAAO,GAAG,QAAQ,GAAG,QAAQ,CACC,EACjC;AACJ;;ACpEA,IAAI,aAA6C,CAAC;AAE3C,MAAM,mBAAmB,GAC9B,CAAC,OAA+B,KAChC,CAAC,MAAM,KAAI;AACT,IAAA,aAAa,GAAG;QACd,MAAM;AACN,QAAA,OAAO,EAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,qBAAqB,CAAK,EAAA,OAAO,CAAE;KAClD,CAAC;AACF,IAAA,OAAO,MAAM,CAAC;AAChB,EAAE;SAEY,gBAAgB,GAAA;AAC9B,IAAA,OAAO,aAAa,CAAC;AACvB;;ACdO,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,qBAAqB,GAAG,mBAAmB,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;AACH,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;;ACXM,MAAM,WAAW,GAAG,MAAK;IAC9B,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE3C,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;QAChC,UAAU,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAC/B,KAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACjB,IAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;;ACIM,MAAM,oBAAoB,GAAG,CAClC,EAAe,EACf,OAAsB,KACpB;IACF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAC/D,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEhE,IAAA,MAAM,cAAc,GACf,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,cAAc,CACd,EAAA,OAAO,CACX,CAAC;;IAGF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;AAE7C,IAAA,MAAM,eAAe,GAAG,MAAM,EAAyB,CAAC;AAExD,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAkB,CAAC,CAAC;AACrD,IAAA,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC;AAE/B,IAAA,MAAM,aAAa,GAAG,CAAC,EAAc,KAAI;;AACvC,QAAA,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,CAAA,EAAA,GAAA,eAAe,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,CAAC,EAAE,CAAC,CAAC;AAC3C,KAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE7C,SAAS,CAAC,MAAK;QACb,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjD,QAAA,eAAe,CAAC,OAAO,GAAG,YAAY,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACtC,SAAA;QACD,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACvC,YAAA,YAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAC,CAAC;KACH,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzC,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACjD,KAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/B,IAAA,MAAM,CAAC,GAAG,WAAW,CACnB,CAAC,KAA0B,KAAI;;AAC7B,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAG,CAAC,CAAC,CAAC;QAC/C,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC,CAAC,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KAAE,EAAE,EAAE,UAAU,EAAA,CAAA,CAAU,CAAC;AACvD,KAAC,EACD,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;AAEF,IAAA,IAAI,cAAc,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE;QAC3C,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC5C,KAAA;IAED,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC;AACrC,CAAC;;MC3DY,YAAY,GAAG,CAC1B,EAAsB,EACtB,OAAsB,KACA;AACtB,IAAA,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAEtE,MAAM,CAAC,GAAG,WAAW,CACnB,CAAC,GAAG,MAAW,KAAI;;AAEjB,QAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3C,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,KAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;AAEF,IAAA,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;AAC1B;;AC3BO,MAAM,eAAe,GAAG,CAC7B,MAA+C,KAC7C;IACF,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;IAED,MAAM,MAAM,GAAQ,EAAE,CAAC;AAEvB,IAAA,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpD,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAU,KAAI;AAC3B,gBAAA,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,aAAC,CAAC;AACH,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,cAAc,CAAC,KAAY,CAAC,EAAE;YAC7C,MAAM,EAAE,GAAG,KAA2B,CAAC;AACvC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAU,KAAI;AAC3B,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,KAAI,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,MAAM,CAAA;AACrD,sBAAE,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACjD,sBAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC7B,aAAC,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrB,SAAA;AACH,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAC1B,GAAoD,KAClD;AACF,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,GAAG,CAAC;AACZ,KAAA;AACH,CAAC;;ACtCY,MAAA,KAAK,GAAmB,CAAC,KAAK,KAAI;IAC7C,MAAM,GAAG,GAAI,KAA0B,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC;IAClE,IAAI,GAAG,KAAK,SAAS,EAAE;;AAErB,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACnD,KAAA;AACD,IAAA,MAAM,YAAY,GAChB,KAAK,CAAC,YAAY;AAClB,SAAE,KAA0B,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAErE,IAAA,MAAM,WAAW,GAAG,YAAY,CAC9B,KAAK,CAAC,CAAC,CAAC;AACN,QAAA,GAAG,EAAE,GAAI;AACT,QAAA,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;QACrC,YAAY;QACZ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,KAAA,CAAC,CACH,CAAC;IAEF,OAAO,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAG,WAAW,CAAI,CAAC;AAC5B;;ACfa,MAAA,CAAC,GAAe,CAAC,KAAK,KAAI;AACrC,IAAA,MAAM,EAAE,CAAC,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAErC,OAAO,KAAA,CAAA,aAAA,CAAC,KAAK,EAAC,MAAA,CAAA,MAAA,CAAA,EAAA,CAAC,EAAE,CAAwB,EAAA,EAAM,KAAK,CAAA,CAAI,CAAC;AAC3D;;ACVa,MAAA,SAAS,GAAG,CAAC,MAAsB,KAAoB;AAClE,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAEtC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAEnC,SAAS,CAAC,MAAK;QACb,MAAM,SAAS,GAAG,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7D,QAAA,OAAO,MAAK;AACV,YAAA,SAAS,aAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3D,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAExB,IAAA,OAAO,MAAM,CAAC;AAChB;;ACXA,SAAS,+BAA+B,CACtC,MAAsB,EAAA;AAEtB,IAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAA,EAAA,EACT,CAAC,CAAC,GAAG,IAAI,EAAA;;AAEP,YAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC,CAAC,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KAAE,MAAM,EAAE,IAAI,EAAA,CAAA,CAAG,CAAC;AAC9C,SAAC,EACD,CAAA,CAAA;AACJ,CAAC;AAED;;;;;;;;;;AAUG;SACa,YAAY,CAC1B,cAA8B,EAC9B,QAAiB,EACjB,UAAyC,EAAA;AAEzC,IAAA,MAAM,eAAe,GAAG,OAAO,CAC7B,MAAM,+BAA+B,CAAC,cAAc,CAAC,EACrD,EAAE,CACH,CAAC;IAEF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IAEtD,SAAS,CAAC,MAAK;QACb,SAAS,CAAC,cAAc,CAAC,CAAC;KAC3B,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,MAAK;;;;AAIX,QAAA,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACjC,QAAA,MAAM,CAAC,cAAc,CAAC,QAAS,CAAC,CAAC;AACjC,QAAA,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;KAC/B,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnC,IAAA,OAAO,MAAM,CAAC;AAChB;;;;"}
|
package/dist/tolgee-react.umd.js
CHANGED
|
@@ -11,7 +11,13 @@
|
|
|
11
11
|
const DEFAULT_REACT_OPTIONS = {
|
|
12
12
|
useSuspense: true,
|
|
13
13
|
};
|
|
14
|
-
|
|
14
|
+
let ProviderInstance;
|
|
15
|
+
const getProviderInstance = () => {
|
|
16
|
+
if (!ProviderInstance) {
|
|
17
|
+
ProviderInstance = React__default["default"].createContext(undefined);
|
|
18
|
+
}
|
|
19
|
+
return ProviderInstance;
|
|
20
|
+
};
|
|
15
21
|
const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
|
|
16
22
|
const [loading, setLoading] = React.useState(!tolgee.isLoaded());
|
|
17
23
|
React.useEffect(() => {
|
|
@@ -26,6 +32,7 @@
|
|
|
26
32
|
});
|
|
27
33
|
}, [tolgee]);
|
|
28
34
|
const optionsWithDefault = Object.assign(Object.assign({}, DEFAULT_REACT_OPTIONS), options);
|
|
35
|
+
const TolgeeProviderContext = getProviderInstance();
|
|
29
36
|
if (optionsWithDefault.useSuspense) {
|
|
30
37
|
return (React__default["default"].createElement(TolgeeProviderContext.Provider, { value: { tolgee, options: optionsWithDefault } }, loading ? (fallback) : (React__default["default"].createElement(React.Suspense, { fallback: fallback || null }, children))));
|
|
31
38
|
}
|
|
@@ -45,6 +52,7 @@
|
|
|
45
52
|
}
|
|
46
53
|
|
|
47
54
|
const useTolgeeContext = () => {
|
|
55
|
+
const TolgeeProviderContext = getProviderInstance();
|
|
48
56
|
const context = React.useContext(TolgeeProviderContext) || getGlobalContext();
|
|
49
57
|
if (!context) {
|
|
50
58
|
throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");
|
|
@@ -149,7 +157,7 @@
|
|
|
149
157
|
}
|
|
150
158
|
};
|
|
151
159
|
|
|
152
|
-
const
|
|
160
|
+
const TBase = (props) => {
|
|
153
161
|
const key = props.keyName || props.children;
|
|
154
162
|
if (key === undefined) {
|
|
155
163
|
// eslint-disable-next-line no-console
|
|
@@ -157,8 +165,7 @@
|
|
|
157
165
|
}
|
|
158
166
|
const defaultValue = props.defaultValue ||
|
|
159
167
|
(props.keyName ? props.children : undefined);
|
|
160
|
-
const
|
|
161
|
-
const translation = addReactKeys(t({
|
|
168
|
+
const translation = addReactKeys(props.t({
|
|
162
169
|
key: key,
|
|
163
170
|
params: wrapTagHandlers(props.params),
|
|
164
171
|
defaultValue,
|
|
@@ -169,6 +176,11 @@
|
|
|
169
176
|
return React__default["default"].createElement(React__default["default"].Fragment, null, translation);
|
|
170
177
|
};
|
|
171
178
|
|
|
179
|
+
const T = (props) => {
|
|
180
|
+
const { t } = useTranslateInternal();
|
|
181
|
+
return React__default["default"].createElement(TBase, Object.assign({ t: t }, props));
|
|
182
|
+
};
|
|
183
|
+
|
|
172
184
|
const useTolgee = (events) => {
|
|
173
185
|
const { tolgee } = useTolgeeContext();
|
|
174
186
|
const { rerender } = useRerender();
|
|
@@ -188,7 +200,18 @@
|
|
|
188
200
|
return tolgee.t(Object.assign(Object.assign({}, props), { noWrap: true }));
|
|
189
201
|
} });
|
|
190
202
|
}
|
|
191
|
-
|
|
203
|
+
/**
|
|
204
|
+
* Updates tolgee static data and language, to be ready right away for the first render
|
|
205
|
+
* and therefore compatible with SSR.
|
|
206
|
+
*
|
|
207
|
+
* It also ensures that the first render is done without wrapping and so it avoids
|
|
208
|
+
* "client different than server" issues.
|
|
209
|
+
*
|
|
210
|
+
* @param tolgeeInstance initialized Tolgee instance
|
|
211
|
+
* @param language language that is obtained outside of Tolgee on the server and client
|
|
212
|
+
* @param staticData static data for the language
|
|
213
|
+
*/
|
|
214
|
+
function useTolgeeSSR(tolgeeInstance, language, staticData) {
|
|
192
215
|
const initialInstance = React.useMemo(() => getTolgeeWithDeactivatedWrapper(tolgeeInstance), []);
|
|
193
216
|
const [tolgee, setTolgee] = React.useState(initialInstance);
|
|
194
217
|
React.useEffect(() => {
|
|
@@ -200,16 +223,17 @@
|
|
|
200
223
|
// events emitting must be off, to not trigger re-render while rendering
|
|
201
224
|
tolgee.setEmitterActive(false);
|
|
202
225
|
tolgee.addStaticData(staticData);
|
|
203
|
-
tolgee.changeLanguage(
|
|
226
|
+
tolgee.changeLanguage(language);
|
|
204
227
|
tolgee.setEmitterActive(true);
|
|
205
|
-
}, [
|
|
228
|
+
}, [language, staticData, tolgee]);
|
|
206
229
|
return tolgee;
|
|
207
230
|
}
|
|
208
231
|
|
|
209
232
|
exports.GlobalContextPlugin = GlobalContextPlugin;
|
|
210
233
|
exports.T = T;
|
|
234
|
+
exports.TBase = TBase;
|
|
211
235
|
exports.TolgeeProvider = TolgeeProvider;
|
|
212
|
-
exports.
|
|
236
|
+
exports.getProviderInstance = getProviderInstance;
|
|
213
237
|
exports.useTolgee = useTolgee;
|
|
214
238
|
exports.useTolgeeSSR = useTolgeeSSR;
|
|
215
239
|
exports.useTranslate = useTranslate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tolgee-react.umd.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
|
+
{"version":3,"file":"tolgee-react.umd.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,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("@tolgee/web")):"function"==typeof define&&define.amd?define(["exports","react","@tolgee/web"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@tolgee/react"]={},e.React,e["@tolgee/web"])}(this,(function(e,t,n){"use strict";function
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("@tolgee/web")):"function"==typeof define&&define.amd?define(["exports","react","@tolgee/web"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@tolgee/react"]={},e.React,e["@tolgee/web"])}(this,(function(e,t,n){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=s(t);const o={useSuspense:!0};let a;const u=()=>(a||(a=r.default.createContext(void 0)),a);let c;const l=()=>{const e=u(),n=t.useContext(e)||c;if(!n)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return n},i=()=>{const[e,n]=t.useState(0);return{instance:e,rerender:t.useCallback((()=>{n((e=>e+1))}),[n])}},d=(e,s)=>{const{tolgee:r,options:o}=l(),a=n.getFallback(e),u=n.getFallbackArray(a).join(":"),c=Object.assign(Object.assign({},o),s),{rerender:d,instance:f}=i(),g=t.useRef(),b=t.useRef([]);b.current=[];const p=r.isLoaded(a);t.useEffect((()=>{const e=r.onNsUpdate(d);return g.current=e,p||e.subscribeNs(a),b.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[p,u,r]),t.useEffect((()=>(r.addActiveNs(a),()=>r.removeActiveNs(a))),[u,r]);const v=t.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),r.t(Object.assign(Object.assign({},e),{ns:n}))}),[r,f]);if(c.useSuspense&&!p)throw r.addActiveNs(a,!0);return{t:v,isLoading:!p}},f=e=>{if(!e)return;const t={};return Object.entries(e||{}).forEach((([e,n])=>{if("function"==typeof n)t[e]=e=>n(g(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,{},g(e)):r.default.cloneElement(s)}else t[e]=n})),t},g=e=>Array.isArray(e)?r.default.Children.toArray(e):e,b=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=g(e.t({key:t,params:f(e.params),defaultValue:n,noWrap:e.noWrap,ns:e.ns,language:e.language}));return r.default.createElement(r.default.Fragment,null,s)};e.GlobalContextPlugin=e=>t=>(c={tolgee:t,options:Object.assign(Object.assign({},o),e)},t),e.T=e=>{const{t:t}=d();return r.default.createElement(b,Object.assign({t:t},e))},e.TBase=b,e.TolgeeProvider=({tolgee:e,options:n,children:s,fallback:a})=>{const[c,l]=t.useState(!e.isLoaded());t.useEffect((()=>{e.run().catch((e=>{console.error(e)})).finally((()=>{l(!1)}))}),[e]);const i=Object.assign(Object.assign({},o),n),d=u();return i.useSuspense?r.default.createElement(d.Provider,{value:{tolgee:e,options:i}},c?a:r.default.createElement(t.Suspense,{fallback:a||null},s)):r.default.createElement(d.Provider,{value:{tolgee:e,options:i}},c?a:s)},e.getProviderInstance=u,e.useTolgee=e=>{const{tolgee:n}=l(),{rerender:s}=i();return t.useEffect((()=>{const t=null==e?void 0:e.map((e=>n.on(e,s)));return()=>{null==t||t.forEach((e=>e.unsubscribe()))}}),[null==e?void 0:e.join(":")]),n},e.useTolgeeSSR=function(e,s,r){const o=t.useMemo((()=>function(e){return Object.assign(Object.assign({},e),{t(...t){const s=n.getTranslateProps(...t);return e.t(Object.assign(Object.assign({},s),{noWrap:!0}))}})}(e)),[]),[a,u]=t.useState(o);return t.useEffect((()=>{u(e)}),[]),t.useMemo((()=>{a.setEmitterActive(!1),a.addStaticData(r),a.changeLanguage(s),a.setEmitterActive(!0)}),[s,r,a]),a},e.useTranslate=(e,s)=>{const{t:r,isLoading:o}=d(e,s);return{t:t.useCallback(((...e)=>{const t=n.getTranslateProps(...e);return r(t)}),[r]),isLoading:o}},Object.keys(n).forEach((function(t){"default"===t||e.hasOwnProperty(t)||Object.defineProperty(e,t,{enumerable:!0,get:function(){return n[t]}})})),Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
2
|
//# sourceMappingURL=tolgee-react.umd.min.js.map
|