This repository was archived by the owner on Mar 5, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathApp.js
94 lines (76 loc) · 2.21 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import React, {
useContext,
useState,
useEffect,
} from 'react'
import { StatusBar } from 'react-native'
import { MainContext } from './src/contexts/MainContext'
import { getRootNavigator } from './src/navigation/RootNavigator'
import {
SignedInCheck,
RemoveUid,
NewUserCheck,
} from './src/helpers/auth'
import {
readLang,
writeLang,
} from './src/helpers/db'
import { en } from './src/constants/LangEnums'
import LoadingScreen from './src/screens/LoadingScreen'
import firebase from '@react-native-firebase/app';
import '@react-native-firebase/auth';
// const isHermes = () => global.HermesInternal !== null
const App = () => {
// state and setState is main application state EVERYWHERE in code
const {
isLoggedIn, toggleLogin,
isNewUser, toggleNewUser,
appLanguage, setAppLanguage,
} = useContext(MainContext)
const [loaded, setLoaded] = useState(false)
const [renders, setRenders] = useState(0)
useEffect(()=>{
setRenders(renders => renders + 1)
let isMounted = true
const INIT = async ()=>{
const signed = await SignedInCheck()
const isnew = await NewUserCheck()
const langCode = await readLang()
if(renders === 1){ // if initial launch
if(!signed || (signed && isnew)) RemoveUid() // clear USER_KEY from local db
// here we gotta update MainContext to logged in
if(isLoggedIn !== signed) toggleLogin()
if(isNewUser !== isnew) toggleNewUser()
if(appLanguage === null) {
if(langCode){
setAppLanguage(langCode)
}else{
setAppLanguage(en)
writeLang(en)
}
}
}
//isMounted && setState({...state, isLoggedIn: signed, isNewUser: isnew })
// show loading screen for extra 1 seconds,
// so that we will have something to optimize in the later releases
if(appLanguage){
setTimeout(()=>{
setLoaded(true)
}, 1000) // 1000 - 1s
}
}
INIT()
return ()=>{
isMounted = false
}
}, [isLoggedIn, isNewUser, appLanguage, loaded])
// const { isLoggedIn, isNewUser } = state
const RootNavigator = getRootNavigator(isLoggedIn, isNewUser)
return (!loaded) ? (<LoadingScreen />) : (
<>
<StatusBar barStyle="dark-content" />
<RootNavigator loggedIn={isLoggedIn} isNew={isNewUser}/>
</>
);
}
export default App;