@@ -37,33 +37,67 @@ function MFAThemeWrapper(props: WebAuthnMFAProps): JSX.Element {
3737export default MFAThemeWrapper ;
3838
3939export function MFATheme ( props : WebAuthnMFAProps ) : JSX . Element {
40- const { onBackButtonClicked, onSignIn } = props ;
41- const [ activeScreen , setActiveScreen ] = React . useState < MFAScreens > ( MFAScreens . SignIn ) ;
42- const [ signUpEmail , setSignUpEmail ] = React . useState < string > ( "" ) ;
4340 const t = useTranslation ( ) ;
4441
45- const onRegisterPasskeyClick = React . useCallback ( ( ) => {
46- if ( ! props . featureState . canRegisterPasskey ) {
47- return ;
48- }
49- if ( props . featureState . email ) {
50- setActiveScreen ( MFAScreens . SignUpConfirmation ) ;
51- } else {
52- setActiveScreen ( MFAScreens . SignUp ) ;
42+ if ( ! props . featureState . loaded ) {
43+ return < WebauthnMFALoadingScreen /> ;
44+ }
45+
46+ if ( props . featureState . accessDenied ) {
47+ return (
48+ < AccessDeniedScreen
49+ useShadowDom = { false /* We set this to false, because we are already inside a shadowDom (if required) */ }
50+ error = { t ( props . featureState . error ! ) }
51+ />
52+ ) ;
53+ }
54+
55+ return (
56+ < div data-supertokens = "container webauthn-mfa" >
57+ < div data-supertokens = "row" >
58+ < MFAThemeRouter { ...props } />
59+ </ div >
60+ < SuperTokensBranding />
61+ </ div >
62+ ) ;
63+ }
64+
65+ function MFAThemeRouter ( props : WebAuthnMFAProps ) : JSX . Element {
66+ const { onBackButtonClicked, onSignIn } = props ;
67+ const [ activeScreen , setActiveScreen ] = React . useState < MFAScreens > ( ( ) => {
68+ if ( ! props . featureState . hasRegisteredPassKey ) {
69+ return props . featureState . email ? MFAScreens . SignUpConfirmation : MFAScreens . SignUp ;
5370 }
54- } , [ props . featureState . email , props . featureState . canRegisterPasskey ] ) ;
71+ return MFAScreens . SignIn ;
72+ } ) ;
73+ const [ email , setEmail ] = React . useState < string > ( "" ) ;
74+ const signUpEmail = props . featureState . email || email ;
75+ console . log ( "render" ) ;
76+ console . log ( signUpEmail ) ;
77+ console . log ( email ) ;
5578
5679 const onSignUpContinue = React . useCallback (
5780 ( email : string ) => {
5881 if ( ! props . featureState . canRegisterPasskey ) {
5982 return ;
6083 }
6184 setActiveScreen ( MFAScreens . SignUpConfirmation ) ;
62- setSignUpEmail ( email ) ;
85+ setEmail ( email ) ;
6386 } ,
6487 [ props . featureState . canRegisterPasskey ]
6588 ) ;
6689
90+ const onRegisterPasskeyClick = React . useCallback ( ( ) => {
91+ if ( ! props . featureState . canRegisterPasskey ) {
92+ return ;
93+ }
94+ if ( props . featureState . email ) {
95+ setActiveScreen ( MFAScreens . SignUpConfirmation ) ;
96+ } else {
97+ setActiveScreen ( MFAScreens . SignUp ) ;
98+ }
99+ } , [ props . featureState . email , props . featureState . canRegisterPasskey ] ) ;
100+
67101 const clearError = React . useCallback ( ( ) => {
68102 props . dispatch ( { type : "setError" , error : undefined } ) ;
69103 } , [ props ] ) ;
@@ -75,71 +109,82 @@ export function MFATheme(props: WebAuthnMFAProps): JSX.Element {
75109 [ props ]
76110 ) ;
77111
78- const onClickSignUpBackButton = React . useCallback ( ( ) => {
79- if ( ! props . featureState . canRegisterPasskey ) {
80- return ;
81- }
82- setActiveScreen ( MFAScreens . SignIn ) ;
83- } , [ props . featureState . canRegisterPasskey ] ) ;
84-
85112 const onClickSignUpConfirmationBackButton = React . useCallback ( ( ) => {
86- if ( props . featureState . email ) {
87- setActiveScreen ( MFAScreens . SignIn ) ;
88- } else {
113+ if ( ! props . featureState . email ) {
89114 setActiveScreen ( MFAScreens . SignUp ) ;
115+ return ;
116+ }
117+ if ( ! props . featureState . hasRegisteredPassKey && ! props . featureState . showBackButton ) {
118+ return ;
90119 }
91- } , [ props . featureState . email ] ) ;
120+ if ( ! props . featureState . hasRegisteredPassKey ) {
121+ onBackButtonClicked ( ) ;
122+ return ;
123+ }
124+ setActiveScreen ( MFAScreens . SignIn ) ;
125+ } , [
126+ props . featureState . email ,
127+ props . featureState . hasRegisteredPassKey ,
128+ props . featureState . showBackButton ,
129+ onBackButtonClicked ,
130+ ] ) ;
131+
132+ const onSignUp = React . useCallback ( async ( ) => {
133+ console . log ( "onSignUp" ) ;
134+ console . log ( props . featureState . email ) ;
135+ console . log ( email ) ;
136+ await props . onSignUp ( signUpEmail ) ;
137+ } , [ props . onSignUp , signUpEmail ] ) ;
92138
93139 const onFetchError = React . useCallback ( ( ) => {
94140 onError ( "SOMETHING_WENT_WRONG_ERROR" ) ;
95141 } , [ onError ] ) ;
96142
97- if ( ! props . featureState . loaded ) {
98- return < WebauthnMFALoadingScreen /> ;
143+ const onClickSignUpBackButton = React . useCallback ( ( ) => {
144+ if ( ! props . featureState . hasRegisteredPassKey && ! props . featureState . showBackButton ) {
145+ return ;
146+ }
147+ if ( ! props . featureState . hasRegisteredPassKey ) {
148+ onBackButtonClicked ( ) ;
149+ return ;
150+ }
151+ setActiveScreen ( MFAScreens . SignIn ) ;
152+ } , [ props . featureState . hasRegisteredPassKey , props . featureState . showBackButton , onBackButtonClicked ] ) ;
153+
154+ if ( activeScreen === MFAScreens . SignUp ) {
155+ return (
156+ < WebauthnMFASignUp
157+ clearError = { clearError }
158+ onError = { onError }
159+ onFetchError = { onFetchError }
160+ error = { props . featureState . error }
161+ onContinueClick = { onSignUpContinue }
162+ email = { email }
163+ onRecoverAccountClick = { props . onRecoverAccountClick }
164+ onBackButtonClicked = { onClickSignUpBackButton }
165+ />
166+ ) ;
99167 }
100168
101- if ( props . featureState . accessDenied ) {
169+ if ( activeScreen === MFAScreens . SignUpConfirmation ) {
102170 return (
103- < AccessDeniedScreen
104- useShadowDom = { false /* We set this to false, because we are already inside a shadowDom (if required) */ }
105- error = { t ( props . featureState . error ! ) }
171+ < WebauthnMFASignUpConfirmation
172+ onSignUp = { onSignUp }
173+ onBackButtonClicked = { onClickSignUpConfirmationBackButton }
174+ email = { signUpEmail }
175+ error = { props . featureState . error }
106176 />
107177 ) ;
108178 }
109179
110180 return (
111- < div data-supertokens = "container webauthn-mfa" >
112- < div data-supertokens = "row" >
113- { activeScreen === MFAScreens . SignIn ? (
114- < WebauthnMFASignIn
115- onBackButtonClicked = { props . featureState . showBackButton ? onBackButtonClicked : undefined }
116- canRegisterPasskey = { props . featureState . canRegisterPasskey }
117- onSignIn = { onSignIn }
118- error = { props . featureState . error }
119- onRegisterPasskeyClick = { onRegisterPasskeyClick }
120- deviceSupported = { props . featureState . deviceSupported }
121- />
122- ) : activeScreen === MFAScreens . SignUp ? (
123- < WebauthnMFASignUp
124- clearError = { clearError }
125- onError = { onError }
126- onFetchError = { onFetchError }
127- error = { props . featureState . error }
128- onContinueClick = { onSignUpContinue }
129- email = { signUpEmail }
130- onRecoverAccountClick = { props . onRecoverAccountClick }
131- onBackButtonClicked = { onClickSignUpBackButton }
132- />
133- ) : (
134- < WebauthnMFASignUpConfirmation
135- onSignUp = { props . onSignUp }
136- onBackButtonClicked = { onClickSignUpConfirmationBackButton }
137- email = { props . featureState . email || signUpEmail }
138- error = { props . featureState . error }
139- />
140- ) }
141- </ div >
142- < SuperTokensBranding />
143- </ div >
181+ < WebauthnMFASignIn
182+ onBackButtonClicked = { props . featureState . showBackButton ? onBackButtonClicked : undefined }
183+ canRegisterPasskey = { props . featureState . canRegisterPasskey }
184+ onSignIn = { onSignIn }
185+ error = { props . featureState . error }
186+ deviceSupported = { props . featureState . deviceSupported }
187+ onRegisterPasskeyClick = { onRegisterPasskeyClick }
188+ />
144189 ) ;
145190}
0 commit comments