mirror of
https://github.com/pezkuwichain/pezkuwi-mobile-app.git
synced 2026-04-25 17:37:57 +00:00
auto-commit for 03679e17-f12f-4fc2-9ec5-2d686b8ad411
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user