@eka-care/abha-stg 0.1.34 → 0.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +369 -101
  2. package/{dist/index.html → index.html} +1 -2
  3. package/package/styles/pds2/border.ts +69 -0
  4. package/package/styles/pds2/colors.ts +70 -0
  5. package/package/styles/pds2/spacing.ts +1007 -0
  6. package/package/tailwind/tailwind.config.ts +124 -0
  7. package/package.json +9 -8
  8. package/postcss.config.js +6 -0
  9. package/scripts/build-purged-css.cjs +70 -0
  10. package/src/App.css +0 -0
  11. package/src/App.tsx +43 -0
  12. package/src/api-queries/aorta-go/v3/get-profile-patient.ts +32 -0
  13. package/src/api-queries/aorta-go/v3/get-profiles-phr-user.ts +26 -0
  14. package/src/api-queries/aorta-go/v3/post-auth-init-v2.ts +34 -0
  15. package/src/api-queries/aorta-go/v3/post-auth-logout-v2.ts +32 -0
  16. package/src/api-queries/aorta-go/v3/post-auth-verify-v2.ts +38 -0
  17. package/src/api-queries/aorta-go/v3/post-profile-switch.ts +39 -0
  18. package/src/api-queries/ndhm/get-abdm-register-suggest.ts +37 -0
  19. package/src/api-queries/ndhm/get-pincode-details.ts +28 -0
  20. package/src/api-queries/ndhm/post-abdm-login-init.ts +37 -0
  21. package/src/api-queries/ndhm/post-abdm-login-phr.ts +37 -0
  22. package/src/api-queries/ndhm/post-abdm-login-verify.ts +37 -0
  23. package/src/api-queries/ndhm/post-abdm-profile-eka-link-phr.ts +40 -0
  24. package/src/api-queries/ndhm/post-abdm-profile-eka.ts +66 -0
  25. package/src/api-queries/ndhm/post-abdm-register-abha-number-create-phr.ts +37 -0
  26. package/src/api-queries/ndhm/post-abdm-register-mobile-create-phr.ts +66 -0
  27. package/src/api-queries/ndhm/post-abdm-register-mobile-resend-otp.ts +32 -0
  28. package/src/api-queries/ndhm/post-abdm-register-mobile-verify.ts +38 -0
  29. package/src/api-queries/ndhm/post-abdm-register-phr-check.ts +34 -0
  30. package/src/api-queries/ndhm/post-register-aadhaar-create-phr.ts +37 -0
  31. package/src/api-queries/ndhm/post-register-aadhaar-init.ts +34 -0
  32. package/src/api-queries/ndhm/post-register-aadhaar-mobile-resend-otp.ts +34 -0
  33. package/src/api-queries/ndhm/post-register-aadhaar-mobile-verify.ts +37 -0
  34. package/src/api-queries/ndhm/post-register-aadhaar-resend-otp.ts +34 -0
  35. package/src/api-queries/ndhm/post-register-aadhaar-verify.ts +40 -0
  36. package/src/api-queries/ndhm/post-register-mobile-init.ts +34 -0
  37. package/src/api-queries/use-get-profiles-patient.ts +12 -0
  38. package/src/api-queries/use-get-profiles-phr-user.ts +28 -0
  39. package/src/api-queries/use-post-abdm-login-verify-v1.ts +26 -0
  40. package/src/api-queries/use-post-auth-verify-v2.ts +50 -0
  41. package/src/api-queries/use-post-profile-switch.ts +58 -0
  42. package/src/api-queries/use-post-register-mobile-create-phr.ts +39 -0
  43. package/src/api-queries/user-post-abdm-profile-login-phr.ts +26 -0
  44. package/src/assets/Success.json +1 -0
  45. package/src/assets/react.svg +1 -0
  46. package/src/atoms/button/custom-button.tsx +32 -0
  47. package/src/atoms/button/index.tsx +40 -0
  48. package/src/atoms/button/types.d.ts +31 -0
  49. package/src/atoms/header.tsx +25 -0
  50. package/src/atoms/input-field/index.tsx +63 -0
  51. package/src/atoms/input-field/patient-input-field.tsx +16 -0
  52. package/src/atoms/input-field/types.ts +24 -0
  53. package/src/atoms/pds2-otp-input/index.tsx +35 -0
  54. package/src/atoms/pds2-otp-input/types.d.ts +3 -0
  55. package/src/atoms/single-input-chip/index.tsx +32 -0
  56. package/src/atoms/single-input-chip/types.ts +6 -0
  57. package/src/atoms/spinner.tsx +33 -0
  58. package/src/atoms/text-separator.tsx +11 -0
  59. package/src/atoms/ui/spinner.tsx +75 -0
  60. package/src/constants/constants.ts +376 -0
  61. package/src/fetch-client/index.ts +164 -0
  62. package/src/index.css +152 -0
  63. package/src/main.tsx +374 -0
  64. package/src/molecules/abha/bottom-sheet/bottom-sheet-wrapper.tsx +40 -0
  65. package/src/molecules/abha/bottom-sheet/index.tsx +66 -0
  66. package/src/molecules/abha/spaced-input-component.tsx +168 -0
  67. package/src/molecules/copyright-year.tsx +16 -0
  68. package/src/molecules/exit-popup/index.tsx +101 -0
  69. package/src/molecules/pds2-otp-component/index.tsx +147 -0
  70. package/src/organisms/abha/abha-header.tsx +25 -0
  71. package/src/organisms/abha/abha-stepper.tsx +83 -0
  72. package/src/organisms/abha/error-bottom-sheet.tsx +27 -0
  73. package/src/organisms/abha/otp-card.tsx +99 -0
  74. package/src/organisms/abha/verification-status.tsx +30 -0
  75. package/src/organisms/choose-language/choose-language.tsx +53 -0
  76. package/src/organisms/choose-language/types.ts +10 -0
  77. package/src/organisms/screen-switcher/screen-switcher.tsx +80 -0
  78. package/src/routes/abha-aadhaar-verification-status-screen.tsx +246 -0
  79. package/src/routes/abha-created-screen.tsx +45 -0
  80. package/src/routes/abha-login-otp-verify-screen.tsx +519 -0
  81. package/src/routes/abha-mobile-linking-status-screen.tsx +267 -0
  82. package/src/routes/abha-otp-and-mobile-screen.tsx +435 -0
  83. package/src/routes/abha-phone-number-verification-screen.tsx +388 -0
  84. package/src/routes/create-abha-address-screen.tsx +928 -0
  85. package/src/routes/create-abha-with-aadhaar-screen.tsx +986 -0
  86. package/src/routes/create-eka-profile-screen.tsx +831 -0
  87. package/src/routes/get-all-profiles-screen.tsx +161 -0
  88. package/src/routes/login-or-create-abha-address-screen.tsx +1056 -0
  89. package/src/routes/login-with-abha-screen.tsx +454 -0
  90. package/src/routes/select-abha-from-list-screen.tsx +792 -0
  91. package/src/routes/select-eka-profile-screen.tsx +446 -0
  92. package/src/routes/utils/trackAbhaEvent.ts +41 -0
  93. package/src/stores/auth-abha-store/index.ts +152 -0
  94. package/src/stores/auth-abha-store/types.ts +217 -0
  95. package/src/utils/mock-auth-response.ts +29 -0
  96. package/src/utils/send-event-utils.ts +76 -0
  97. package/src/utils/validations.ts +89 -0
  98. package/src/vite-env.d.ts +1 -0
  99. package/tailwind.config.ts +9 -0
  100. package/tsconfig.json +25 -0
  101. package/tsconfig.node.json +10 -0
  102. package/tsconfig.node.tsbuildinfo +1 -0
  103. package/tsconfig.tsbuildinfo +1 -0
  104. package/vite.config.d.ts +2 -0
  105. package/vite.config.js +30 -0
  106. package/vite.config.ts +35 -0
  107. package/dist/sdk/abha/css/abha.css +0 -1
  108. package/dist/sdk/abha/js/abha.js +0 -146
  109. /package/{dist → public}/images/adhaar.webp +0 -0
  110. /package/{dist → public}/images/at-the-rate.webp +0 -0
  111. /package/{dist → public}/images/avatar.webp +0 -0
  112. /package/{dist → public}/images/ayushman-bharat.webp +0 -0
  113. /package/{dist → public}/images/circle-checkmark.webp +0 -0
  114. /package/{dist → public}/images/link-abha.webp +0 -0
  115. /package/{dist → public}/images/national-authority.webp +0 -0
  116. /package/{dist → public}/images/three-dots.webp +0 -0
