Skip to content

Commit ae54872

Browse files
committed
Allow fname & lname & fix labels
1 parent a5c2a16 commit ae54872

File tree

5 files changed

+151
-33
lines changed

5 files changed

+151
-33
lines changed

src/components/AuthorizerBasicAuthLogin.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { Message } from './Message';
1111
import { AuthorizerVerifyOtp } from './AuthorizerVerifyOtp';
1212
import { OtpDataType, TotpDataType } from '../types';
1313
import { AuthorizerTOTPScanner } from './AuthorizerTOTPScanner';
14+
import { getEmailPhoneLabels, getEmailPhonePlaceholder } from '../utils/labels';
1415

1516
const initOtpData: OtpDataType = {
1617
is_screen_visible: false,
@@ -232,7 +233,8 @@ export const AuthorizerBasicAuthLogin: FC<{
232233
className={styles['form-input-label']}
233234
htmlFor="authorizer-login-email"
234235
>
235-
<span>* </span>Email / Phone Number
236+
<span>* </span>
237+
{getEmailPhoneLabels(config)}
236238
</label>
237239
<input
238240
name="email_or_phone_number"
@@ -242,7 +244,7 @@ export const AuthorizerBasicAuthLogin: FC<{
242244
? styles['input-error-content']
243245
: null
244246
}`}
245-
placeholder="eg. [email protected] / +919999999999"
247+
placeholder={getEmailPhonePlaceholder(config)}
246248
type="text"
247249
value={formData.email_or_phone_number || ''}
248250
onChange={e =>

src/components/AuthorizerForgotPassword.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { formatErrorMessage } from '../utils/format';
1010
import { Message } from './Message';
1111
import { OtpDataType } from '../types';
1212
import { AuthorizerResetPassword } from './AuthorizerResetPassword';
13+
import { getEmailPhoneLabels, getEmailPhonePlaceholder } from '../utils/labels';
1314

1415
interface InputDataType {
1516
email_or_phone_number: string | null;
@@ -145,8 +146,8 @@ export const AuthorizerForgotPassword: FC<{
145146
<Message type={MessageType.Error} text={error} onClose={onErrorClose} />
146147
)}
147148
<p style={{ textAlign: 'center', margin: '10px 0px' }}>
148-
Please enter your email address.
149-
<br /> We will send you an email to reset your password.
149+
Please enter your {getEmailPhoneLabels(config)}.
150+
<br /> We will send you an email / otp to reset your password.
150151
</p>
151152
<br />
152153
<form onSubmit={onSubmit} name="authorizer-forgot-password-form">
@@ -155,7 +156,8 @@ export const AuthorizerForgotPassword: FC<{
155156
className={styles['form-input-label']}
156157
htmlFor="authorizer-forgot-password-email-or-phone-number"
157158
>
158-
<span>* </span>Email / Phone Number
159+
<span>* </span>
160+
{getEmailPhoneLabels(config)}
159161
</label>
160162
<input
161163
name="email_or_phone_number"
@@ -165,10 +167,10 @@ export const AuthorizerForgotPassword: FC<{
165167
? styles['input-error-content']
166168
: null
167169
}`}
168-
placeholder="eg. [email protected] / +919999999999"
170+
placeholder={getEmailPhonePlaceholder(config)}
169171
type="text"
170172
value={formData.email_or_phone_number || ''}
171-
onChange={(e) =>
173+
onChange={e =>
172174
onInputChange('email_or_phone_number', e.target.value)
173175
}
174176
/>

src/components/AuthorizerSignup.tsx

Lines changed: 83 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ import { Message } from './Message';
1212
import PasswordStrengthIndicator from './PasswordStrengthIndicator';
1313
import { OtpDataType } from '../types';
1414
import { AuthorizerVerifyOtp } from './AuthorizerVerifyOtp';
15+
import { getEmailPhoneLabels, getEmailPhonePlaceholder } from '../utils/labels';
1516

1617
interface InputDataType {
18+
given_name: string | null;
19+
family_name: string | null;
1720
email_or_phone_number: string | null;
1821
password: string | null;
1922
confirmPassword: string | null;
@@ -36,11 +39,15 @@ export const AuthorizerSignup: FC<{
3639
const [otpData, setOtpData] = useState<OtpDataType>({ ...initOtpData });
3740
const [successMessage, setSuccessMessage] = useState(``);
3841
const [formData, setFormData] = useState<InputDataType>({
42+
given_name: null,
43+
family_name: null,
3944
email_or_phone_number: null,
4045
password: null,
4146
confirmPassword: null,
4247
});
4348
const [errorData, setErrorData] = useState<InputDataType>({
49+
given_name: null,
50+
family_name: null,
4451
email_or_phone_number: null,
4552
password: null,
4653
confirmPassword: null,
@@ -76,6 +83,8 @@ export const AuthorizerSignup: FC<{
7683
const data: SignupInput = {
7784
email: email,
7885
phone_number: phone_number,
86+
given_name: formData.given_name || '',
87+
family_name: formData.family_name || '',
7988
password: formData.password || '',
8089
confirm_password: formData.confirmPassword || '',
8190
};
@@ -146,6 +155,22 @@ export const AuthorizerSignup: FC<{
146155
setError(``);
147156
};
148157

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+
149174
useEffect(() => {
150175
if (formData.email_or_phone_number === '') {
151176
setErrorData({
@@ -238,19 +263,68 @@ export const AuthorizerSignup: FC<{
238263
<div className={styles['styled-form-group']}>
239264
<label
240265
className={styles['form-input-label']}
241-
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"
242315
>
243-
<span>* </span>Email / Phone Number
316+
<span>* </span>
317+
{getEmailPhoneLabels(config)}
244318
</label>
245319
<input
246-
name="eemail_or_phone_numbermail"
247-
id="authorizer-login-email-or-phone-number"
320+
name="email_or_phone_number"
321+
id="authorizer-sign-up-email-or-phone-number"
248322
className={`${styles['form-input-field']} ${
249323
errorData.email_or_phone_number
250324
? styles['input-error-content']
251325
: null
252326
}`}
253-
placeholder="eg. [email protected] / +919999999999"
327+
placeholder={getEmailPhonePlaceholder(config)}
254328
type="text"
255329
value={formData.email_or_phone_number || ''}
256330
onChange={e =>
@@ -330,9 +404,13 @@ export const AuthorizerSignup: FC<{
330404
disabled={
331405
loading ||
332406
disableSignupButton ||
407+
!!errorData.given_name ||
408+
!!errorData.family_name ||
333409
!!errorData.email_or_phone_number ||
334410
!!errorData.password ||
335411
!!errorData.confirmPassword ||
412+
!formData.given_name ||
413+
!formData.family_name ||
336414
!formData.email_or_phone_number ||
337415
!formData.password ||
338416
!formData.confirmPassword

src/types/index.ts

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
11
import { AuthToken, User, Authorizer } from '@authorizerdev/authorizer-js';
22
import { AuthorizerProviderActionType } from '../constants';
33

4+
export type AuthorizerConfig = {
5+
authorizerURL: string;
6+
redirectURL: string;
7+
client_id: string;
8+
is_google_login_enabled: boolean;
9+
is_github_login_enabled: boolean;
10+
is_facebook_login_enabled: boolean;
11+
is_linkedin_login_enabled: boolean;
12+
is_apple_login_enabled: boolean;
13+
is_twitter_login_enabled: boolean;
14+
is_microsoft_login_enabled: boolean;
15+
is_twitch_login_enabled: boolean;
16+
is_email_verification_enabled: boolean;
17+
is_basic_authentication_enabled: boolean;
18+
is_magic_link_login_enabled: boolean;
19+
is_sign_up_enabled: boolean;
20+
is_strong_password_enabled: boolean;
21+
is_multi_factor_auth_enabled: boolean;
22+
is_mobile_basic_authentication_enabled: boolean;
23+
is_phone_verification_enabled: boolean;
24+
};
25+
426
export type AuthorizerState = {
527
user: User | null;
628
token: AuthToken | null;
729
loading: boolean;
8-
config: {
9-
authorizerURL: string;
10-
redirectURL: string;
11-
client_id: string;
12-
is_google_login_enabled: boolean;
13-
is_github_login_enabled: boolean;
14-
is_facebook_login_enabled: boolean;
15-
is_linkedin_login_enabled: boolean;
16-
is_apple_login_enabled: boolean;
17-
is_twitter_login_enabled: boolean;
18-
is_microsoft_login_enabled: boolean;
19-
is_twitch_login_enabled: boolean;
20-
is_email_verification_enabled: boolean;
21-
is_basic_authentication_enabled: boolean;
22-
is_magic_link_login_enabled: boolean;
23-
is_sign_up_enabled: boolean;
24-
is_strong_password_enabled: boolean;
25-
is_multi_factor_auth_enabled: boolean;
26-
is_mobile_basic_authentication_enabled: boolean;
27-
is_phone_verification_enabled: boolean;
28-
};
30+
config: AuthorizerConfig;
2931
};
3032

3133
export type AuthorizerProviderAction = {

src/utils/labels.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { AuthorizerConfig } from '../types';
2+
3+
export const getEmailPhoneLabels = (config: AuthorizerConfig): string => {
4+
const emailLabel = 'Email';
5+
const phoneLabel = 'Phone Number';
6+
if (
7+
config.is_basic_authentication_enabled &&
8+
config.is_mobile_basic_authentication_enabled
9+
) {
10+
return `${emailLabel} / ${phoneLabel}`;
11+
} else if (config.is_basic_authentication_enabled) {
12+
return emailLabel;
13+
} else if (config.is_mobile_basic_authentication_enabled) {
14+
return phoneLabel;
15+
}
16+
return emailLabel;
17+
};
18+
19+
export const getEmailPhonePlaceholder = (config: AuthorizerConfig): string => {
20+
const emailPlaceholder = '[email protected]';
21+
const phonePlaceholder = '+919999999999';
22+
const prefix = 'eg.';
23+
if (
24+
config.is_basic_authentication_enabled &&
25+
config.is_mobile_basic_authentication_enabled
26+
) {
27+
return `${prefix} ${emailPlaceholder} / ${phonePlaceholder}`;
28+
} else if (config.is_basic_authentication_enabled) {
29+
return `${prefix} ${emailPlaceholder}`;
30+
} else if (config.is_mobile_basic_authentication_enabled) {
31+
return `${prefix} ${phonePlaceholder}`;
32+
}
33+
return emailPlaceholder;
34+
};

0 commit comments

Comments
 (0)