import { Button, ButtonSize, Colors, KeyboardAwareScrollView, LoaderScreen, Text, TextField, TextFieldRef, TouchableOpacity, View, } from "react-native-ui-lib"; import React, { useEffect, useRef, useState } from "react"; import { useSignIn } from "@/hooks/firebase/useSignIn"; import { Dimensions, KeyboardAvoidingView, Platform, StyleSheet, } from "react-native"; import Toast from "react-native-toast-message"; import KeyboardManager from "react-native-keyboard-manager"; import { SafeAreaView } from "react-native-safe-area-context"; import { useRouter } from "expo-router"; import * as Device from "expo-device"; import { DeviceType } from "expo-device"; import { AntDesign } from "@expo/vector-icons"; if (Platform.OS === "ios") KeyboardManager.setEnableAutoToolbar(true); const firebaseAuthErrors: { [key: string]: string } = { 'auth/invalid-email': 'Please enter a valid email address', 'auth/user-disabled': 'This account has been disabled. Please contact support', 'auth/user-not-found': 'No account found with this email address', 'auth/wrong-password': 'Incorrect password. Please try again', 'auth/email-already-in-use': 'An account with this email already exists', 'auth/operation-not-allowed': 'This login method is not enabled. Please contact support', 'auth/weak-password': 'Password should be at least 6 characters', 'auth/invalid-credential': 'Invalid login credentials. Please try again', 'auth/network-request-failed': 'Network error. Please check your internet connection', 'auth/too-many-requests': 'Too many failed login attempts. Please try again later', 'auth/invalid-login-credentials': 'Invalid email or password. Please try again', }; const SignInPage = () => { const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const passwordRef = useRef(null); const [isPasswordVisible, setIsPasswordVisible] = useState(false); const isTablet: boolean = Device.deviceType === DeviceType.TABLET; const [isPortrait, setIsPortrait] = useState(() => { const dim = Dimensions.get("screen"); return dim.height >= dim.width; }); useEffect(() => { const subscription = Dimensions.addEventListener("change", ({ screen }) => { setIsPortrait(screen.height >= screen.width); }); return () => subscription.remove(); }, []); const getTopPadding = () => { if (Device.deviceType === DeviceType.TABLET) { return isPortrait ? "50%" : "15%"; } return "20%"; // non-tablet case, regardless of orientation }; const { mutateAsync: signIn, error, isError, isLoading } = useSignIn(); const router = useRouter(); const handleSignIn = async () => { try { await signIn({ email, password }); Toast.show({ type: "success", text1: "Login successful!", }); } catch (error: any) { const errorCode = error?.code || 'unknown-error'; const errorMessage = firebaseAuthErrors[errorCode] || 'An unexpected error occurred. Please try again'; Toast.show({ type: "error", text1: "Error logging in", text2: errorMessage, }); } }; return ( Jump back into Cally Please enter your details. { // Move focus to the description field passwordRef.current?.focus(); }} /> setIsPasswordVisible(!isPasswordVisible)} > } /> {isTablet ? : }