@@ -0,0 +1,454 @@
1
+ import { ChevronDownRegularIcon, PhoneSolidIcon, ArrowLeftRegularIcon } from '@eka-care/icons';
2
+ import {
3
+ ABHA_AUTH_FLOW_METHOD,
4
+ AUTH_METHOD,
5
+ LOADING_STATE,
6
+ REGISTRATION_TYPE,
7
+ } from '../constants/constants';
8
+ import React, { useCallback, useEffect, useState } from 'react';
9
+ import Pds2Button from '../atoms/button';
10
+ import Pds2Header from '../atoms/header';
11
+ import Pds2CustomButton from '../atoms/button/custom-button';
12
+ import Pds2InputField from '../atoms/input-field';
13
+ import TextSeparator from '../atoms/text-separator';
14
+ import SpacedInputComponent from '../molecules/abha/spaced-input-component';
15
+ import useAuthAbhaStore from '../stores/auth-abha-store';
16
+ import { SCREEN_NAMES } from '../stores/auth-abha-store/types';
17
+ import AbhaErrorBottomSheet from '../organisms/abha/error-bottom-sheet';
18
+ import { unMount } from '../main';
19
+ import AbhaStepper from '../organisms/abha/abha-stepper';
20
+ import handleSendEvent from '../utils/send-event-utils';
21
+ import postAbdmLoginInit from '../api-queries/ndhm/post-abdm-login-init';
22
+ import postAuthInitV2 from '../api-queries/aorta-go/v3/post-auth-init-v2';
23
+ import postAuthLogoutV2 from '../api-queries/aorta-go/v3/post-auth-logout-v2';
24
+
25
+ const isProd = import.meta.env.VITE_APP_ENV === 'PROD';
26
+
27
+ const LoginWithAbhaScreen = () => {
28
+ const setAbhaAuthFlowMethod = useAuthAbhaStore((state) => state.setAbhaAuthFlowMethod);
29
+ const clientId = useAuthAbhaStore((state) => state.clientId);
30
+ const clearAbhaAuthStore = useAuthAbhaStore((state) => state.clearAbhaAuthStore);
31
+ useEffect(() => {
32
+ handleSendEvent({
33
+ eventName: 'page_view',
34
+ eventData: {
35
+ page_view: 'abha_login_screen',
36
+ platform: clientId,
37
+ },
38
+ });
39
+
40
+ // mobile number as default method
41
+ setAbhaAuthFlowMethod(ABHA_AUTH_FLOW_METHOD.MOBILE);
42
+
43
+ if (window.EkaAbha?.changeStatusBarColor) {
44
+ window.EkaAbha.changeStatusBarColor('#F2F4F7');
45
+ return () => {
46
+ if (window.EkaAbha?.changeStatusBarColor) window?.EkaAbha?.changeStatusBarColor('#FFFFFF');
47
+ };
48
+ }
49
+ }, []);
50
+
51
+ const handleBackButtonClick = () => {
52
+ window.EkaAbha?.onAbhaClose();
53
+ const is_new_login_flow = useAuthAbhaStore.getState().isNewLoginOrCreateFlow;
54
+ clearAbhaAuthStore();
55
+ useAuthAbhaStore.setState({ isNewLoginOrCreateFlow: is_new_login_flow });
56
+ unMount();
57
+ };
58
+
59
+ const hideBackButtonFor = ['eka-web', 'phr'];
60
+
61
+ return (
62
+ <div className="pds2-bg-bg-white pds2-h-full">
63
+ {/* * if clientId is eka-web or phr, do not show back button */}
64
+ {!hideBackButtonFor.includes(clientId) && (
65
+ <Pds2Header
66
+ prefixIcon={
67
+ <button onClick={handleBackButtonClick}>
68
+ <ArrowLeftRegularIcon />
69
+ </button>
70
+ }
71
+ title=""
72
+ className="pds2-bg-bg-01"
73
+ />
74
+ )}
75
+ <AbhaStepper/>
76
+ <LoginWithDifferentMethods />
77
+ <OtherLoginMethods />
78
+ </div>
79
+ );
80
+ };
81
+
82
+ export default LoginWithAbhaScreen;
83
+
84
+ export const OtherLoginMethods = () => {
85
+ const setAbhaAuthFlowMethod = useAuthAbhaStore((state) => state.setAbhaAuthFlowMethod);
86
+ const selectedMethod = useAuthAbhaStore((state) => state.abhaAuthFlowMethod);
87
+
88
+ const loginMethods = [
89
+ {
90
+ method: ABHA_AUTH_FLOW_METHOD.ABHA_NUMBER,
91
+ title: 'ABHA Number',
92
+ icon: (
93
+ <img
94
+ src="https://cdn.eka.care/vagus/cm4ml1lwu00000tfs1okl7hs9.webp"
95
+ alt="ABHA Number Icon"
96
+ className="pds2-h-24 pds2-w-24"
97
+ loading="lazy"
98
+ />
99
+ ),
100
+ },
101
+ {
102
+ method: ABHA_AUTH_FLOW_METHOD.PHR_ADDRESS,
103
+ title: 'ABHA Address',
104
+ icon: (
105
+ <img
106
+ src="https://cdn.eka.care/vagus/cm4ml1lwu00000tfs1okl7hs9.webp"
107
+ alt="ABHA Address Icon"
108
+ className="pds2-h-24 pds2-w-24"
109
+ loading="lazy"
110
+ />
111
+ ),
112
+ },
113
+ {
114
+ method: ABHA_AUTH_FLOW_METHOD.AADHAR_NUMBER,
115
+ title: 'Aadhaar Number',
116
+ icon: (
117
+ <img
118
+ src="https://cdn.eka.care/vagus/cm5mcdm3h00070tfs9fjkepff.webp"
119
+ alt="Aadhaar Number Icon"
120
+ className="pds2-h-24 pds2-w-24"
121
+ loading="lazy"
122
+ />
123
+ ),
124
+ },
125
+ {
126
+ method: ABHA_AUTH_FLOW_METHOD.MOBILE,
127
+ title: 'Mobile Number',
128
+ icon: <PhoneSolidIcon className="pds2-w-20 pds2-h-20 pds2-text-icon-success-02" />,
129
+ },
130
+ ];
131
+
132
+ return (
133
+ <div className="pds2-p-16 pds2-space-y-16">
134
+ <TextSeparator title="Other login options for ABHA" />
135
+ <div className="pds2-space-y-16">
136
+ {loginMethods
137
+ .filter((item) => item.method !== selectedMethod)
138
+ .map((item) => (
139
+ <Pds2CustomButton
140
+ key={item.method}
141
+ prefixIcon={item.icon}
142
+ title={item.title}
143
+ suffixIcon={
144
+ <ChevronDownRegularIcon
145
+ className="pds2-ml-auto pds2-h-16 pds2-w-16 pds2-text-text-04 -pds2-rotate-90"
146
+ aria-hidden="true"
147
+ />
148
+ }
149
+ onClick={() => setAbhaAuthFlowMethod(item.method)}
150
+ />
151
+ ))}
152
+ </div>
153
+ </div>
154
+ );
155
+ };
156
+
157
+ const LoginWithDifferentMethods = () => {
158
+ const setScreen = useAuthAbhaStore((state) => state.setScreen);
159
+ const selectedMethod = useAuthAbhaStore(
160
+ (state) => state.abhaAuthFlowMethod || ABHA_AUTH_FLOW_METHOD.MOBILE
161
+ );
162
+
163
+ const setRegistrationType = useAuthAbhaStore((state) => state.setRegistrationType);
164
+ const setAadhaarInitResponse = useAuthAbhaStore((state) => state.setAadhaarInitResponse);
165
+ const [identifierValue, setIdentifierValue] = useState<string>('');
166
+ const [error, setError] = useState<string | null>('');
167
+ const [abdmLoginInitApiStatus, setAbdmLoginInitApiStatus] = useState<LOADING_STATE>(
168
+ LOADING_STATE.IDLE
169
+ );
170
+ const setLoginIdentifierValue = useAuthAbhaStore((state) => state.setLoginIdentifierValue);
171
+ const setSelectedAbhaAddress = useAuthAbhaStore((state) => state.setSelectedAbhaAddress);
172
+ const [isValidMobileNumber, setIsValidMobileNumber] = useState<boolean>(false);
173
+ const initAbhaAppMobileNumber = useAuthAbhaStore((state) => state.initAbhaAppMobileNumber);
174
+ const setBottomsheetErrorInfo = useAuthAbhaStore((state) => state.setBottomsheetErrorInfo);
175
+ const [errorActionValue, setErrorAction] = React.useState<any>(null);
176
+ const [mobileNumber, setMobileNumber] = useState('');
177
+ const clientId = useAuthAbhaStore((state) => state.clientId);
178
+ const isEkaAppLogin = useAuthAbhaStore((state) => state.isEkaAppLogin);
179
+
180
+ useEffect(() => {
181
+ // if the mobile has a valid data and the selected method is mobile, then set the mobile number
182
+ if (!!initAbhaAppMobileNumber && selectedMethod === ABHA_AUTH_FLOW_METHOD.MOBILE) {
183
+ setIdentifierValue(initAbhaAppMobileNumber);
184
+ setIsValidMobileNumber(initAbhaAppMobileNumber.length === 10);
185
+ setError(null);
186
+ return;
187
+ }
188
+
189
+ setIdentifierValue('');
190
+ setError(null);
191
+ setIsValidMobileNumber(false);
192
+ }, [selectedMethod]);
193
+
194
+ const handleIdentifierValueChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {
195
+ error && setError(null);
196
+ const val = e.target.value;
197
+
198
+ switch (selectedMethod) {
199
+ case ABHA_AUTH_FLOW_METHOD.PHR_ADDRESS:
200
+ if (val.length > 20) return;
201
+ break;
202
+
203
+ case ABHA_AUTH_FLOW_METHOD.MOBILE:
204
+ if ((val && !/^[0-9]+$/.test(val)) || val.length > 10) return;
205
+ break;
206
+
207
+ case ABHA_AUTH_FLOW_METHOD.ABHA_NUMBER:
208
+ if (!/^[\d-]*$/.test(val) || val.length > 17) return;
209
+ break;
210
+
211
+ case ABHA_AUTH_FLOW_METHOD.AADHAR_NUMBER:
212
+ if ((val && !/^[0-9]+$/.test(val)) || val.length > 12) return;
213
+ break;
214
+ }
215
+
216
+ if (selectedMethod === ABHA_AUTH_FLOW_METHOD.ABHA_NUMBER) {
217
+ const value = e.target.value.replace(/-/g, '');
218
+ let abhaNumber = '';
219
+ if (value.length > 0) abhaNumber += value.slice(0, 2);
220
+ if (value.length > 2) abhaNumber += `-${value.slice(2, 6)}`;
221
+ if (value.length > 6) abhaNumber += `-${value.slice(6, 10)}`;
222
+ if (value.length > 10) abhaNumber += `-${value.slice(10, 14)}`;
223
+ setIdentifierValue(abhaNumber);
224
+ } else setIdentifierValue(val.trim());
225
+ };
226
+
227
+ const handleOnAadhaarInputComplete = ({ inputVal: newAadhaarNo }: { inputVal: string }) => {
228
+ if (error) setError(null);
229
+
230
+ if (newAadhaarNo.length === 12) {
231
+ setIdentifierValue(newAadhaarNo);
232
+ }
233
+ };
234
+
235
+ const renderIdentifierInput = useCallback(() => {
236
+ const isMobileNonEditable =
237
+ selectedMethod === ABHA_AUTH_FLOW_METHOD.MOBILE && !!initAbhaAppMobileNumber;
238
+
239
+ if (selectedMethod === ABHA_AUTH_FLOW_METHOD.AADHAR_NUMBER) {
240
+ return (
241
+ <SpacedInputComponent
242
+ numberOfInputs={3}
243
+ length={4}
244
+ placeholder="XXXX"
245
+ onSubmit={handleOnAadhaarInputComplete}
246
+ />
247
+ );
248
+ }
249
+
250
+ const inputProps = {
251
+ value: identifierValue,
252
+ onChange: handleIdentifierValueChange,
253
+ ...(selectedMethod === ABHA_AUTH_FLOW_METHOD.MOBILE && {
254
+ type: 'tel',
255
+ placeholder: 'Mobile Number',
256
+ disabled: isMobileNonEditable,
257
+ PrefixComponent: (
258
+ <div className="pds2-flex pds2-items-center pds2-gap-x-8 pds2-border-r pds2-border-border-brand-02 pds2-pr-24">
259
+ <img
260
+ src="https://cdn.eka.care/vagus/cm4mlct2900000tg98p8u967s.webp"
261
+ alt="India Flag"
262
+ className="pds2-w-24 pds2-h-24"
263
+ />
264
+ <span className="pds2-text-text-black">+91</span>
265
+ </div>
266
+ ),
267
+ }),
268
+ ...(selectedMethod === ABHA_AUTH_FLOW_METHOD.ABHA_NUMBER && {
269
+ placeholder: '00-0000-0000-0000',
270
+ padding: 'pds2-p-18',
271
+ textStyle: 'Body2Regular pds2-text-center pds2-text-lg',
272
+ borderStyle: 'focus-within:pds2-border-border-brand-01',
273
+ type: 'tel',
274
+ }),
275
+ ...(selectedMethod === ABHA_AUTH_FLOW_METHOD.PHR_ADDRESS && {
276
+ placeholder: 'Enter ABHA Address',
277
+ }),
278
+ };
279
+
280
+ return <Pds2InputField {...inputProps} />;
281
+ }, [selectedMethod, identifierValue, error]);
282
+
283
+ const handleSubmitClick = (action = errorActionValue) => {
284
+ if (action) {
285
+ useAuthAbhaStore.setState({ isLoggedInFromRedirect: true });
286
+ setMobileNumber(identifierValue);
287
+ useAuthAbhaStore.setState({ initAbhaAppMobileNumber: identifierValue });
288
+ useAuthAbhaStore.setState({ abhaAuthFlowMethod: ABHA_AUTH_FLOW_METHOD.MOBILE });
289
+ setScreen(SCREEN_NAMES.CREATE_ABHA_WITH_AADHAAR);
290
+ setBottomsheetErrorInfo(null);
291
+ }
292
+ };
293
+
294
+ const handleNextClick = async () => {
295
+ setAbdmLoginInitApiStatus(LOADING_STATE.LOADING);
296
+ let authTxnId = '';
297
+ // if the trigger is not from eka app, then call the auth init api to get the txnId
298
+ if (!isEkaAppLogin) {
299
+ const { txn_id: txnId, error } = await postAuthInitV2({
300
+ method: AUTH_METHOD.ABHA,
301
+ });
302
+ if (!txnId || error) {
303
+ setError(error?.message || 'Something went wrong. Please try again.');
304
+ setAbdmLoginInitApiStatus(LOADING_STATE.REJECTED);
305
+ return;
306
+ }
307
+
308
+ authTxnId = txnId;
309
+ console.log('triggering logout api in login with abha screen');
310
+ // call the auth logout api
311
+ await postAuthLogoutV2();
312
+ }
313
+
314
+ setRegistrationType(REGISTRATION_TYPE.LOGIN); // set the registration type to login, since it is login flow
315
+
316
+ const loginIdentifier =
317
+ selectedMethod === ABHA_AUTH_FLOW_METHOD.PHR_ADDRESS
318
+ ? `${identifierValue}${isProd ? '@abdm' : '@sbx'}`
319
+ : identifierValue;
320
+
321
+ console.log('loginIdentifier', loginIdentifier);
322
+
323
+ const {
324
+ txn_id: abdmTxnId,
325
+ error: abdmLoginError,
326
+ action: errorAction,
327
+ hint,
328
+ } = await postAbdmLoginInit({
329
+ method: selectedMethod,
330
+ identifier: loginIdentifier,
331
+ });
332
+
333
+ console.log('after postAbdmLoginInit', errorAction);
334
+ console.log('after postAbdmLoginInit', errorAction);
335
+
336
+ if (errorAction) {
337
+ setErrorAction(errorAction);
338
+ setBottomsheetErrorInfo(errorAction);
339
+ return;
340
+ }
341
+
342
+ if (abdmLoginError) {
343
+ setError(abdmLoginError || 'Something went wrong. Please try again.');
344
+ setAbdmLoginInitApiStatus(LOADING_STATE.REJECTED);
345
+ return;
346
+ }
347
+
348
+ if (!abdmTxnId) {
349
+ setError('Something went wrong. Please try again.');
350
+ setAbdmLoginInitApiStatus(LOADING_STATE.REJECTED);
351
+ return;
352
+ }
353
+
354
+ if (selectedMethod === ABHA_AUTH_FLOW_METHOD.PHR_ADDRESS)
355
+ setSelectedAbhaAddress(loginIdentifier);
356
+
357
+ setAadhaarInitResponse({
358
+ authTxnId,
359
+ txnId: abdmTxnId,
360
+ aadhaarOtpSentToHint: hint || null,
361
+ });
362
+ setLoginIdentifierValue(loginIdentifier);
363
+ setAbdmLoginInitApiStatus(LOADING_STATE.RESOLVED);
364
+ handleSendEvent({
365
+ eventName: 'abha_login_submitted',
366
+ eventData: {
367
+ type: 'next',
368
+ platform: clientId,
369
+ },
370
+ });
371
+ setScreen(SCREEN_NAMES.VERIFY_OTP_LOGIN_WITH_ABHA);
372
+ };
373
+
374
+ const isValid = React.useMemo(() => {
375
+ switch (selectedMethod) {
376
+ case ABHA_AUTH_FLOW_METHOD.PHR_ADDRESS:
377
+ return identifierValue.length >= 4 && identifierValue.length <= 20; // changing the lower limit to 4, since the address can be as short as 4 characters
378
+ case ABHA_AUTH_FLOW_METHOD.MOBILE:
379
+ return identifierValue.length === 10;
380
+ case ABHA_AUTH_FLOW_METHOD.ABHA_NUMBER:
381
+ return identifierValue.length === 17;
382
+ case ABHA_AUTH_FLOW_METHOD.AADHAR_NUMBER:
383
+ return identifierValue.length === 12;
384
+ }
385
+ }, [selectedMethod, identifierValue]);
386
+
387
+ const methodText = React.useMemo(() => {
388
+ switch (selectedMethod) {
389
+ case ABHA_AUTH_FLOW_METHOD.ABHA_NUMBER:
390
+ return 'Enter your ABHA Number';
391
+ case ABHA_AUTH_FLOW_METHOD.PHR_ADDRESS:
392
+ return 'Enter your ABHA Address';
393
+ case ABHA_AUTH_FLOW_METHOD.MOBILE:
394
+ return 'Enter your Mobile Number';
395
+ case ABHA_AUTH_FLOW_METHOD.AADHAR_NUMBER:
396
+ return 'Enter your Aadhaar Number';
397
+ default:
398
+ return 'Enter your ABHA Number';
399
+ }
400
+ }, [selectedMethod]);
401
+
402
+ return (
403
+ <>
404
+ <div className="pds2-p-16 pds2-bg-bg-01 pds2-space-y-12 pds2-text-center pds2-rounded-b-24">
405
+ <div className="pds2-flex pds2-justify-center pds2-items-center pds2-gap-16">
406
+ {/* <EkaCarePatientIcon /> */}
407
+ <div className="pds2-bg-bg-white pds2-rounded-16">
408
+ <img
409
+ src="https://cdn.eka.care/vagus/cm4ml1lwu00000tfs1okl7hs9.webp"
410
+ alt="abha"
411
+ className="pds2-w-64 pds2-h-64"
412
+ />
413
+ </div>
414
+ </div>
415
+ <div className="Heading3Semibold pds2-text-text-black">Log in With ABHA</div>
416
+ <div className="pds2-text-text-black pds2-mt-2">{methodText}</div>
417
+ <div className="pds2-space-y-12">
418
+ <div className="pds2-relative">
419
+ {renderIdentifierInput()}
420
+ {selectedMethod === ABHA_AUTH_FLOW_METHOD.PHR_ADDRESS && (
421
+ <div className="pds2-absolute pds2-right-16 pds2-top-16 Body1Regular pds2-text-text-03">
422
+ {isProd ? '@abdm' : '@sbx'}
423
+ </div>
424
+ )}
425
+ </div>
426
+ </div>
427
+ {error && <div className="pds2-text-text-error Body3Regular">{error}</div>}
428
+ <Pds2Button
429
+ title="Next"
430
+ IconComponent={() => (
431
+ <ChevronDownRegularIcon className="pds2-w-16 pds2-h-16 -pds2-rotate-90 pds2-ml-8" />
432
+ )}
433
+ state={!isValid || !isValidMobileNumber || abdmLoginInitApiStatus === LOADING_STATE.LOADING ? 'disabled' : 'enabled'}
434
+ isLoading={abdmLoginInitApiStatus === LOADING_STATE.LOADING}
435
+ onClick={handleNextClick}
436
+ className="pds2-w-full"
437
+ />
438
+ <div className="pds2-flex pds2-flex-row pds2-justify-center pds2-items-center pds2-bg-bg-white pds2-w-fit pds2-px-12 pds2-bg-opacity-60 pds2-rounded-12 pds2-mx-auto">
439
+ <div className="pds2-text-text-04 Body3Regular">Don’t have ABHA?</div>
440
+ <Pds2CustomButton
441
+ className="pds2-text-text-brand Body3Semibold pds2-pl-4 pds2-pr-0 pds2-py-4 ripple pds2-border-none pds2-bg-transparent"
442
+ width="pds2-w-fit"
443
+ title="Register Now"
444
+ onClick={() => {
445
+ setScreen(SCREEN_NAMES.CREATE_ABHA_WITH_AADHAAR);
446
+ }}
447
+ />
448
+ </div>
449
+ </div>
450
+
451
+ <AbhaErrorBottomSheet onSubmitClick={handleSubmitClick} />
452
+ </>
453
+ );
454
+ };