{"version":3,"file":"useLocalisationLanguages.mjs","sources":[""],"sourcesContent":["import { useCallback, useState } from \"react\";\r\nimport { useListeners } from \"./useListeners\";\r\nimport { useLocalisationPlugin } from \"./useLocalisationPlugin\";\r\nimport { constants } from \"../../constants\";\r\nimport { Localisation } from \"../../plugins/localisation\";\r\n\r\ntype TPluginInstance = Localisation;\r\n\r\ntype TUseLocalisationLanguagesProps = {\r\n  isNormalize: boolean;\r\n};\r\n\r\ntype TUseLocalisationLanguagesReturn = {\r\n  isLoading: boolean;\r\n  langList: string[];\r\n  lang: string | null;\r\n  getChangeFn: (lang: string) => void;\r\n};\r\n\r\n/**\n * Получает данные о выбранном языке, список языков, состояние их загрузки и функцию смены языка\n * @returns {TUseLocalisationLanguagesReturn} Возвращает текущий язык, список доступных языков, флаг загрузки и функцию `getChangeFn` для переключения языка.\n * @example\n * import { useLocalisationLanguages } from \"@delement/ui/utils/react\";\r\n *\r\n * const langSwitchBtn = () => {\r\n *\r\n *   const { lang, langList, isLoading, getChangeFn } = useLocalisationLanguages();\r\n *\r\n *     const onClick = async (e, lang) => {\r\n *       e.preventDefault();\r\n *       await getChangeFn(lang);\r\n *     };\r\n *\r\n *     return (\r\n *       <div>\r\n *         <p>\r\n *           <Locale code={\"forms.emptyInput\"}/>\r\n *           <br/><br/>\r\n *           Текущий язык: <span>{lang}</span><br/>\r\n *           Доступные языки: <span>{langList.join(\", \")}</span><br/>\r\n *         </p>\r\n *         {langList.map(item => {\r\n *           return (\r\n *             <p key={item}>\r\n *               <Btn isDisabled={isLoading || item === lang} onClick={(e) => onClick(e, item)} label={item}/>\r\n *             </p>\r\n *           );\r\n *         }\r\n *         )}\r\n *       </div>\r\n *     );\r\n * };\r\n */\r\nexport const useLocalisationLanguages = (props?: TUseLocalisationLanguagesProps): TUseLocalisationLanguagesReturn => {\r\n\r\n  const {\r\n    isNormalize = false,\r\n  } = props || {};\r\n\r\n  const getCurrentLang = () => Localisation.instance?.lang ?? \"\";\r\n\r\n  const [ langList, setLangList ] = useState(() => Localisation.instance?.langList ?? []);\r\n\r\n  const [ lang, setLang ] = useState(() => isNormalize ? Localisation.getLangWithRegion(getCurrentLang()) : getCurrentLang());\r\n\r\n  const { plugin, isLoading } = useLocalisationPlugin();\r\n\r\n  const onChange = useCallback(({ detail }: CustomEvent<{\r\n    instance: TPluginInstance;\r\n  }>) => {\r\n    const { langList = [], lang = \"\" } = detail.instance;\r\n    setLangList(langList);\r\n    setLang(isNormalize ? Localisation.getLangWithRegion(lang) : getCurrentLang());\r\n  }, []);\r\n\r\n  const getChangeFn = useCallback(async (newLangCode = \"\") => {\r\n    const newLang = isNormalize ? Localisation.getLangWithRegion(newLangCode) : newLangCode;\r\n    return plugin?.getChangeLanguage(newLang!!)\r\n      .then((result) => {\r\n        setLang(newLang);\r\n        return result;\r\n      }) ?? await Promise.reject(`[useLocalisationLanguages]: Plugin are not ready`);\r\n  }, [ plugin ]);\r\n\r\n  useListeners({\r\n    listeners: {\r\n      [constants.localisationBubbles.localisationChange]: { fn: onChange },\r\n    },\r\n  });\r\n\r\n  return {\r\n    isLoading,\r\n    langList,\r\n    lang,\r\n    getChangeFn,\r\n  };\r\n\r\n};\r\n"],"names":["useLocalisationLanguages","props","isNormalize","getCurrentLang","Localisation","instance","lang","langList","setLangList","useState","setLang","getLangWithRegion","plugin","isLoading","useLocalisationPlugin","onChange","useCallback","detail","getChangeFn","async","newLangCode","newLang","getChangeLanguage","then","result","Promise","reject","useListeners","listeners","constants","localisationBubbles","localisationChange","fn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDO,MAAMA,yBAA4BC,QAEvC,MAAMC,YACJA,YAAc,OACZD,OAAS,CAAA,EAEb,MAAME,eAAiB,IAAMC,aAAaC,UAAUC,MAAQ,GAE5D,MAAQC,SAAUC,aAAgBC,SAAS,IAAML,aAAaC,UAAUE,UAAY,IAEpF,MAAQD,KAAMI,SAAYD,SAAS,IAAMP,YAAcE,aAAaO,kBAAkBR,kBAAoBA,kBAE1G,MAAMS,OAAEA,OAAMC,UAAEA,WAAcC,wBAE9B,MAAMC,SAAWC,YAAY,EAAGC,kBAG9B,MAAMV,SAAEA,SAAW,GAAED,KAAEA,KAAO,IAAOW,OAAOZ,SAC5CG,YAAYD,UACZG,QAAQR,YAAcE,aAAaO,kBAAkBL,MAAQH,mBAC5D,IAEH,MAAMe,YAAcF,YAAYG,MAAOC,YAAc,MACnD,MAAMC,QAAUnB,YAAcE,aAAaO,kBAAkBS,aAAeA,YAC5E,OAAOR,QAAQU,kBAAkBD,SAC9BE,KAAMC,SACLd,QAAQW,SACR,OAAOG,gBACGC,QAAQC,OAAO,qDAC5B,CAAEd,SAELe,aAAa,CACXC,UAAW,CACT,CAACC,UAAUC,oBAAoBC,oBAAqB,CAAEC,GAAIjB,aAI9D,MAAO,CACLF,oBACAN,kBACAD,UACAY"}