{"version":3,"file":"tolgee-react.esm.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":[],"mappings":"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"}