@@ -7,7 +7,7 @@ import { createStyles } from 'antd-style';
7
7
import { AuthError } from 'next-auth' ;
8
8
import { signIn } from 'next-auth/react' ;
9
9
import { useRouter , useSearchParams } from 'next/navigation' ;
10
- import { memo } from 'react' ;
10
+ import { memo , useState } from 'react' ;
11
11
import { useTranslation } from 'react-i18next' ;
12
12
13
13
import BrandWatermark from '@/components/BrandWatermark' ;
@@ -70,6 +70,7 @@ export default memo(() => {
70
70
const { styles } = useStyles ( ) ;
71
71
const { t } = useTranslation ( 'clerk' ) ;
72
72
const router = useRouter ( ) ;
73
+ const [ loadingProvider , setLoadingProvider ] = useState < string | null > ( null ) ;
73
74
74
75
const oAuthSSOProviders = useUserStore ( ( s ) => s . oAuthSSOProviders ) ;
75
76
@@ -79,9 +80,11 @@ export default memo(() => {
79
80
const callbackUrl = searchParams . get ( 'callbackUrl' ) ?? '/' ;
80
81
81
82
const handleSignIn = async ( provider : string ) => {
83
+ setLoadingProvider ( provider ) ;
82
84
try {
83
85
await signIn ( provider , { redirectTo : callbackUrl } ) ;
84
86
} catch ( error ) {
87
+ setLoadingProvider ( null ) ;
85
88
// Signin can fail for a number of reasons, such as the user
86
89
// not existing, or the user not having the correct role.
87
90
// In some cases, you may want to redirect to a custom error
@@ -127,6 +130,7 @@ export default memo(() => {
127
130
className = { styles . button }
128
131
icon = { AuthIcons ( provider , 16 ) }
129
132
key = { provider }
133
+ loading = { loadingProvider === provider }
130
134
onClick = { ( ) => handleSignIn ( provider ) }
131
135
>
132
136
{ provider }
0 commit comments