import React, {useEffect, useState} from 'react'; import {StyleSheet, ActivityIndicator, SafeAreaView, View} from 'react-native'; import {useAuthStore} from '@/store/authStore'; import {useRouter, Link} from 'expo-router'; import {Box} from "@/components/ui/box" import {Button, ButtonText, ButtonIcon} from "@/components/ui/button" import {Center} from "@/components/ui/center" import {Heading} from "@/components/ui/heading" import {Input, InputField} from "@/components/ui/input" import {Text} from "@/components/ui/text" import {VStack} from "@/components/ui/vstack" import {HStack} from "@/components/ui/hstack" import {ArrowRightIcon} from "@/components/ui/icon" import {Divider} from '@/components/ui/divider'; import {Ionicons} from "@expo/vector-icons"; import * as WebBrowser from 'expo-web-browser'; import * as Google from "expo-auth-session/providers/google"; import AsyncStorage from "@react-native-async-storage/async-storage"; WebBrowser.maybeCompleteAuthSession(); // client_id ios 936418008320-ohefdfcebd41f6oa2o8phh1mgj9s49sl.apps.googleusercontent.com // android 936418008320-d8dfjph5e4r28fcm1rbdfbh5phmbg03d.apps.googleusercontent.com export default function Login() { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const {signIn, isLoading} = useAuthStore(); const router = useRouter(); const [request, response, promptAsync] = Google.useAuthRequest({ androidClientId: "936418008320-d8dfjph5e4r28fcm1rbdfbh5phmbg03d.apps.googleusercontent.com", iosClientId: "936418008320-ohefdfcebd41f6oa2o8phh1mgj9s49sl.apps.googleusercontent.com", webClientId: "936418008320-btdngtlfnjac1p67guje72m9el5q59a7.apps.googleusercontent.com" }) const handleInternalLogin = async () => { if (!email || !password) { alert('Proszę wprowadzić email i hasło.'); return; } try { await signIn(email, password); alert(`Zalogowano jako ${email}`); router.replace('/'); } catch (e) { alert("Błąd logowania: " + (e.response?.data?.message || e.message)); } } useEffect(() => { handleGoogleLogin(); }, [response]); const handleGoogleLogin = async () => { const user = await AsyncStorage.getItem("@user"); if (!user) { if(response?.type === "success") { await getUserInfo(response.authentication.accessToken) } } else { // Set the user in the auth store } }; const getUserInfo = async (token) => { if(!token) { return } try { const response = await fetch("https://www.googleapis.com/userinfo/v2/me", { headers: { Authorization: `Bearer ${token}` }, } ); const user = await response.json(); console.log("Pobrano informacje o użytkowniku:", user); await AsyncStorage.setItem("@user", JSON.stringify(user)); } catch (error) { console.error("Błąd podczas pobierania informacji o użytkowniku:", error); throw error; } } if (isLoading) { return ( ); } return (
Logowanie lub
); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', padding: 20, }, input: { borderWidth: 1, borderColor: '#ddd', borderRadius: 5, marginBottom: 15, padding: 10, }, errorText: { color: 'red', marginBottom: 10, }, signupbutton: { fontWeight: '300', }, });