@tolgee/react 5.10.0 → 5.10.2-prerelease.3fbb14b1.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.
@@ -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.run().finally(() => {\n setLoading(false);\n });\n return () => {\n tolgee.stop();\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","finally","stop","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","console","error","defaultValue","translation","noWrap","language","Fragment","useTolgee","events","listeners","map","e","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":"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"}
@@ -1,2 +1,2 @@
1
- import e,{useState as n,useEffect as t,Suspense as r,useContext as s,useCallback as o,useRef as i,useMemo as c}from"react";import{getFallback as a,getFallbackArray as l,getTranslateProps as u}from"@tolgee/web";export*from"@tolgee/web";const d={useSuspense:!0},g=e.createContext(void 0),b=({tolgee:s,options:o,children:i,fallback:c})=>{const[a,l]=n(!s.isLoaded());t((()=>(s.run().finally((()=>{l(!1)})),()=>{s.stop()})),[s]);const u=Object.assign(Object.assign({},d),o);return u.useSuspense?e.createElement(g.Provider,{value:{tolgee:s,options:u}},a?c:e.createElement(r,{fallback:c||null},i)):e.createElement(g.Provider,{value:{tolgee:s,options:u}},a?c:i)};let p;const f=e=>n=>(p={tolgee:n,options:Object.assign(Object.assign({},d),e)},n);const m=()=>{const e=s(g)||p;if(!e)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return e},v=()=>{const[e,t]=n(0);return{instance:e,rerender:o((()=>{t((e=>e+1))}),[t])}},j=(e,n)=>{const{tolgee:r,options:s}=m(),c=a(e),u=l(c).join(":"),d=Object.assign(Object.assign({},s),n),{rerender:g,instance:b}=v(),p=i(),f=i([]);f.current=[];const j=r.isLoaded(c);t((()=>{const e=r.onNsUpdate(g);return p.current=e,j||e.subscribeNs(c),f.current.forEach((n=>{e.subscribeNs(n)})),()=>{e.unsubscribe()}}),[j,u,r]),t((()=>(r.addActiveNs(c),()=>r.removeActiveNs(c))),[u,r]);const h=o((e=>{var n;const t=null!==(n=e.ns)&&void 0!==n?n:null==c?void 0:c[0];return(e=>{var n;f.current.push(e),null===(n=p.current)||void 0===n||n.subscribeNs(e)})(t),r.t(Object.assign(Object.assign({},e),{ns:t}))}),[r,b]);if(d.useSuspense&&!j)throw r.addActiveNs(c,!0);return{t:h,isLoading:!j}},h=(e,n)=>{const{t:t,isLoading:r}=j(e,n);return{t:o(((...e)=>{const n=u(...e);return t(n)}),[t]),isLoading:r}},E=n=>{if(!n)return;const t={};return Object.entries(n||{}).forEach((([n,r])=>{if("function"==typeof r)t[n]=e=>r(O(e));else if(e.isValidElement(r)){const s=r;t[n]=n=>void 0===s.props.children&&(null==n?void 0:n.length)?e.cloneElement(s,{},O(n)):e.cloneElement(s)}else t[n]=r})),t},O=n=>Array.isArray(n)?e.Children.toArray(n):n,y=n=>{const t=n.keyName||n.children;void 0===t&&console.error("T component: keyName not defined");const r=n.defaultValue||(n.keyName?n.children:void 0),{t:s}=j(),o=O(s({key:t,params:E(n.params),defaultValue:r,noWrap:n.noWrap,ns:n.ns,language:n.language}));return e.createElement(e.Fragment,null,o)},N=e=>{const{tolgee:n}=m(),{rerender:r}=v();return t((()=>{const t=null==e?void 0:e.map((e=>n.on(e,r)));return()=>{null==t||t.forEach((e=>e.unsubscribe()))}}),[null==e?void 0:e.join(":")]),n};function A(e,r,s){const o=c((()=>function(e){return Object.assign(Object.assign({},e),{t(...n){const t=u(...n);return e.t(Object.assign(Object.assign({},t),{noWrap:!0}))}})}(e)),[]),[i,a]=n(o);return t((()=>{a(e)}),[]),c((()=>{i.setEmitterActive(!1),i.addStaticData(s),i.changeLanguage(r),i.setEmitterActive(!0)}),[r,s,i]),i}export{f as GlobalContextPlugin,y as T,b as TolgeeProvider,g as TolgeeProviderContext,N as useTolgee,A as useTolgeeSSR,h as useTranslate};
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.run().finally(() => {\n setLoading(false);\n });\n return () => {\n tolgee.stop();\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","finally","stop","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","console","error","defaultValue","translation","noWrap","language","Fragment","useTolgee","events","listeners","map","e","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,18 +5,28 @@ export * from '@tolgee/web';
5
5
  const DEFAULT_REACT_OPTIONS = {
6
6
  useSuspense: true,
7
7
  };
8
- const TolgeeProviderContext = React.createContext(undefined);
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(() => {
12
- tolgee.run().finally(() => {
18
+ tolgee
19
+ .run()
20
+ .catch((e) => {
21
+ // eslint-disable-next-line no-console
22
+ console.error(e);
23
+ })
24
+ .finally(() => {
13
25
  setLoading(false);
14
26
  });
15
- return () => {
16
- tolgee.stop();
17
- };
18
27
  }, [tolgee]);
19
28
  const optionsWithDefault = Object.assign(Object.assign({}, DEFAULT_REACT_OPTIONS), options);
29
+ const TolgeeProviderContext = getProviderInstance();
20
30
  if (optionsWithDefault.useSuspense) {
21
31
  return (React.createElement(TolgeeProviderContext.Provider, { value: { tolgee, options: optionsWithDefault } }, loading ? (fallback) : (React.createElement(Suspense, { fallback: fallback || null }, children))));
22
32
  }
@@ -36,6 +46,7 @@ function getGlobalContext() {
36
46
  }
37
47
 
38
48
  const useTolgeeContext = () => {
49
+ const TolgeeProviderContext = getProviderInstance();
39
50
  const context = useContext(TolgeeProviderContext) || getGlobalContext();
40
51
  if (!context) {
41
52
  throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");
@@ -140,7 +151,7 @@ const addReactKeys = (val) => {
140
151
  }
141
152
  };
142
153
 
143
- const T = (props) => {
154
+ const TBase = (props) => {
144
155
  const key = props.keyName || props.children;
145
156
  if (key === undefined) {
146
157
  // eslint-disable-next-line no-console
@@ -148,8 +159,7 @@ const T = (props) => {
148
159
  }
149
160
  const defaultValue = props.defaultValue ||
150
161
  (props.keyName ? props.children : undefined);
151
- const { t } = useTranslateInternal();
152
- const translation = addReactKeys(t({
162
+ const translation = addReactKeys(props.t({
153
163
  key: key,
154
164
  params: wrapTagHandlers(props.params),
155
165
  defaultValue,
@@ -160,6 +170,11 @@ const T = (props) => {
160
170
  return React.createElement(React.Fragment, null, translation);
161
171
  };
162
172
 
173
+ const T = (props) => {
174
+ const { t } = useTranslateInternal();
175
+ return React.createElement(TBase, Object.assign({ t: t }, props));
176
+ };
177
+
163
178
  const useTolgee = (events) => {
164
179
  const { tolgee } = useTolgeeContext();
165
180
  const { rerender } = useRerender();
@@ -179,7 +194,18 @@ function getTolgeeWithDeactivatedWrapper(tolgee) {
179
194
  return tolgee.t(Object.assign(Object.assign({}, props), { noWrap: true }));
180
195
  } });
181
196
  }
182
- function useTolgeeSSR(tolgeeInstance, locale, staticData) {
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) {
183
209
  const initialInstance = useMemo(() => getTolgeeWithDeactivatedWrapper(tolgeeInstance), []);
184
210
  const [tolgee, setTolgee] = useState(initialInstance);
185
211
  useEffect(() => {
@@ -191,11 +217,11 @@ function useTolgeeSSR(tolgeeInstance, locale, staticData) {
191
217
  // events emitting must be off, to not trigger re-render while rendering
192
218
  tolgee.setEmitterActive(false);
193
219
  tolgee.addStaticData(staticData);
194
- tolgee.changeLanguage(locale);
220
+ tolgee.changeLanguage(language);
195
221
  tolgee.setEmitterActive(true);
196
- }, [locale, staticData, tolgee]);
222
+ }, [language, staticData, tolgee]);
197
223
  return tolgee;
198
224
  }
199
225
 
200
- export { GlobalContextPlugin, T, TolgeeProvider, TolgeeProviderContext, useTolgee, useTolgeeSSR, useTranslate };
226
+ export { GlobalContextPlugin, T, TBase, TolgeeProvider, getProviderInstance, useTolgee, useTolgeeSSR, useTranslate };
201
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.run().finally(() => {\n setLoading(false);\n });\n return () => {\n tolgee.stop();\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":"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"}
@@ -11,18 +11,28 @@
11
11
  const DEFAULT_REACT_OPTIONS = {
12
12
  useSuspense: true,
13
13
  };
14
- const TolgeeProviderContext = React__default["default"].createContext(undefined);
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(() => {
18
- tolgee.run().finally(() => {
24
+ tolgee
25
+ .run()
26
+ .catch((e) => {
27
+ // eslint-disable-next-line no-console
28
+ console.error(e);
29
+ })
30
+ .finally(() => {
19
31
  setLoading(false);
20
32
  });
21
- return () => {
22
- tolgee.stop();
23
- };
24
33
  }, [tolgee]);
25
34
  const optionsWithDefault = Object.assign(Object.assign({}, DEFAULT_REACT_OPTIONS), options);
35
+ const TolgeeProviderContext = getProviderInstance();
26
36
  if (optionsWithDefault.useSuspense) {
27
37
  return (React__default["default"].createElement(TolgeeProviderContext.Provider, { value: { tolgee, options: optionsWithDefault } }, loading ? (fallback) : (React__default["default"].createElement(React.Suspense, { fallback: fallback || null }, children))));
28
38
  }
@@ -42,6 +52,7 @@
42
52
  }
43
53
 
44
54
  const useTolgeeContext = () => {
55
+ const TolgeeProviderContext = getProviderInstance();
45
56
  const context = React.useContext(TolgeeProviderContext) || getGlobalContext();
46
57
  if (!context) {
47
58
  throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");
@@ -146,7 +157,7 @@
146
157
  }
147
158
  };
148
159
 
149
- const T = (props) => {
160
+ const TBase = (props) => {
150
161
  const key = props.keyName || props.children;
151
162
  if (key === undefined) {
152
163
  // eslint-disable-next-line no-console
@@ -154,8 +165,7 @@
154
165
  }
155
166
  const defaultValue = props.defaultValue ||
156
167
  (props.keyName ? props.children : undefined);
157
- const { t } = useTranslateInternal();
158
- const translation = addReactKeys(t({
168
+ const translation = addReactKeys(props.t({
159
169
  key: key,
160
170
  params: wrapTagHandlers(props.params),
161
171
  defaultValue,
@@ -166,6 +176,11 @@
166
176
  return React__default["default"].createElement(React__default["default"].Fragment, null, translation);
167
177
  };
168
178
 
179
+ const T = (props) => {
180
+ const { t } = useTranslateInternal();
181
+ return React__default["default"].createElement(TBase, Object.assign({ t: t }, props));
182
+ };
183
+
169
184
  const useTolgee = (events) => {
170
185
  const { tolgee } = useTolgeeContext();
171
186
  const { rerender } = useRerender();
@@ -185,7 +200,18 @@
185
200
  return tolgee.t(Object.assign(Object.assign({}, props), { noWrap: true }));
186
201
  } });
187
202
  }
188
- function useTolgeeSSR(tolgeeInstance, locale, staticData) {
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) {
189
215
  const initialInstance = React.useMemo(() => getTolgeeWithDeactivatedWrapper(tolgeeInstance), []);
190
216
  const [tolgee, setTolgee] = React.useState(initialInstance);
191
217
  React.useEffect(() => {
@@ -197,16 +223,17 @@
197
223
  // events emitting must be off, to not trigger re-render while rendering
198
224
  tolgee.setEmitterActive(false);
199
225
  tolgee.addStaticData(staticData);
200
- tolgee.changeLanguage(locale);
226
+ tolgee.changeLanguage(language);
201
227
  tolgee.setEmitterActive(true);
202
- }, [locale, staticData, tolgee]);
228
+ }, [language, staticData, tolgee]);
203
229
  return tolgee;
204
230
  }
205
231
 
206
232
  exports.GlobalContextPlugin = GlobalContextPlugin;
207
233
  exports.T = T;
234
+ exports.TBase = TBase;
208
235
  exports.TolgeeProvider = TolgeeProvider;
209
- exports.TolgeeProviderContext = TolgeeProviderContext;
236
+ exports.getProviderInstance = getProviderInstance;
210
237
  exports.useTolgee = useTolgee;
211
238
  exports.useTolgeeSSR = useTolgeeSSR;
212
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.run().finally(() => {\n setLoading(false);\n });\n return () => {\n tolgee.stop();\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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"}