'use client';
import { createClient } from '@/utils/supabase/client';
import { User } from '@supabase/supabase-js';
import React, { createContext, useContext, useEffect, useState } from 'react';
type UserContextType = {
user: User | null;
loading: boolean;
};
const UserContext = createContext<UserContextType | undefined>(undefined);
export const UserProvider: React.FC<{ children: React.ReactNode }> = ({
children
}) => {
const supabase = createClient();
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchUser = async () => {
setLoading(true);
const { data: user } = await supabase.auth.getUser();
setUser(user.user);
setLoading(false);
};
fetchUser();
// Listen for auth state changes
const { data: subscription } = supabase.auth.onAuthStateChange(() =>
fetchUser()
);
return () => subscription?.subscription.unsubscribe();
}, []);
return (
<UserContext.Provider value={{ user, loading }}>
{children}
</UserContext.Provider>
);
};
export const useGetCurrentUser = () => {
const context = useContext(UserContext);
if (!context) throw new Error('useUser must be used within a UserProvider');
return context;
};
'use client';
import { createClient } from '@/utils/supabase/client';
import { User } from '@supabase/supabase-js';
import React, { createContext, useContext, useEffect, useState } from 'react';
type UserContextType = {
user: User | null;
loading: boolean;
};
const UserContext = createContext<UserContextType | undefined>(undefined);
export const UserProvider: React.FC<{ children: React.ReactNode }> = ({
children
}) => {
const supabase = createClient();
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchUser = async () => {
setLoading(true);
const { data: user } = await supabase.auth.getUser();
setUser(user.user);
setLoading(false);
};
fetchUser();
// Listen for auth state changes
const { data: subscription } = supabase.auth.onAuthStateChange(() =>
fetchUser()
);
return () => subscription?.subscription.unsubscribe();
}, []);
return (
<UserContext.Provider value={{ user, loading }}>
{children}
</UserContext.Provider>
);
};
export const useGetCurrentUser = () => {
const context = useContext(UserContext);
if (!context) throw new Error('useUser must be used within a UserProvider');
return context;
};