Merge with main
This commit is contained in:
commit
9462401323
|
@ -1,3 +1,11 @@
|
|||
# [1.16.0](https://github.com/kolplattformen/skolplattformen/compare/v1.15.1...v1.16.0) (2021-04-16)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* 🎸 Added text for empty menu ([bbfb2a3](https://github.com/kolplattformen/skolplattformen/commit/bbfb2a36aea659b91ba1ed528691066caf0c0cef))
|
||||
* 🎸 Updated embedded-api for better menu handling ([675454a](https://github.com/kolplattformen/skolplattformen/commit/675454a2fe9be5738c6965971da9db2f7b4c75a4))
|
||||
|
||||
## [1.15.1](https://github.com/kolplattformen/skolplattformen/compare/v1.15.0...v1.15.1) (2021-04-16)
|
||||
|
||||
|
||||
|
|
|
@ -9,5 +9,5 @@
|
|||
"test": "npx lerna run test --stream",
|
||||
"lint": "npx lerna run lint --stream"
|
||||
},
|
||||
"version": "1.15.1"
|
||||
"version": "1.16.0"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
import React from 'react'
|
||||
import { ActivityIndicator, View, StyleSheet } from 'react-native'
|
||||
|
||||
export const LoadingComponent = () => (
|
||||
<View style={[styles.container, styles.horizontal]}>
|
||||
<ActivityIndicator size="large" />
|
||||
</View>
|
||||
)
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
},
|
||||
horizontal: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-around',
|
||||
padding: 10,
|
||||
},
|
||||
})
|
|
@ -1,18 +1,26 @@
|
|||
import React, { useState, useEffect, ReactNode } from 'react'
|
||||
import * as RNLocalize from 'react-native-localize'
|
||||
import { LoadingComponent } from '../../components/loading.component'
|
||||
|
||||
import { LanguageService } from '../../services/languageService'
|
||||
import { LanguageStorage } from '../../services/languageStorage'
|
||||
import { translations } from '../../utils/translation'
|
||||
|
||||
export const LanguageContext = React.createContext({ Strings: {} })
|
||||
interface LanguageContextProps {
|
||||
Strings: Record<string, any>
|
||||
languageCode?: string
|
||||
}
|
||||
|
||||
export const LanguageContext = React.createContext<LanguageContextProps>({
|
||||
Strings: {},
|
||||
languageCode: '',
|
||||
})
|
||||
|
||||
interface Props {
|
||||
children: ReactNode
|
||||
data: any
|
||||
initialLanguageCode: string
|
||||
cache: any
|
||||
initalHasCheckedLanguage: boolean
|
||||
}
|
||||
|
||||
export const LanguageProvider: React.FC<Props> = ({
|
||||
|
@ -21,33 +29,42 @@ export const LanguageProvider: React.FC<Props> = ({
|
|||
initialLanguageCode,
|
||||
cache,
|
||||
}) => {
|
||||
const fallBack = { languageTag: 'sv', isRTL: false }
|
||||
|
||||
LanguageService.setAllData({ data })
|
||||
|
||||
const [languageCode, setLanguageCode] = useState<string | undefined>(
|
||||
undefined
|
||||
)
|
||||
|
||||
const setLanguageConfig = (langCode: string) => {
|
||||
LanguageService.setLanguageCode({ langCode: langCode })
|
||||
LanguageService.seti18nConfig({ langCode: langCode })
|
||||
setLanguageCode(langCode)
|
||||
}
|
||||
|
||||
const [Strings, setStrings] = useState(() => {
|
||||
if (initialLanguageCode && data[initialLanguageCode]) {
|
||||
LanguageService.setLanguageCode({ langCode: initialLanguageCode })
|
||||
LanguageService.seti18nConfig({ langCode: initialLanguageCode })
|
||||
setLanguageConfig(initialLanguageCode)
|
||||
|
||||
return data[initialLanguageCode]
|
||||
}
|
||||
|
||||
const fallBack = { languageTag: 'sv' }
|
||||
|
||||
const { languageTag } =
|
||||
RNLocalize.findBestAvailableLanguage(Object.keys(translations)) ||
|
||||
fallBack
|
||||
const bestStrings = data[languageTag]
|
||||
|
||||
LanguageService.setLanguageCode({ langCode: languageTag })
|
||||
LanguageService.seti18nConfig({ langCode: languageTag })
|
||||
const bestStrings = data[languageTag]
|
||||
|
||||
return bestStrings
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
LanguageService.onChange(
|
||||
{ key: 'LanguageProvider' },
|
||||
(langCode: string) => {
|
||||
if (langCode && data[langCode]) {
|
||||
setLanguageCode(langCode)
|
||||
setStrings(data[langCode])
|
||||
if (cache) {
|
||||
LanguageStorage.save(langCode)
|
||||
|
@ -57,14 +74,19 @@ export const LanguageProvider: React.FC<Props> = ({
|
|||
)
|
||||
|
||||
const checkLanguageLocal = async () => {
|
||||
// Saved language
|
||||
if (cache) {
|
||||
const languageCode = await LanguageStorage.get()
|
||||
LanguageService.setLanguageCode({
|
||||
langCode: languageCode || initialLanguageCode,
|
||||
})
|
||||
LanguageService.seti18nConfig({
|
||||
langCode: languageCode || initialLanguageCode,
|
||||
})
|
||||
// Get cached lang
|
||||
const cachedLang = await LanguageStorage.get()
|
||||
|
||||
// Try to find best suited language
|
||||
const { languageTag } =
|
||||
RNLocalize.findBestAvailableLanguage(Object.keys(translations)) ||
|
||||
fallBack
|
||||
|
||||
const currentLanguageCode = cachedLang || languageTag
|
||||
|
||||
setLanguageConfig(currentLanguageCode)
|
||||
}
|
||||
}
|
||||
checkLanguageLocal()
|
||||
|
@ -72,8 +94,8 @@ export const LanguageProvider: React.FC<Props> = ({
|
|||
}, [])
|
||||
|
||||
return (
|
||||
<LanguageContext.Provider value={{ Strings }}>
|
||||
{children}
|
||||
<LanguageContext.Provider value={{ Strings, languageCode: languageCode }}>
|
||||
{languageCode ? children : <LoadingComponent />}
|
||||
</LanguageContext.Provider>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ export const LanguageStorage = {
|
|||
const result = await AsyncStorage.getItem(AsyncStoreKey.language)
|
||||
return result
|
||||
} catch (error) {
|
||||
return null
|
||||
return false
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
|
@ -16,10 +16,9 @@ export const render = (
|
|||
<IconRegistry icons={EvaIconsPack} />
|
||||
<ApplicationProvider {...eva} theme={eva.light}>
|
||||
<LanguageProvider
|
||||
cache={true}
|
||||
cache={false}
|
||||
data={translations}
|
||||
initialLanguageCode={language}
|
||||
initalHasCheckedLanguage={true}
|
||||
>
|
||||
{children}
|
||||
</LanguageProvider>
|
||||
|
|
Loading…
Reference in New Issue