Merge with main

This commit is contained in:
Viktor Sarström 2021-04-17 14:44:00 +02:00
commit 9462401323
6 changed files with 71 additions and 22 deletions

View File

@ -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)

View File

@ -9,5 +9,5 @@
"test": "npx lerna run test --stream",
"lint": "npx lerna run lint --stream"
},
"version": "1.15.1"
"version": "1.16.0"
}

View File

@ -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,
},
})

View File

@ -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>
)
}

View File

@ -16,7 +16,7 @@ export const LanguageStorage = {
const result = await AsyncStorage.getItem(AsyncStoreKey.language)
return result
} catch (error) {
return null
return false
}
},
}

View File

@ -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>