Skip to content

Commit 4b41855

Browse files
committed
[Update] Complete login
1 parent f094324 commit 4b41855

File tree

10 files changed

+123
-19
lines changed

10 files changed

+123
-19
lines changed

Diff for: package-lock.json

+31
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"web": "expo start --web"
1010
},
1111
"dependencies": {
12+
"@react-native-async-storage/async-storage": "1.18.2",
1213
"@react-navigation/bottom-tabs": "^6.5.11",
1314
"@react-navigation/native": "^6.1.9",
1415
"@react-navigation/native-stack": "^6.9.17",

Diff for: src/components/Loader.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { View, Text, ActivityIndicator } from "react-native";
2+
import React from "react";
3+
import { lightColors } from "@rneui/base";
4+
5+
const Loader = ({ styles }) => {
6+
return (
7+
<ActivityIndicator
8+
style={styles}
9+
size="large"
10+
color={lightColors.primary}
11+
/>
12+
);
13+
};
14+
15+
export default Loader;

Diff for: src/hooks/useAuth.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const useAuth = () => {
2525
const loginUrl = API_BASE_URL + "/login";
2626
const loginData = { email: email, password: password };
2727
const user = await axios.post(loginUrl, loginData);
28-
console.log("Successfully logged in: ", user);
28+
return user.data;
2929
} catch (error) {
3030
throw error;
3131
} finally {

Diff for: src/hooks/useStorage.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { View, Text } from "react-native";
2+
import React from "react";
3+
import AsyncStorage from "@react-native-async-storage/async-storage";
4+
5+
const useStorage = () => {
6+
async function setLocalUser(user) {
7+
try {
8+
await AsyncStorage.setItem("user", JSON.stringify(user));
9+
} catch (error) {
10+
throw error;
11+
}
12+
}
13+
14+
async function getLocalUser() {
15+
try {
16+
const user = JSON.parse(await AsyncStorage.getItem("user"));
17+
return user;
18+
} catch (error) {
19+
throw error;
20+
}
21+
}
22+
23+
async function setAuthToken(authToken) {
24+
try {
25+
await AsyncStorage.setItem("authToken", authToken);
26+
} catch (error) {
27+
throw error;
28+
}
29+
}
30+
31+
async function getAuthToken() {
32+
try {
33+
const authToken = await AsyncStorage.getItem("authToken");
34+
return authToken;
35+
} catch (error) {
36+
throw error;
37+
}
38+
}
39+
return { getAuthToken, setAuthToken, getLocalUser, setLocalUser };
40+
};
41+
42+
export default useStorage;

Diff for: src/routes/HomeStack.jsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ const HomeStackScreen = () => {
1010
<HomeStack.Navigator
1111
screenOptions={{
1212
animation: "slide_from_right",
13+
headerShown: false,
1314
}}
1415
>
1516
<HomeStack.Screen
16-
name="Home"
17+
name="HomeScreen"
1718
component={HomeScreen}
1819
options={{ headerShown: false }}
1920
/>

Diff for: src/routes/TabNavigation.jsx

+3-5
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@ import HomeStackScreen from "./HomeStack";
77
const Tab = createBottomTabNavigator();
88
const TabNavigation = () => {
99
return (
10-
<NavigationContainer>
11-
<Tab.Navigator>
12-
<Tab.Screen name="Home" component={HomeStackScreen} />
13-
</Tab.Navigator>
14-
</NavigationContainer>
10+
<Tab.Navigator screenOptions={{ headerShown: false }}>
11+
<Tab.Screen name="Home" component={HomeStackScreen} />
12+
</Tab.Navigator>
1513
);
1614
};
1715

Diff for: src/screens/auth/LoginScreen.jsx

+9-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ import { useState } from "react";
33
import { Button, Input, Text } from "@rneui/themed";
44
import { COLORS } from "../../constants";
55
import useAuth from "../../hooks/useAuth";
6+
import useStorage from "../../hooks/useStorage";
67

78
const Login = ({ navigation }) => {
89
// Variables
910
const { login } = useAuth();
11+
const { setAuthToken, setLocalUser } = useStorage();
1012
const [email, setEmail] = useState({ value: null, errorMessage: null });
1113
const [password, setPassword] = useState({ value: null, errorMessage: null });
1214

@@ -15,7 +17,7 @@ const Login = ({ navigation }) => {
1517
navigation.navigate("Register");
1618
};
1719

18-
const handleLoginPress = () => {
20+
const handleLoginPress = async () => {
1921
setEmail({ ...email, errorMessage: null });
2022
setPassword({ ...password, errorMessage: null });
2123
if (!email.value) {
@@ -29,9 +31,13 @@ const Login = ({ navigation }) => {
2931
}
3032

3133
try {
32-
login(email.value, password.value);
34+
const userData = await login(email.value, password.value);
35+
console.log(userData);
36+
await setAuthToken(userData.token);
37+
await setLocalUser(userData.user);
38+
navigation.navigate("TabNavigation");
3339
} catch (error) {
34-
console.error("Error while loggin in: ", error);
40+
console.error("Error while logging in: ", error);
3541
}
3642
};
3743

Diff for: src/screens/auth/RegisterScreen.jsx

+14-8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useState } from "react";
33
import { Button, Input, Text } from "@rneui/themed";
44
import { COLORS } from "../../constants";
55
import useAuth from "../../hooks/useAuth";
6+
import Loader from "../../components/Loader";
67

78
const Register = ({ navigation }) => {
89
// Variables
@@ -152,14 +153,19 @@ const Register = ({ navigation }) => {
152153
}
153154
secureTextEntry
154155
/>
155-
156-
<Button
157-
color="primary"
158-
title={"Register"}
159-
size="lg"
160-
containerStyle={{ width: 200, borderRadius: 5, marginTop: 20 }}
161-
onPress={handleRegisterPress}
162-
/>
156+
<View style={{ marginTop: 20 }}>
157+
{loading ? (
158+
<Loader />
159+
) : (
160+
<Button
161+
color="primary"
162+
title={"Register"}
163+
size="lg"
164+
containerStyle={{ width: 200, borderRadius: 5 }}
165+
onPress={handleRegisterPress}
166+
/>
167+
)}
168+
</View>
163169
</View>
164170
<Text style={{ paddingVertical: 10 }}>
165171
Already have an account?{" "}

Diff for: src/screens/home/HomeScreen.jsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import { View, Text } from "react-native";
22
import React from "react";
33

44
const HomeScreen = () => {
5-
return <View></View>;
5+
return (
6+
<View>
7+
<Text>Home</Text>
8+
</View>
9+
);
610
};
711

812
export default HomeScreen;

0 commit comments

Comments
 (0)