-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.js
126 lines (118 loc) · 4.03 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import React from 'react';
import * as eva from '@eva-design/eva';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { ApplicationProvider, IconRegistry } from '@ui-kitten/components';
import { EvaIconsPack } from '@ui-kitten/eva-icons';
import firebase from 'firebase/app';
import Firebase from './util/Firebase.js';
import MainContext from './context/MainContext.js';
import IntroPage from './screens/IntroPage.jsx';
import Login from './screens/Login.jsx';
import Registration from './screens/Registration.jsx';
import Home from './screens/Home.jsx';
import NoteScreen from './screens/NoteScreen.jsx';
import AddNote from './screens/AddNote.jsx';
import ConfirmationScreen from './screens/ConfirmationScreen.jsx';
// Create app's navigation stack
const Stack = createStackNavigator();
export default function App() {
// Checking for app's length before initializing
if (!firebase.apps.length) {
firebase.initializeApp(Firebase);
}
// Setting default state when app loads
const [userLogged, setUserLogged] = React.useState(false);
const [userProfile, setUserProfile] = React.useState(null);
const [isLoading, setIsLoading] = React.useState(true);
React.useEffect(() => {
const authListener = firebase.auth().onAuthStateChanged((user) => {
setUserLogged(user ? true : false)
setIsLoading(false);
setUserProfile(user);
});
return authListener;
}, []);
// Handles user login
const doLogin = async (email, password) => {
setIsLoading(true);
Firebase.auth()
.signInWithEmailAndPassword(email, password)
.catch((error) => console.log(error));
}
// Handles user registration
const doRegister = async (email, password) => {
setIsLoading(true);
Firebase.auth()
.createUserWithEmailAndPassword(email, password)
.catch((error) => console.log(error));
}
// Allows for global usage of data by other components in the app
const mainC = React.useMemo(
() => ({
userProfile: { userProfile },
signOutUser: () => Firebase.auth().signOut(),
handleLogin: (email, password) => {
doLogin(email, password);
},
handleRegister: (email, password) => {
doRegister(email, password);
},
}),
[]
);
return (
<>
<IconRegistry icons={EvaIconsPack} />
<MainContext.Provider value={mainC}>
<ApplicationProvider {...eva} theme={eva.light}>
<NavigationContainer>
<Stack.Navigator
initialRouteName='Introduction'
>
<Stack.Screen
options={{ headerShown: false }} s
name='Introduction'
component={IntroPage} />
<Stack.Screen
options={{ title: null }}
name='Login' component={Login} />
<Stack.Screen
options={{ title: null }}
name='Registration'
component={Registration} />
<Stack.Screen
options={{
title: null,
headerShown: false
}}
name='Home'
component={Home} />
<Stack.Screen
options={({route})=>{
return({
title: route.params.title,
headerStyle: { backgroundColor: route.params.colour },
headerTintColor: 'white'
})
}}
name='NoteScreen'
component={NoteScreen}
/>
<Stack.Screen
options={{title: null}}
name='AddNote'
component={AddNote}
/>
<Stack.Screen
options={{title: null}}
name='ConfirmationScreen'
component={ConfirmationScreen}
/>
</Stack.Navigator>
</NavigationContainer>
</ApplicationProvider>
</MainContext.Provider>
</>
);
}