import { supabase } from "@/libs/supabase" import { Link, Stack } from "expo-router" import { useState } from "react" import { Pressable, StyleSheet, Text, TextInput, View } from 'react-native' import { useAppTheme } from "@/src/theme/AppThemeProvider" export default function SignupScreen(){ const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [errorMessage, setErrorMessage] = useState(null) const [successMessage, setSuccessMessage] = useState(null) const [isSubmitting, setIsSubmitting] = useState(false) const { colorScheme, palette } = useAppTheme() const onSignup = async () => { if(!email.trim() || !password){ setErrorMessage('Sign up using email and password') return } setIsSubmitting(true) setErrorMessage(null) setSuccessMessage(null) const { data, error } = await supabase.auth.signUp({ email: email.trim(), password }) if(error){ setErrorMessage(error.message) } else if (data.session) { const user = data.user if (user) { const { error: profileError } = await supabase .from('profiles') .upsert({ id: user.id, email: user.email ?? email.trim(), }) if (profileError) { setErrorMessage(profileError.message) } } } if (!error && data.session) { setSuccessMessage('Account created. You are now signed in.') } else if (!error) { setSuccessMessage('Account created. Check your email to confirm the signup.') } setIsSubmitting(false) } return ( <> Sign up E-mail Password {errorMessage ? ( {errorMessage} ) : null} {successMessage ? ( {successMessage} ) : null} [ styles.actionButton, pressed && !isSubmitting ? styles.actionButtonPressed : null, isSubmitting ? styles.actionButtonDisabled : null, ]} > {isSubmitting ? 'Creating account...' : 'Sign up'} Already have an account? Log in ) } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', padding: 24, gap: 12, }, title: { fontSize: 28, fontWeight: '700', }, label: { fontSize: 14, fontWeight: '600', }, input: { borderWidth: 1, borderRadius: 8, padding: 12, fontSize: 16, }, errorText: { color: '#c62828', fontSize: 14, }, successText: { color: '#2e7d32', fontSize: 14, }, actionButton: { borderRadius: 12, paddingVertical: 14, alignItems: 'center', backgroundColor: '#111', marginTop: 8, }, actionButtonPressed: { opacity: 0.85, }, actionButtonDisabled: { opacity: 0.6, }, actionButtonText: { color: '#fff', fontSize: 16, fontWeight: '700', }, link: { alignSelf: 'center', marginTop: 8, }, linkText: { color: '#0b57d0', fontSize: 16, }, })