import { View, Text, Image, StyleSheet, Pressable, Alert, Dimensions, ActivityIndicator, ScrollView, Switch } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import Logo from '../../../global/logo'; import NormalButton from '../../../global/normal_button'; import NormalInput from '../../../global/normal_input'; import { useEffect, useState } from 'react'; import { useAuth } from '../../../../context/AuthProvider'; import AsyncStorage from '@react-native-async-storage/async-storage'; import Checkbox from 'expo-checkbox'; import { router } from 'expo-router'; import PhoneInput from '../../../global/phone_input'; import LanguageSwitcher from './languageSwitcher'; import { useTranslation } from '../../../../util/hooks/useTranslation'; type LoginPageProps = { goToNextPage: () => void; goToForgetPassWordPage: () => void; goToBindingPhoneNumberPage: () => void; }; const screenHeight = Dimensions.get('window').height; const LoginPage: React.FC = ({ goToNextPage, goToForgetPassWordPage, goToBindingPhoneNumberPage }) => { const { t, ready, currentLanguage } = useTranslation(); // const [loginEmail, setLoginEmail] = useState(''); const [loginPhone, setLoginPhone] = useState(''); const [loginPassword, setLoginPassword] = useState(''); const [saveAccount, setSaveAccount] = useState(false); const [userTerms, setUserTerms] = useState(false); const [isLoading, setIsLoading] = useState(false); const { login } = useAuth(); const [isChecked, setChecked] = useState(false); const [showPassword, setShowPassword] = useState(false); useEffect(() => { loadSavedCredentials(); }, []); const loadSavedCredentials = async () => { try { const savedPhone = await AsyncStorage.getItem('savedPhone'); // const savedEmail = await AsyncStorage.getItem('savedEmail'); const savedPassword = await AsyncStorage.getItem('savedPassword'); if (savedPhone && savedPassword) { // setLoginEmail(savedEmail); setLoginPhone(savedPhone); setLoginPassword(savedPassword); setSaveAccount(true); setUserTerms(true); setChecked(true); } } catch (error) { console.error('Error loading saved credentials:', error); } }; const _login = async (username: string, password: string) => { setIsLoading(true); if (username === '' || password === '') { Alert.alert(t('login.alert.pleaseEnter')); } else if (username.includes('@')) { Alert.alert(t('login.alert.binding'), t('login.alert.binding1'), [ { text: t('login.alert.binding2'), onPress: () => goToBindingPhoneNumberPage() }, { text: t('login.alert.binding3'), onPress: () => router.replace('/login') } ]); } else { if (userTerms) { const isBinding = false; const response = await login(username, password, isBinding); if (response) { if (saveAccount) { await AsyncStorage.setItem('savedPhone', username); await AsyncStorage.setItem('savedPassword', password); } else { await AsyncStorage.removeItem('savedPhone'); await AsyncStorage.removeItem('savedPassword'); } } else { Alert.alert(t('login.alert.error'), `${t('login.alert.reason')}`); } } else { Alert.alert(t('login.alert.agree')); } } setIsLoading(false); }; const goToUserTermsPage = () => { router.push('(public)/userTermsPage'); }; return ( {/* */} 750 ? 250 : 180, height: screenHeight > 750 ? 250 : 180 }} /> 750 ? 40 : 0 }} className="mx-[5%] mt-3" > {t('login.tip1')} {t('login.tip2')} {t('login.tip3')} {t('login.binding')} setLoginPhone(phone)} placeholder={t('login.phone')} extendedStyle={{ borderRadius: 12, padding: 20 }} textContentType="telephoneNumber" autoComplete="tel" keyboardType="phone-pad" autoCapitalize="none" /> setLoginPassword(password)} secureTextEntry={!showPassword} extendedStyle={{ borderRadius: 12, padding: 20, paddingRight: 50 }} textContentType="password" autoComplete="password" /> setShowPassword(!showPassword)} > { setSaveAccount(newValue); }} /> {t('login.rememberPhone')} { setUserTerms(newValue); }} /> {t('login.termsofService')} {t('login.termsofService1')} _login(loginPhone, loginPassword)} title={ isLoading ? ( ) : ( {t('login.signIn')} ) } /> {t('login.register')} goToForgetPassWordPage()}> {t('login.forgotPassword')} ); }; const styles = StyleSheet.create({ container: { flex: 1, height: Dimensions.get('window').height, justifyContent: 'center', marginHorizontal: 20 }, topContainerForLogo: {}, checkbox: { marginLeft: 8, marginRight: 8 }, text: { color: '#02677D', fontSize: 16, paddingVertical: 5 }, userTerms: { color: '#02677D', fontSize: 16, paddingVertical: 5, textDecorationLine: 'underline' } }); export default LoginPage;