Spaces:
Sleeping
Sleeping
File size: 1,412 Bytes
5e870e6 | 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 | 'use client';
import { createContext, useContext, useEffect, useState, ReactNode } from 'react';
import { getCurrentUser } from '@/lib/api';
interface UserContextType {
userId: string | null;
user: any | null;
loading: boolean;
refetch: () => Promise<void>;
}
const UserContext = createContext<UserContextType | undefined>(undefined);
export function useUser() {
const context = useContext(UserContext);
if (context === undefined) {
throw new Error('useUser must be used within a UserProvider');
}
return context;
}
export default function UserProvider({ children }: { children: ReactNode }) {
const [user, setUser] = useState<any | null>(null);
const [userId, setUserId] = useState<string | null>(null);
const [loading, setLoading] = useState(true);
const fetchUser = async () => {
try {
setLoading(true);
const userData = await getCurrentUser();
if (userData) {
setUser(userData);
setUserId(userData.id);
} else {
setUser(null);
setUserId(null);
}
} catch (error) {
console.error('Error fetching user:', error);
setUser(null);
setUserId(null);
} finally {
setLoading(false);
}
};
useEffect(() => {
fetchUser();
}, []);
return (
<UserContext.Provider value={{ userId, user, loading, refetch: fetchUser }}>
{children}
</UserContext.Provider>
);
} |