import React, { useEffect, useRef, useState } from "react"; import { Button, ButtonSize, Checkbox, Colors, KeyboardAwareScrollView, LoaderScreen, Text, TextField, TextFieldRef, TouchableOpacity, View, } from "react-native-ui-lib"; import { useSignUp } from "@/hooks/firebase/useSignUp"; import { Dimensions, KeyboardAvoidingView, Platform, StyleSheet, } from "react-native"; import { AntDesign } from "@expo/vector-icons"; 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 { ProfileType, useAuthContext } from "@/contexts/AuthContext"; if (Platform.OS === "ios") KeyboardManager.setEnableAutoToolbar(true); const SignUpPage = () => { const [email, setEmail] = useState(""); const [firstName, setFirstName] = useState(""); const [lastName, setLastName] = useState(""); const [password, setPassword] = useState(""); const [isPasswordVisible, setIsPasswordVisible] = useState(false); const [allowFaceID, setAllowFaceID] = useState(false); const [acceptTerms, setAcceptTerms] = useState(false); const { mutateAsync: signUp, isLoading } = useSignUp(); const {profileData} = useAuthContext(); const lnameRef = useRef(null); const emailRef = useRef(null); const passwordRef = useRef(null); 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 router = useRouter(); const handleSignUp = async () => { await signUp({ email, password, firstName, lastName }); if (profileData?.userType === ProfileType.FAMILY_DEVICE) { router.replace("/(auth)/calendar"); } else { router.replace("/(unauth)/cal_sync"); } }; return ( Get started with Cally Please enter your details. { lnameRef.current?.focus(); }} blurOnSubmit={false} accessibilityLabel="First name input" accessibilityHint="Enter your first name" accessible returnKeyType="next" textContentType="givenName" importantForAccessibility="yes" /> { emailRef.current?.focus(); }} blurOnSubmit={false} accessibilityLabel="Last name input" accessibilityHint="Enter your last name" accessible returnKeyType="next" textContentType="familyName" importantForAccessibility="yes" /> { passwordRef.current?.focus(); }} /> setIsPasswordVisible(!isPasswordVisible)} > } /> { setAllowFaceID(value); }} /> Allow FaceID for login in future setAcceptTerms(value)} /> I accept the {" "} terms and conditions and {" "} privacy policy {isTablet ? ( ) : ( )}