import { Button } from '@afilmory/ui' import { cx } from '@afilmory/utils' import { memo, useCallback, useMemo } from 'react' import { signInSocial } from '../auth-client' import { useSocialProviders } from '../hooks/useSocialProviders' export interface SocialAuthButtonsProps { className?: string title?: string requestSignUp?: boolean callbackURL?: string errorCallbackURL?: string newUserCallbackURL?: string disableRedirect?: boolean layout?: 'grid' | 'row' } export const SocialAuthButtons = memo(function SocialAuthButtons({ className, title = 'Or continue with', requestSignUp = false, callbackURL, errorCallbackURL, newUserCallbackURL, disableRedirect, layout = 'grid', }: SocialAuthButtonsProps) { const { data, isLoading } = useSocialProviders() const providers = data?.providers ?? [] const resolvedCallbackURL = useMemo(() => { if (callbackURL) { return callbackURL } if (typeof window !== 'undefined') { return window.location.href } return }, [callbackURL]) const handleSocialClick = useCallback( async (providerId: string) => { try { await signInSocial({ provider: providerId, requestSignUp, callbackURL: resolvedCallbackURL, errorCallbackURL, newUserCallbackURL, disableRedirect, }) } catch (error) { console.error('Failed to initiate social sign-in', error) } }, [disableRedirect, errorCallbackURL, newUserCallbackURL, requestSignUp, resolvedCallbackURL], ) if (isLoading) { return
{title}
: null}