-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApp.js
120 lines (104 loc) · 3.78 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
import React, { useState, useEffect, createContext, useContext } from 'react';
import { View, Text, TextInput, Button, TouchableOpacity } from 'react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
// Create Auth Context
const AuthContext = createContext();
// Authentication Provider
const AuthProvider = ({ children }) => {
const [user, setUser] = useState(null);
useEffect(() => {
const checkLogin = async () => {
const storedUser = await AsyncStorage.getItem('user');
if (storedUser) setUser(JSON.parse(storedUser));
};
checkLogin();
}, []);
const login = async (email, password) => {
if (email === 'admin' && password === 'password') {
const userData = { email };
await AsyncStorage.setItem('user', JSON.stringify(userData));
setUser(userData);
}
};
const logout = async () => {
await AsyncStorage.removeItem('user');
setUser(null);
};
return (
<AuthContext.Provider value={{ user, login, logout }}>
{children}
</AuthContext.Provider>
);
};
// Login Screen
const LoginScreen = ({ navigation }) => {
const { login } = useContext(AuthContext);
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
return (
<View>
<Text>Login</Text>
<TextInput placeholder='Email' value={email} onChangeText={setEmail} />
<TextInput placeholder='Password' value={password} onChangeText={setPassword} secureTextEntry />
<Button title='Login' onPress={() => login(email, password)} />
<TouchableOpacity onPress={() => navigation.navigate('Register')}>
<Text>Don't have an account? Register</Text>
</TouchableOpacity>
</View>
);
};
// Register Screen (Mockup)
const RegisterScreen = ({ navigation }) => (
<View>
<Text>Register</Text>
<Button title='Go to Login' onPress={() => navigation.navigate('Login')} />
</View>
);
// Home Screen (Protected)
const HomeScreen = () => {
const { logout } = useContext(AuthContext);
return (
<View>
<Text>Home</Text>
<Button title='Logout' onPress={logout} />
</View>
);
};
// Profile Screen (Protected)
const ProfileScreen = () => (
<View>
<Text>Profile</Text>
</View>
);
const AuthStack = createStackNavigator();
const MainTabs = createBottomTabNavigator();
// Auth Navigator (Login/Register)
const AuthNavigator = () => (
<AuthStack.Navigator>
<AuthStack.Screen name='Login' component={LoginScreen} />
<AuthStack.Screen name='Register' component={RegisterScreen} />
</AuthStack.Navigator>
);
// Main App Navigator (Protected Routes)
const MainNavigator = () => (
<MainTabs.Navigator>
<MainTabs.Screen name='Home' component={HomeScreen} />
<MainTabs.Screen name='Profile' component={ProfileScreen} />
</MainTabs.Navigator>
);
// Root Navigation Handler
const RootNavigator = () => {
const { user } = useContext(AuthContext);
return <NavigationContainer>{user ? <MainNavigator /> : <AuthNavigator />}</NavigationContainer>;
};
// App Entry Point
export default function App() {
return (
<AuthProvider>
<RootNavigator />
</AuthProvider>
);
}