84 lines
No EOL
2.2 KiB
TypeScript
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
|
|
}
|
|
} |