'use client'; import { signIn } from "next-auth/react"; import { useCallback } from "react"; import { getAuthProviderInfo } from "@/lib/utils"; import { MagicLinkForm } from "@/app/login/components/magicLinkForm"; import { CredentialsForm } from "@/app/login/components/credentialsForm"; import { DividerSet } from "@/app/components/dividerSet"; import { ProviderButton } from "@/app/components/providerButton"; import { AuthSecurityNotice } from "@/app/components/authSecurityNotice"; import type { AuthProvider } from "@/lib/authProviders"; interface AuthMethodSelectorProps { providers: AuthProvider[]; callbackUrl?: string; context: "login" | "signup"; onProviderClick?: (providerId: string) => void; securityNoticeClosable?: boolean; } export const AuthMethodSelector = ({ providers, callbackUrl, context, onProviderClick, securityNoticeClosable = false }: AuthMethodSelectorProps) => { const onSignInWithOauth = useCallback((provider: string) => { // Call the optional analytics callback first onProviderClick?.(provider); signIn(provider, { redirectTo: callbackUrl ?? "/" }); }, [callbackUrl, onProviderClick]); // Separate OAuth providers from special auth methods const oauthProviders = providers.filter(p => !["credentials", "nodemailer"].includes(p.id) ); const hasCredentials = providers.some(p => p.id === "credentials"); const hasMagicLink = providers.some(p => p.id === "nodemailer"); return ( <> 0 ? [
{oauthProviders.map((provider) => { const providerInfo = getAuthProviderInfo(provider.id); return ( { onSignInWithOauth(provider.id); }} context={context} /> ); })}
] : []), ...(hasMagicLink ? [ ] : []), ...(hasCredentials ? [ ] : []) ]} /> ); };