Ott 2091 lang change

keep-around/aa9cb5924a26ff76e736af405962dbd45dac2efa
Макситалиев Мирлан 4 years ago
parent 4028ebcfcd
commit aa9cb5924a
  1. 3
      src/features/GlobalStores/index.tsx
  2. 9
      src/features/LexicsStore/helpers/isSupportedLang/index.tsx
  3. 8
      src/features/LexicsStore/hooks/useLang.tsx
  4. 0
      src/helpers/isSupportedLang/__tests__/index.tsx
  5. 10
      src/helpers/isSupportedLang/index.tsx
  6. 9
      src/helpers/languageUrlParam/index.tsx
  7. 10
      src/hooks/useStorage/index.tsx

@ -1,12 +1,11 @@
import { ReactNode } from 'react'
import { client } from 'config/clients'
import { getLanguageUrlParam } from 'helpers/languageUrlParam'
import { AuthStore } from 'features/AuthStore'
import { LexicsStore } from 'features/LexicsStore'
const initialLanguage = getLanguageUrlParam() || client.defaultLanguage
const initialLanguage = getLanguageUrlParam()
type Props = {
children: ReactNode,

@ -1,9 +0,0 @@
import map from 'lodash/map'
import includes from 'lodash/includes'
import { langsList } from 'config/languages'
export const isSupportedLang = (lang: string) => {
const supportedLangs = map(langsList, 'locale')
return includes(supportedLangs, lang)
}

@ -3,14 +3,16 @@ import { useCallback } from 'react'
import { useLocalStore } from 'hooks'
import type { Languages } from 'config/languages'
import { client } from 'config/clients'
import { isSupportedLang } from '../helpers/isSupportedLang'
import { isSupportedLang } from 'helpers/isSupportedLang'
const LANG_KEY = 'lang'
const DEFAULT_LANG = 'en'
const DEFAULT_LANG = client.defaultLanguage || 'en'
export const useLang = (initialLanguage: Languages = DEFAULT_LANG) => {
export const useLang = (initialLanguage?: Languages) => {
const [lang, setLang] = useLocalStore<Languages>({
defaultValue: DEFAULT_LANG,
initialValue: initialLanguage,
key: LANG_KEY,
validator: isSupportedLang,

@ -0,0 +1,10 @@
import map from 'lodash/map'
import includes from 'lodash/includes'
import type { Languages } from 'config/languages'
import { langsList } from 'config/languages'
export const isSupportedLang = (lang: string): lang is Languages => {
const supportedLangs = map(langsList, ({ locale }) => locale)
return includes(supportedLangs, lang)
}

@ -1,11 +1,14 @@
import type { Languages } from 'config/languages'
import { history } from 'config/history'
import { isSupportedLang } from 'helpers/isSupportedLang'
const KEY = 'lang'
export const getLanguageUrlParam = () => (
new URLSearchParams(history.location.search).get(KEY) as Languages
)
export const getLanguageUrlParam = () => {
const lang = new URLSearchParams(history.location.search).get(KEY)
return lang && isSupportedLang(lang) ? lang : undefined
}
export const addLanguageUrlParam = (lang: Languages, url: string) => {
const urlObject = new URL(url)

@ -9,7 +9,17 @@ const defaultSerializer = (key: string, value: any) => value
type Args<T> = {
clearOnUnmount?: boolean,
/**
* Дефолтное знаение
* используется если полученный из сторежда значение не валидно
*/
defaultValue?: T,
/**
* Начальное значение
* если указано пропускает считывание из стореджа
*/
initialValue?: T,
key: string,
serialize?: (key: string, value: T) => string,

Loading…
Cancel
Save