"use client" import type { Account } from "better-auth" import { useContext } from "react" import { AuthUIContext } from "../../../lib/auth-ui-provider" import { socialProviders } from "../../../lib/social-providers" import { cn } from "../../../lib/utils" import type { AuthLocalization } from "../../../localization/auth-localization" import type { Refetch } from "../../../types/refetch" import { CardContent } from "../../ui/card" import type { SettingsCardClassNames } from "../shared/settings-card" import { SettingsCard } from "../shared/settings-card" import { SettingsCellSkeleton } from "../skeletons/settings-cell-skeleton" import { ProviderCell } from "./provider-cell" export interface ProvidersCardProps { className?: string classNames?: SettingsCardClassNames accounts?: Account[] | null isPending?: boolean localization?: Partial skipHook?: boolean refetch?: Refetch } export function ProvidersCard({ className, classNames, accounts, isPending, localization, skipHook, refetch }: ProvidersCardProps) { const { hooks: { useListAccounts }, localization: contextLocalization, social, genericOAuth } = useContext(AuthUIContext) localization = { ...contextLocalization, ...localization } if (!skipHook) { const result = useListAccounts() accounts = result.data isPending = result.isPending refetch = result.refetch } return ( {isPending ? ( social?.providers?.map((provider) => ( )) ) : ( <> {accounts?.map((account) => { const socialProvider = socialProviders.find( (sp) => sp.provider === account.providerId ) const genericOAuthProvider = genericOAuth?.providers?.find( (gp) => gp.provider === account.providerId ) const provider = socialProvider || genericOAuthProvider if (!provider) return null return ( ) })} {social?.providers?.map((provider) => { const socialProvider = socialProviders.find( (socialProvider) => socialProvider.provider === provider ) if (!socialProvider) return null return ( ) })} {genericOAuth?.providers?.map((provider) => ( acc.providerId === provider.provider )} provider={provider} refetch={refetch} other /> ))} )} ) }