101 lines
3.0 KiB
TypeScript
101 lines
3.0 KiB
TypeScript
import { useSignIn } from '@clerk/clerk-expo'
|
|
import { router } from 'expo-router'
|
|
import React from 'react'
|
|
import { StyleSheet, Text, TextInput, TouchableOpacity, View } from 'react-native'
|
|
|
|
export default function LoginScreen() {
|
|
const { signIn, setActive, isLoaded } = useSignIn()
|
|
const [username, setUsername] = React.useState('')
|
|
const [password, setPassword] = React.useState('')
|
|
|
|
async function handleSignIn() {
|
|
if (!isLoaded) return
|
|
|
|
try {
|
|
const signInAttempt = await signIn.create({
|
|
identifier: username,
|
|
password
|
|
})
|
|
|
|
if (signInAttempt.status === 'complete') {
|
|
await setActive({ session: signInAttempt.createdSessionId })
|
|
router.replace('/')
|
|
}
|
|
} catch (e) {
|
|
console.log(JSON.stringify(e))
|
|
}
|
|
}
|
|
|
|
return (
|
|
<View style={styles.container}>
|
|
<Text style={styles.text}>Login</Text>
|
|
<View style={{ width: '80%', marginTop: 20 }}>
|
|
<Text style={styles.textlabel}>Username</Text>
|
|
<TextInput style={styles.input} value={username} placeholder='Enter email' onChangeText={setUsername} />
|
|
<Text style={styles.textlabel}>Password</Text>
|
|
<TextInput
|
|
style={styles.input}
|
|
value={password}
|
|
placeholder='Enter password'
|
|
secureTextEntry
|
|
onChangeText={setPassword}
|
|
/>
|
|
<TouchableOpacity
|
|
style={styles.button}
|
|
onPress={() => {
|
|
handleSignIn()
|
|
}}
|
|
>
|
|
<Text style={{ color: '#fff', fontWeight: 'bold' }}>Login</Text>
|
|
</TouchableOpacity>
|
|
<Text style={styles.textCenter}>Don't have an account?</Text>
|
|
<TouchableOpacity
|
|
style={styles.signup}
|
|
onPress={() => {
|
|
router.navigate('/sign-up')
|
|
}}
|
|
>
|
|
<Text style={{ color: '#fff' }}>Sign Up</Text>
|
|
</TouchableOpacity>{' '}
|
|
</View>
|
|
</View>
|
|
)
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
flex: 1,
|
|
backgroundColor: '#25292e',
|
|
justifyContent: 'center',
|
|
alignItems: 'center'
|
|
},
|
|
text: {
|
|
color: '#fff'
|
|
},
|
|
textCenter: {
|
|
color: '#ffffff',
|
|
alignSelf: 'center',
|
|
marginBottom: 6
|
|
},
|
|
textlabel: {
|
|
color: '#fff',
|
|
marginBottom: 3
|
|
},
|
|
input: {
|
|
backgroundColor: '#fff',
|
|
borderRadius: 5,
|
|
padding: 10,
|
|
marginBottom: 15
|
|
},
|
|
button: {
|
|
backgroundColor: '#1e90ff',
|
|
padding: 12,
|
|
borderRadius: 5,
|
|
alignItems: 'center',
|
|
marginBottom: 15
|
|
},
|
|
signup: {
|
|
alignItems: 'center'
|
|
}
|
|
})
|