@tolgee/react 5.28.4 → 5.28.6-prerelease.c1d73b61.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.
@@ -26,7 +26,7 @@ const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
26
26
  // however if the instance change on hot-reloading
27
27
  // we want to restart
28
28
  React.useEffect(() => {
29
- if (LAST_TOLGEE_INSTANCE !== tolgee) {
29
+ if ((LAST_TOLGEE_INSTANCE === null || LAST_TOLGEE_INSTANCE === void 0 ? void 0 : LAST_TOLGEE_INSTANCE.run) !== tolgee.run) {
30
30
  if (LAST_TOLGEE_INSTANCE) {
31
31
  LAST_TOLGEE_INSTANCE.stop();
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-react.cjs.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/useTranslate.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE !== tolgee) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":["React","useState","useEffect","Suspense","useContext","useCallback","getFallback","getFallbackArray","useRef","getTranslateProps","useMemo"],"mappings":";;;;;;;;;;;AAIO,MAAM,qBAAqB,GAAiB;AACjD,IAAA,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,IAAI,gBAA+D,CAAC;AAE7D,MAAM,mBAAmB,GAAG,MAAK;IACtC,IAAI,CAAC,gBAAgB,EAAE;AACrB,QAAA,gBAAgB,GAAGA,yBAAK,CAAC,aAAa,CACpC,SAAS,CACV,CAAC;AACH,KAAA;AAED,IAAA,OAAO,gBAAgB,CAAC;AAC1B,EAAE;AAEF,IAAI,oBAAoB,GAA+B,SAAS,CAAC;AAS1D,MAAM,cAAc,GAAkC,CAAC,EAC5D,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,KAAI;AACH,IAAA,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGC,cAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;;;;IAK3DC,eAAS,CAAC,MAAK;QACb,IAAI,oBAAoB,KAAK,MAAM,EAAE;AACnC,YAAA,IAAI,oBAAoB,EAAE;gBACxB,oBAAoB,CAAC,IAAI,EAAE,CAAC;AAC7B,aAAA;YACD,oBAAoB,GAAG,MAAM,CAAC;YAC9B,MAAM;AACH,iBAAA,GAAG,EAAE;AACL,iBAAA,KAAK,CAAC,CAAC,CAAC,KAAI;;AAEX,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,aAAC,CAAC;iBACD,OAAO,CAAC,MAAK;gBACZ,UAAU,CAAC,KAAK,CAAC,CAAC;AACpB,aAAC,CAAC,CAAC;AACN,SAAA;AACH,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEb,IAAA,MAAM,kBAAkB,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,qBAAqB,CAAK,EAAA,OAAO,CAAE,CAAC;AAEpE,IAAA,MAAM,qBAAqB,GAAG,mBAAmB,EAAE,CAAC;IAEpD,IAAI,kBAAkB,CAAC,WAAW,EAAE;AAClC,QAAA,QACEF,yBAAC,CAAA,aAAA,CAAA,qBAAqB,CAAC,QAAQ,EAAA,EAC7B,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAE7C,EAAA,OAAO,IACN,QAAQ,KAERA,yBAAA,CAAA,aAAA,CAACG,cAAQ,EAAC,EAAA,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAG,EAAA,QAAQ,CAAY,CAC5D,CAC8B,EACjC;AACH,KAAA;IAED,QACEH,yBAAC,CAAA,aAAA,CAAA,qBAAqB,CAAC,QAAQ,EAC7B,EAAA,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAE7C,EAAA,OAAO,GAAG,QAAQ,GAAG,QAAQ,CACC,EACjC;AACJ;;AC/EA,IAAI,aAA6C,CAAC;AAE3C,MAAM,mBAAmB,GAC9B,CAAC,OAA+B,KAChC,CAAC,MAAM,KAAI;AACT,IAAA,aAAa,GAAG;QACd,MAAM;AACN,QAAA,OAAO,EAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,qBAAqB,CAAK,EAAA,OAAO,CAAE;KAClD,CAAC;AACF,IAAA,OAAO,MAAM,CAAC;AAChB,EAAE;SAEY,gBAAgB,GAAA;AAC9B,IAAA,OAAO,aAAa,CAAC;AACvB;;ACdO,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,qBAAqB,GAAG,mBAAmB,EAAE,CAAC;IACpD,MAAM,OAAO,GAAGI,gBAAU,CAAC,qBAAqB,CAAC,IAAI,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;AACH,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;;ACXM,MAAM,WAAW,GAAG,MAAK;IAC9B,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAGH,cAAQ,CAAC,CAAC,CAAC,CAAC;AAE3C,IAAA,MAAM,QAAQ,GAAGI,iBAAW,CAAC,MAAK;QAChC,UAAU,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAC/B,KAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACjB,IAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;;ACIM,MAAM,oBAAoB,GAAG,CAClC,EAAe,EACf,OAAsB,KACpB;IACF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAC/D,IAAA,MAAM,UAAU,GAAGC,eAAW,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,gBAAgB,GAAGC,oBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEhE,IAAA,MAAM,cAAc,GACf,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,cAAc,CACd,EAAA,OAAO,CACX,CAAC;;IAGF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;AAE7C,IAAA,MAAM,eAAe,GAAGC,YAAM,EAAyB,CAAC;AAExD,IAAA,MAAM,iBAAiB,GAAGA,YAAM,CAAC,EAAkB,CAAC,CAAC;AACrD,IAAA,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC;AAE/B,IAAA,MAAM,aAAa,GAAG,CAAC,EAAc,KAAI;;AACvC,QAAA,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,CAAA,EAAA,GAAA,eAAe,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,CAAC,EAAE,CAAC,CAAC;AAC3C,KAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE7CN,eAAS,CAAC,MAAK;QACb,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjD,QAAA,eAAe,CAAC,OAAO,GAAG,YAAY,CAAC;AACvC,QAAA,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACvC,YAAA,YAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/BA,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACjD,KAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/B,IAAA,MAAM,CAAC,GAAGG,iBAAW,CACnB,CAAC,KAA0B,KAAI;;AAC7B,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAG,CAAC,CAAC,CAAC;QAC/C,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC,CAAC,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KAAE,EAAE,EAAE,UAAU,EAAA,CAAA,CAAU,CAAC;AACvD,KAAC,EACD,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;AAEF,IAAA,IAAI,cAAc,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE;QAC3C,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC5C,KAAA;IAED,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC;AACrC,CAAC;;MCzDY,YAAY,GAAG,CAC1B,EAAsB,EACtB,OAAsB,KACA;AACtB,IAAA,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAEtE,MAAM,CAAC,GAAGA,iBAAW,CACnB,CAAC,GAAG,MAAW,KAAI;;AAEjB,QAAA,MAAM,KAAK,GAAGI,qBAAiB,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3C,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,KAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;AAEF,IAAA,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;AAC1B;;AC3BO,MAAM,eAAe,GAAG,CAC7B,MAA+C,KAC7C;IACF,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;IAED,MAAM,MAAM,GAAQ,EAAE,CAAC;AAEvB,IAAA,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpD,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAU,KAAI;AAC3B,gBAAA,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,aAAC,CAAC;AACH,SAAA;AAAM,aAAA,IAAIT,yBAAK,CAAC,cAAc,CAAC,KAAY,CAAC,EAAE;YAC7C,MAAM,EAAE,GAAG,KAA2B,CAAC;AACvC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAU,KAAI;AAC3B,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,KAAI,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,MAAM,CAAA;AACrD,sBAAEA,yBAAK,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACjD,sBAAEA,yBAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC7B,aAAC,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrB,SAAA;AACH,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAC1B,GAAoD,KAClD;AACF,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAOA,yBAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,GAAG,CAAC;AACZ,KAAA;AACH,CAAC;;ACtCY,MAAA,KAAK,GAAmB,CAAC,KAAK,KAAI;IAC7C,MAAM,GAAG,GAAI,KAA0B,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC;IAClE,IAAI,GAAG,KAAK,SAAS,EAAE;;AAErB,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACnD,KAAA;AACD,IAAA,MAAM,YAAY,GAChB,KAAK,CAAC,YAAY;AAClB,SAAE,KAA0B,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAErE,IAAA,MAAM,WAAW,GAAG,YAAY,CAC9B,KAAK,CAAC,CAAC,CAAC;AACN,QAAA,GAAG,EAAE,GAAI;AACT,QAAA,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;QACrC,YAAY;QACZ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,KAAA,CAAC,CACH,CAAC;IAEF,OAAOA,yBAAA,CAAA,aAAA,CAAAA,yBAAA,CAAA,QAAA,EAAA,IAAA,EAAG,WAAW,CAAI,CAAC;AAC5B;;ACfa,MAAA,CAAC,GAAe,CAAC,KAAK,KAAI;AACrC,IAAA,MAAM,EAAE,CAAC,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAErC,OAAOA,yBAAA,CAAA,aAAA,CAAC,KAAK,EAAC,MAAA,CAAA,MAAA,CAAA,EAAA,CAAC,EAAE,CAAwB,EAAA,EAAM,KAAK,CAAA,CAAI,CAAC;AAC3D;;ACVa,MAAA,SAAS,GAAG,CAAC,MAAsB,KAAoB;AAClE,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAEtC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAEnCE,eAAS,CAAC,MAAK;QACb,MAAM,SAAS,GAAG,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7D,QAAA,OAAO,MAAK;AACV,YAAA,SAAS,aAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3D,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAExB,IAAA,OAAO,MAAM,CAAC;AAChB;;ACXA,SAAS,+BAA+B,CACtC,MAAsB,EAAA;AAEtB,IAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAA,EAAA,EACT,CAAC,CAAC,GAAG,IAAI,EAAA;;AAEP,YAAA,MAAM,KAAK,GAAGO,qBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC,CAAC,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KAAE,MAAM,EAAE,IAAI,EAAA,CAAA,CAAG,CAAC;AAC9C,SAAC,EACD,CAAA,CAAA;AACJ,CAAC;AAED;;;;;;;;;;AAUG;SACa,YAAY,CAC1B,cAA8B,EAC9B,QAAiB,EACjB,UAAyC,EAAA;AAEzC,IAAA,MAAM,CAAC,gBAAgB,CAAC,GAAGR,cAAQ,CAAC,MAClC,+BAA+B,CAAC,cAAc,CAAC,CAChD,CAAC;IAEF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGA,cAAQ,CAAC,IAAI,CAAC,CAAC;IAEzDC,eAAS,CAAC,MAAK;QACb,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACzB,EAAE,EAAE,CAAC,CAAC;IAEPQ,aAAO,CAAC,MAAK;;;;AAIX,QAAA,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACzC,QAAA,cAAc,CAAC,cAAc,CAAC,QAAS,CAAC,CAAC;AACzC,QAAA,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;KACvC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;IAE3CT,cAAQ,CAAC,MAAK;;AAEZ,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE;;;YAG9B,MAAM,cAAc,GAAG,cAAc;iBAClC,kBAAkB,CAAC,QAAQ,CAAC;iBAC5B,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAC3B,SAAS,GAAG,CAAG,EAAA,SAAS,CAAI,CAAA,EAAA,QAAQ,EAAE,GAAG,QAAQ,CAClD;AACA,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,EAAC,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAG,GAAG,CAAC,CAAA,CAAC,CAAC;;YAGvC,OAAO,CAAC,IAAI,CACV,CAAyE,sEAAA,EAAA,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,GAAG,CAAG,CAAA,CAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAA,CAC9H,CAAC;AACH,SAAA;AACH,KAAC,CAAC,CAAC;IAEH,OAAO,aAAa,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAC3D;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"tolgee-react.cjs.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/useTranslate.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":["React","useState","useEffect","Suspense","useContext","useCallback","getFallback","getFallbackArray","useRef","getTranslateProps","useMemo"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@tolgee/web");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e);const s={useSuspense:!0};let o;const a=()=>(o||(o=r.default.createContext(void 0)),o);let u;let c;const l=()=>{const t=a(),n=e.useContext(t)||c;if(!n)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return n},i=()=>{const[t,n]=e.useState(0);return{instance:t,rerender:e.useCallback((()=>{n((e=>e+1))}),[n])}},d=(n,r)=>{const{tolgee:s,options:o}=l(),a=t.getFallback(n),u=t.getFallbackArray(a).join(":"),c=Object.assign(Object.assign({},o),r),{rerender:d,instance:f}=i(),g=e.useRef(),p=e.useRef([]);p.current=[];const b=s.isLoaded(a);e.useEffect((()=>{const e=s.onNsUpdate(d);return g.current=e,e.subscribeNs(a),p.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[u,s]),e.useEffect((()=>(s.addActiveNs(a),()=>s.removeActiveNs(a))),[u,s]);const v=e.useCallback((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==a?void 0:a[0];return(e=>{var t;p.current.push(e),null===(t=g.current)||void 0===t||t.subscribeNs(e)})(n),s.t(Object.assign(Object.assign({},e),{ns:n}))}),[s,f]);if(c.useSuspense&&!b)throw s.addActiveNs(a,!0);return{t:v,isLoading:!b}},f=e=>{if(!e)return;const t={};return Object.entries(e||{}).forEach((([e,n])=>{if("function"==typeof n)t[e]=e=>n(g(e));else if(r.default.isValidElement(n)){const s=n;t[e]=e=>void 0===s.props.children&&(null==e?void 0:e.length)?r.default.cloneElement(s,{},g(e)):r.default.cloneElement(s)}else t[e]=n})),t},g=e=>Array.isArray(e)?r.default.Children.toArray(e):e,p=e=>{const t=e.keyName||e.children;void 0===t&&console.error("T component: keyName not defined");const n=e.defaultValue||(e.keyName?e.children:void 0),s=g(e.t({key:t,params:f(e.params),defaultValue:n,noWrap:e.noWrap,ns:e.ns,language:e.language}));return r.default.createElement(r.default.Fragment,null,s)};exports.GlobalContextPlugin=e=>t=>(c={tolgee:t,options:Object.assign(Object.assign({},s),e)},t),exports.T=e=>{const{t:t}=d();return r.default.createElement(p,Object.assign({t:t},e))},exports.TBase=p,exports.TolgeeProvider=({tolgee:t,options:n,children:o,fallback:c})=>{const[l,i]=e.useState(!t.isLoaded());e.useEffect((()=>{u!==t&&(u&&u.stop(),u=t,t.run().catch((e=>{console.error(e)})).finally((()=>{i(!1)})))}),[t]);const d=Object.assign(Object.assign({},s),n),f=a();return d.useSuspense?r.default.createElement(f.Provider,{value:{tolgee:t,options:d}},l?c:r.default.createElement(e.Suspense,{fallback:c||null},o)):r.default.createElement(f.Provider,{value:{tolgee:t,options:d}},l?c:o)},exports.getProviderInstance=a,exports.useTolgee=t=>{const{tolgee:n}=l(),{rerender:r}=i();return e.useEffect((()=>{const e=null==t?void 0:t.map((e=>n.on(e,r)));return()=>{null==e||e.forEach((e=>e.unsubscribe()))}}),[null==t?void 0:t.join(":")]),n},exports.useTolgeeSSR=function(n,r,s){const[o]=e.useState((()=>{return e=n,Object.assign(Object.assign({},e),{t(...n){const r=t.getTranslateProps(...n);return e.t(Object.assign(Object.assign({},r),{noWrap:!0}))}});var e})),[a,u]=e.useState(!0);return e.useEffect((()=>{u(!1)}),[]),e.useMemo((()=>{n.setEmitterActive(!1),n.addStaticData(s),n.changeLanguage(r),n.setEmitterActive(!0)}),[r,s,n]),e.useState((()=>{if(!n.isLoaded()){const e=n.getRequiredRecords(r).map((({namespace:e,language:t})=>e?`${e}:${t}`:t)).filter((e=>!(null==s?void 0:s[e])));console.warn(`Tolgee: Missing records in "staticData" for proper SSR functionality: ${e.map((e=>`"${e}"`)).join(", ")}`)}})),a?o:n},exports.useTranslate=(n,r)=>{const{t:s,isLoading:o}=d(n,r);return{t:e.useCallback(((...e)=>{const n=t.getTranslateProps(...e);return s(n)}),[s]),isLoading:o}},Object.keys(t).forEach((function(e){"default"===e||exports.hasOwnProperty(e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})}));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@tolgee/web");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e);const s={useSuspense:!0};let o;const a=()=>(o||(o=r.default.createContext(void 0)),o);let u;let l;const c=()=>{const t=a(),n=e.useContext(t)||l;if(!n)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return n},i=()=>{const[t,n]=e.useState(0);return{instance:t,rerender:e.useCallback((()=>{n((e=>e+1))}),[n])}},d=(n,r)=>{const{tolgee:s,options:o}=c(),a=t.getFallback(n),u=t.getFallbackArray(a).join(":"),l=Object.assign(Object.assign({},o),r),{rerender:d,instance:f}=i(),g=e.useRef(),p=e.useRef([]);p.current=[];const b=s.isLoaded(a);e.useEffect((()=>{const e=s.onNsUpdate(d);return g.current=e,e.subscribeNs(a),p.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[u,s]),e.useEffect((()=>(s.addActiveNs(a),()=>s.removeActiveNs(a))),[u,s]);const v=e.useCallback((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==a?void 0:a[0];return(e=>{var t;p.current.push(e),null===(t=g.current)||void 0===t||t.subscribeNs(e)})(n),s.t(Object.assign(Object.assign({},e),{ns:n}))}),[s,f]);if(l.useSuspense&&!b)throw s.addActiveNs(a,!0);return{t:v,isLoading:!b}},f=e=>{if(!e)return;const t={};return Object.entries(e||{}).forEach((([e,n])=>{if("function"==typeof n)t[e]=e=>n(g(e));else if(r.default.isValidElement(n)){const s=n;t[e]=e=>void 0===s.props.children&&(null==e?void 0:e.length)?r.default.cloneElement(s,{},g(e)):r.default.cloneElement(s)}else t[e]=n})),t},g=e=>Array.isArray(e)?r.default.Children.toArray(e):e,p=e=>{const t=e.keyName||e.children;void 0===t&&console.error("T component: keyName not defined");const n=e.defaultValue||(e.keyName?e.children:void 0),s=g(e.t({key:t,params:f(e.params),defaultValue:n,noWrap:e.noWrap,ns:e.ns,language:e.language}));return r.default.createElement(r.default.Fragment,null,s)};exports.GlobalContextPlugin=e=>t=>(l={tolgee:t,options:Object.assign(Object.assign({},s),e)},t),exports.T=e=>{const{t:t}=d();return r.default.createElement(p,Object.assign({t:t},e))},exports.TBase=p,exports.TolgeeProvider=({tolgee:t,options:n,children:o,fallback:l})=>{const[c,i]=e.useState(!t.isLoaded());e.useEffect((()=>{(null==u?void 0:u.run)!==t.run&&(u&&u.stop(),u=t,t.run().catch((e=>{console.error(e)})).finally((()=>{i(!1)})))}),[t]);const d=Object.assign(Object.assign({},s),n),f=a();return d.useSuspense?r.default.createElement(f.Provider,{value:{tolgee:t,options:d}},c?l:r.default.createElement(e.Suspense,{fallback:l||null},o)):r.default.createElement(f.Provider,{value:{tolgee:t,options:d}},c?l:o)},exports.getProviderInstance=a,exports.useTolgee=t=>{const{tolgee:n}=c(),{rerender:r}=i();return e.useEffect((()=>{const e=null==t?void 0:t.map((e=>n.on(e,r)));return()=>{null==e||e.forEach((e=>e.unsubscribe()))}}),[null==t?void 0:t.join(":")]),n},exports.useTolgeeSSR=function(n,r,s){const[o]=e.useState((()=>{return e=n,Object.assign(Object.assign({},e),{t(...n){const r=t.getTranslateProps(...n);return e.t(Object.assign(Object.assign({},r),{noWrap:!0}))}});var e})),[a,u]=e.useState(!0);return e.useEffect((()=>{u(!1)}),[]),e.useMemo((()=>{n.setEmitterActive(!1),n.addStaticData(s),n.changeLanguage(r),n.setEmitterActive(!0)}),[r,s,n]),e.useState((()=>{if(!n.isLoaded()){const e=n.getRequiredRecords(r).map((({namespace:e,language:t})=>e?`${e}:${t}`:t)).filter((e=>!(null==s?void 0:s[e])));console.warn(`Tolgee: Missing records in "staticData" for proper SSR functionality: ${e.map((e=>`"${e}"`)).join(", ")}`)}})),a?o:n},exports.useTranslate=(n,r)=>{const{t:s,isLoading:o}=d(n,r);return{t:e.useCallback(((...e)=>{const n=t.getTranslateProps(...e);return s(n)}),[s]),isLoading:o}},Object.keys(t).forEach((function(e){"default"===e||exports.hasOwnProperty(e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})}));
2
2
  //# sourceMappingURL=tolgee-react.cjs.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-react.cjs.min.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts","../src/useTranslate.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE !== tolgee) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","globalContext","useTolgeeContext","TolgeeProviderContext","context","useContext","Error","useRerender","instance","setCounter","useState","rerender","useCallback","num","useTranslateInternal","ns","options","tolgee","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","Object","assign","subscriptionRef","useRef","subscriptionQueue","current","isLoaded","useEffect","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","wrapTagHandlers","params","result","entries","key","value","chunk","addReactKeys","isValidElement","el","children","length","cloneElement","val","Array","isArray","Children","toArray","TBase","keyName","console","error","defaultValue","translation","noWrap","language","createElement","Fragment","fallback","loading","setLoading","stop","run","catch","e","finally","optionsWithDefault","Provider","Suspense","events","listeners","map","on","listener","tolgeeInstance","staticData","noWrappingTolgee","getTolgeeWithDeactivatedWrapper","args","getTranslateProps","initialRender","setInitialRender","useMemo","setEmitterActive","addStaticData","changeLanguage","missingRecords","getRequiredRecords","namespace","filter","warn","tInternal"],"mappings":"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"}
1
+ {"version":3,"file":"tolgee-react.cjs.min.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts","../src/useTranslate.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","globalContext","useTolgeeContext","TolgeeProviderContext","context","useContext","Error","useRerender","instance","setCounter","useState","rerender","useCallback","num","useTranslateInternal","ns","options","tolgee","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","Object","assign","subscriptionRef","useRef","subscriptionQueue","current","isLoaded","useEffect","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","wrapTagHandlers","params","result","entries","key","value","chunk","addReactKeys","isValidElement","el","children","length","cloneElement","val","Array","isArray","Children","toArray","TBase","keyName","console","error","defaultValue","translation","noWrap","language","createElement","Fragment","fallback","loading","setLoading","run","stop","catch","e","finally","optionsWithDefault","Provider","Suspense","events","listeners","map","on","listener","tolgeeInstance","staticData","noWrappingTolgee","getTolgeeWithDeactivatedWrapper","args","getTranslateProps","initialRender","setInitialRender","useMemo","setEmitterActive","addStaticData","changeLanguage","missingRecords","getRequiredRecords","namespace","filter","warn","tInternal"],"mappings":"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"}
@@ -19,7 +19,7 @@ const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
19
19
  // however if the instance change on hot-reloading
20
20
  // we want to restart
21
21
  useEffect(() => {
22
- if (LAST_TOLGEE_INSTANCE !== tolgee) {
22
+ if ((LAST_TOLGEE_INSTANCE === null || LAST_TOLGEE_INSTANCE === void 0 ? void 0 : LAST_TOLGEE_INSTANCE.run) !== tolgee.run) {
23
23
  if (LAST_TOLGEE_INSTANCE) {
24
24
  LAST_TOLGEE_INSTANCE.stop();
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-react.esm.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/useTranslate.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE !== tolgee) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tolgee-react.esm.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/useTranslate.ts","../src/tagsTools.tsx","../src/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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":[],"mappings":";;;;AAIO,MAAM,qBAAqB,GAAiB;AACjD,IAAA,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,IAAI,gBAA+D,CAAC;AAE7D,MAAM,mBAAmB,GAAG,MAAK;IACtC,IAAI,CAAC,gBAAgB,EAAE;AACrB,QAAA,gBAAgB,GAAG,KAAK,CAAC,aAAa,CACpC,SAAS,CACV,CAAC;AACH,KAAA;AAED,IAAA,OAAO,gBAAgB,CAAC;AAC1B,EAAE;AAEF,IAAI,oBAAoB,GAA+B,SAAS,CAAC;AAS1D,MAAM,cAAc,GAAkC,CAAC,EAC5D,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,KAAI;AACH,IAAA,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;;;;IAK3D,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAA,oBAAoB,KAApB,IAAA,IAAA,oBAAoB,KAApB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,oBAAoB,CAAE,GAAG,MAAK,MAAM,CAAC,GAAG,EAAE;AAC5C,YAAA,IAAI,oBAAoB,EAAE;gBACxB,oBAAoB,CAAC,IAAI,EAAE,CAAC;AAC7B,aAAA;YACD,oBAAoB,GAAG,MAAM,CAAC;YAC9B,MAAM;AACH,iBAAA,GAAG,EAAE;AACL,iBAAA,KAAK,CAAC,CAAC,CAAC,KAAI;;AAEX,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,aAAC,CAAC;iBACD,OAAO,CAAC,MAAK;gBACZ,UAAU,CAAC,KAAK,CAAC,CAAC;AACpB,aAAC,CAAC,CAAC;AACN,SAAA;AACH,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEb,IAAA,MAAM,kBAAkB,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,qBAAqB,CAAK,EAAA,OAAO,CAAE,CAAC;AAEpE,IAAA,MAAM,qBAAqB,GAAG,mBAAmB,EAAE,CAAC;IAEpD,IAAI,kBAAkB,CAAC,WAAW,EAAE;AAClC,QAAA,QACE,KAAC,CAAA,aAAA,CAAA,qBAAqB,CAAC,QAAQ,EAAA,EAC7B,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAE7C,EAAA,OAAO,IACN,QAAQ,KAER,KAAA,CAAA,aAAA,CAAC,QAAQ,EAAC,EAAA,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAG,EAAA,QAAQ,CAAY,CAC5D,CAC8B,EACjC;AACH,KAAA;IAED,QACE,KAAC,CAAA,aAAA,CAAA,qBAAqB,CAAC,QAAQ,EAC7B,EAAA,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAE7C,EAAA,OAAO,GAAG,QAAQ,GAAG,QAAQ,CACC,EACjC;AACJ;;AC/EA,IAAI,aAA6C,CAAC;AAE3C,MAAM,mBAAmB,GAC9B,CAAC,OAA+B,KAChC,CAAC,MAAM,KAAI;AACT,IAAA,aAAa,GAAG;QACd,MAAM;AACN,QAAA,OAAO,EAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,qBAAqB,CAAK,EAAA,OAAO,CAAE;KAClD,CAAC;AACF,IAAA,OAAO,MAAM,CAAC;AAChB,EAAE;SAEY,gBAAgB,GAAA;AAC9B,IAAA,OAAO,aAAa,CAAC;AACvB;;ACdO,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,qBAAqB,GAAG,mBAAmB,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;AACH,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;;ACXM,MAAM,WAAW,GAAG,MAAK;IAC9B,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE3C,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;QAChC,UAAU,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAC/B,KAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACjB,IAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;;ACIM,MAAM,oBAAoB,GAAG,CAClC,EAAe,EACf,OAAsB,KACpB;IACF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAC/D,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEhE,IAAA,MAAM,cAAc,GACf,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,cAAc,CACd,EAAA,OAAO,CACX,CAAC;;IAGF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;AAE7C,IAAA,MAAM,eAAe,GAAG,MAAM,EAAyB,CAAC;AAExD,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAkB,CAAC,CAAC;AACrD,IAAA,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC;AAE/B,IAAA,MAAM,aAAa,GAAG,CAAC,EAAc,KAAI;;AACvC,QAAA,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,CAAA,EAAA,GAAA,eAAe,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,CAAC,EAAE,CAAC,CAAC;AAC3C,KAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE7C,SAAS,CAAC,MAAK;QACb,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjD,QAAA,eAAe,CAAC,OAAO,GAAG,YAAY,CAAC;AACvC,QAAA,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACvC,YAAA,YAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/B,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACjD,KAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/B,IAAA,MAAM,CAAC,GAAG,WAAW,CACnB,CAAC,KAA0B,KAAI;;AAC7B,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAG,CAAC,CAAC,CAAC;QAC/C,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC,CAAC,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KAAE,EAAE,EAAE,UAAU,EAAA,CAAA,CAAU,CAAC;AACvD,KAAC,EACD,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;AAEF,IAAA,IAAI,cAAc,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE;QAC3C,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC5C,KAAA;IAED,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC;AACrC,CAAC;;MCzDY,YAAY,GAAG,CAC1B,EAAsB,EACtB,OAAsB,KACA;AACtB,IAAA,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAEtE,MAAM,CAAC,GAAG,WAAW,CACnB,CAAC,GAAG,MAAW,KAAI;;AAEjB,QAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3C,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,KAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;AAEF,IAAA,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;AAC1B;;AC3BO,MAAM,eAAe,GAAG,CAC7B,MAA+C,KAC7C;IACF,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;IAED,MAAM,MAAM,GAAQ,EAAE,CAAC;AAEvB,IAAA,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpD,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAU,KAAI;AAC3B,gBAAA,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,aAAC,CAAC;AACH,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,cAAc,CAAC,KAAY,CAAC,EAAE;YAC7C,MAAM,EAAE,GAAG,KAA2B,CAAC;AACvC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAU,KAAI;AAC3B,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,KAAI,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,MAAM,CAAA;AACrD,sBAAE,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACjD,sBAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC7B,aAAC,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrB,SAAA;AACH,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAC1B,GAAoD,KAClD;AACF,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpC,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,GAAG,CAAC;AACZ,KAAA;AACH,CAAC;;ACtCY,MAAA,KAAK,GAAmB,CAAC,KAAK,KAAI;IAC7C,MAAM,GAAG,GAAI,KAA0B,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC;IAClE,IAAI,GAAG,KAAK,SAAS,EAAE;;AAErB,QAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACnD,KAAA;AACD,IAAA,MAAM,YAAY,GAChB,KAAK,CAAC,YAAY;AAClB,SAAE,KAA0B,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAErE,IAAA,MAAM,WAAW,GAAG,YAAY,CAC9B,KAAK,CAAC,CAAC,CAAC;AACN,QAAA,GAAG,EAAE,GAAI;AACT,QAAA,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;QACrC,YAAY;QACZ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,KAAA,CAAC,CACH,CAAC;IAEF,OAAO,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAG,WAAW,CAAI,CAAC;AAC5B;;ACfa,MAAA,CAAC,GAAe,CAAC,KAAK,KAAI;AACrC,IAAA,MAAM,EAAE,CAAC,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAErC,OAAO,KAAA,CAAA,aAAA,CAAC,KAAK,EAAC,MAAA,CAAA,MAAA,CAAA,EAAA,CAAC,EAAE,CAAwB,EAAA,EAAM,KAAK,CAAA,CAAI,CAAC;AAC3D;;ACVa,MAAA,SAAS,GAAG,CAAC,MAAsB,KAAoB;AAClE,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAEtC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAEnC,SAAS,CAAC,MAAK;QACb,MAAM,SAAS,GAAG,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7D,QAAA,OAAO,MAAK;AACV,YAAA,SAAS,aAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3D,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAExB,IAAA,OAAO,MAAM,CAAC;AAChB;;ACXA,SAAS,+BAA+B,CACtC,MAAsB,EAAA;AAEtB,IAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,MAAM,CAAA,EAAA,EACT,CAAC,CAAC,GAAG,IAAI,EAAA;;AAEP,YAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC,CAAC,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,KAAE,MAAM,EAAE,IAAI,EAAA,CAAA,CAAG,CAAC;AAC9C,SAAC,EACD,CAAA,CAAA;AACJ,CAAC;AAED;;;;;;;;;;AAUG;SACa,YAAY,CAC1B,cAA8B,EAC9B,QAAiB,EACjB,UAAyC,EAAA;AAEzC,IAAA,MAAM,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,MAClC,+BAA+B,CAAC,cAAc,CAAC,CAChD,CAAC;IAEF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,MAAK;QACb,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACzB,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,MAAK;;;;AAIX,QAAA,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACzC,QAAA,cAAc,CAAC,cAAc,CAAC,QAAS,CAAC,CAAC;AACzC,QAAA,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;KACvC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;IAE3C,QAAQ,CAAC,MAAK;;AAEZ,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE;;;YAG9B,MAAM,cAAc,GAAG,cAAc;iBAClC,kBAAkB,CAAC,QAAQ,CAAC;iBAC5B,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAC3B,SAAS,GAAG,CAAG,EAAA,SAAS,CAAI,CAAA,EAAA,QAAQ,EAAE,GAAG,QAAQ,CAClD;AACA,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,EAAC,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAG,GAAG,CAAC,CAAA,CAAC,CAAC;;YAGvC,OAAO,CAAC,IAAI,CACV,CAAyE,sEAAA,EAAA,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,GAAG,CAAG,CAAA,CAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAA,CAC9H,CAAC;AACH,SAAA;AACH,KAAC,CAAC,CAAC;IAEH,OAAO,aAAa,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAC3D;;;;"}
@@ -1,2 +1,2 @@
1
- import e,{useState as t,useEffect as n,Suspense as r,useContext as o,useCallback as s,useRef as c,useMemo as i}from"react";import{getFallback as a,getFallbackArray as l,getTranslateProps as u}from"@tolgee/web";export*from"@tolgee/web";const d={useSuspense:!0};let g;const p=()=>(g||(g=e.createContext(void 0)),g);let b;const m=({tolgee:o,options:s,children:c,fallback:i})=>{const[a,l]=t(!o.isLoaded());n((()=>{b!==o&&(b&&b.stop(),b=o,o.run().catch((e=>{console.error(e)})).finally((()=>{l(!1)})))}),[o]);const u=Object.assign(Object.assign({},d),s),g=p();return u.useSuspense?e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?i:e.createElement(r,{fallback:i||null},c)):e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?i:c)};let f;const v=e=>t=>(f={tolgee:t,options:Object.assign(Object.assign({},d),e)},t);const j=()=>{const e=p(),t=o(e)||f;if(!t)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return t},h=()=>{const[e,n]=t(0);return{instance:e,rerender:s((()=>{n((e=>e+1))}),[n])}},E=(e,t)=>{const{tolgee:r,options:o}=j(),i=a(e),u=l(i).join(":"),d=Object.assign(Object.assign({},o),t),{rerender:g,instance:p}=h(),b=c(),m=c([]);m.current=[];const f=r.isLoaded(i);n((()=>{const e=r.onNsUpdate(g);return b.current=e,e.subscribeNs(i),m.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[u,r]),n((()=>(r.addActiveNs(i),()=>r.removeActiveNs(i))),[u,r]);const v=s((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==i?void 0:i[0];return(e=>{var t;m.current.push(e),null===(t=b.current)||void 0===t||t.subscribeNs(e)})(n),r.t(Object.assign(Object.assign({},e),{ns:n}))}),[r,p]);if(d.useSuspense&&!f)throw r.addActiveNs(i,!0);return{t:v,isLoading:!f}},O=(e,t)=>{const{t:n,isLoading:r}=E(e,t);return{t:s(((...e)=>{const t=u(...e);return n(t)}),[n]),isLoading:r}},y=t=>{if(!t)return;const n={};return Object.entries(t||{}).forEach((([t,r])=>{if("function"==typeof r)n[t]=e=>r(N(e));else if(e.isValidElement(r)){const o=r;n[t]=t=>void 0===o.props.children&&(null==t?void 0:t.length)?e.cloneElement(o,{},N(t)):e.cloneElement(o)}else n[t]=r})),n},N=t=>Array.isArray(t)?e.Children.toArray(t):t,A=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),o=N(t.t({key:n,params:y(t.params),defaultValue:r,noWrap:t.noWrap,ns:t.ns,language:t.language}));return e.createElement(e.Fragment,null,o)},L=t=>{const{t:n}=E();return e.createElement(A,Object.assign({t:n},t))},k=e=>{const{tolgee:t}=j(),{rerender:r}=h();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 w(e,r,o){const[s]=t((()=>{return t=e,Object.assign(Object.assign({},t),{t(...e){const n=u(...e);return t.t(Object.assign(Object.assign({},n),{noWrap:!0}))}});var t})),[c,a]=t(!0);return n((()=>{a(!1)}),[]),i((()=>{e.setEmitterActive(!1),e.addStaticData(o),e.changeLanguage(r),e.setEmitterActive(!0)}),[r,o,e]),t((()=>{if(!e.isLoaded()){const t=e.getRequiredRecords(r).map((({namespace:e,language:t})=>e?`${e}:${t}`:t)).filter((e=>!(null==o?void 0:o[e])));console.warn(`Tolgee: Missing records in "staticData" for proper SSR functionality: ${t.map((e=>`"${e}"`)).join(", ")}`)}})),c?s:e}export{v as GlobalContextPlugin,L as T,A as TBase,m as TolgeeProvider,p as getProviderInstance,k as useTolgee,w as useTolgeeSSR,O as useTranslate};
1
+ import e,{useState as n,useEffect as t,Suspense as r,useContext as o,useCallback as s,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};let g;const p=()=>(g||(g=e.createContext(void 0)),g);let b;const m=({tolgee:o,options:s,children:i,fallback:c})=>{const[a,l]=n(!o.isLoaded());t((()=>{(null==b?void 0:b.run)!==o.run&&(b&&b.stop(),b=o,o.run().catch((e=>{console.error(e)})).finally((()=>{l(!1)})))}),[o]);const u=Object.assign(Object.assign({},d),s),g=p();return u.useSuspense?e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?c:e.createElement(r,{fallback:c||null},i)):e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?c:i)};let f;const v=e=>n=>(f={tolgee:n,options:Object.assign(Object.assign({},d),e)},n);const j=()=>{const e=p(),n=o(e)||f;if(!n)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return n},h=()=>{const[e,t]=n(0);return{instance:e,rerender:s((()=>{t((e=>e+1))}),[t])}},E=(e,n)=>{const{tolgee:r,options:o}=j(),c=a(e),u=l(c).join(":"),d=Object.assign(Object.assign({},o),n),{rerender:g,instance:p}=h(),b=i(),m=i([]);m.current=[];const f=r.isLoaded(c);t((()=>{const e=r.onNsUpdate(g);return b.current=e,e.subscribeNs(c),m.current.forEach((n=>{e.subscribeNs(n)})),()=>{e.unsubscribe()}}),[u,r]),t((()=>(r.addActiveNs(c),()=>r.removeActiveNs(c))),[u,r]);const v=s((e=>{var n;const t=null!==(n=e.ns)&&void 0!==n?n:null==c?void 0:c[0];return(e=>{var n;m.current.push(e),null===(n=b.current)||void 0===n||n.subscribeNs(e)})(t),r.t(Object.assign(Object.assign({},e),{ns:t}))}),[r,p]);if(d.useSuspense&&!f)throw r.addActiveNs(c,!0);return{t:v,isLoading:!f}},O=(e,n)=>{const{t:t,isLoading:r}=E(e,n);return{t:s(((...e)=>{const n=u(...e);return t(n)}),[t]),isLoading:r}},y=n=>{if(!n)return;const t={};return Object.entries(n||{}).forEach((([n,r])=>{if("function"==typeof r)t[n]=e=>r(N(e));else if(e.isValidElement(r)){const o=r;t[n]=n=>void 0===o.props.children&&(null==n?void 0:n.length)?e.cloneElement(o,{},N(n)):e.cloneElement(o)}else t[n]=r})),t},N=n=>Array.isArray(n)?e.Children.toArray(n):n,A=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),o=N(n.t({key:t,params:y(n.params),defaultValue:r,noWrap:n.noWrap,ns:n.ns,language:n.language}));return e.createElement(e.Fragment,null,o)},L=n=>{const{t:t}=E();return e.createElement(A,Object.assign({t:t},n))},k=e=>{const{tolgee:n}=j(),{rerender:r}=h();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 w(e,r,o){const[s]=n((()=>{return n=e,Object.assign(Object.assign({},n),{t(...e){const t=u(...e);return n.t(Object.assign(Object.assign({},t),{noWrap:!0}))}});var n})),[i,a]=n(!0);return t((()=>{a(!1)}),[]),c((()=>{e.setEmitterActive(!1),e.addStaticData(o),e.changeLanguage(r),e.setEmitterActive(!0)}),[r,o,e]),n((()=>{if(!e.isLoaded()){const n=e.getRequiredRecords(r).map((({namespace:e,language:n})=>e?`${e}:${n}`:n)).filter((e=>!(null==o?void 0:o[e])));console.warn(`Tolgee: Missing records in "staticData" for proper SSR functionality: ${n.map((e=>`"${e}"`)).join(", ")}`)}})),i?s:e}export{v as GlobalContextPlugin,L as T,A as TBase,m as TolgeeProvider,p as getProviderInstance,k as useTolgee,w as useTolgeeSSR,O as useTranslate};
2
2
  //# sourceMappingURL=tolgee-react.esm.min.js.map
@@ -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/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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE !== tolgee) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","TolgeeProvider","tolgee","options","children","fallback","loading","setLoading","useState","isLoaded","useEffect","stop","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","noWrappingTolgee","getTolgeeWithDeactivatedWrapper","args","initialRender","setInitialRender","useMemo","setEmitterActive","addStaticData","changeLanguage","missingRecords","getRequiredRecords","namespace","filter","warn"],"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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","TolgeeProvider","tolgee","options","children","fallback","loading","setLoading","useState","isLoaded","useEffect","run","stop","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","noWrappingTolgee","getTolgeeWithDeactivatedWrapper","args","initialRender","setInitialRender","useMemo","setEmitterActive","addStaticData","changeLanguage","missingRecords","getRequiredRecords","namespace","filter","warn"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import e,{useState as t,useEffect as n,Suspense as r,useContext as o,useCallback as s,useRef as c,useMemo as i}from"react";import{getFallback as a,getFallbackArray as l,getTranslateProps as u}from"@tolgee/web";export*from"@tolgee/web";const d={useSuspense:!0};let g;const p=()=>(g||(g=e.createContext(void 0)),g);let b;const m=({tolgee:o,options:s,children:c,fallback:i})=>{const[a,l]=t(!o.isLoaded());n((()=>{b!==o&&(b&&b.stop(),b=o,o.run().catch((e=>{console.error(e)})).finally((()=>{l(!1)})))}),[o]);const u=Object.assign(Object.assign({},d),s),g=p();return u.useSuspense?e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?i:e.createElement(r,{fallback:i||null},c)):e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?i:c)};let f;const v=e=>t=>(f={tolgee:t,options:Object.assign(Object.assign({},d),e)},t);const j=()=>{const e=p(),t=o(e)||f;if(!t)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return t},h=()=>{const[e,n]=t(0);return{instance:e,rerender:s((()=>{n((e=>e+1))}),[n])}},E=(e,t)=>{const{tolgee:r,options:o}=j(),i=a(e),u=l(i).join(":"),d=Object.assign(Object.assign({},o),t),{rerender:g,instance:p}=h(),b=c(),m=c([]);m.current=[];const f=r.isLoaded(i);n((()=>{const e=r.onNsUpdate(g);return b.current=e,e.subscribeNs(i),m.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[u,r]),n((()=>(r.addActiveNs(i),()=>r.removeActiveNs(i))),[u,r]);const v=s((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==i?void 0:i[0];return(e=>{var t;m.current.push(e),null===(t=b.current)||void 0===t||t.subscribeNs(e)})(n),r.t(Object.assign(Object.assign({},e),{ns:n}))}),[r,p]);if(d.useSuspense&&!f)throw r.addActiveNs(i,!0);return{t:v,isLoading:!f}},O=(e,t)=>{const{t:n,isLoading:r}=E(e,t);return{t:s(((...e)=>{const t=u(...e);return n(t)}),[n]),isLoading:r}},y=t=>{if(!t)return;const n={};return Object.entries(t||{}).forEach((([t,r])=>{if("function"==typeof r)n[t]=e=>r(N(e));else if(e.isValidElement(r)){const o=r;n[t]=t=>void 0===o.props.children&&(null==t?void 0:t.length)?e.cloneElement(o,{},N(t)):e.cloneElement(o)}else n[t]=r})),n},N=t=>Array.isArray(t)?e.Children.toArray(t):t,A=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),o=N(t.t({key:n,params:y(t.params),defaultValue:r,noWrap:t.noWrap,ns:t.ns,language:t.language}));return e.createElement(e.Fragment,null,o)},L=t=>{const{t:n}=E();return e.createElement(A,Object.assign({t:n},t))},k=e=>{const{tolgee:t}=j(),{rerender:r}=h();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 w(e,r,o){const[s]=t((()=>{return t=e,Object.assign(Object.assign({},t),{t(...e){const n=u(...e);return t.t(Object.assign(Object.assign({},n),{noWrap:!0}))}});var t})),[c,a]=t(!0);return n((()=>{a(!1)}),[]),i((()=>{e.setEmitterActive(!1),e.addStaticData(o),e.changeLanguage(r),e.setEmitterActive(!0)}),[r,o,e]),t((()=>{if(!e.isLoaded()){const t=e.getRequiredRecords(r).map((({namespace:e,language:t})=>e?`${e}:${t}`:t)).filter((e=>!(null==o?void 0:o[e])));console.warn(`Tolgee: Missing records in "staticData" for proper SSR functionality: ${t.map((e=>`"${e}"`)).join(", ")}`)}})),c?s:e}export{v as GlobalContextPlugin,L as T,A as TBase,m as TolgeeProvider,p as getProviderInstance,k as useTolgee,w as useTolgeeSSR,O as useTranslate};
1
+ import e,{useState as n,useEffect as t,Suspense as r,useContext as o,useCallback as s,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};let g;const p=()=>(g||(g=e.createContext(void 0)),g);let b;const m=({tolgee:o,options:s,children:i,fallback:c})=>{const[a,l]=n(!o.isLoaded());t((()=>{(null==b?void 0:b.run)!==o.run&&(b&&b.stop(),b=o,o.run().catch((e=>{console.error(e)})).finally((()=>{l(!1)})))}),[o]);const u=Object.assign(Object.assign({},d),s),g=p();return u.useSuspense?e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?c:e.createElement(r,{fallback:c||null},i)):e.createElement(g.Provider,{value:{tolgee:o,options:u}},a?c:i)};let f;const v=e=>n=>(f={tolgee:n,options:Object.assign(Object.assign({},d),e)},n);const j=()=>{const e=p(),n=o(e)||f;if(!n)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return n},h=()=>{const[e,t]=n(0);return{instance:e,rerender:s((()=>{t((e=>e+1))}),[t])}},E=(e,n)=>{const{tolgee:r,options:o}=j(),c=a(e),u=l(c).join(":"),d=Object.assign(Object.assign({},o),n),{rerender:g,instance:p}=h(),b=i(),m=i([]);m.current=[];const f=r.isLoaded(c);t((()=>{const e=r.onNsUpdate(g);return b.current=e,e.subscribeNs(c),m.current.forEach((n=>{e.subscribeNs(n)})),()=>{e.unsubscribe()}}),[u,r]),t((()=>(r.addActiveNs(c),()=>r.removeActiveNs(c))),[u,r]);const v=s((e=>{var n;const t=null!==(n=e.ns)&&void 0!==n?n:null==c?void 0:c[0];return(e=>{var n;m.current.push(e),null===(n=b.current)||void 0===n||n.subscribeNs(e)})(t),r.t(Object.assign(Object.assign({},e),{ns:t}))}),[r,p]);if(d.useSuspense&&!f)throw r.addActiveNs(c,!0);return{t:v,isLoading:!f}},O=(e,n)=>{const{t:t,isLoading:r}=E(e,n);return{t:s(((...e)=>{const n=u(...e);return t(n)}),[t]),isLoading:r}},y=n=>{if(!n)return;const t={};return Object.entries(n||{}).forEach((([n,r])=>{if("function"==typeof r)t[n]=e=>r(N(e));else if(e.isValidElement(r)){const o=r;t[n]=n=>void 0===o.props.children&&(null==n?void 0:n.length)?e.cloneElement(o,{},N(n)):e.cloneElement(o)}else t[n]=r})),t},N=n=>Array.isArray(n)?e.Children.toArray(n):n,A=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),o=N(n.t({key:t,params:y(n.params),defaultValue:r,noWrap:n.noWrap,ns:n.ns,language:n.language}));return e.createElement(e.Fragment,null,o)},L=n=>{const{t:t}=E();return e.createElement(A,Object.assign({t:t},n))},k=e=>{const{tolgee:n}=j(),{rerender:r}=h();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 w(e,r,o){const[s]=n((()=>{return n=e,Object.assign(Object.assign({},n),{t(...e){const t=u(...e);return n.t(Object.assign(Object.assign({},t),{noWrap:!0}))}});var n})),[i,a]=n(!0);return t((()=>{a(!1)}),[]),c((()=>{e.setEmitterActive(!1),e.addStaticData(o),e.changeLanguage(r),e.setEmitterActive(!0)}),[r,o,e]),n((()=>{if(!e.isLoaded()){const n=e.getRequiredRecords(r).map((({namespace:e,language:n})=>e?`${e}:${n}`:n)).filter((e=>!(null==o?void 0:o[e])));console.warn(`Tolgee: Missing records in "staticData" for proper SSR functionality: ${n.map((e=>`"${e}"`)).join(", ")}`)}})),i?s:e}export{v as GlobalContextPlugin,L as T,A as TBase,m as TolgeeProvider,p as getProviderInstance,k as useTolgee,w as useTolgeeSSR,O 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/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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE !== tolgee) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","TolgeeProvider","tolgee","options","children","fallback","loading","setLoading","useState","isLoaded","useEffect","stop","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","noWrappingTolgee","getTolgeeWithDeactivatedWrapper","args","initialRender","setInitialRender","useMemo","setEmitterActive","addStaticData","changeLanguage","missingRecords","getRequiredRecords","namespace","filter","warn"],"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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","TolgeeProvider","tolgee","options","children","fallback","loading","setLoading","useState","isLoaded","useEffect","run","stop","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","noWrappingTolgee","getTolgeeWithDeactivatedWrapper","args","initialRender","setInitialRender","useMemo","setEmitterActive","addStaticData","changeLanguage","missingRecords","getRequiredRecords","namespace","filter","warn"],"mappings":"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"}
@@ -19,7 +19,7 @@ const TolgeeProvider = ({ tolgee, options, children, fallback, }) => {
19
19
  // however if the instance change on hot-reloading
20
20
  // we want to restart
21
21
  useEffect(() => {
22
- if (LAST_TOLGEE_INSTANCE !== tolgee) {
22
+ if ((LAST_TOLGEE_INSTANCE === null || LAST_TOLGEE_INSTANCE === void 0 ? void 0 : LAST_TOLGEE_INSTANCE.run) !== tolgee.run) {
23
23
  if (LAST_TOLGEE_INSTANCE) {
24
24
  LAST_TOLGEE_INSTANCE.stop();
25
25
  }
@@ -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/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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE !== tolgee) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@
25
25
  // however if the instance change on hot-reloading
26
26
  // we want to restart
27
27
  React.useEffect(() => {
28
- if (LAST_TOLGEE_INSTANCE !== tolgee) {
28
+ if ((LAST_TOLGEE_INSTANCE === null || LAST_TOLGEE_INSTANCE === void 0 ? void 0 : LAST_TOLGEE_INSTANCE.run) !== tolgee.run) {
29
29
  if (LAST_TOLGEE_INSTANCE) {
30
30
  LAST_TOLGEE_INSTANCE.stop();
31
31
  }
@@ -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/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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE !== tolgee) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\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\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [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 type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n"],"names":["React","useState","useEffect","Suspense","useContext","useCallback","getFallback","getFallbackArray","useRef","getTranslateProps","useMemo"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("@tolgee/web")):"function"==typeof define&&define.amd?define(["exports","react","@tolgee/web"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@tolgee/react"]={},e.React,e["@tolgee/web"])}(this,(function(e,t,n){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=s(t);const o={useSuspense:!0};let a;const l=()=>(a||(a=r.default.createContext(void 0)),a);let u;let c;const i=()=>{const e=l(),n=t.useContext(e)||c;if(!n)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return n},d=()=>{const[e,n]=t.useState(0);return{instance:e,rerender:t.useCallback((()=>{n((e=>e+1))}),[n])}},f=(e,s)=>{const{tolgee:r,options:o}=i(),a=n.getFallback(e),l=n.getFallbackArray(a).join(":"),u=Object.assign(Object.assign({},o),s),{rerender:c,instance:f}=d(),g=t.useRef(),b=t.useRef([]);b.current=[];const p=r.isLoaded(a);t.useEffect((()=>{const e=r.onNsUpdate(c);return g.current=e,e.subscribeNs(a),b.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[l,r]),t.useEffect((()=>(r.addActiveNs(a),()=>r.removeActiveNs(a))),[l,r]);const v=t.useCallback((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==a?void 0:a[0];return(e=>{var t;b.current.push(e),null===(t=g.current)||void 0===t||t.subscribeNs(e)})(n),r.t(Object.assign(Object.assign({},e),{ns:n}))}),[r,f]);if(u.useSuspense&&!p)throw r.addActiveNs(a,!0);return{t:v,isLoading:!p}},g=e=>{if(!e)return;const t={};return Object.entries(e||{}).forEach((([e,n])=>{if("function"==typeof n)t[e]=e=>n(b(e));else if(r.default.isValidElement(n)){const s=n;t[e]=e=>void 0===s.props.children&&(null==e?void 0:e.length)?r.default.cloneElement(s,{},b(e)):r.default.cloneElement(s)}else t[e]=n})),t},b=e=>Array.isArray(e)?r.default.Children.toArray(e):e,p=e=>{const t=e.keyName||e.children;void 0===t&&console.error("T component: keyName not defined");const n=e.defaultValue||(e.keyName?e.children:void 0),s=b(e.t({key:t,params:g(e.params),defaultValue:n,noWrap:e.noWrap,ns:e.ns,language:e.language}));return r.default.createElement(r.default.Fragment,null,s)};e.GlobalContextPlugin=e=>t=>(c={tolgee:t,options:Object.assign(Object.assign({},o),e)},t),e.T=e=>{const{t:t}=f();return r.default.createElement(p,Object.assign({t:t},e))},e.TBase=p,e.TolgeeProvider=({tolgee:e,options:n,children:s,fallback:a})=>{const[c,i]=t.useState(!e.isLoaded());t.useEffect((()=>{u!==e&&(u&&u.stop(),u=e,e.run().catch((e=>{console.error(e)})).finally((()=>{i(!1)})))}),[e]);const d=Object.assign(Object.assign({},o),n),f=l();return d.useSuspense?r.default.createElement(f.Provider,{value:{tolgee:e,options:d}},c?a:r.default.createElement(t.Suspense,{fallback:a||null},s)):r.default.createElement(f.Provider,{value:{tolgee:e,options:d}},c?a:s)},e.getProviderInstance=l,e.useTolgee=e=>{const{tolgee:n}=i(),{rerender:s}=d();return t.useEffect((()=>{const t=null==e?void 0:e.map((e=>n.on(e,s)));return()=>{null==t||t.forEach((e=>e.unsubscribe()))}}),[null==e?void 0:e.join(":")]),n},e.useTolgeeSSR=function(e,s,r){const[o]=t.useState((()=>{return t=e,Object.assign(Object.assign({},t),{t(...e){const s=n.getTranslateProps(...e);return t.t(Object.assign(Object.assign({},s),{noWrap:!0}))}});var t})),[a,l]=t.useState(!0);return t.useEffect((()=>{l(!1)}),[]),t.useMemo((()=>{e.setEmitterActive(!1),e.addStaticData(r),e.changeLanguage(s),e.setEmitterActive(!0)}),[s,r,e]),t.useState((()=>{if(!e.isLoaded()){const t=e.getRequiredRecords(s).map((({namespace:e,language:t})=>e?`${e}:${t}`:t)).filter((e=>!(null==r?void 0:r[e])));console.warn(`Tolgee: Missing records in "staticData" for proper SSR functionality: ${t.map((e=>`"${e}"`)).join(", ")}`)}})),a?o:e},e.useTranslate=(e,s)=>{const{t:r,isLoading:o}=f(e,s);return{t:t.useCallback(((...e)=>{const t=n.getTranslateProps(...e);return r(t)}),[r]),isLoading:o}},Object.keys(n).forEach((function(t){"default"===t||e.hasOwnProperty(t)||Object.defineProperty(e,t,{enumerable:!0,get:function(){return n[t]}})})),Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("@tolgee/web")):"function"==typeof define&&define.amd?define(["exports","react","@tolgee/web"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@tolgee/react"]={},e.React,e["@tolgee/web"])}(this,(function(e,t,n){"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=r(t);const o={useSuspense:!0};let a;const l=()=>(a||(a=s.default.createContext(void 0)),a);let u;let c;const i=()=>{const e=l(),n=t.useContext(e)||c;if(!n)throw new Error("Couldn't find tolgee instance, did you forgot to use `TolgeeProvider`?");return n},d=()=>{const[e,n]=t.useState(0);return{instance:e,rerender:t.useCallback((()=>{n((e=>e+1))}),[n])}},f=(e,r)=>{const{tolgee:s,options:o}=i(),a=n.getFallback(e),l=n.getFallbackArray(a).join(":"),u=Object.assign(Object.assign({},o),r),{rerender:c,instance:f}=d(),g=t.useRef(),b=t.useRef([]);b.current=[];const p=s.isLoaded(a);t.useEffect((()=>{const e=s.onNsUpdate(c);return g.current=e,e.subscribeNs(a),b.current.forEach((t=>{e.subscribeNs(t)})),()=>{e.unsubscribe()}}),[l,s]),t.useEffect((()=>(s.addActiveNs(a),()=>s.removeActiveNs(a))),[l,s]);const v=t.useCallback((e=>{var t;const n=null!==(t=e.ns)&&void 0!==t?t:null==a?void 0:a[0];return(e=>{var t;b.current.push(e),null===(t=g.current)||void 0===t||t.subscribeNs(e)})(n),s.t(Object.assign(Object.assign({},e),{ns:n}))}),[s,f]);if(u.useSuspense&&!p)throw s.addActiveNs(a,!0);return{t:v,isLoading:!p}},g=e=>{if(!e)return;const t={};return Object.entries(e||{}).forEach((([e,n])=>{if("function"==typeof n)t[e]=e=>n(b(e));else if(s.default.isValidElement(n)){const r=n;t[e]=e=>void 0===r.props.children&&(null==e?void 0:e.length)?s.default.cloneElement(r,{},b(e)):s.default.cloneElement(r)}else t[e]=n})),t},b=e=>Array.isArray(e)?s.default.Children.toArray(e):e,p=e=>{const t=e.keyName||e.children;void 0===t&&console.error("T component: keyName not defined");const n=e.defaultValue||(e.keyName?e.children:void 0),r=b(e.t({key:t,params:g(e.params),defaultValue:n,noWrap:e.noWrap,ns:e.ns,language:e.language}));return s.default.createElement(s.default.Fragment,null,r)};e.GlobalContextPlugin=e=>t=>(c={tolgee:t,options:Object.assign(Object.assign({},o),e)},t),e.T=e=>{const{t:t}=f();return s.default.createElement(p,Object.assign({t:t},e))},e.TBase=p,e.TolgeeProvider=({tolgee:e,options:n,children:r,fallback:a})=>{const[c,i]=t.useState(!e.isLoaded());t.useEffect((()=>{(null==u?void 0:u.run)!==e.run&&(u&&u.stop(),u=e,e.run().catch((e=>{console.error(e)})).finally((()=>{i(!1)})))}),[e]);const d=Object.assign(Object.assign({},o),n),f=l();return d.useSuspense?s.default.createElement(f.Provider,{value:{tolgee:e,options:d}},c?a:s.default.createElement(t.Suspense,{fallback:a||null},r)):s.default.createElement(f.Provider,{value:{tolgee:e,options:d}},c?a:r)},e.getProviderInstance=l,e.useTolgee=e=>{const{tolgee:n}=i(),{rerender:r}=d();return t.useEffect((()=>{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},e.useTolgeeSSR=function(e,r,s){const[o]=t.useState((()=>{return t=e,Object.assign(Object.assign({},t),{t(...e){const r=n.getTranslateProps(...e);return t.t(Object.assign(Object.assign({},r),{noWrap:!0}))}});var t})),[a,l]=t.useState(!0);return t.useEffect((()=>{l(!1)}),[]),t.useMemo((()=>{e.setEmitterActive(!1),e.addStaticData(s),e.changeLanguage(r),e.setEmitterActive(!0)}),[r,s,e]),t.useState((()=>{if(!e.isLoaded()){const t=e.getRequiredRecords(r).map((({namespace:e,language:t})=>e?`${e}:${t}`:t)).filter((e=>!(null==s?void 0:s[e])));console.warn(`Tolgee: Missing records in "staticData" for proper SSR functionality: ${t.map((e=>`"${e}"`)).join(", ")}`)}})),a?o:e},e.useTranslate=(e,r)=>{const{t:s,isLoading:o}=f(e,r);return{t:t.useCallback(((...e)=>{const t=n.getTranslateProps(...e);return s(t)}),[s]),isLoading:o}},Object.keys(n).forEach((function(t){"default"===t||e.hasOwnProperty(t)||Object.defineProperty(e,t,{enumerable:!0,get:function(){return n[t]}})})),Object.defineProperty(e,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=tolgee-react.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-react.umd.min.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts","../src/useTranslate.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE !== tolgee) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","globalContext","useTolgeeContext","TolgeeProviderContext","context","useContext","Error","useRerender","instance","setCounter","useState","rerender","useCallback","num","useTranslateInternal","ns","options","tolgee","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","Object","assign","subscriptionRef","useRef","subscriptionQueue","current","isLoaded","useEffect","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","wrapTagHandlers","params","result","entries","key","value","chunk","addReactKeys","isValidElement","el","children","length","cloneElement","val","Array","isArray","Children","toArray","TBase","keyName","console","error","defaultValue","translation","noWrap","language","createElement","Fragment","fallback","loading","setLoading","stop","run","catch","e","finally","optionsWithDefault","Provider","Suspense","events","listeners","map","on","listener","tolgeeInstance","staticData","noWrappingTolgee","getTolgeeWithDeactivatedWrapper","args","getTranslateProps","initialRender","setInitialRender","useMemo","setEmitterActive","addStaticData","changeLanguage","missingRecords","getRequiredRecords","namespace","filter","warn","tInternal"],"mappings":"saAIO,MAAMA,EAAsC,CACjDC,aAAa,GAGf,IAAIC,EAES,MAAAC,EAAsB,KAC5BD,IACHA,EAAmBE,EAAK,QAACC,mBACvBC,IAIGJ,GAGT,IAAIK,EChBJ,IAAIC,ECAG,MAAMC,EAAmB,KAC9B,MAAMC,EAAwBP,IACxBQ,EAAUC,EAAUA,WAACF,IDWpBF,ECVP,IAAKG,EACH,MAAM,IAAIE,MACR,0EAGJ,OAAOF,CAAO,ECVHG,EAAc,KACzB,MAAOC,EAAUC,GAAcC,EAAQA,SAAC,GAKxC,MAAO,CAAEF,WAAUG,SAHFC,EAAAA,aAAY,KAC3BH,GAAYI,GAAQA,EAAM,GAAE,GAC3B,CAACJ,IACyB,ECKlBK,EAAuB,CAClCC,EACAC,KAEA,MAAMC,OAAEA,EAAQD,QAASE,GAAmBhB,IACtCiB,EAAaC,cAAYL,GACzBM,EAAmBC,EAAAA,iBAAiBH,GAAYI,KAAK,KAErDC,EACDC,OAAAC,OAAAD,OAAAC,OAAA,GAAAR,GACAF,IAICL,SAAEA,EAAQH,SAAEA,GAAaD,IAEzBoB,EAAkBC,EAAAA,SAElBC,EAAoBD,SAAO,IACjCC,EAAkBC,QAAU,GAE5B,MAKMC,EAAWd,EAAOc,SAASZ,GAEjCa,EAAAA,WAAU,KACR,MAAMC,EAAehB,EAAOiB,WAAWvB,GAOvC,OANAgB,EAAgBG,QAAUG,EAC1BA,EAAaE,YAAYhB,GACzBU,EAAkBC,QAAQM,SAASrB,IACjCkB,EAAcE,YAAYpB,EAAG,IAGxB,KACLkB,EAAaI,aAAa,CAC3B,GACA,CAAChB,EAAkBJ,IAEtBe,EAAAA,WAAU,KACRf,EAAOqB,YAAYnB,GACZ,IAAMF,EAAOsB,eAAepB,KAClC,CAACE,EAAkBJ,IAEtB,MAAMuB,EAAI5B,eACP6B,UACC,MAAMC,EAAqB,QAARC,EAAAF,EAAM1B,UAAE,IAAA4B,EAAAA,EAAIxB,aAAA,EAAAA,EAAa,GAE5C,MA7BkB,CAACJ,UACrBc,EAAkBC,QAAQc,KAAK7B,GACR,QAAvB4B,EAAAhB,EAAgBG,eAAO,IAAAa,GAAAA,EAAER,YAAYpB,EAAG,EA0BtC8B,CAAcH,GACPzB,EAAOuB,EAAOf,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAe,IAAO1B,GAAI2B,IAAoB,GAEtD,CAACzB,EAAQT,IAGX,GAAIgB,EAAe9B,cAAgBqC,EACjC,MAAMd,EAAOqB,YAAYnB,GAAY,GAGvC,MAAO,CAAEqB,IAAGM,WAAYf,EAAU,ECnEvBgB,EACXC,IAEA,IAAKA,EACH,OAGF,MAAMC,EAAc,CAAA,EAmBpB,OAjBAxB,OAAOyB,QAAQF,GAAU,CAAE,GAAEZ,SAAQ,EAAEe,EAAKC,MAC1C,GAAqB,mBAAVA,EACTH,EAAOE,GAAQE,GACND,EAAME,EAAaD,SAEvB,GAAIxD,EAAK,QAAC0D,eAAeH,GAAe,CAC7C,MAAMI,EAAKJ,EACXH,EAAOE,GAAQE,QACgBtD,IAAtByD,EAAGf,MAAMgB,WAA0BJ,aAAK,EAALA,EAAOK,QAC7C7D,EAAK,QAAC8D,aAAaH,EAAI,CAAE,EAAEF,EAAaD,IACxCxD,UAAM8D,aAAaH,EAE1B,MACCP,EAAOE,GAAOC,CACf,IAGIH,CAAM,EAGFK,EACXM,GAEIC,MAAMC,QAAQF,GACT/D,UAAMkE,SAASC,QAAQJ,GAEvBA,ECpCEK,EAAyBxB,IACpC,MAAMU,EAAOV,EAA2ByB,SAAWzB,EAAMgB,cAC7C1D,IAARoD,GAEFgB,QAAQC,MAAM,oCAEhB,MAAMC,EACJ5B,EAAM4B,eACJ5B,EAA2ByB,QAAUzB,EAAMgB,cAAW1D,GAEpDuE,EAAchB,EAClBb,EAAMD,EAAE,CACNW,IAAKA,EACLH,OAAQD,EAAgBN,EAAMO,QAC9BqB,eACAE,OAAQ9B,EAAM8B,OACdxD,GAAI0B,EAAM1B,GACVyD,SAAU/B,EAAM+B,YAIpB,OAAO3E,EAAAA,QAAA4E,cAAA5E,EAAAA,QAAA6E,SAAA,KAAGJ,EAAe,wBLlBxBtD,GACAC,IACChB,EAAgB,CACdgB,SACAD,QAAcS,OAAAC,OAAAD,OAAAC,OAAA,GAAAjC,GAA0BuB,IAEnCC,OMFmBwB,IAC5B,MAAMD,EAAEA,GAAM1B,IAEd,OAAOjB,UAAA4E,cAACR,EAAMxC,OAAAC,OAAA,CAAAc,EAAGA,GAA8BC,GAAS,6BPeG,EAC3DxB,SACAD,UACAyC,WACAkB,eAEA,MAAOC,EAASC,GAAcnE,EAAQA,UAAEO,EAAOc,YAK/CC,EAAAA,WAAU,KACJhC,IAAyBiB,IACvBjB,GACFA,EAAqB8E,OAEvB9E,EAAuBiB,EACvBA,EACG8D,MACAC,OAAOC,IAENd,QAAQC,MAAMa,EAAE,IAEjBC,SAAQ,KACPL,GAAW,EAAM,IAEtB,GACA,CAAC5D,IAEJ,MAAMkE,EAA0B1D,OAAAC,OAAAD,OAAAC,OAAA,GAAAjC,GAA0BuB,GAEpDb,EAAwBP,IAE9B,OAAIuF,EAAmBzF,YAEnBG,EAAC,QAAA4E,cAAAtE,EAAsBiF,SAAQ,CAC7BhC,MAAO,CAAEnC,SAAQD,QAASmE,IAEzBP,EACC,EAEA/E,EAAA,QAAA4E,cAACY,EAAAA,SAAS,CAAAV,SAAUA,GAAY,MAAOlB,IAO7C5D,EAAC,QAAA4E,cAAAtE,EAAsBiF,SACrB,CAAAhC,MAAO,CAAEnC,SAAQD,QAASmE,IAEzBP,EAAUD,EAAWlB,EAExB,sCQ7EsB6B,IACxB,MAAMrE,OAAEA,GAAWf,KAEbS,SAAEA,GAAaJ,IASrB,OAPAyB,EAAAA,WAAU,KACR,MAAMuD,EAAYD,eAAAA,EAAQE,KAAKP,GAAMhE,EAAOwE,GAAGR,EAAGtE,KAClD,MAAO,KACL4E,SAAAA,EAAWnD,SAASsD,GAAaA,EAASrD,eAAc,CACzD,GACA,CAACiD,aAAA,EAAAA,EAAQ/D,KAAK,OAEVN,CAAM,0BCeb0E,EACAnB,EACAoB,GAEA,MAAOC,GAAoBnF,EAAAA,UAAS,KAClCoF,OA7BF7E,EA6BkC0E,EA3BlClE,OAAAC,OAAAD,OAAAC,OAAA,GACKT,GAAM,CACT,CAAAuB,IAAKuD,GAEH,MAAMtD,EAAQuD,EAAAA,qBAAqBD,GACnC,OAAO9E,EAAOuB,EAAOf,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAAe,IAAO8B,QAAQ,IACrC,IATL,IACEtD,CA6BiD,KAG1CgF,EAAeC,GAAoBxF,EAAQA,UAAC,GAmCnD,OAjCAsB,EAAAA,WAAU,KACRkE,GAAiB,EAAM,GACtB,IAEHC,EAAAA,SAAQ,KAINR,EAAeS,kBAAiB,GAChCT,EAAeU,cAAcT,GAC7BD,EAAeW,eAAe9B,GAC9BmB,EAAeS,kBAAiB,EAAK,GACpC,CAAC5B,EAAUoB,EAAYD,IAE1BjF,EAAAA,UAAS,KAEP,IAAKiF,EAAe5D,WAAY,CAG9B,MAAMwE,EAAiBZ,EACpBa,mBAAmBhC,GACnBgB,KAAI,EAAGiB,YAAWjC,cACjBiC,EAAY,GAAGA,KAAajC,IAAaA,IAE1CkC,QAAQvD,KAASyC,eAAAA,EAAazC,MAGjCgB,QAAQwC,KACN,yEAAyEJ,EAAef,KAAKrC,GAAQ,IAAIA,OAAQ5B,KAAK,QAEzH,KAGI0E,EAAgBJ,EAAmBF,CAC5C,iBC5D4B,CAC1B5E,EACAC,KAEA,MAAQwB,EAAGoE,EAAS9D,UAAEA,GAAchC,EAAqBC,EAAIC,GAW7D,MAAO,CAAEwB,EATC5B,EAAAA,aACR,IAAIoC,KAEF,MAAMP,EAAQuD,EAAAA,qBAAqBhD,GACnC,OAAO4D,EAAUnE,EAAM,GAEzB,CAACmE,IAGS9D,YAAW"}
1
+ {"version":3,"file":"tolgee-react.umd.min.js","sources":["../src/TolgeeProvider.tsx","../src/GlobalContextPlugin.tsx","../src/useTolgeeContext.ts","../src/hooks.ts","../src/useTranslateInternal.ts","../src/tagsTools.tsx","../src/TBase.tsx","../src/T.tsx","../src/useTolgee.ts","../src/useTolgeeSSR.ts","../src/useTranslate.ts"],"sourcesContent":["import React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n useSuspense: true,\n};\n\nlet ProviderInstance: React.Context<TolgeeReactContext | undefined>;\n\nexport const getProviderInstance = () => {\n if (!ProviderInstance) {\n ProviderInstance = React.createContext<TolgeeReactContext | undefined>(\n undefined\n );\n }\n\n return ProviderInstance;\n};\n\nlet LAST_TOLGEE_INSTANCE: TolgeeInstance | undefined = 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 // prevent restarting tolgee unnecesarly\n // however if the instance change on hot-reloading\n // we want to restart\n useEffect(() => {\n if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {\n if (LAST_TOLGEE_INSTANCE) {\n LAST_TOLGEE_INSTANCE.stop();\n }\n LAST_TOLGEE_INSTANCE = tolgee;\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 }\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 subscription.subscribeNs(namespaces);\n subscriptionQueue.current.forEach((ns) => {\n subscription!.subscribeNs(ns);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [namespacesJoined, tolgee]);\n\n useEffect(() => {\n tolgee.addActiveNs(namespaces);\n return () => tolgee.removeActiveNs(namespaces);\n }, [namespacesJoined, tolgee]);\n\n const t = useCallback(\n (props: TranslateProps<any>) => {\n const fallbackNs = props.ns ?? namespaces?.[0];\n subscribeToNs(fallbackNs);\n return tolgee.t({ ...props, ns: fallbackNs }) as any;\n },\n [tolgee, instance]\n );\n\n if (currentOptions.useSuspense && !isLoaded) {\n throw tolgee.addActiveNs(namespaces, true);\n }\n\n return { t, isLoading: !isLoaded };\n};\n","import { TranslateParams } from '@tolgee/web';\nimport React from 'react';\n\nimport { ParamsTags } from './types';\n\nexport const wrapTagHandlers = (\n params: TranslateParams<ParamsTags> | undefined\n) => {\n if (!params) {\n return undefined;\n }\n\n const result: any = {};\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (typeof value === 'function') {\n result[key] = (chunk: any) => {\n return value(addReactKeys(chunk));\n };\n } else if (React.isValidElement(value as any)) {\n const el = value as React.ReactElement;\n result[key] = (chunk: any) => {\n return el.props.children === undefined && chunk?.length\n ? React.cloneElement(el, {}, addReactKeys(chunk))\n : React.cloneElement(el);\n };\n } else {\n result[key] = value;\n }\n });\n\n return result;\n};\n\nexport const addReactKeys = (\n val: React.ReactNode | React.ReactNode[] | undefined\n) => {\n if (Array.isArray(val)) {\n return React.Children.toArray(val);\n } else {\n return val;\n }\n};\n","import React from 'react';\nimport { addReactKeys, wrapTagHandlers } from './tagsTools';\nimport type { 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 [noWrappingTolgee] = useState(() =>\n getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n );\n\n const [initialRender, setInitialRender] = useState(true);\n\n useEffect(() => {\n setInitialRender(false);\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 tolgeeInstance.setEmitterActive(false);\n tolgeeInstance.addStaticData(staticData);\n tolgeeInstance.changeLanguage(language!);\n tolgeeInstance.setEmitterActive(true);\n }, [language, staticData, tolgeeInstance]);\n\n useState(() => {\n // running this function only on first render\n if (!tolgeeInstance.isLoaded()) {\n // warning user, that static data provided are not sufficient\n // for proper SSR render\n const missingRecords = tolgeeInstance\n .getRequiredRecords(language)\n .map(({ namespace, language }) =>\n namespace ? `${namespace}:${language}` : language\n )\n .filter((key) => !staticData?.[key]);\n\n // eslint-disable-next-line no-console\n console.warn(\n `Tolgee: Missing records in \"staticData\" for proper SSR functionality: ${missingRecords.map((key) => `\"${key}\"`).join(', ')}`\n );\n }\n });\n\n return initialRender ? noWrappingTolgee : tolgeeInstance;\n}\n","import { useCallback } from 'react';\nimport {\n TFnType,\n getTranslateProps,\n DefaultParamType,\n TranslationKey,\n} from '@tolgee/web';\n\nimport { useTranslateInternal } from './useTranslateInternal';\nimport { ReactOptions } from './types';\n\nexport interface UseTranslateResult {\n t: TFnType<DefaultParamType, string, TranslationKey>;\n isLoading: boolean;\n}\n\nexport const useTranslate = (\n ns?: string[] | string,\n options?: ReactOptions\n): UseTranslateResult => {\n const { t: tInternal, isLoading } = useTranslateInternal(ns, options);\n\n const t = useCallback(\n (...params: any) => {\n // @ts-ignore\n const props = getTranslateProps(...params);\n return tInternal(props);\n },\n [tInternal]\n );\n\n return { t, isLoading };\n};\n"],"names":["DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","globalContext","useTolgeeContext","TolgeeProviderContext","context","useContext","Error","useRerender","instance","setCounter","useState","rerender","useCallback","num","useTranslateInternal","ns","options","tolgee","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","join","currentOptions","Object","assign","subscriptionRef","useRef","subscriptionQueue","current","isLoaded","useEffect","subscription","onNsUpdate","subscribeNs","forEach","unsubscribe","addActiveNs","removeActiveNs","t","props","fallbackNs","_a","push","subscribeToNs","isLoading","wrapTagHandlers","params","result","entries","key","value","chunk","addReactKeys","isValidElement","el","children","length","cloneElement","val","Array","isArray","Children","toArray","TBase","keyName","console","error","defaultValue","translation","noWrap","language","createElement","Fragment","fallback","loading","setLoading","run","stop","catch","e","finally","optionsWithDefault","Provider","Suspense","events","listeners","map","on","listener","tolgeeInstance","staticData","noWrappingTolgee","getTolgeeWithDeactivatedWrapper","args","getTranslateProps","initialRender","setInitialRender","useMemo","setEmitterActive","addStaticData","changeLanguage","missingRecords","getRequiredRecords","namespace","filter","warn","tInternal"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tolgee/react",
3
- "version": "5.28.4",
3
+ "version": "5.28.6-prerelease.c1d73b61.0",
4
4
  "description": "React implementation for Tolgee localization framework",
5
5
  "main": "./dist/tolgee-react.cjs.js",
6
6
  "module": "./dist/tolgee-react.esm.js",
@@ -38,7 +38,7 @@
38
38
  "react": "^16.14.0 || ^17.0.1 || ^18.1.0"
39
39
  },
40
40
  "dependencies": {
41
- "@tolgee/web": "5.28.4"
41
+ "@tolgee/web": "5.28.6-prerelease.c1d73b61.0"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@rollup/plugin-node-resolve": "^14.1.0",
@@ -46,8 +46,8 @@
46
46
  "@testing-library/dom": "^8.7.2",
47
47
  "@testing-library/jest-dom": "^5.11.4",
48
48
  "@testing-library/react": "^14.0.0",
49
- "@tolgee/format-icu": "5.28.4",
50
- "@tolgee/testing": "5.28.4",
49
+ "@tolgee/format-icu": "5.28.6-prerelease.c1d73b61.0",
50
+ "@tolgee/testing": "5.28.6-prerelease.c1d73b61.0",
51
51
  "@types/jest": "^27.0.2",
52
52
  "@types/node": "^17.0.8",
53
53
  "@types/react": "^18.2.42",
@@ -88,5 +88,5 @@
88
88
  "access": "public"
89
89
  },
90
90
  "sideEffects": false,
91
- "gitHead": "3db076f155def34db873006d1db4cf3e6b28317a"
91
+ "gitHead": "ad8df2aa52c5353b80ca6967895bbcdd4a5f52c5"
92
92
  }
@@ -39,7 +39,7 @@ export const TolgeeProvider: React.FC<TolgeeProviderProps> = ({
39
39
  // however if the instance change on hot-reloading
40
40
  // we want to restart
41
41
  useEffect(() => {
42
- if (LAST_TOLGEE_INSTANCE !== tolgee) {
42
+ if (LAST_TOLGEE_INSTANCE?.run !== tolgee.run) {
43
43
  if (LAST_TOLGEE_INSTANCE) {
44
44
  LAST_TOLGEE_INSTANCE.stop();
45
45
  }