import React, { useMemo } from "react"; import { View, TouchableOpacity, ScrollView } from "react-native"; import { useAppDesignTokens } from "@umituz/react-native-design-system/theme"; import { useResponsive } from "@umituz/react-native-design-system/responsive"; import { AtomicText, AtomicIcon, AtomicKeyboardAvoidingView } from "@umituz/react-native-design-system/atoms"; import { BottomSheetModal } from "@umituz/react-native-design-system/molecules"; import { useAuthBottomSheet, type SocialAuthConfiguration } from "../hooks/useAuthBottomSheet"; import { LoginForm, type LoginFormTranslations } from "./LoginForm"; import { RegisterForm, type RegisterFormTranslations } from "./RegisterForm"; import { SocialLoginButtons, type SocialLoginButtonsTranslations } from "./SocialLoginButtons"; import { styles } from "./AuthBottomSheet.styles"; export interface AuthBottomSheetTranslations { close: string; signIn: string; signInSubtitle: string; createAccount: string; createAccountSubtitle: string; loginForm: LoginFormTranslations; registerForm: RegisterFormTranslations; socialButtons: SocialLoginButtonsTranslations; } export interface AuthBottomSheetProps { translations: AuthBottomSheetTranslations; termsUrl?: string; privacyUrl?: string; onTermsPress?: () => void; onPrivacyPress?: () => void; socialConfig?: SocialAuthConfiguration; onGoogleSignIn?: () => Promise; onAppleSignIn?: () => Promise; onAuthSuccess?: () => void; } export const AuthBottomSheet: React.FC = ({ translations, termsUrl, privacyUrl, onTermsPress, onPrivacyPress, socialConfig, onGoogleSignIn, onAppleSignIn, onAuthSuccess, }) => { const tokens = useAppDesignTokens(); const responsive = useResponsive(); const { modalRef, googleLoading, appleLoading, mode, providers, handleDismiss, handleClose, handleNavigateToRegister, handleNavigateToLogin, handleGoogleSignIn, handleAppleSignIn, } = useAuthBottomSheet({ socialConfig, onGoogleSignIn, onAppleSignIn, onAuthSuccess }); const scrollContentStyle = useMemo(() => [ styles.scrollContent, { paddingHorizontal: responsive.horizontalPadding, paddingBottom: responsive.verticalPadding * 3, }, ], [responsive.horizontalPadding, responsive.verticalPadding]); const headerStyle = useMemo(() => [ styles.header, { marginBottom: responsive.verticalPadding, marginTop: responsive.horizontalPadding, paddingTop: responsive.horizontalPadding, }, ], [responsive.verticalPadding, responsive.horizontalPadding]); return ( {mode === "login" ? translations.signIn : translations.createAccount} {mode === "login" ? translations.signInSubtitle : translations.createAccountSubtitle} {mode === "login" ? ( ) : ( )} {providers.length > 0 && ( { void handleGoogleSignIn(); }} onApplePress={() => { void handleAppleSignIn(); }} googleLoading={googleLoading} appleLoading={appleLoading} /> )} ); };