import React, { useState, useCallback } from 'react'; import { View, Text, StyleSheet, KeyboardAvoidingView, Platform, ScrollView, TouchableOpacity, Image, } from 'react-native'; import { router } from 'expo-router'; 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 LoginScreen() { const [email, setEmail] = useState(''); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const validateEmail = (email: string): boolean => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }; const handleContinue = useCallback(async () => { setError(null); // Validate email const trimmedEmail = email.trim().toLowerCase(); if (!trimmedEmail) { setError('Please enter your email address'); return; } if (!validateEmail(trimmedEmail)) { setError('Please enter a valid email address'); return; } setIsLoading(true); try { const response = await api.requestOTP(trimmedEmail); if (response.ok && response.data) { // Navigate to OTP screen with email router.push({ pathname: '/(auth)/verify-otp', params: { email: trimmedEmail, isNewUser: response.data.isNewUser ? 'true' : 'false', }, }); } else { setError(response.error?.message || 'Failed to send verification code'); } } catch (err) { setError('Something went wrong. Please try again.'); } finally { setIsLoading(false); } }, [email]); return ( {/* Logo / Header */} Welcome to WellNuo Enter your email to get started. We'll send you a verification code. {/* Form */} {error && ( setError(null)} /> )} { setEmail(text); setError(null); }} keyboardType="email-address" autoCapitalize="none" autoCorrect={false} autoComplete="email" editable={!isLoading} onSubmitEditing={handleContinue} returnKeyType="next" />