taskflow-frontend / components /UserProvider.tsx
Tahasaif3's picture
'changes'
5e870e6
'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>
);
}