auto-commit for 03679e17-f12f-4fc2-9ec5-2d686b8ad411

This commit is contained in:
emergent-agent-e1
2025-11-08 14:37:17 +00:00
parent 30fa4cfe2c
commit 2cb299816b
+138
View File
@@ -0,0 +1,138 @@
import React, { createContext, useState, useContext, useEffect } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';
interface User {
user_id: string;
email: string;
first_name: string;
last_name: string;
access_token: string;
refresh_token: string;
}
interface AuthContextType {
user: User | null;
loading: boolean;
signIn: (email: string, password: string) => Promise<void>;
signUp: (
email: string,
password: string,
firstName: string,
lastName: string,
phone: string,
referralCode?: string,
language?: string
) => Promise<void>;
signOut: () => Promise<void>;
setUser: (user: User | null) => void;
}
const AuthContext = createContext<AuthContextType | undefined>(undefined);
export function AuthProvider({ children }: { children: React.ReactNode }) {
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
loadUser();
}, []);
const loadUser = async () => {
try {
const userData = await AsyncStorage.getItem('user');
if (userData) {
setUser(JSON.parse(userData));
}
} catch (error) {
console.error('Error loading user:', error);
} finally {
setLoading(false);
}
};
const signIn = async (email: string, password: string) => {
try {
const response = await fetch('http://localhost:8001/api/auth/signin', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ email, password }),
});
if (!response.ok) {
throw new Error('Invalid credentials');
}
const userData = await response.json();
await AsyncStorage.setItem('user', JSON.stringify(userData));
setUser(userData);
} catch (error) {
console.error('Sign in error:', error);
throw error;
}
};
const signUp = async (
email: string,
password: string,
firstName: string,
lastName: string,
phone: string,
referralCode?: string,
language: string = 'en'
) => {
try {
const response = await fetch('http://localhost:8001/api/auth/signup', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email,
password,
first_name: firstName,
last_name: lastName,
phone,
referral_code: referralCode,
language,
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.detail || 'Sign up failed');
}
const userData = await response.json();
await AsyncStorage.setItem('user', JSON.stringify(userData));
setUser(userData);
} catch (error) {
console.error('Sign up error:', error);
throw error;
}
};
const signOut = async () => {
try {
await AsyncStorage.removeItem('user');
setUser(null);
} catch (error) {
console.error('Sign out error:', error);
}
};
return (
<AuthContext.Provider value={{ user, loading, signIn, signUp, signOut, setUser }}>
{children}
</AuthContext.Provider>
);
}
export function useAuth() {
const context = useContext(AuthContext);
if (context === undefined) {
throw new Error('useAuth must be used within an AuthProvider');
}
return context;
}