@tap-payments/auth-jsconnect 2.9.12-development → 2.9.12-sandbox

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 (43) hide show
  1. package/build/@types/form.d.ts +4 -0
  2. package/build/assets/locales/ar.json +6 -1
  3. package/build/assets/locales/en.json +6 -1
  4. package/build/components/AnimationFlow/BottomSheet.js +3 -3
  5. package/build/components/Input/Input.js +1 -1
  6. package/build/components/Tooltip/Tooltip.js +1 -1
  7. package/build/constants/app.d.ts +7 -0
  8. package/build/constants/app.js +38 -7
  9. package/build/features/app/business/businessStore.d.ts +10 -1
  10. package/build/features/app/business/businessStore.js +113 -9
  11. package/build/features/app/connect/connectStore.d.ts +8 -1
  12. package/build/features/app/connect/connectStore.js +127 -30
  13. package/build/features/app/connectExpress/connectExpressStore.d.ts +8 -1
  14. package/build/features/app/connectExpress/connectExpressStore.js +136 -3
  15. package/build/features/business/screens/MobileOwnership/CollectMobileOwnership.d.ts +3 -0
  16. package/build/features/business/screens/MobileOwnership/CollectMobileOwnership.js +105 -0
  17. package/build/features/business/screens/MobileOwnership/MobileNumber.d.ts +3 -0
  18. package/build/features/business/screens/MobileOwnership/MobileNumber.js +72 -0
  19. package/build/features/business/screens/MobileOwnership/index.d.ts +2 -0
  20. package/build/features/business/screens/MobileOwnership/index.js +2 -0
  21. package/build/features/business/screens/MobileOwnership/validation.d.ts +8 -0
  22. package/build/features/business/screens/MobileOwnership/validation.js +38 -0
  23. package/build/features/connect/screens/MobileOwnership/CollectMobileOwnership.d.ts +3 -0
  24. package/build/features/connect/screens/MobileOwnership/CollectMobileOwnership.js +106 -0
  25. package/build/features/connect/screens/MobileOwnership/MobileNumber.d.ts +3 -0
  26. package/build/features/connect/screens/MobileOwnership/MobileNumber.js +72 -0
  27. package/build/features/connect/screens/MobileOwnership/index.d.ts +2 -0
  28. package/build/features/connect/screens/MobileOwnership/index.js +2 -0
  29. package/build/features/connect/screens/MobileOwnership/validation.d.ts +8 -0
  30. package/build/features/connect/screens/MobileOwnership/validation.js +38 -0
  31. package/build/features/connectExpress/screens/MobileOwnership/CollectMobileOwnership.d.ts +3 -0
  32. package/build/features/connectExpress/screens/MobileOwnership/CollectMobileOwnership.js +108 -0
  33. package/build/features/connectExpress/screens/MobileOwnership/MobileNumber.d.ts +3 -0
  34. package/build/features/connectExpress/screens/MobileOwnership/MobileNumber.js +72 -0
  35. package/build/features/connectExpress/screens/MobileOwnership/index.d.ts +2 -0
  36. package/build/features/connectExpress/screens/MobileOwnership/index.js +2 -0
  37. package/build/features/connectExpress/screens/MobileOwnership/validation.d.ts +8 -0
  38. package/build/features/connectExpress/screens/MobileOwnership/validation.js +38 -0
  39. package/build/features/featuresScreens.js +15 -0
  40. package/build/features/shared/Button/FlowsButtons.js +1 -1
  41. package/build/features/shared/Dialog/DialogContainer.js +3 -3
  42. package/build/utils/common.js +3 -3
  43. package/package.json +2 -2
