import { useState } from 'react'; import { View, StyleSheet, ScrollView, KeyboardAvoidingView, } from 'react-native'; import { Text } from '@/components/ui/Text'; import { router } from 'expo-router'; import { StatusBar } from 'expo-status-bar'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useThemeColor } from '@/hooks/use-theme-color'; import { Button, Input } from '@/components/ui'; import { useAuth } from '@/context/AuthContext'; import { apiClient, ApiError, User } from '@/lib/api' import { useToast } from '@/context/ToastContext'; import { translateError, translateFields } from '@/lib/errors/translations'; import { Card } from '@/components/ui/Cards'; import AvatarUpload from '@/components/ui/AvatarUpload'; import { Typography, Spacing, Colors } from '@/constants/theme'; export default function Profile() { const { user, updateAuthUser } = useAuth(); const { showToast } = useToast(); const [firstName, setFirstName] = useState(user?.firstName ?? ''); const [lastName, setLastName] = useState(user?.lastName ?? ''); const [email, setEmail] = useState(user?.email ?? ''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [loading] = useState(false); const [errors, setErrors] = useState<{ firstName?: string; lastName?: string; email?: string; password?: string; confirmPassword?: string; }>({}); const backgroundColor = useThemeColor({}, 'background'); const validateForm = () => { const newErrors: { firstName?: string; email?: string; password?: string; confirmPassword?: string } = {}; if (password) { if (!confirmPassword) { newErrors.confirmPassword = 'Precisa confirmar a senha'; } else { if (password !== confirmPassword) { newErrors.confirmPassword = "Senhas não conferem"; } } } if (!/\S+@\S+\.\S+/.test(email)) { newErrors.email = 'Por favor, use um email válido'; } if (!firstName) { newErrors.firstName = 'É necessário ter um nome'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; } const handleUpdate = async () => { if (!user) return; if (!validateForm()) return; try { const id = user.id; const response = await apiClient.updateUser({ id, firstName, lastName, email, ...(password ? { password } : {}), }); updateAuthUser(response.user); router.replace('/(tabs)/insights'); } catch (error) { console.error("[PROFILE]", error) if (error instanceof ApiError && error.fields) { setErrors(translateFields(error.fields)); } else { showToast(translateError(error) || 'Falha ao atualizar o perfil', 'error'); } } } const onChangeAvatar = (user: User) => { updateAuthUser(user); } return ( Preencha apenas se quiser mudar a sua senha