86 lines
2.2 KiB
TypeScript
86 lines
2.2 KiB
TypeScript
|
|
import { useState, useEffect } from 'react';
|
|
import { useAuth } from '@/hooks/useAuth';
|
|
import { supabase } from '@/integrations/supabase/client';
|
|
|
|
interface UserProfile {
|
|
full_name: string | null;
|
|
email: string | null;
|
|
profile_image_url: string | null;
|
|
status: string | null;
|
|
}
|
|
|
|
export function useUserProfile() {
|
|
const { user } = useAuth();
|
|
const [profile, setProfile] = useState<UserProfile | null>(null);
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
useEffect(() => {
|
|
if (user) {
|
|
fetchUserProfile();
|
|
} else {
|
|
setProfile(null);
|
|
setLoading(false);
|
|
}
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [user]);
|
|
|
|
const fetchUserProfile = async () => {
|
|
if (!user) return;
|
|
|
|
setLoading(true);
|
|
try {
|
|
const isValidUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(user.id || '');
|
|
let query = supabase
|
|
.from('profiles')
|
|
.select('full_name, email, profile_image_url, status');
|
|
|
|
if (isValidUuid) {
|
|
query = query.eq('id', user.id);
|
|
} else if (user.email) {
|
|
query = query.ilike('email', user.email.trim());
|
|
} else {
|
|
query = query.eq('id', user.id);
|
|
}
|
|
|
|
const { data, error } = await query.maybeSingle();
|
|
|
|
if (!error && data) {
|
|
setProfile(data);
|
|
} else {
|
|
// Fallback para dados do usuário auth
|
|
setProfile({
|
|
full_name: user.name || user.username || null,
|
|
email: user.email || null,
|
|
profile_image_url: null,
|
|
status: null
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error('Erro ao buscar perfil do usuário:', error);
|
|
// Fallback para dados do usuário auth
|
|
setProfile({
|
|
full_name: user.name || user.username || null,
|
|
email: user.email || null,
|
|
profile_image_url: null,
|
|
status: null
|
|
});
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
// Função para extrair o primeiro nome
|
|
const getFirstName = () => {
|
|
if (!profile?.full_name) return null;
|
|
return profile.full_name.split(' ')[0];
|
|
};
|
|
|
|
return {
|
|
profile,
|
|
loading,
|
|
firstName: getFirstName(),
|
|
refetch: fetchUserProfile
|
|
};
|
|
}
|