Spaces:
Sleeping
Sleeping
| '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> | |
| ); | |
| } |