{"version":3,"file":"tolgee-react.esm.min.mjs","sources":["../src/useTolgeeSSR.ts","../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"],"sourcesContent":["import {\n  CachePublicRecord,\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 * @param enabled if set to false, no action is taken\n */\nexport function useTolgeeSSR(\n  tolgeeInstance: TolgeeInstance,\n  language?: string,\n  data?: TolgeeStaticData | CachePublicRecord[] | undefined,\n  enabled = true\n) {\n  const [noWrappingTolgee] = useState(() =>\n    getTolgeeWithDeactivatedWrapper(tolgeeInstance)\n  );\n\n  const [initialRender, setInitialRender] = useState(enabled);\n\n  useEffect(() => {\n    setInitialRender(false);\n  }, []);\n\n  useMemo(() => {\n    if (enabled) {\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(data);\n      tolgeeInstance.changeLanguage(language!);\n      tolgeeInstance.setEmitterActive(true);\n    }\n  }, [language, data, tolgeeInstance]);\n\n  useState(() => {\n    // running this function only on first render\n    if (!tolgeeInstance.isLoaded() && enabled) {\n      // warning user, that static data provided are not sufficient\n      // for proper SSR render\n      const requiredRecords = tolgeeInstance.getRequiredDescriptors(language);\n      const providedRecords = tolgeeInstance.getAllRecords();\n      const missingRecords = requiredRecords\n        .map(({ namespace, language }) =>\n          namespace ? `${namespace}:${language}` : language\n        )\n        .filter((key) => !providedRecords.find((r) => r?.cacheKey === 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 React, { Suspense, useEffect, useState } from 'react';\nimport { TolgeeInstance, TolgeeStaticDataProp } from '@tolgee/web';\nimport { ReactOptions, TolgeeReactContext } from './types';\nimport { useTolgeeSSR } from './useTolgeeSSR';\n\nexport const DEFAULT_REACT_OPTIONS: ReactOptions = {\n  useSuspense: false,\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 type SSROptions = {\n  /**\n   * Hard set language to this value, use together with `staticData`\n   */\n  language?: string;\n  /**\n   * If provided, static data will be hard set to Tolgee cache for initial render\n   */\n  staticData?: TolgeeStaticDataProp;\n};\n\nexport interface TolgeeProviderProps {\n  children?: React.ReactNode;\n  tolgee: TolgeeInstance;\n  options?: ReactOptions;\n  fallback?: React.ReactNode;\n  /**\n   * use this option if you use SSR\n   *\n   * You can pass staticData and language\n   * which will be set to tolgee instance for the initial render\n   *\n   * Don't switch between ssr and non-ssr dynamically\n   */\n  ssr?: SSROptions | boolean;\n}\n\nexport const TolgeeProvider: React.FC<TolgeeProviderProps> = ({\n  tolgee,\n  options,\n  children,\n  fallback,\n  ssr,\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  let tolgeeSSR = tolgee;\n\n  const { language, staticData } = (\n    typeof ssr !== 'object' ? {} : ssr\n  ) as SSROptions;\n  tolgeeSSR = useTolgeeSSR(tolgee, language, staticData, Boolean(ssr));\n\n  const [loading, setLoading] = useState(!tolgeeSSR.isLoaded());\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: tolgeeSSR, 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: tolgeeSSR, 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  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 subscriptionQueue = useRef([] as NsFallback[]);\n  subscriptionQueue.current = [];\n\n  const isLoaded = tolgee.isLoaded(namespaces);\n\n  useEffect(() => {\n    const subscription = tolgee.on('update', rerender);\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      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\nfunction unwrapSingleElementArray(value: any) {\n  if (Array.isArray(value) && value.length === 1) {\n    return value[0];\n  } else {\n    return value;\n  }\n}\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\nfunction unwrapFunctions(value: any): any {\n  if (typeof value === 'function') {\n    return value();\n  }\n  return value;\n}\n\nexport const addReactKeys = (\n  children: React.ReactNode | React.ReactNode[] | undefined\n) => {\n  const val = unwrapSingleElementArray(children);\n  if (Array.isArray(val)) {\n    return val.map((item, i) => (\n      <React.Fragment key={i}>{unwrapFunctions(item)}</React.Fragment>\n    ));\n  } else {\n    return unwrapFunctions(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\nexport const T = (props: TProps): React.ReactElement => {\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"],"names":["useTolgeeSSR","tolgeeInstance","language","data","enabled","noWrappingTolgee","useState","getTolgeeWithDeactivatedWrapper","tolgee","Object","assign","t","args","props","getTranslateProps","noWrap","initialRender","setInitialRender","useEffect","useMemo","setEmitterActive","addStaticData","changeLanguage","isLoaded","requiredRecords","getRequiredDescriptors","providedRecords","getAllRecords","missingRecords","map","namespace","filter","key","find","r","cacheKey","console","warn","join","DEFAULT_REACT_OPTIONS","useSuspense","ProviderInstance","getProviderInstance","React","createContext","undefined","LAST_TOLGEE_INSTANCE","TolgeeProvider","options","children","fallback","ssr","run","stop","catch","e","error","finally","setLoading","tolgeeSSR","staticData","Boolean","loading","optionsWithDefault","TolgeeProviderContext","createElement","Provider","value","Suspense","globalContext","GlobalContextPlugin","useTolgeeContext","context","useContext","Error","useRerender","instance","setCounter","rerender","useCallback","num","useTranslateInternal","ns","defaultOptions","namespaces","getFallback","namespacesJoined","getFallbackArray","currentOptions","useRef","current","subscription","on","unsubscribe","addActiveNs","removeActiveNs","fallbackNs","_a","isLoading","useTranslate","tInternal","params","wrapTagHandlers","result","entries","forEach","chunk","addReactKeys","isValidElement","el","length","cloneElement","unwrapFunctions","val","Array","isArray","item","i","Fragment","TBase","keyName","defaultValue","translation","T","useTolgee","events","listeners","listener"],"mappings":"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"}