DRP_Sajidaat/DRP-App/context/AuthContext.tsx

62 lines
1.3 KiB
TypeScript

import * as SecureStore from 'expo-secure-store';
import {
createContext,
ReactNode,
useContext,
useEffect,
useState,
} from 'react';
type User = {
username: string;
};
type AuthContextType = {
user: User | null;
login: (username: string) => Promise<void>;
logout: () => Promise<void>;
loading: boolean;
};
const AuthContext = createContext<AuthContextType | null>(null);
export function AuthProvider({ children }: { children: ReactNode }) {
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
SecureStore.getItemAsync('user').then((storedUser) => {
if (storedUser) {
setUser(JSON.parse(storedUser));
}
setLoading(false);
});
}, []);
const login = async (username: string) => {
const userData = { username };
setUser(userData);
await SecureStore.setItemAsync('user', JSON.stringify(userData));
};
const logout = async () => {
setUser(null);
await SecureStore.deleteItemAsync('user');
};
return (
<AuthContext.Provider value={{ user, login, logout, loading }}>
{children}
</AuthContext.Provider>
);
}
export function useAuth() {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuth must be used within AuthProvider');
}
return context;
}