-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathApp.tsx
94 lines (87 loc) · 2.66 KB
/
App.tsx
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-native-gesture-handler";
import React, { useState, useEffect } from "react";
import * as Font from "expo-font";
import { StyleSheet, View, I18nManager } from "react-native";
import { NavigationContainer } from "@react-navigation/native";
import { ThemeProvider } from "react-native-elements";
import { Provider, connect } from "react-redux";
import LazyNavigator from "./navigators/lazy-navigator";
import AuthStateAction from "./store/actions/auth-state";
import AuthNavigator from "./navigators/auth-navigator";
import GetStartedNavigator from "./navigators/get-started-navigator";
import HomeNavigator from "./navigators/home-root-navigator";
import { isLoggedIn, isFirstOpen } from "./services/auth-service";
import store from "./store";
import config from "./config";
namespace Fonts {
/* using generic name to make it easier to change font type in future */
const fonts = {
"custom-regular": require("./assets/fonts/Cairo-Regular.ttf"),
"custom-bold": require("./assets/fonts/Cairo-Bold.ttf"),
};
async function load() {
await Font.loadAsync(fonts);
}
export function init() {
return load();
}
}
namespace App {
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
direction: "rtl",
},
});
const base = (props) => {
const [loading, setLoading] = useState(true);
const [_isFirstOpen, setIsFirstOpen] = useState(true);
useEffect(() => {
Promise.all([isLoggedIn(), isFirstOpen(), Fonts.init()]).then(
([isLoggedIn, isFirstOpen]) => {
props.changeLoginState(isLoggedIn);
setIsFirstOpen(isFirstOpen);
setLoading(false);
}
);
}, []);
return (
<View style={styles.container}>
<LazyNavigator
loading={loading}
render={() => {
if (props.state) {
return <HomeNavigator />;
} else if (_isFirstOpen) {
return <GetStartedNavigator />;
} else {
return <AuthNavigator />;
}
}}
/>
</View>
);
};
export const component = connect(
(state: any) => ({ state: state && state.auth && state.auth.state }),
(dispatch) => ({
changeLoginState: (state: boolean) => dispatch(AuthStateAction(state)),
})
)(base);
}
namespace entry {
I18nManager.forceRTL(true);
export const component = () => {
return (
<NavigationContainer>
<Provider store={store}>
<ThemeProvider theme={config.globalTheme as any}>
<App.component />
</ThemeProvider>
</Provider>
</NavigationContainer>
);
};
}
export default entry.component;