import { View, Text, TextInput, TouchableOpacity, KeyboardAvoidingView, Platform, ActivityIndicator, StyleSheet, } from 'react-native' import { useState } from 'react' import { useRouter } from 'expo-router' import { SafeAreaView } from 'react-native-safe-area-context' import { Ionicons } from '@expo/vector-icons' import { authClient } from '@/lib/auth-client' import { useAuthStore } from '@/store/auth.store' export default function LoginScreen() { const router = useRouter() const setSession = useAuthStore((s) => s.setSession) const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [loading, setLoading] = useState(false) const [error, setError] = useState('') const canSubmit = email.trim().length > 0 && password.length > 0 && !loading async function handleLogin() { if (!canSubmit) return setLoading(true) setError('') const result = await authClient.signIn.email({ email: email.trim().toLowerCase(), password, }) if (result.error) { setError(result.error.message ?? 'E-Mail oder Passwort falsch.') setLoading(false) return } const token = (result.data as any)?.session?.token const user = (result.data as any)?.user await setSession(user ? { user } : null, token) setLoading(false) router.replace('/(app)/home' as never) } return ( I InnungsApp Ihre Kreishandwerkerschaft digital Email-Adresse Passwort {error ? ( {error} ) : null} {loading ? ( ) : ( Anmelden )} Noch kein Zugang? Kontaktieren Sie Ihre Innungsgeschäftsstelle. ) } const styles = StyleSheet.create({ safeArea: { flex: 1, backgroundColor: '#FFFFFF' }, keyboardView: { flex: 1 }, content: { flex: 1, justifyContent: 'center', paddingHorizontal: 24 }, logoSection: { alignItems: 'center', marginBottom: 40 }, logoBox: { width: 64, height: 64, backgroundColor: '#003B7E', borderRadius: 18, alignItems: 'center', justifyContent: 'center', marginBottom: 16, }, logoLetter: { color: '#FFFFFF', fontSize: 30, fontWeight: '900' }, appName: { fontSize: 30, fontWeight: '800', color: '#0F172A', letterSpacing: -0.6, marginBottom: 4 }, tagline: { fontSize: 14, color: '#64748B', textAlign: 'center' }, form: { gap: 8 }, inputLabel: { fontSize: 14, fontWeight: '700', color: '#334155' }, inputWrap: { flexDirection: 'row', alignItems: 'center', backgroundColor: '#F8FAFC', borderRadius: 14, borderWidth: 1, borderColor: '#E2E8F0', paddingHorizontal: 12, gap: 8, }, input: { flex: 1, paddingVertical: 13, color: '#0F172A', fontSize: 15 }, errorBox: { backgroundColor: '#FEF2F2', borderWidth: 1, borderColor: '#FECACA', borderRadius: 12, paddingHorizontal: 14, paddingVertical: 10, }, errorText: { color: '#B91C1C', fontSize: 13 }, submitBtn: { backgroundColor: '#003B7E', borderRadius: 14, paddingVertical: 14, alignItems: 'center', marginTop: 8, }, submitBtnDisabled: { backgroundColor: '#CBD5E1' }, submitContent: { flexDirection: 'row', alignItems: 'center', gap: 6 }, submitLabel: { color: '#FFFFFF', fontWeight: '700', fontSize: 15 }, hint: { marginTop: 24, textAlign: 'center', color: '#64748B', fontSize: 13, lineHeight: 18 }, })