fitaiProto/apps/mobile/src/components/auth/OAuthButtons.tsx
echo a96f1902c5 social login
implemented, we can add more providers later
2025-11-20 19:28:39 +01:00

65 lines
1.8 KiB
TypeScript

import React from "react";
import * as WebBrowser from "expo-web-browser";
import { Button, View, StyleSheet, TouchableOpacity, Text } from "react-native";
import { useOAuth } from "@clerk/clerk-expo";
import { useWarmUpBrowser } from "../../hooks/useWarmUpBrowser";
import { Ionicons } from "@expo/vector-icons";
WebBrowser.maybeCompleteAuthSession();
export function OAuthButtons() {
useWarmUpBrowser();
const { startOAuthFlow } = useOAuth({ strategy: "oauth_google" });
const onPress = React.useCallback(async () => {
try {
const { createdSessionId, signIn, signUp, setActive } =
await startOAuthFlow();
if (createdSessionId) {
setActive!({ session: createdSessionId });
} else {
// Use signIn or signUp for next steps such as MFA
}
} catch (err) {
console.error("OAuth error", err);
}
}, []);
return (
<View style={styles.container}>
<TouchableOpacity style={styles.button} onPress={onPress}>
<Ionicons name="logo-google" size={20} color="#DB4437" style={styles.icon} />
<Text style={styles.text}>Continue with Google</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
container: {
width: "100%",
marginTop: 16,
},
button: {
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
backgroundColor: "#fff",
borderWidth: 1,
borderColor: "#ddd",
paddingVertical: 12,
borderRadius: 8,
marginBottom: 12,
},
icon: {
marginRight: 10,
},
text: {
fontSize: 16,
fontWeight: "500",
color: "#333",
},
});