import React, { useRef, useState } from 'react'; import { Alert, LayoutAnimation, TouchableOpacity, Dimensions, Image, UIManager, StyleSheet, ScrollView, Text, View, ImageSourcePropType, TextInput, TextInputProps, } from 'react-native'; import { Input, Button, Icon, InputProps } from 'react-native-elements'; import LinearGradient from 'react-native-linear-gradient'; // Enable LayoutAnimation on Android UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true); const USER_COOL = require('../../assets/images/user-cool.png'); const USER_STUDENT = require('../../assets/images/user-student.png'); const USER_HP = require('../../assets/images/user-hp.png'); const SCREEN_WIDTH = Dimensions.get('window').width; const SCREEN_HEIGHT = Dimensions.get('window').height; type LoginScreen2Props = {}; const LoginScreen2: React.FunctionComponent = () => { const [isLoading, setLoading] = useState(false); const [selectedType, setSelectedType] = useState(); const [username, setUsername] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmationPassword, setConfirmationPassword] = useState(''); const [validEmail, setEmailValid] = useState(true); const [validPassword, setPasswordValid] = useState(true); const [validUsername, setUsernameValid] = useState(true); const [ validConfirmationPassword, setConfirmationPasswordValid, ] = useState(true); let emailInput = useRef(null); let passwordInput = useRef(null); let confirmationPasswordInput = useRef(null); let usernameInput = useRef(null); const signup = () => { LayoutAnimation.easeInEaseOut(); const usernameValid = validateUsername(); const emailValid = validateEmail(); const passwordValid = validatePassword(); const confirmationPasswordValid = validateConfirmationPassword(); if ( emailValid && passwordValid && confirmationPasswordValid && usernameValid ) { setLoading(true); setTimeout(() => { LayoutAnimation.easeInEaseOut(); setLoading(false); Alert.alert('🎸', 'You rock'); }, 1500); } }; const validateUsername = () => { const usernameCheck = username.length > 0; LayoutAnimation.easeInEaseOut(); setUsernameValid(usernameCheck); usernameCheck || usernameInput.shake(); return usernameCheck; }; const validateEmail = () => { const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; const emailCheck = re.test(email); LayoutAnimation.easeInEaseOut(); setEmailValid(emailCheck); emailCheck || emailInput.shake(); return emailCheck; }; const validatePassword = () => { const passwordCheck = password.length >= 8; LayoutAnimation.easeInEaseOut(); setPasswordValid(passwordCheck); passwordCheck || passwordInput.shake(); return passwordCheck; }; const validateConfirmationPassword = () => { const confirmationPasswordCheck = password === confirmationPassword; LayoutAnimation.easeInEaseOut(); setConfirmationPasswordValid(confirmationPasswordCheck); confirmationPasswordCheck || confirmationPasswordInput.shake(); return confirmationPasswordCheck; }; const selectedTypeHandler = (value: string) => { LayoutAnimation.easeInEaseOut(); setSelectedType(value); }; return ( Sign up WHO YOU ARE ? selectedTypeHandler('parent')} selected={selectedType === 'parent'} /> selectedTypeHandler('child')} selected={selectedType === 'child'} /> selectedTypeHandler('teacher')} selected={selectedType === 'teacher'} /> (usernameInput = input)} icon="user" value={username} onChangeText={(text: string) => setUsername(text)} placeholder="Username" returnKeyType="next" errorMessage={validUsername ? '' : "Your username can't be blank"} onSubmitEditing={() => { validateUsername(); emailInput.focus(); }} /> (emailInput = input)} icon="envelope" value={email} onChangeText={(text: string) => setEmail(text)} placeholder="Email" keyboardType="email-address" returnKeyType="next" errorMessage={validEmail ? '' : 'Please enter a valid email address'} onSubmitEditing={() => { validateEmail(); passwordInput.focus(); }} /> (passwordInput = input)} icon="lock" value={password} onChangeText={(text: string) => setPassword(text)} placeholder="Password" secureTextEntry returnKeyType="next" errorMessage={ validPassword ? '' : 'Please enter at least 8 characters' } onSubmitEditing={() => { validatePassword(); confirmationPasswordInput.focus(); }} /> (confirmationPasswordInput = input)} icon="lock" value={confirmationPassword} onChangeText={(text: string) => setConfirmationPassword(text)} placeholder="Confirm Password" secureTextEntry errorMessage={ validConfirmationPassword ? '' : 'The password fields are not identical' } returnKeyType="go" onSubmitEditing={() => { validateConfirmationPassword(); signup(); }} />