gohorsejobs/frontend/src/hooks/use-profile.ts
Tiago Yamamoto 1c7ef95c1a first commit
2025-12-09 19:04:48 -03:00

84 lines
No EOL
2.2 KiB
TypeScript

"use client"
import { useState, useEffect, useCallback } from 'react'
import { localDB, ProfileData } from '@/lib/local-database'
export interface UseProfileReturn {
profileData: ProfileData | null
profileImage: string | null
isLoading: boolean
saveProfileImage: (file: File) => Promise<string>
removeProfileImage: () => void
updateProfileData: (data: Partial<ProfileData>) => void
refreshProfile: () => void
}
export function useProfile(): UseProfileReturn {
const [profileData, setProfileData] = useState<ProfileData | null>(null)
const [profileImage, setProfileImage] = useState<string | null>(null)
const [isLoading, setIsLoading] = useState(true)
// Carregar dados do perfil
const loadProfile = useCallback(async () => {
setIsLoading(true)
try {
// Criar usuário padrão se não existir
await localDB.createDefaultUser()
// Carregar dados do perfil
const data = localDB.getProfileData()
const image = localDB.getProfileImage()
setProfileData(data)
setProfileImage(image)
} catch (error) {
console.error('Erro ao carregar perfil:', error)
} finally {
setIsLoading(false)
}
}, [])
// Salvar imagem de perfil
const saveProfileImage = useCallback(async (file: File): Promise<string> => {
try {
const imageUrl = await localDB.saveProfileImage(file)
setProfileImage(imageUrl)
return imageUrl
} catch (error) {
console.error('Erro ao salvar imagem:', error)
throw error
}
}, [])
// Remover imagem de perfil
const removeProfileImage = useCallback(() => {
localDB.removeProfileImage()
setProfileImage(null)
}, [])
// Atualizar dados do perfil
const updateProfileData = useCallback((data: Partial<ProfileData>) => {
localDB.saveProfileData(data)
setProfileData(prev => prev ? { ...prev, ...data } : null)
}, [])
// Atualizar perfil manualmente
const refreshProfile = useCallback(() => {
loadProfile()
}, [loadProfile])
// Carregar dados na inicialização
useEffect(() => {
loadProfile()
}, [loadProfile])
return {
profileData,
profileImage,
isLoading,
saveProfileImage,
removeProfileImage,
updateProfileData,
refreshProfile
}
}