@@ -11,6 +11,7 @@ import { useCoreSignIn, useEnvironment } from '../../contexts';
1111import { useAlternativeStrategies } from '../../hooks/useAlternativeStrategies' ;
1212import { localizationKeys } from '../../localization' ;
1313import { useRouter } from '../../router' ;
14+ import type { AlternativeMethodsMode } from './AlternativeMethods' ;
1415import { AlternativeMethods } from './AlternativeMethods' ;
1516import { hasMultipleEnterpriseConnections } from './shared' ;
1617import { SignInFactorOneAlternativePhoneCodeCard } from './SignInFactorOneAlternativePhoneCodeCard' ;
@@ -19,6 +20,7 @@ import { SignInFactorOneEmailLinkCard } from './SignInFactorOneEmailLinkCard';
1920import { SignInFactorOneEnterpriseConnections } from './SignInFactorOneEnterpriseConnections' ;
2021import { SignInFactorOneForgotPasswordCard } from './SignInFactorOneForgotPasswordCard' ;
2122import { SignInFactorOnePasskey } from './SignInFactorOnePasskey' ;
23+ import type { PasswordErrorCode } from './SignInFactorOnePasswordCard' ;
2224import { SignInFactorOnePasswordCard } from './SignInFactorOnePasswordCard' ;
2325import { SignInFactorOnePhoneCodeCard } from './SignInFactorOnePhoneCodeCard' ;
2426import { useResetPasswordFactor } from './useResetPasswordFactor' ;
@@ -41,6 +43,25 @@ const factorKey = (factor: SignInFactor | null | undefined) => {
4143 return key ;
4244} ;
4345
46+ function determineAlternativeMethodsMode (
47+ showForgotPasswordStrategies : boolean ,
48+ passwordErrorCode : PasswordErrorCode | null ,
49+ ) : AlternativeMethodsMode {
50+ if ( ! showForgotPasswordStrategies ) {
51+ return 'default' ;
52+ }
53+
54+ if ( passwordErrorCode === 'pwned' ) {
55+ return 'pwned' ;
56+ }
57+
58+ if ( passwordErrorCode === 'untrusted' ) {
59+ return 'passwordUntrusted' ;
60+ }
61+
62+ return 'forgot' ;
63+ }
64+
4465function SignInFactorOneInternal ( ) : JSX . Element {
4566 const { __internal_setActiveInProgress } = useClerk ( ) ;
4667 const signIn = useCoreSignIn ( ) ;
@@ -84,7 +105,7 @@ function SignInFactorOneInternal(): JSX.Element {
84105
85106 const [ showForgotPasswordStrategies , setShowForgotPasswordStrategies ] = React . useState ( false ) ;
86107
87- const [ isPasswordPwned , setIsPasswordPwned ] = React . useState ( false ) ;
108+ const [ passwordErrorCode , setPasswordErrorCode ] = React . useState < PasswordErrorCode | null > ( null ) ;
88109
89110 React . useEffect ( ( ) => {
90111 if ( __internal_setActiveInProgress ) {
@@ -139,11 +160,11 @@ function SignInFactorOneInternal(): JSX.Element {
139160 const toggle = showAllStrategies ? toggleAllStrategies : toggleForgotPasswordStrategies ;
140161 const backHandler = ( ) => {
141162 card . setError ( undefined ) ;
142- setIsPasswordPwned ( false ) ;
163+ setPasswordErrorCode ( null ) ;
143164 toggle ?.( ) ;
144165 } ;
145166
146- const mode = showForgotPasswordStrategies ? ( isPasswordPwned ? 'pwned' : 'forgot' ) : 'default' ;
167+ const mode = determineAlternativeMethodsMode ( showForgotPasswordStrategies , passwordErrorCode ) ;
147168
148169 return (
149170 < AlternativeMethods
@@ -175,8 +196,8 @@ function SignInFactorOneInternal(): JSX.Element {
175196 < SignInFactorOnePasswordCard
176197 onForgotPasswordMethodClick = { resetPasswordFactor ? toggleForgotPasswordStrategies : toggleAllStrategies }
177198 onShowAlternativeMethodsClick = { toggleAllStrategies }
178- onPasswordPwned = { ( ) => {
179- setIsPasswordPwned ( true ) ;
199+ onPasswordError = { errorCode => {
200+ setPasswordErrorCode ( errorCode ) ;
180201 toggleForgotPasswordStrategies ( ) ;
181202 } }
182203 />
0 commit comments