diff --git a/app.json b/app.json index 8910f2a..e6d2104 100644 --- a/app.json +++ b/app.json @@ -45,7 +45,8 @@ } } ], - "expo-speech-recognition" + "expo-speech-recognition", + "expo-audio" ], "experiments": { "typedRoutes": true, @@ -54,9 +55,9 @@ "extra": { "router": {}, "eas": { - "projectId": "4a77e46d-7b0e-4ace-a385-006b07027234" + "projectId": "4f415b4b-41c8-4b98-989c-32f6b3f97481" } }, - "owner": "kosyakorel1" + "owner": "serter2069ya" } } diff --git a/app/(auth)/login.tsx b/app/(auth)/login.tsx index 9ef1743..fc51382 100644 --- a/app/(auth)/login.tsx +++ b/app/(auth)/login.tsx @@ -6,7 +6,6 @@ import { KeyboardAvoidingView, Platform, ScrollView, - TouchableOpacity, Image, } from 'react-native'; import { router } from 'expo-router'; @@ -17,34 +16,44 @@ import { ErrorMessage } from '@/components/ui/ErrorMessage'; import { AppColors, BorderRadius, FontSizes, Spacing } from '@/constants/theme'; export default function LoginScreen() { - const { login, isLoading, error, clearError } = useAuth(); - const [username, setUsername] = useState(''); - const [password, setPassword] = useState(''); + const { requestOtp, isLoading, error, clearError } = useAuth(); + const [email, setEmail] = useState(''); const [validationError, setValidationError] = useState(null); - const handleLogin = useCallback(async () => { - // Clear previous errors + const validateEmail = (email: string): boolean => { + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + return emailRegex.test(email); + }; + + const handleContinue = useCallback(async () => { clearError(); setValidationError(null); - // Validate - if (!username.trim()) { - setValidationError('Username is required'); - return; - } - if (!password.trim()) { - setValidationError('Password is required'); + const trimmedEmail = email.trim().toLowerCase(); + + if (!trimmedEmail) { + setValidationError('Email is required'); return; } - const success = await login({ username: username.trim(), password }); - - if (success) { - // Clear password from memory after successful login - setPassword(''); - router.replace('/(tabs)'); + if (!validateEmail(trimmedEmail)) { + setValidationError('Please enter a valid email address'); + return; } - }, [username, password, login, clearError]); + + const result = await requestOtp(trimmedEmail); + + if (result.success) { + // Navigate to OTP verification screen + router.push({ + pathname: '/(auth)/verify-otp', + params: { + email: trimmedEmail, + skipOtp: result.skipOtp ? '1' : '0' + } + }); + } + }, [email, requestOtp, clearError]); const displayError = validationError || error?.message; @@ -65,8 +74,10 @@ export default function LoginScreen() { style={styles.logo} resizeMode="contain" /> - Welcome Back - Sign in to continue monitoring your loved ones + Welcome to WellNuo + + Enter your email to sign in or create an account + {/* Form */} @@ -82,53 +93,37 @@ export default function LoginScreen() { )} { - setUsername(text); + setEmail(text); setValidationError(null); }} autoCapitalize="none" autoCorrect={false} + keyboardType="email-address" editable={!isLoading} - /> - - { - setPassword(text); - setValidationError(null); - }} - editable={!isLoading} - onSubmitEditing={handleLogin} + onSubmitEditing={handleContinue} returnKeyType="done" /> - router.push('/(auth)/forgot-password')}> - Forgot Password? - -