@@ -71,7 +71,7 @@ import { handleCurrentActiveScreen, handleNextScreenStep, handleSetCountryByIso2
71
71
  import { COLLECT_DOB_INFO_NAFATH, CONNECT_STEP_NAMES, defaultCountry, IDENTIFICATION_TYPE, NAFATH_VERIFICATION_FAILED, OTHER_BRAND } from '../../../constants';
72
72
  import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
73
73
  import { AuthForType, FlowsTypes } from '../../../@types';
74
- import { capitalizeTheFirstLetterOfEachWord, concatenateObjectValues, findCountryByIddPrefix, fixBrandList, isTwitter, getIndividualName, isWebsite, sleep, sendCustomEventToGTM, isOtherThanKWOrSA, isKW, findCountryByIso2, getMetaData } from '../../../utils';
74
+ import { capitalizeTheFirstLetterOfEachWord, concatenateObjectValues, findCountryByIddPrefix, fixBrandList, isTwitter, getIndividualName, isWebsite, sleep, sendCustomEventToGTM, isOtherThanKWOrSA, isKW, findCountryByIso2, getMetaData, isNetworkError } from '../../../utils';
75
75
  export var updateBusinessCountry = createAsyncThunk('connect/updateBusinessCountry', function (countryCode, thunkApi) { return __awaiter(void 0, void 0, void 0, function () {
76
76
  var connect, payload, data;
77
77
  return __generator(this, function (_a) {
@@ -363,7 +363,7 @@ export var verifyPACI = createAsyncThunk('connect/verifyPACI', function (params,
363
363
  });
364
364
  }); });
365
365
  export var verifyNafath = createAsyncThunk('connect/verifyNafath', function (params, thunkApi) { return __awaiter(void 0, void 0, void 0, function () {
366
- var _a, settings, connect, responseBody, expiry, interval, maxCalls, count, authResponse, isSuccess, isFailed, countryCode, lead_id, leadResponse, channels, brand, err_5, brands, err_6, phone, isNextScreenDob, stepName;
366
+ var _a, settings, connect, responseBody, expiry, interval, maxCalls, count, authResponse, error_1, isSuccess, isFailed, countryCode, lead_id, leadResponse, channels, brand, err_5, brands, err_6, phone, isNextScreenDob, stepName;
367
367
  var _b, _c, _d, _e, _f, _g, _h;
368
368
  return __generator(this, function (_j) {
369
369
  switch (_j.label) {
@@ -376,58 +376,70 @@ export var verifyNafath = createAsyncThunk('connect/verifyNafath', function (par
376
376
  count = 1;
377
377
  _j.label = 1;
378
378
  case 1:
379
- if (!(count <= maxCalls)) return [3, 16];
379
+ if (!(count <= maxCalls)) return [3, 19];
380
380
  if (thunkApi.signal.aborted) {
381
- return [3, 16];
381
+ return [3, 19];
382
382
  }
383
- return [4, API.authService.getVerifyAuth(responseBody === null || responseBody === void 0 ? void 0 : responseBody.auth_token)];
383
+ authResponse = void 0;
384
+ _j.label = 2;
384
385
  case 2:
386
+ _j.trys.push([2, 4, , 5]);
387
+ return [4, API.authService.getVerifyAuth(responseBody === null || responseBody === void 0 ? void 0 : responseBody.auth_token)];
388
+ case 3:
385
389
  authResponse = _j.sent();
386
- isSuccess = ((_b = authResponse.status) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'success';
390
+ return [3, 5];
391
+ case 4:
392
+ error_1 = _j.sent();
393
+ if (!isNetworkError(error_1.message)) {
394
+ throw new Error(error_1);
395
+ }
396
+ return [3, 5];
397
+ case 5:
398
+ isSuccess = ((_b = authResponse === null || authResponse === void 0 ? void 0 : authResponse.status) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'success';
387
399
  isFailed = ((_c = authResponse === null || authResponse === void 0 ? void 0 : authResponse.status) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'failed';
388
400
  countryCode = settings.data.businessCountry;
389
401
  if (isFailed) {
390
402
  (_d = params.onFailure) === null || _d === void 0 ? void 0 : _d.call(params);
391
403
  return [2, { authResponse: authResponse, countryCode: countryCode }];
392
404
  }
393
- if (!isSuccess) return [3, 13];
405
+ if (!isSuccess) return [3, 16];
394
406
  lead_id = authResponse.lead_id;
395
407
  if (!lead_id)
396
408
  throw new Error('Lead id is missing');
397
409
  return [4, API.leadService.retrieveLead(lead_id)];
398
- case 3:
410
+ case 6:
399
411
  leadResponse = (_j.sent()).data;
400
412
  if ((_e = leadResponse.errors) === null || _e === void 0 ? void 0 : _e.length)
401
413
  throw new Error(leadResponse.errors[0].description);
402
414
  return [4, API.dataService.getChannelsOfServices({ page: 0 })];
403
- case 4:
415
+ case 7:
404
416
  channels = (_j.sent()).list;
405
417
  leadResponse.channel_list = channels;
406
- _j.label = 5;
407
- case 5:
408
- _j.trys.push([5, 7, , 8]);
418
+ _j.label = 8;
419
+ case 8:
420
+ _j.trys.push([8, 10, , 11]);
409
421
  return [4, API.brandService.retrieveBrand(leadResponse.brand.id)];
410
- case 6:
422
+ case 9:
411
423
  brand = (_j.sent()).brand;
412
424
  leadResponse.brand = __assign(__assign({}, leadResponse.brand), brand);
413
- return [3, 8];
414
- case 7:
425
+ return [3, 11];
426
+ case 10:
415
427
  err_5 = _j.sent();
416
- return [3, 8];
417
- case 8:
418
- _j.trys.push([8, 10, , 11]);
428
+ return [3, 11];
429
+ case 11:
430
+ _j.trys.push([11, 13, , 14]);
419
431
  return [4, API.brandService.getBrandList({ individual_id: leadResponse.individual_id })];
420
- case 9:
432
+ case 12:
421
433
  brands = (_j.sent()).brands;
422
434
  leadResponse.brand_list = fixBrandList(brands, channels);
423
- return [3, 11];
424
- case 10:
435
+ return [3, 14];
436
+ case 13:
425
437
  err_6 = _j.sent();
426
- return [3, 11];
427
- case 11:
438
+ return [3, 14];
439
+ case 14:
428
440
  (_f = params.onSuccess) === null || _f === void 0 ? void 0 : _f.call(params);
429
441
  return [4, sleep(3000)];
430
- case 12:
442
+ case 15:
431
443
  _j.sent();
432
444
  phone = (leadResponse.contact || {}).phone;
433
445
  if (phone === null || phone === void 0 ? void 0 : phone.country_code)
@@ -437,14 +449,14 @@ export var verifyNafath = createAsyncThunk('connect/verifyNafath', function (par
437
449
  stepName = isNextScreenDob ? 'CONNECT_DOB_STEP' : 'CONNECT_INDIVIDUAL_STEP';
438
450
  thunkApi.dispatch(handleNextScreenStep(stepName));
439
451
  return [2, { authResponse: authResponse, leadResponse: leadResponse, countryCode: countryCode, isNextScreenDob: isNextScreenDob }];
440
- case 13: return [4, sleep(interval * 1000)];
441
- case 14:
452
+ case 16: return [4, sleep(interval * 1000)];
453
+ case 17:
442
454
  _j.sent();
443
- _j.label = 15;
444
- case 15:
455
+ _j.label = 18;
456
+ case 18:
445
457
  count++;
446
458
  return [3, 1];
447
- case 16: throw new Error(NAFATH_VERIFICATION_FAILED);
459
+ case 19: throw new Error(NAFATH_VERIFICATION_FAILED);
448
460
  }
449
461
  });
450
462
  }); });
@@ -497,7 +509,12 @@ export var updateLeadIndividual = createAsyncThunk('updateLeadIndividual', funct
497
509
  leadResponse = _g.sent();
498
510
  leadResponse.brand = __assign(__assign({}, leadResponse.brand), brandData);
499
511
  (_f = (_e = settings.data.appConfig).onStepCompleted) === null || _f === void 0 ? void 0 : _f.call(_e, settings.data.activeScreen.name, params);
500
- thunkApi.dispatch(handleNextScreenStep());
512
+ if (leadResponse.step_name === CONNECT_STEP_NAMES.CONNECT_MOBILE_OWNERSHIP) {
513
+ thunkApi.dispatch(handleNextScreenStep('CONNECT_MOBILE_OWNERSHIP'));
514
+ }
515
+ else {
516
+ thunkApi.dispatch(handleNextScreenStep('CONNECT_MERCHANT_INFO_STEP'));
517
+ }
501
518
  return [2, { leadResponse: leadResponse, formData: params }];
502
519
  }
503
520
  });
@@ -678,6 +695,59 @@ export var updateLeadBrandSegment = createAsyncThunk('updateLeadBrandSegment', f
678
695
  }
679
696
  });
680
697
  }); });
698
+ export var updateLeadMobile = createAsyncThunk('connect/updateLeadMobile', function (params, thunkApi) { return __awaiter(void 0, void 0, void 0, function () {
699
+ var _a, settings, connect, lead_id, payload, leadResponse;
700
+ var _b, _c;
701
+ return __generator(this, function (_d) {
702
+ switch (_d.label) {
703
+ case 0:
704
+ _a = thunkApi.getState(), settings = _a.settings, connect = _a.connect;
705
+ lead_id = (connect.data.otpData.responseBody || {}).lead_id;
706
+ payload = {
707
+ id: lead_id || '',
708
+ contact: {
709
+ phone: {
710
+ country_code: params.countryCode.idd_prefix.toString(),
711
+ number: params.mobile
712
+ }
713
+ },
714
+ step_name: CONNECT_STEP_NAMES.CONNECT_MOBILE_OWNERSHIP,
715
+ encryption_contract: ['contact.phone.country_code', 'contact.phone.number']
716
+ };
717
+ return [4, API.leadService.updateLead(payload)];
718
+ case 1:
719
+ leadResponse = _d.sent();
720
+ if (leadResponse.step_name === CONNECT_STEP_NAMES.CONNECT_MOBILE_OWNERSHIP) {
721
+ throw new Error("The new mobile number doesn't match the national ID, please update the mobile to the correct one");
722
+ }
723
+ (_c = (_b = settings.data.appConfig).onStepCompleted) === null || _c === void 0 ? void 0 : _c.call(_b, settings.data.activeScreen.name, params);
724
+ thunkApi.dispatch(handleNextScreenStep());
725
+ return [2, { leadResponse: leadResponse, formData: params }];
726
+ }
727
+ });
728
+ }); });
729
+ export var skipUpdateLeadMobile = createAsyncThunk('connect/skipUpdateLeadMobile', function (_, thunkApi) { return __awaiter(void 0, void 0, void 0, function () {
730
+ var _a, settings, connect, lead_id, payload, leadResponse;
731
+ var _b, _c;
732
+ return __generator(this, function (_d) {
733
+ switch (_d.label) {
734
+ case 0:
735
+ _a = thunkApi.getState(), settings = _a.settings, connect = _a.connect;
736
+ lead_id = (connect.data.otpData.responseBody || {}).lead_id;
737
+ payload = {
738
+ id: lead_id || '',
739
+ step_name: CONNECT_STEP_NAMES.CONNECT_MOBILE_OWNERSHIP_SKIPPED,
740
+ encryption_contract: []
741
+ };
742
+ return [4, API.leadService.updateLead(payload)];
743
+ case 1:
744
+ leadResponse = _d.sent();
745
+ (_c = (_b = settings.data.appConfig).onStepCompleted) === null || _c === void 0 ? void 0 : _c.call(_b, settings.data.activeScreen.name, {});
746
+ thunkApi.dispatch(handleNextScreenStep());
747
+ return [2, { leadResponse: leadResponse }];
748
+ }
749
+ });
750
+ }); });
681
751
  export var checkEmailAvailability = createAsyncThunk('checkEmailAvailability', function (_a, thunkApi) {
682
752
  var email = _a.email, cancelToken = _a.cancelToken, onSuccess = _a.onSuccess;
683
753
  return __awaiter(void 0, void 0, void 0, function () {
@@ -1123,6 +1193,33 @@ export var connectSlice = createSlice({
1123
1193
  .addCase(updateLeadBrandSegment.rejected, function (state, action) {
1124
1194
  state.loading = false;
1125
1195
  state.error = action.error.message;
1196
+ })
1197
+ .addCase(updateLeadMobile.fulfilled, function (state, action) {
1198
+ state.loading = false;
1199
+ state.error = null;
1200
+ state.data.individualData.mobile = action.payload.leadResponse.contact.phone.number;
1201
+ state.data.individualData.responseBody = action.payload.leadResponse;
1202
+ })
1203
+ .addCase(updateLeadMobile.pending, function (state) {
1204
+ state.loading = true;
1205
+ state.error = null;
1206
+ })
1207
+ .addCase(updateLeadMobile.rejected, function (state, action) {
1208
+ state.loading = false;
1209
+ state.error = action.error.message;
1210
+ })
1211
+ .addCase(skipUpdateLeadMobile.fulfilled, function (state, action) {
1212
+ state.loading = false;
1213
+ state.error = null;
1214
+ state.data.individualData.responseBody = action.payload.leadResponse;
1215
+ })
1216
+ .addCase(skipUpdateLeadMobile.pending, function (state) {
1217
+ state.loading = true;
1218
+ state.error = null;
1219
+ })
1220
+ .addCase(skipUpdateLeadMobile.rejected, function (state, action) {
1221
+ state.loading = false;
1222
+ state.error = action.error.message;
1126
1223
  })
1127
1224
  .addCase(checkEmailAvailability.fulfilled, function (state, action) {
1128
1225
  var _a;
@@ -1,5 +1,5 @@
1
1
  import { RootState } from '../../../app/store';
2
- import { MobileFormValues, NIDFormValues, CivilFormValues, OTPFormValues, IndividualFormValues, SharedState, FlowsTypes, ActionState, CountryCode, AuthForType, BusinessDataFormValues, AsyncThunkParams, AuthenticationListFormValues, AuthMerchantFormValues, DOBFormValues } from '../../../@types';
2
+ import { MobileFormValues, NIDFormValues, CivilFormValues, OTPFormValues, IndividualFormValues, SharedState, FlowsTypes, ActionState, CountryCode, AuthForType, BusinessDataFormValues, AsyncThunkParams, AuthenticationListFormValues, AuthMerchantFormValues, DOBFormValues, MobileOwnershipFormValues } from '../../../@types';
3
3
  import { CancelToken } from 'axios';
4
4
  export declare const updateBusinessCountryAsync: import("@reduxjs/toolkit").AsyncThunk<any, string, {}>;
5
5
  export declare const retrieveLeadIdentityByIdAsync: import("@reduxjs/toolkit").AsyncThunk<{
@@ -126,6 +126,13 @@ export declare const updateLeadBusinessDataAsync: import("@reduxjs/toolkit").Asy
126
126
  response: any;
127
127
  formData: BusinessDataFormValues;
128
128
  }, AsyncThunkParams<BusinessDataFormValues>, {}>;
129
+ export declare const updateLeadMobile: import("@reduxjs/toolkit").AsyncThunk<{
130
+ leadResponse: any;
131
+ formData: MobileOwnershipFormValues;
132
+ }, MobileOwnershipFormValues, {}>;
133
+ export declare const skipUpdateLeadMobile: import("@reduxjs/toolkit").AsyncThunk<{
134
+ leadResponse: any;
135
+ }, void, {}>;
129
136
  export declare const confirmInfo: import("@reduxjs/toolkit").AsyncThunk<{
130
137
  boardInfo: any;
131
138
  boardData: any;
@@ -685,7 +685,7 @@ export var createNIDNafathAuthIdentityAsync = createAsyncThunk('connectExpress/c
685
685
  });
686
686
  }); });
687
687
  export var verifyNafathIdentityAsync = createAsyncThunk('connectExpress/verifyNafathIdentityAsync', function (params, thunkApi) { return __awaiter(void 0, void 0, void 0, function () {
688
- var connectExpress, authData, expiry, interval, maxCalls, count, data, isSuccess, isFailed, needToCollectMoreInfo, creatingAccount, askDobInfo;
688
+ var connectExpress, authData, expiry, interval, maxCalls, count, data, isSuccess, isFailed, needToCollectMoreInfo, creatingAccount, askDobInfo, collectPhoneOwnershipScreen;
689
689
  var _a, _b, _c, _d, _e, _f, _g;
690
690
  return __generator(this, function (_h) {
691
691
  switch (_h.label) {
@@ -718,7 +718,11 @@ export var verifyNafathIdentityAsync = createAsyncThunk('connectExpress/verifyNa
718
718
  needToCollectMoreInfo = data.step_name === 'collect_info';
719
719
  creatingAccount = data.step_name === 'create_account';
720
720
  askDobInfo = data.step_name === COLLECT_DOB_INFO_NAFATH;
721
+ collectPhoneOwnershipScreen = data.step_name === CONNECT_EXPRESS_STEP_NAMES.COLLECT_MOBILE_OWNERSHIP;
721
722
  (_g = params.onSuccess) === null || _g === void 0 ? void 0 : _g.call(params);
723
+ if (collectPhoneOwnershipScreen) {
724
+ sleep(100).then(function () { return thunkApi.dispatch(handleNextScreenStep('COLLECT_MOBILE_OWNERSHIP')); });
725
+ }
722
726
  if (askDobInfo) {
723
727
  sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_COLLECT_DOB_INFO_STEP')); });
724
728
  }
@@ -783,7 +787,7 @@ export var verifyPaciLeadIdentityAsync = createAsyncThunk('connectExpress/verify
783
787
  case 6:
784
788
  count++;
785
789
  return [3, 1];
786
- case 7: throw new Error('paci_verification_failed');
790
+ case 7: throw new Error('nafath_verification_failed');
787
791
  }
788
792
  });
789
793
  }); });
@@ -1010,7 +1014,7 @@ export var updateLeadDOBAsync = createAsyncThunk('connectExpress/updateLeadDOBAs
1010
1014
  export var updateLeadIndividualAsync = createAsyncThunk('connectExpress/updateLeadIndividualAsync', function (_a, thunkApi) {
1011
1015
  var formData = _a.formData, originalFormData = _a.originalFormData;
1012
1016
  return __awaiter(void 0, void 0, void 0, function () {
1013
- var _b, settings, connectExpress, id, countryCode, name, email, mobile, phoneCountry, isContactAvailable, payload, data, needToCollectMoreInfo, creatingAccount, isSaudi;
1017
+ var _b, settings, connectExpress, id, countryCode, name, email, mobile, phoneCountry, isContactAvailable, payload, data, needToCollectMoreInfo, creatingAccount, collectPhoneOwnershipScreen, isSaudi;
1014
1018
  var _c, _d, _e, _f, _g;
1015
1019
  return __generator(this, function (_h) {
1016
1020
  switch (_h.label) {
@@ -1029,6 +1033,10 @@ export var updateLeadIndividualAsync = createAsyncThunk('connectExpress/updateLe
1029
1033
  (_g = (_f = settings.data.appConfig).onStepCompleted) === null || _g === void 0 ? void 0 : _g.call(_f, settings.data.activeScreen.name, formData);
1030
1034
  needToCollectMoreInfo = data.step_name === 'collect_info';
1031
1035
  creatingAccount = data.step_name === 'create_account';
1036
+ collectPhoneOwnershipScreen = data.step_name === CONNECT_EXPRESS_STEP_NAMES.COLLECT_MOBILE_OWNERSHIP;
1037
+ if (collectPhoneOwnershipScreen) {
1038
+ sleep(100).then(function () { return thunkApi.dispatch(handleNextScreenStep('COLLECT_MOBILE_OWNERSHIP')); });
1039
+ }
1032
1040
  if (creatingAccount) {
1033
1041
  sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_WAITING_FOR_CREATING_ACCOUNT_STEP')); });
1034
1042
  }
@@ -1088,6 +1096,104 @@ export var updateLeadBusinessDataAsync = createAsyncThunk('updateLeadBusinessDat
1088
1096
  });
1089
1097
  });
1090
1098
  });
1099
+ export var updateLeadMobile = createAsyncThunk('connect/updateLeadMobile', function (params, thunkApi) { return __awaiter(void 0, void 0, void 0, function () {
1100
+ var _a, settings, connectExpress, id, startWithNID, payload, leadResponse, needToCollectMoreInfo, creatingAccount, askDobInfo, collectPhoneOwnershipScreen;
1101
+ var _b, _c, _d;
1102
+ return __generator(this, function (_e) {
1103
+ switch (_e.label) {
1104
+ case 0:
1105
+ _a = thunkApi.getState(), settings = _a.settings, connectExpress = _a.connectExpress;
1106
+ id = (((_b = connectExpress.data.responseData) === null || _b === void 0 ? void 0 : _b.leadData) || {}).id;
1107
+ startWithNID = connectExpress.data.otpData.authFor === AuthForType.NATIONAL_ID;
1108
+ payload = {
1109
+ id: id || '',
1110
+ contact: {
1111
+ phone: {
1112
+ country_code: params.countryCode.idd_prefix.toString(),
1113
+ number: params.mobile
1114
+ }
1115
+ },
1116
+ step_name: CONNECT_EXPRESS_STEP_NAMES.COLLECT_MOBILE_OWNERSHIP,
1117
+ encryption_contract: ['contact.phone.country_code', 'contact.phone.number']
1118
+ };
1119
+ return [4, API.leadService.updateLeadExpress(payload)];
1120
+ case 1:
1121
+ leadResponse = _e.sent();
1122
+ (_d = (_c = settings.data.appConfig).onStepCompleted) === null || _d === void 0 ? void 0 : _d.call(_c, settings.data.activeScreen.name, params);
1123
+ needToCollectMoreInfo = leadResponse.step_name === 'collect_info';
1124
+ creatingAccount = leadResponse.step_name === 'create_account';
1125
+ askDobInfo = leadResponse.step_name === COLLECT_DOB_INFO_NAFATH;
1126
+ collectPhoneOwnershipScreen = leadResponse.step_name === CONNECT_EXPRESS_STEP_NAMES.COLLECT_MOBILE_OWNERSHIP;
1127
+ if (collectPhoneOwnershipScreen) {
1128
+ throw new Error("The new mobile number doesn't match the national ID, please update the mobile to the correct one");
1129
+ }
1130
+ if (askDobInfo) {
1131
+ sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_COLLECT_DOB_INFO_STEP')); });
1132
+ }
1133
+ if (creatingAccount) {
1134
+ sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_WAITING_FOR_CREATING_ACCOUNT_STEP')); });
1135
+ }
1136
+ if (!needToCollectMoreInfo) return [3, 5];
1137
+ if (!startWithNID) return [3, 4];
1138
+ if (!isSA(settings.data.businessCountry.iso2)) return [3, 3];
1139
+ return [4, thunkApi.dispatch(retrieveEntityListAsync(leadResponse.lead.id)).unwrap()];
1140
+ case 2:
1141
+ _e.sent();
1142
+ _e.label = 3;
1143
+ case 3:
1144
+ sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_COLLECT_BUSINESS_INFO_STEP')); });
1145
+ return [3, 5];
1146
+ case 4:
1147
+ sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_COLLECT_INDIVIDUAL_INFO_STEP')); });
1148
+ _e.label = 5;
1149
+ case 5: return [2, { leadResponse: leadResponse, formData: params }];
1150
+ }
1151
+ });
1152
+ }); });
1153
+ export var skipUpdateLeadMobile = createAsyncThunk('connect/skipUpdateLeadMobile', function (_, thunkApi) { return __awaiter(void 0, void 0, void 0, function () {
1154
+ var _a, settings, connectExpress, id, startWithNID, payload, leadResponse, needToCollectMoreInfo, creatingAccount, askDobInfo;
1155
+ var _b, _c, _d;
1156
+ return __generator(this, function (_e) {
1157
+ switch (_e.label) {
1158
+ case 0:
1159
+ _a = thunkApi.getState(), settings = _a.settings, connectExpress = _a.connectExpress;
1160
+ id = (((_b = connectExpress.data.responseData) === null || _b === void 0 ? void 0 : _b.leadData) || {}).id;
1161
+ startWithNID = connectExpress.data.otpData.authFor === AuthForType.NATIONAL_ID;
1162
+ payload = {
1163
+ id: id || '',
1164
+ step_name: CONNECT_EXPRESS_STEP_NAMES.COLLECT_MOBILE_OWNERSHIP_SKIPPED,
1165
+ encryption_contract: []
1166
+ };
1167
+ return [4, API.leadService.updateLeadExpress(payload)];
1168
+ case 1:
1169
+ leadResponse = _e.sent();
1170
+ (_d = (_c = settings.data.appConfig).onStepCompleted) === null || _d === void 0 ? void 0 : _d.call(_c, settings.data.activeScreen.name, {});
1171
+ needToCollectMoreInfo = leadResponse.step_name === 'collect_info';
1172
+ creatingAccount = leadResponse.step_name === 'create_account';
1173
+ askDobInfo = leadResponse.step_name === COLLECT_DOB_INFO_NAFATH;
1174
+ if (askDobInfo) {
1175
+ sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_COLLECT_DOB_INFO_STEP')); });
1176
+ }
1177
+ if (creatingAccount) {
1178
+ sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_WAITING_FOR_CREATING_ACCOUNT_STEP')); });
1179
+ }
1180
+ if (!needToCollectMoreInfo) return [3, 5];
1181
+ if (!startWithNID) return [3, 4];
1182
+ if (!isSA(settings.data.businessCountry.iso2)) return [3, 3];
1183
+ return [4, thunkApi.dispatch(retrieveEntityListAsync(leadResponse.lead.id)).unwrap()];
1184
+ case 2:
1185
+ _e.sent();
1186
+ _e.label = 3;
1187
+ case 3:
1188
+ sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_COLLECT_BUSINESS_INFO_STEP')); });
1189
+ return [3, 5];
1190
+ case 4:
1191
+ sleep(100).then(function () { return thunkApi.dispatch(handleCurrentActiveScreen('CONNECT_EXPRESS_COLLECT_INDIVIDUAL_INFO_STEP')); });
1192
+ _e.label = 5;
1193
+ case 5: return [2, { leadResponse: leadResponse }];
1194
+ }
1195
+ });
1196
+ }); });
1091
1197
  export var confirmInfo = createAsyncThunk('connectExpress/confirmInfo', function (_a, thunkApi) {
1092
1198
  var brandInfo = _a.brandInfo, entityInfo = _a.entityInfo, merchantInfo = _a.merchantInfo;
1093
1199
  return __awaiter(void 0, void 0, void 0, function () {
@@ -1639,6 +1745,33 @@ export var connectSlice = createSlice({
1639
1745
  .addCase(updateLeadBusinessDataAsync.rejected, function (state, action) {
1640
1746
  state.loading = false;
1641
1747
  state.error = action.error.message;
1748
+ })
1749
+ .addCase(updateLeadMobile.fulfilled, function (state, action) {
1750
+ state.loading = false;
1751
+ state.error = null;
1752
+ state.data.individualData.mobile = action.payload.formData.mobile;
1753
+ state.data.responseData = __assign(__assign({}, state.data.responseData), { individualData: action.payload.leadResponse });
1754
+ })
1755
+ .addCase(updateLeadMobile.pending, function (state) {
1756
+ state.loading = true;
1757
+ state.error = null;
1758
+ })
1759
+ .addCase(updateLeadMobile.rejected, function (state, action) {
1760
+ state.loading = false;
1761
+ state.error = action.error.message;
1762
+ })
1763
+ .addCase(skipUpdateLeadMobile.fulfilled, function (state, action) {
1764
+ state.loading = false;
1765
+ state.error = null;
1766
+ state.data.responseData = __assign(__assign({}, state.data.responseData), { individualData: action.payload.leadResponse });
1767
+ })
1768
+ .addCase(skipUpdateLeadMobile.pending, function (state) {
1769
+ state.loading = true;
1770
+ state.error = null;
1771
+ })
1772
+ .addCase(skipUpdateLeadMobile.rejected, function (state, action) {
1773
+ state.loading = false;
1774
+ state.error = action.error.message;
1642
1775
  })
1643
1776
  .addCase(createAccountAsync.pending, function (state) {
1644
1777
  state.loading = true;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ declare const CollectMobileOwnership: () => JSX.Element;
3
+ export default CollectMobileOwnership;
@@ -0,0 +1,105 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { FormProvider, useForm } from 'react-hook-form';
14
+ import { ScreenContainer } from '../../../../features/shared/Containers';
15
+ import { styled } from '@mui/material/styles';
16
+ import Form from '../../../../components/Form';
17
+ import { yupResolver } from '@hookform/resolvers/yup';
18
+ import { PhoneValidationSchema } from './validation';
19
+ import { Box, alpha } from '@mui/material';
20
+ import { useTranslation } from 'react-i18next';
21
+ import Text from '../../../../components/Text';
22
+ import { Button as SharedButton } from '../../../shared/Button';
23
+ import { useAppDispatch, useAppSelector, useLanguage } from '../../../../hooks';
24
+ import { handlePrevScreenStep, settingsSelector } from '../../../../app/settings';
25
+ import { businessSelector, skipUpdateLeadMobile, updateLeadMobile } from '../../../../features/app/business/businessStore';
26
+ import Button from '../../../../components/Button';
27
+ import MobileNumber from './MobileNumber';
28
+ var FormStyled = styled(Form)(function () { return ({
29
+ display: 'flex',
30
+ flexDirection: 'column',
31
+ justifyContent: 'flex-start'
32
+ }); });
33
+ var TitleContainerStyled = styled(Box)(function (_a) {
34
+ var theme = _a.theme;
35
+ return ({
36
+ background: theme.palette.common.white,
37
+ borderTop: '1px solid rgba(227, 232, 238, 0.8)',
38
+ borderBottom: '1px solid rgba(227, 232, 238, 0.8)',
39
+ borderRadius: theme.spacing(0, 0, 1.25, 1.25)
40
+ });
41
+ });
42
+ var TitleStyled = styled(Text)(function (_a) {
43
+ var theme = _a.theme;
44
+ return (__assign(__assign({}, theme.typography.body1), { color: theme.palette.text.primary, fontWeight: theme.typography.fontWeightLight, margin: theme.spacing(1.75, 2.5), lineHeight: 1.2 }));
45
+ });
46
+ var InputLabelStyled = styled(Text)(function (_a) {
47
+ var theme = _a.theme;
48
+ return (__assign(__assign({ color: alpha(theme.palette.text.primary, 0.6), fontWeight: theme.typography.fontWeightRegular }, theme.typography.caption), { lineHeight: 1.2 }));
49
+ });
50
+ var CurrentMobileContainerStyled = styled(Box)(function (_a) {
51
+ var theme = _a.theme;
52
+ return ({
53
+ display: 'flex',
54
+ flexDirection: 'column',
55
+ rowGap: theme.spacing(1.6),
56
+ height: theme.spacing(9.375),
57
+ marginTop: theme.spacing(2.85),
58
+ marginInlineStart: theme.spacing(2.375)
59
+ });
60
+ });
61
+ var MobileNumberContainer = styled(Box)(function (_a) {
62
+ var theme = _a.theme;
63
+ return ({
64
+ display: 'flex',
65
+ columnGap: theme.spacing(0.9)
66
+ });
67
+ });
68
+ var CountryCodeStyled = styled(Text)(function (_a) {
69
+ var theme = _a.theme;
70
+ return (__assign(__assign({}, theme.typography.body2), { color: theme.palette.text.primary, fontWeight: theme.typography.fontWeightMedium, lineHeight: 1.2 }));
71
+ });
72
+ var MobileNumberStyled = styled(Text)(function (_a) {
73
+ var theme = _a.theme;
74
+ return (__assign(__assign({}, theme.typography.body2), { color: theme.palette.text.primary, fontWeight: theme.typography.fontWeightRegular, lineHeight: 1.2 }));
75
+ });
76
+ var UpdateLaterContainerStyled = styled(Box)(function (_a) {
77
+ var theme = _a.theme;
78
+ return ({
79
+ marginLeft: theme.spacing(2.5),
80
+ marginRight: theme.spacing(2.5)
81
+ });
82
+ });
83
+ var CollectMobileOwnership = function () {
84
+ var dispatch = useAppDispatch();
85
+ var t = useTranslation().t;
86
+ var isAr = useLanguage().isAr;
87
+ var settingsData = useAppSelector(settingsSelector).data;
88
+ var _a = useAppSelector(businessSelector), data = _a.data, loading = _a.loading, error = _a.error;
89
+ var methods = useForm({
90
+ resolver: yupResolver(PhoneValidationSchema()),
91
+ defaultValues: { mobile: '', countryCode: settingsData.businessCountry },
92
+ mode: 'onChange'
93
+ });
94
+ var onSubmit = function (data) {
95
+ dispatch(updateLeadMobile(data));
96
+ };
97
+ var onBack = function () {
98
+ dispatch(handlePrevScreenStep());
99
+ };
100
+ var onUpdateLater = function () {
101
+ dispatch(skipUpdateLeadMobile());
102
+ };
103
+ return (_jsx(ScreenContainer, { children: _jsx(FormProvider, __assign({}, methods, { children: _jsxs(FormStyled, __assign({ onSubmit: methods.handleSubmit(onSubmit) }, { children: [_jsx(TitleContainerStyled, { children: _jsx(TitleStyled, { children: t('mobile_ownership_title') }) }), _jsxs(CurrentMobileContainerStyled, { children: [_jsx(InputLabelStyled, { children: t('current_mobile_number') }), _jsxs(MobileNumberContainer, { children: [_jsxs(CountryCodeStyled, { children: ["+", data.mobileData.countryCode.idd_prefix] }), _jsx(MobileNumberStyled, { children: data.mobileData.mobile })] })] }), _jsx(MobileNumber, {}), _jsx(SharedButton, __assign({ onBackClicked: function () { return onBack(); }, isAr: isAr, disabled: !methods.formState.isValid, loading: loading, error: t(error || '') }, { children: t('update_mobile_number') })), _jsx(UpdateLaterContainerStyled, { children: _jsx(Button, __assign({ variant: 'text', onClick: function () { return onUpdateLater(); } }, { children: t('update_later') })) })] })) })) }));
104
+ };
105
+ export default CollectMobileOwnership;
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ declare const _default: React.MemoExoticComponent<() => JSX.Element>;
3
+ export default _default;
@@ -0,0 +1,72 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
+ import * as React from 'react';
14
+ import { useTranslation } from 'react-i18next';
15
+ import { useController, useFormContext } from 'react-hook-form';
16
+ import Box from '@mui/material/Box';
17
+ import { styled, alpha } from '@mui/material/styles';
18
+ import { getMobileNumberLen, removeAllCharsFromNumber } from '../../../../utils';
19
+ import { useAppSelector } from '../../../../hooks';
20
+ import Text from '../../../../components/Text';
21
+ import ClearIcon from '../../../shared/ClearIcon';
22
+ import CheckIcon from '../../../shared/CheckIcon';
23
+ import ScreenContainer from '../../../shared/Containers/ScreenContainer';
24
+ import Input from '../../../shared/Input';
25
+ import { settingsSelector } from '../../../../app/settings';
26
+ var LabelContainerStyled = styled(Box)(function (_a) {
27
+ var theme = _a.theme;
28
+ return ({
29
+ display: 'flex',
30
+ justifyContent: 'space-between',
31
+ padding: theme.spacing(0, 2.5, 1.25, 2.5)
32
+ });
33
+ });
34
+ var InputLabelStyled = styled(Text)(function (_a) {
35
+ var theme = _a.theme;
36
+ return (__assign(__assign({ color: alpha(theme.palette.text.primary, 0.6), fontWeight: theme.typography.fontWeightMedium }, theme.typography.caption), { lineHeight: theme.spacing(2.5) }));
37
+ });
38
+ var InputStyled = styled(Input)(function () { return ({
39
+ direction: 'ltr',
40
+ '& .MuiInputBase-input': {
41
+ cursor: 'auto'
42
+ }
43
+ }); });
44
+ var MobileNumber = function () {
45
+ var _a;
46
+ var t = useTranslation().t;
47
+ var _b = useFormContext(), control = _b.control, setValue = _b.setValue;
48
+ var data = useAppSelector(settingsSelector).data;
49
+ var phoneControl = useController({ name: 'mobile', control: control });
50
+ var countryCodeValue = data.businessCountry;
51
+ var mobileValue = phoneControl.field.value || '';
52
+ var error = !!mobileValue ? (_a = phoneControl.fieldState.error) === null || _a === void 0 ? void 0 : _a.message : '';
53
+ var isSA = countryCodeValue.iso2 === 'SA';
54
+ var mobileMaxLen = countryCodeValue === null || countryCodeValue === void 0 ? void 0 : countryCodeValue.max_digits;
55
+ var mobileMinLen = countryCodeValue === null || countryCodeValue === void 0 ? void 0 : countryCodeValue.min_digits;
56
+ var requiredMaxLen = getMobileNumberLen(mobileMaxLen, mobileValue);
57
+ var requiredMinLen = getMobileNumberLen(mobileMinLen, mobileValue);
58
+ React.useEffect(function () {
59
+ if (mobileValue)
60
+ setValue('mobile', mobileValue, { shouldValidate: true });
61
+ }, []);
62
+ var onPhoneNumberChange = function (_a) {
63
+ var target = _a.target;
64
+ var value = removeAllCharsFromNumber(target.value);
65
+ phoneControl.field.onChange(value);
66
+ };
67
+ var clearMobileNumber = function () {
68
+ phoneControl.field.onChange('');
69
+ };
70
+ return (_jsx(_Fragment, { children: _jsxs(ScreenContainer, __assign({ sx: { mb: 3 } }, { children: [_jsx(LabelContainerStyled, { children: _jsx(InputLabelStyled, { children: t('new_mobile_number') }) }), _jsx(InputStyled, { inputProps: { maxLength: requiredMaxLen }, type: 'tel', onChange: onPhoneNumberChange, value: mobileValue, startAdornment: "+".concat(countryCodeValue === null || countryCodeValue === void 0 ? void 0 : countryCodeValue.idd_prefix), endAdornment: !error && mobileValue ? _jsx(CheckIcon, {}) : mobileValue && _jsx(ClearIcon, { onClick: clearMobileNumber }), placeholder: "".concat(isSA ? '5' : '0', "00000000"), warningType: 'alert', warningMessage: error && t(error, { minLength: requiredMinLen, length: requiredMaxLen, number: '05|5' }) })] })) }));
71
+ };
72
+ export default React.memo(MobileNumber);
@@ -0,0 +1,2 @@
1
+ import CollectMobileOwnership from './CollectMobileOwnership';
2
+ export default CollectMobileOwnership;
@@ -0,0 +1,2 @@
1
+ import CollectMobileOwnership from './CollectMobileOwnership';
2
+ export default CollectMobileOwnership;