import { useMemo, useState } from 'react' import Avatar from '@/components/ui/Avatar' import Dropdown from '@/components/ui/Dropdown' import Spinner from '@/components/ui/Spinner' import classNames from 'classnames' import withHeaderItem from '@/utils/hoc/withHeaderItem' import { useStoreState, useStoreActions } from '@/store' import { dateLocales } from '@/locales' import dayjs from 'dayjs' // eslint-disable-next-line import/no-named-as-default import i18n from 'i18next' import { HiCheck } from 'react-icons/hi' import type { CommonProps } from '@/@types/common' import appConfig from '@/configs/app.config' const _LanguageSelector = ({ className }: CommonProps) => { const [loading, setLoading] = useState(false) const { setLang } = useStoreActions((actions) => actions.locale) const { config } = useStoreState((state) => state.abpConfig) const languageList = config?.localization.languages const currentLang = config?.localization?.currentCulture?.cultureName const selectLangFlag = useMemo(() => { return languageList?.find((lang) => lang.cultureName === currentLang)?.cultureName }, [currentLang, languageList]) const selectedLanguage = (
{loading ? ( ) : ( selectLangFlag && ( ) )}
) const onLanguageSelect = (cultureName = appConfig.locale) => { setLoading(true) const dispatchLang = () => { i18n.changeLanguage(cultureName) setLang(cultureName) setLoading(false) } if (dateLocales[cultureName]) { dateLocales[cultureName]() .then(() => { dayjs.locale(cultureName) dispatchLang() }) .catch(() => { dispatchLang() }) } else { dispatchLang() } } return ( {languageList?.map((lang) => ( onLanguageSelect(lang.cultureName)} > {lang.displayName} {currentLang === lang.cultureName && } ))} ) } const LanguageSelector = withHeaderItem(_LanguageSelector) export default LanguageSelector