{"version":3,"file":"useLocale.cjs","names":["internationalization","IntlayerClientContext"],"sources":["../../../src/client/useLocale.ts"],"sourcesContent":["'use client';\n\nimport { internationalization } from '@intlayer/config/built';\nimport type {\n  DeclaredLocales,\n  LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport { useCallback, useContext } from 'react';\nimport { IntlayerClientContext } from './IntlayerProvider';\nimport { setLocaleInStorage } from './useLocaleStorage';\n\nexport type UseLocaleProps = {\n  isCookieEnabled?: boolean;\n  onLocaleChange?: (locale: DeclaredLocales) => void;\n};\n\nexport type UseLocaleResult = {\n  locale: DeclaredLocales;\n  defaultLocale: DeclaredLocales;\n  availableLocales: DeclaredLocales[];\n  setLocale: (locale: LocalesValues) => void;\n};\n\n/**\n * Client-side hook to get the current locale and related locale management functions.\n *\n * @param props - Optional properties for the hook.\n * @returns An object containing the current locale, default locale, available locales, and a function to update the locale.\n *\n * @example\n * ```tsx\n * import { useLocale } from 'react-intlayer';\n *\n * const LocaleSwitcher = () => {\n *   const { locale, setLocale, availableLocales } = useLocale();\n *\n *   return (\n *     <select value={locale} onChange={(e) => setLocale(e.target.value)}>\n *       {availableLocales.map((loc) => (\n *         <option key={loc} value={loc}>{loc}</option>\n *       ))}\n *     </select>\n *   );\n * };\n * ```\n */\nexport const useLocale = ({\n  isCookieEnabled,\n  onLocaleChange,\n}: UseLocaleProps = {}): UseLocaleResult => {\n  const { defaultLocale, locales: availableLocales } =\n    internationalization ?? {};\n\n  const {\n    locale,\n    setLocale: setLocaleState,\n    isCookieEnabled: isCookieEnabledContext,\n  } = useContext(IntlayerClientContext) ?? {};\n\n  const setLocale = useCallback(\n    (locale: LocalesValues) => {\n      if (!availableLocales?.map(String).includes(locale)) {\n        console.error(`Locale ${locale} is not available`);\n        return;\n      }\n\n      setLocaleState(locale);\n      setLocaleInStorage(\n        locale,\n        isCookieEnabled ?? isCookieEnabledContext ?? true\n      );\n      onLocaleChange?.(locale as DeclaredLocales);\n    },\n    [availableLocales, onLocaleChange, setLocaleState, isCookieEnabled]\n  );\n\n  return {\n    locale, // Current locale\n    defaultLocale, // Principal locale defined in config\n    availableLocales, // List of the available locales defined in config\n    setLocale, // Function to set the locale\n  } as UseLocaleResult;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,MAAa,aAAa,EACxB,iBACA,mBACkB,EAAE,KAAsB;CAC1C,MAAM,EAAE,eAAe,SAAS,qBAC9BA,+CAAwB,EAAE;CAE5B,MAAM,EACJ,QACA,WAAW,gBACX,iBAAiB,iDACJC,sDAAsB,IAAI,EAAE;AAmB3C,QAAO;EACL;EACA;EACA;EACA,mCApBC,WAA0B;AACzB,OAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE;AACnD,YAAQ,MAAM,UAAU,OAAO,mBAAmB;AAClD;;AAGF,kBAAe,OAAO;AACtB,sDACE,QACA,mBAAmB,0BAA0B,KAC9C;AACD,oBAAiB,OAA0B;KAE7C;GAAC;GAAkB;GAAgB;GAAgB;GAAgB,CAO1D;EACV"}