@@ -10,13 +10,24 @@ import { StyledButton, StyledFooter, StyledLink } from '../styledComponents';
1010import { formatErrorMessage } from '../utils/format' ;
1111import { Message } from './Message' ;
1212import PasswordStrengthIndicator from './PasswordStrengthIndicator' ;
13+ import { OtpDataType } from '../types' ;
14+ import { AuthorizerVerifyOtp } from './AuthorizerVerifyOtp' ;
15+ import { getEmailPhoneLabels , getEmailPhonePlaceholder } from '../utils/labels' ;
1316
1417interface InputDataType {
18+ given_name : string | null ;
19+ family_name : string | null ;
1520 email_or_phone_number : string | null ;
1621 password : string | null ;
1722 confirmPassword : string | null ;
1823}
1924
25+ const initOtpData : OtpDataType = {
26+ is_screen_visible : false ,
27+ email : '' ,
28+ phone_number : '' ,
29+ } ;
30+
2031export const AuthorizerSignup : FC < {
2132 setView ?: ( v : Views ) => void ;
2233 onSignup ?: ( data : AuthToken ) => void ;
@@ -25,13 +36,18 @@ export const AuthorizerSignup: FC<{
2536} > = ( { setView, onSignup, urlProps, roles } ) => {
2637 const [ error , setError ] = useState ( `` ) ;
2738 const [ loading , setLoading ] = useState ( false ) ;
39+ const [ otpData , setOtpData ] = useState < OtpDataType > ( { ...initOtpData } ) ;
2840 const [ successMessage , setSuccessMessage ] = useState ( `` ) ;
2941 const [ formData , setFormData ] = useState < InputDataType > ( {
42+ given_name : null ,
43+ family_name : null ,
3044 email_or_phone_number : null ,
3145 password : null ,
3246 confirmPassword : null ,
3347 } ) ;
3448 const [ errorData , setErrorData ] = useState < InputDataType > ( {
49+ given_name : null ,
50+ family_name : null ,
3551 email_or_phone_number : null ,
3652 password : null ,
3753 confirmPassword : null ,
@@ -67,6 +83,8 @@ export const AuthorizerSignup: FC<{
6783 const data : SignupInput = {
6884 email : email ,
6985 phone_number : phone_number ,
86+ given_name : formData . given_name || '' ,
87+ family_name : formData . family_name || '' ,
7088 password : formData . password || '' ,
7189 confirm_password : formData . confirmPassword || '' ,
7290 } ;
@@ -91,7 +109,18 @@ export const AuthorizerSignup: FC<{
91109 setLoading ( false ) ;
92110 return ;
93111 }
94-
112+ if (
113+ res &&
114+ ( res ?. should_show_email_otp_screen ||
115+ res ?. should_show_mobile_otp_screen )
116+ ) {
117+ setOtpData ( {
118+ is_screen_visible : true ,
119+ email : data . email || `` ,
120+ phone_number : data . phone_number || `` ,
121+ } ) ;
122+ return ;
123+ }
95124 if ( res ) {
96125 setError ( `` ) ;
97126 if ( res . access_token ) {
@@ -126,6 +155,22 @@ export const AuthorizerSignup: FC<{
126155 setError ( `` ) ;
127156 } ;
128157
158+ useEffect ( ( ) => {
159+ if ( ( formData . given_name || '' ) . trim ( ) === '' ) {
160+ setErrorData ( { ...errorData , given_name : 'First Name is required' } ) ;
161+ } else {
162+ setErrorData ( { ...errorData , given_name : null } ) ;
163+ }
164+ } , [ formData . given_name ] ) ;
165+
166+ useEffect ( ( ) => {
167+ if ( ( formData . family_name || '' ) . trim ( ) === '' ) {
168+ setErrorData ( { ...errorData , family_name : 'Last Name is required' } ) ;
169+ } else {
170+ setErrorData ( { ...errorData , family_name : null } ) ;
171+ }
172+ } , [ formData . family_name ] ) ;
173+
129174 useEffect ( ( ) => {
130175 if ( formData . email_or_phone_number === '' ) {
131176 setErrorData ( {
@@ -182,15 +227,34 @@ export const AuthorizerSignup: FC<{
182227 }
183228 } , [ formData . password , formData . confirmPassword ] ) ;
184229
185- if ( successMessage ) {
186- return < Message type = { MessageType . Success } text = { successMessage } /> ;
230+ if ( otpData . is_screen_visible ) {
231+ return (
232+ < >
233+ { successMessage && (
234+ < Message type = { MessageType . Success } text = { successMessage } />
235+ ) }
236+ < AuthorizerVerifyOtp
237+ { ...{
238+ setView,
239+ onLogin : onSignup ,
240+ email : otpData . email || `` ,
241+ phone_number : otpData . phone_number || `` ,
242+ is_totp : otpData . is_totp || false ,
243+ } }
244+ urlProps = { urlProps }
245+ />
246+ </ >
247+ ) ;
187248 }
188249
189250 return (
190251 < >
191252 { error && (
192253 < Message type = { MessageType . Error } text = { error } onClose = { onErrorClose } />
193254 ) }
255+ { successMessage && (
256+ < Message type = { MessageType . Success } text = { successMessage } />
257+ ) }
194258 { ( config . is_basic_authentication_enabled ||
195259 config . is_mobile_basic_authentication_enabled ) &&
196260 ! config . is_magic_link_login_enabled && (
@@ -199,22 +263,71 @@ export const AuthorizerSignup: FC<{
199263 < div className = { styles [ 'styled-form-group' ] } >
200264 < label
201265 className = { styles [ 'form-input-label' ] }
202- htmlFor = "authorizer-sign-up-email"
266+ htmlFor = "authorizer-sign-up-given-name"
267+ >
268+ < span > * </ span > First Name
269+ </ label >
270+ < input
271+ name = "given_name"
272+ id = "authorizer-sign-up-given-name"
273+ className = { `${ styles [ 'form-input-field' ] } ${
274+ errorData . given_name ? styles [ 'input-error-content' ] : null
275+ } `}
276+ placeholder = "eg. John"
277+ type = "text"
278+ value = { formData . given_name || '' }
279+ onChange = { e => onInputChange ( 'given_name' , e . target . value ) }
280+ />
281+ { errorData . given_name && (
282+ < div className = { styles [ 'form-input-error' ] } >
283+ { errorData . given_name }
284+ </ div >
285+ ) }
286+ </ div >
287+ < div className = { styles [ 'styled-form-group' ] } >
288+ < label
289+ className = { styles [ 'form-input-label' ] }
290+ htmlFor = "authorizer-sign-up-family-name"
291+ >
292+ < span > * </ span > Last Name
293+ </ label >
294+ < input
295+ name = "family_name"
296+ id = "authorizer-sign-up-family-name"
297+ className = { `${ styles [ 'form-input-field' ] } ${
298+ errorData . family_name ? styles [ 'input-error-content' ] : null
299+ } `}
300+ placeholder = "eg. Doe"
301+ type = "text"
302+ value = { formData . family_name || '' }
303+ onChange = { e => onInputChange ( 'family_name' , e . target . value ) }
304+ />
305+ { errorData . family_name && (
306+ < div className = { styles [ 'form-input-error' ] } >
307+ { errorData . family_name }
308+ </ div >
309+ ) }
310+ </ div >
311+ < div className = { styles [ 'styled-form-group' ] } >
312+ < label
313+ className = { styles [ 'form-input-label' ] }
314+ htmlFor = "authorizer-sign-up-email-or-phone-number"
203315 >
204- < span > * </ span > Email / Phone Number
316+ < span > * </ span >
317+ { getEmailPhoneLabels ( config ) }
205318 </ label >
206319 < input
207- name = "eemail_or_phone_numbermail "
208- id = "authorizer-login -email-or-phone-number"
320+ name = "email_or_phone_number "
321+ id = "authorizer-sign-up -email-or-phone-number"
209322 className = { `${ styles [ 'form-input-field' ] } ${
210323 errorData . email_or_phone_number
211324 ? styles [ 'input-error-content' ]
212325 : null
213326 } `}
214- placeholder = "eg. hello@world.com / +919999999999"
327+ placeholder = { getEmailPhonePlaceholder ( config ) }
215328 type = "text"
216329 value = { formData . email_or_phone_number || '' }
217- onChange = { ( e ) =>
330+ onChange = { e =>
218331 onInputChange ( 'email_or_phone_number' , e . target . value )
219332 }
220333 />
@@ -240,7 +353,7 @@ export const AuthorizerSignup: FC<{
240353 placeholder = "********"
241354 type = "password"
242355 value = { formData . password || '' }
243- onChange = { ( e ) => onInputChange ( 'password' , e . target . value ) }
356+ onChange = { e => onInputChange ( 'password' , e . target . value ) }
244357 />
245358 { errorData . password && (
246359 < div className = { styles [ 'form-input-error' ] } >
@@ -266,7 +379,7 @@ export const AuthorizerSignup: FC<{
266379 placeholder = "********"
267380 type = "password"
268381 value = { formData . confirmPassword || '' }
269- onChange = { ( e ) =>
382+ onChange = { e =>
270383 onInputChange ( 'confirmPassword' , e . target . value )
271384 }
272385 />
@@ -291,9 +404,13 @@ export const AuthorizerSignup: FC<{
291404 disabled = {
292405 loading ||
293406 disableSignupButton ||
407+ ! ! errorData . given_name ||
408+ ! ! errorData . family_name ||
294409 ! ! errorData . email_or_phone_number ||
295410 ! ! errorData . password ||
296411 ! ! errorData . confirmPassword ||
412+ ! formData . given_name ||
413+ ! formData . family_name ||
297414 ! formData . email_or_phone_number ||
298415 ! formData . password ||
299416 ! formData . confirmPassword
0 commit comments