diff --git a/app/(auth)/complete-profile.tsx b/app/(auth)/complete-profile.tsx new file mode 100644 index 0000000..0ecff88 --- /dev/null +++ b/app/(auth)/complete-profile.tsx @@ -0,0 +1,200 @@ +import React, { useState, useCallback } from 'react'; +import { + View, + Text, + StyleSheet, + KeyboardAvoidingView, + Platform, + ScrollView, +} from 'react-native'; +import { router, useLocalSearchParams } from 'expo-router'; +import { Ionicons } from '@expo/vector-icons'; +import { useAuth } from '@/contexts/AuthContext'; +import { api } from '@/services/api'; +import { Button } from '@/components/ui/Button'; +import { Input } from '@/components/ui/Input'; +import { ErrorMessage } from '@/components/ui/ErrorMessage'; +import { AppColors, BorderRadius, FontSizes, Spacing } from '@/constants/theme'; + +export default function CompleteProfileScreen() { + const { email } = useLocalSearchParams<{ email: string }>(); + const { refreshAuth } = useAuth(); + + const [firstName, setFirstName] = useState(''); + const [lastName, setLastName] = useState(''); + const [phone, setPhone] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + const handleComplete = useCallback(async () => { + setError(null); + + // Validate + if (!firstName.trim()) { + setError('Please enter your first name'); + return; + } + if (!lastName.trim()) { + setError('Please enter your last name'); + return; + } + + setIsLoading(true); + + try { + const response = await api.updateProfile({ + firstName: firstName.trim(), + lastName: lastName.trim(), + phone: phone.trim() || undefined, + }); + + if (response.ok) { + // Refresh auth state and go to main app + await refreshAuth(); + router.replace('/(tabs)'); + } else { + setError(response.error?.message || 'Failed to update profile'); + } + } catch (err) { + setError('Something went wrong. Please try again.'); + } finally { + setIsLoading(false); + } + }, [firstName, lastName, phone, refreshAuth]); + + return ( + + + {/* Header */} + + + + + Complete your profile + + Just a few more details to get you started + + + + {/* Form */} + + {error && ( + setError(null)} + /> + )} + + { + setFirstName(text); + setError(null); + }} + autoCapitalize="words" + autoCorrect={false} + editable={!isLoading} + /> + + { + setLastName(text); + setError(null); + }} + autoCapitalize="words" + autoCorrect={false} + editable={!isLoading} + /> + + + +