boxpay-checkout-reactnative-sdk 1.0.0-beta31 → 1.0.0-beta32
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.
- package/assets/images/ic_qr.png +0 -0
- package/lib/assets/assets/images/ic_qr.png +0 -0
- package/lib/assets/images/ic_qr.png +0 -0
- package/lib/module/components/sessionExpire.js +0 -3
- package/lib/module/components/sessionExpire.js.map +1 -1
- package/lib/module/interface.js.map +1 -1
- package/lib/module/postRequest/callUIAnalytics.js +3 -14
- package/lib/module/postRequest/callUIAnalytics.js.map +1 -1
- package/lib/module/postRequest/cardPostRequest.js +5 -42
- package/lib/module/postRequest/cardPostRequest.js.map +1 -1
- package/lib/module/postRequest/emiPostRequest.js +5 -42
- package/lib/module/postRequest/emiPostRequest.js.map +1 -1
- package/lib/module/postRequest/methodsPostRequest.js +5 -42
- package/lib/module/postRequest/methodsPostRequest.js.map +1 -1
- package/lib/module/postRequest/upiPostRequest.js +5 -42
- package/lib/module/postRequest/upiPostRequest.js.map +1 -1
- package/lib/module/screens/mainScreen.js +70 -1
- package/lib/module/screens/mainScreen.js.map +1 -1
- package/lib/module/screens/upiScreen.js +154 -43
- package/lib/module/screens/upiScreen.js.map +1 -1
- package/lib/module/sharedContext/checkoutDetailsHandler.js +1 -0
- package/lib/module/sharedContext/checkoutDetailsHandler.js.map +1 -1
- package/lib/module/sharedContext/handlePaymentResponseHandler.js +6 -1
- package/lib/module/sharedContext/handlePaymentResponseHandler.js.map +1 -1
- package/lib/module/styles/screens/savedAddressScreenStyles.js +2 -2
- package/lib/module/styles/screens/upiScreenStyles.js +64 -0
- package/lib/module/styles/screens/upiScreenStyles.js.map +1 -1
- package/lib/module/utils/listAndObjectUtils.js +56 -6
- package/lib/module/utils/listAndObjectUtils.js.map +1 -1
- package/lib/module/utils/stringUtils.js +5 -0
- package/lib/module/utils/stringUtils.js.map +1 -1
- package/lib/typescript/src/components/sessionExpire.d.ts.map +1 -1
- package/lib/typescript/src/interface.d.ts +7 -1
- package/lib/typescript/src/interface.d.ts.map +1 -1
- package/lib/typescript/src/postRequest/callUIAnalytics.d.ts.map +1 -1
- package/lib/typescript/src/postRequest/cardPostRequest.d.ts.map +1 -1
- package/lib/typescript/src/postRequest/emiPostRequest.d.ts.map +1 -1
- package/lib/typescript/src/postRequest/methodsPostRequest.d.ts.map +1 -1
- package/lib/typescript/src/postRequest/upiPostRequest.d.ts.map +1 -1
- package/lib/typescript/src/screens/mainScreen.d.ts.map +1 -1
- package/lib/typescript/src/screens/upiScreen.d.ts +5 -0
- package/lib/typescript/src/screens/upiScreen.d.ts.map +1 -1
- package/lib/typescript/src/sharedContext/checkoutDetailsHandler.d.ts.map +1 -1
- package/lib/typescript/src/sharedContext/handlePaymentResponseHandler.d.ts +1 -2
- package/lib/typescript/src/sharedContext/handlePaymentResponseHandler.d.ts.map +1 -1
- package/lib/typescript/src/styles/screens/upiScreenStyles.d.ts +64 -0
- package/lib/typescript/src/styles/screens/upiScreenStyles.d.ts.map +1 -1
- package/lib/typescript/src/utils/listAndObjectUtils.d.ts +34 -2
- package/lib/typescript/src/utils/listAndObjectUtils.d.ts.map +1 -1
- package/lib/typescript/src/utils/stringUtils.d.ts +1 -0
- package/lib/typescript/src/utils/stringUtils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/components/sessionExpire.tsx +0 -3
- package/src/interface.ts +10 -2
- package/src/postRequest/callUIAnalytics.ts +3 -20
- package/src/postRequest/cardPostRequest.ts +6 -51
- package/src/postRequest/emiPostRequest.ts +6 -52
- package/src/postRequest/methodsPostRequest.tsx +6 -52
- package/src/postRequest/upiPostRequest.tsx +6 -52
- package/src/screens/mainScreen.tsx +72 -0
- package/src/screens/upiScreen.tsx +168 -40
- package/src/sharedContext/checkoutDetailsHandler.ts +1 -0
- package/src/sharedContext/handlePaymentResponseHandler.ts +8 -1
- package/src/styles/screens/savedAddressScreenStyles.ts +2 -2
- package/src/styles/screens/upiScreenStyles.ts +64 -0
- package/src/utils/listAndObjectUtils.ts +58 -7
- package/src/utils/stringUtils.ts +7 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import Constants from 'expo-constants';
|
|
2
1
|
import { checkoutDetailsHandler } from '../sharedContext/checkoutDetailsHandler';
|
|
3
2
|
import type { AnalyticsApiResponse } from '../interface';
|
|
4
|
-
import { getDeviceDetails } from '../utils/listAndObjectUtils';
|
|
3
|
+
import { getBrowserData, getDeviceDetails } from '../utils/listAndObjectUtils';
|
|
5
4
|
import { APIStatus } from '../interface';
|
|
6
5
|
import axios from 'axios';
|
|
7
6
|
import { getBaseURL } from '../utils/stringUtils';
|
|
@@ -13,26 +12,10 @@ const callUIAnalytics = async (
|
|
|
13
12
|
) : Promise<AnalyticsApiResponse> => {
|
|
14
13
|
const { checkoutDetails } = checkoutDetailsHandler;
|
|
15
14
|
const deviceDetails = getDeviceDetails()
|
|
15
|
+
const browserData = getBrowserData()
|
|
16
16
|
|
|
17
17
|
const requestBody = {
|
|
18
|
-
browserData:
|
|
19
|
-
screenHeight:
|
|
20
|
-
Constants.platform?.ios?.screenHeight ||
|
|
21
|
-
Constants.platform?.android?.screenHeight ||
|
|
22
|
-
0,
|
|
23
|
-
screenWidth:
|
|
24
|
-
Constants.platform?.ios?.screenWidth ||
|
|
25
|
-
Constants.platform?.android?.screenWidth ||
|
|
26
|
-
0,
|
|
27
|
-
acceptHeader: 'application/json',
|
|
28
|
-
userAgentHeader: 'Expo App',
|
|
29
|
-
browserLanguage: 'en_US',
|
|
30
|
-
ipAddress: 'null',
|
|
31
|
-
colorDepth: 24,
|
|
32
|
-
javaEnabled: true,
|
|
33
|
-
timeZoneOffSet: new Date().getTimezoneOffset(),
|
|
34
|
-
packageId: Constants.manifest?.id || 'com.boxpay.checkout.sdk',
|
|
35
|
-
},
|
|
18
|
+
browserData: browserData,
|
|
36
19
|
callerToken : checkoutDetails.token,
|
|
37
20
|
uiEvent : uiEvent,
|
|
38
21
|
eventAttrs : {
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import Constants from 'expo-constants';
|
|
2
1
|
import api from '../serviceRequest'
|
|
3
|
-
import { userDataHandler } from '../sharedContext/userdataHandler';
|
|
4
2
|
import { checkoutDetailsHandler } from '../sharedContext/checkoutDetailsHandler';
|
|
5
|
-
import type { PaymentExecutedPostResponse
|
|
6
|
-
import { getDeviceDetails } from '../utils/listAndObjectUtils';
|
|
3
|
+
import type { PaymentExecutedPostResponse } from '../interface';
|
|
4
|
+
import { getBrowserData, getDeviceDetails, getShopperDetails } from '../utils/listAndObjectUtils';
|
|
7
5
|
import { AnalyticsEvents, APIStatus } from '../interface';
|
|
8
6
|
import callUIAnalytics from './callUIAnalytics';
|
|
9
7
|
|
|
@@ -15,49 +13,18 @@ const cardPostRequest = async (
|
|
|
15
13
|
cardNickName: string,
|
|
16
14
|
isCheckboxClicked: boolean
|
|
17
15
|
) : Promise<PaymentExecutedPostResponse> => {
|
|
18
|
-
const { userData } = userDataHandler;
|
|
19
16
|
const { checkoutDetails } = checkoutDetailsHandler;
|
|
20
17
|
const deviceDetails = getDeviceDetails()
|
|
18
|
+
const browserData = getBrowserData()
|
|
19
|
+
const shopperData = getShopperDetails()
|
|
21
20
|
|
|
22
21
|
const formatExpiry = (input: string) => {
|
|
23
22
|
const [month, year] = input.split('/');
|
|
24
23
|
return `20${year}-${month}`;
|
|
25
24
|
};
|
|
26
|
-
const isDeliveryAddressEmpty = (address: DeliveryAddress): boolean => {
|
|
27
|
-
return Object.values(address).every(
|
|
28
|
-
(value) => value === null || value === undefined || value === ''
|
|
29
|
-
);
|
|
30
|
-
};
|
|
31
25
|
|
|
32
|
-
const deliveryAddress = {
|
|
33
|
-
address1: userData.address1,
|
|
34
|
-
address2: userData.address2,
|
|
35
|
-
city: userData.city,
|
|
36
|
-
state: userData.state,
|
|
37
|
-
countryCode: userData.country,
|
|
38
|
-
postalCode: userData.pincode,
|
|
39
|
-
labelType: userData.labelType,
|
|
40
|
-
labelName: userData.labelName,
|
|
41
|
-
};
|
|
42
26
|
const requestBody = {
|
|
43
|
-
browserData:
|
|
44
|
-
screenHeight:
|
|
45
|
-
Constants.platform?.ios?.screenHeight ||
|
|
46
|
-
Constants.platform?.android?.screenHeight ||
|
|
47
|
-
0,
|
|
48
|
-
screenWidth:
|
|
49
|
-
Constants.platform?.ios?.screenWidth ||
|
|
50
|
-
Constants.platform?.android?.screenWidth ||
|
|
51
|
-
0,
|
|
52
|
-
acceptHeader: 'application/json',
|
|
53
|
-
userAgentHeader: 'Expo App',
|
|
54
|
-
browserLanguage: 'en_US',
|
|
55
|
-
ipAddress: 'null',
|
|
56
|
-
colorDepth: 24,
|
|
57
|
-
javaEnabled: true,
|
|
58
|
-
timeZoneOffSet: new Date().getTimezoneOffset(),
|
|
59
|
-
packageId: Constants.manifest?.id || 'com.boxpay.checkout.sdk',
|
|
60
|
-
},
|
|
27
|
+
browserData: browserData,
|
|
61
28
|
instrumentDetails: {
|
|
62
29
|
type: 'card/plain',
|
|
63
30
|
card: {
|
|
@@ -73,19 +40,7 @@ const cardPostRequest = async (
|
|
|
73
40
|
? { saveInstrument: true }
|
|
74
41
|
: {}),
|
|
75
42
|
},
|
|
76
|
-
shopper:
|
|
77
|
-
email: userData.email,
|
|
78
|
-
firstName: userData.firstName,
|
|
79
|
-
gender: null,
|
|
80
|
-
lastName: userData.lastName,
|
|
81
|
-
phoneNumber: userData.phone,
|
|
82
|
-
uniqueReference: userData.uniqueId,
|
|
83
|
-
dateOfBirth: userData.dob,
|
|
84
|
-
panNumber: userData.pan,
|
|
85
|
-
deliveryAddress: isDeliveryAddressEmpty(deliveryAddress)
|
|
86
|
-
? null
|
|
87
|
-
: deliveryAddress,
|
|
88
|
-
},
|
|
43
|
+
shopper: shopperData,
|
|
89
44
|
deviceDetails: deviceDetails,
|
|
90
45
|
};
|
|
91
46
|
callUIAnalytics(AnalyticsEvents.PAYMENT_CATEGORY_SELECTED,"Card Post Request",``)
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import Constants from 'expo-constants';
|
|
2
1
|
import api from '../serviceRequest'
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import { getDeviceDetails } from '../utils/listAndObjectUtils';
|
|
2
|
+
import type { PaymentExecutedPostResponse } from '../interface';
|
|
3
|
+
import { getBrowserData, getDeviceDetails, getShopperDetails } from '../utils/listAndObjectUtils';
|
|
6
4
|
import { AnalyticsEvents, APIStatus } from '../interface';
|
|
7
5
|
import callUIAnalytics from './callUIAnalytics';
|
|
8
6
|
|
|
@@ -27,8 +25,9 @@ const emiPostRequest = async (
|
|
|
27
25
|
duration
|
|
28
26
|
} : EmiPostPayload
|
|
29
27
|
) : Promise<PaymentExecutedPostResponse> => {
|
|
30
|
-
const { userData } = userDataHandler;
|
|
31
28
|
const deviceDetails = getDeviceDetails()
|
|
29
|
+
const browserData = getBrowserData()
|
|
30
|
+
const shopperData = getShopperDetails()
|
|
32
31
|
const formatExpiry = (input: string) => {
|
|
33
32
|
const [month, year] = input.split('/');
|
|
34
33
|
return `20${year}-${month}`;
|
|
@@ -59,56 +58,11 @@ const emiPostRequest = async (
|
|
|
59
58
|
},
|
|
60
59
|
};
|
|
61
60
|
|
|
62
|
-
const isDeliveryAddressEmpty = (address: DeliveryAddress): boolean => {
|
|
63
|
-
return Object.values(address).every(
|
|
64
|
-
(value) => value === null || value === undefined || value === ''
|
|
65
|
-
);
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const deliveryAddress = {
|
|
69
|
-
address1: userData.address1,
|
|
70
|
-
address2: userData.address2,
|
|
71
|
-
city: userData.city,
|
|
72
|
-
state: userData.state,
|
|
73
|
-
countryCode: userData.country,
|
|
74
|
-
postalCode: userData.pincode,
|
|
75
|
-
labelType: userData.labelType,
|
|
76
|
-
labelName: userData.labelName,
|
|
77
|
-
};
|
|
78
61
|
const requestBody = {
|
|
79
|
-
browserData:
|
|
80
|
-
screenHeight:
|
|
81
|
-
Constants.platform?.ios?.screenHeight ||
|
|
82
|
-
Constants.platform?.android?.screenHeight ||
|
|
83
|
-
0,
|
|
84
|
-
screenWidth:
|
|
85
|
-
Constants.platform?.ios?.screenWidth ||
|
|
86
|
-
Constants.platform?.android?.screenWidth ||
|
|
87
|
-
0,
|
|
88
|
-
acceptHeader: 'application/json',
|
|
89
|
-
userAgentHeader: 'Expo App',
|
|
90
|
-
browserLanguage: 'en_US',
|
|
91
|
-
ipAddress: 'null',
|
|
92
|
-
colorDepth: 24,
|
|
93
|
-
javaEnabled: true,
|
|
94
|
-
timeZoneOffSet: new Date().getTimezoneOffset(),
|
|
95
|
-
packageId: Constants.manifest?.id || 'com.boxpay.checkout.sdk',
|
|
96
|
-
},
|
|
62
|
+
browserData: browserData,
|
|
97
63
|
instrumentDetails: instrumentDetails,
|
|
98
64
|
...(offerCode?.trim() !== '' && { offers: [offerCode] }),
|
|
99
|
-
shopper:
|
|
100
|
-
email: userData.email,
|
|
101
|
-
firstName: userData.firstName,
|
|
102
|
-
gender: null,
|
|
103
|
-
lastName: userData.lastName,
|
|
104
|
-
phoneNumber: userData.phone,
|
|
105
|
-
uniqueReference: userData.uniqueId,
|
|
106
|
-
dateOfBirth: userData.dob,
|
|
107
|
-
panNumber: userData.pan,
|
|
108
|
-
deliveryAddress: isDeliveryAddressEmpty(deliveryAddress)
|
|
109
|
-
? null
|
|
110
|
-
: deliveryAddress,
|
|
111
|
-
},
|
|
65
|
+
shopper: shopperData,
|
|
112
66
|
deviceDetails: deviceDetails,
|
|
113
67
|
};
|
|
114
68
|
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import Constants from 'expo-constants';
|
|
2
1
|
import { checkoutDetailsHandler } from '../sharedContext/checkoutDetailsHandler';
|
|
3
2
|
import api from '../serviceRequest'
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import { getDeviceDetails } from '../utils/listAndObjectUtils';
|
|
3
|
+
import type { PaymentExecutedPostResponse } from '../interface';
|
|
4
|
+
import { getBrowserData, getDeviceDetails, getShopperDetails } from '../utils/listAndObjectUtils';
|
|
7
5
|
import { AnalyticsEvents, APIStatus } from '../interface';
|
|
8
6
|
import callUIAnalytics from './callUIAnalytics';
|
|
9
7
|
|
|
@@ -11,64 +9,20 @@ const methodsPostRequest = async (
|
|
|
11
9
|
instrumentDetails: string,
|
|
12
10
|
paymentMethod: string
|
|
13
11
|
) : Promise<PaymentExecutedPostResponse> => {
|
|
14
|
-
const { userData } = userDataHandler;
|
|
15
12
|
const { checkoutDetails } = checkoutDetailsHandler;
|
|
16
13
|
const deviceDetails = getDeviceDetails()
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
(value) => value === null || value === undefined || value === ''
|
|
20
|
-
);
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const deliveryAddress = {
|
|
24
|
-
address1: userData.address1,
|
|
25
|
-
address2: userData.address2,
|
|
26
|
-
city: userData.city,
|
|
27
|
-
state: userData.state,
|
|
28
|
-
countryCode: userData.country,
|
|
29
|
-
postalCode: userData.pincode,
|
|
30
|
-
labelType: userData.labelType,
|
|
31
|
-
labelName: userData.labelName,
|
|
32
|
-
};
|
|
14
|
+
const browserData = getBrowserData()
|
|
15
|
+
const shopperData = getShopperDetails()
|
|
33
16
|
|
|
34
17
|
const requestBody = {
|
|
35
|
-
browserData:
|
|
36
|
-
screenHeight:
|
|
37
|
-
Constants.platform?.ios?.screenHeight ||
|
|
38
|
-
Constants.platform?.android?.screenHeight ||
|
|
39
|
-
0,
|
|
40
|
-
screenWidth:
|
|
41
|
-
Constants.platform?.ios?.screenWidth ||
|
|
42
|
-
Constants.platform?.android?.screenWidth ||
|
|
43
|
-
0,
|
|
44
|
-
acceptHeader: 'application/json',
|
|
45
|
-
userAgentHeader: 'Expo App',
|
|
46
|
-
browserLanguage: 'en_US',
|
|
47
|
-
ipAddress: 'null',
|
|
48
|
-
colorDepth: 24,
|
|
49
|
-
javaEnabled: true,
|
|
50
|
-
timeZoneOffSet: new Date().getTimezoneOffset(),
|
|
51
|
-
packageId: Constants.manifest?.id || 'com.boxpay.checkout.sdk',
|
|
52
|
-
},
|
|
18
|
+
browserData: browserData,
|
|
53
19
|
instrumentDetails: {
|
|
54
20
|
type: instrumentDetails,
|
|
55
21
|
[paymentMethod]: {
|
|
56
22
|
token: checkoutDetails.token,
|
|
57
23
|
},
|
|
58
24
|
},
|
|
59
|
-
shopper:
|
|
60
|
-
email: userData.email,
|
|
61
|
-
firstName: userData.firstName,
|
|
62
|
-
gender: null,
|
|
63
|
-
lastName: userData.lastName,
|
|
64
|
-
phoneNumber: userData.phone,
|
|
65
|
-
uniqueReference: userData.uniqueId,
|
|
66
|
-
dateOfBirth: userData.dob,
|
|
67
|
-
panNumber: userData.pan,
|
|
68
|
-
deliveryAddress: isDeliveryAddressEmpty(deliveryAddress)
|
|
69
|
-
? null
|
|
70
|
-
: deliveryAddress,
|
|
71
|
-
},
|
|
25
|
+
shopper: shopperData,
|
|
72
26
|
deviceDetails: deviceDetails
|
|
73
27
|
};
|
|
74
28
|
|
|
@@ -1,64 +1,18 @@
|
|
|
1
|
-
import Constants from 'expo-constants';
|
|
2
1
|
import api from '../serviceRequest';
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import { getDeviceDetails } from '../utils/listAndObjectUtils';
|
|
2
|
+
import type { InstrumentDetails, PaymentExecutedPostResponse } from '../interface';
|
|
3
|
+
import { getBrowserData, getDeviceDetails, getShopperDetails } from '../utils/listAndObjectUtils';
|
|
6
4
|
import { AnalyticsEvents, APIStatus } from '../interface';
|
|
7
5
|
import callUIAnalytics from './callUIAnalytics';
|
|
8
6
|
|
|
9
7
|
const upiPostRequest = async (instrumentDetails: InstrumentDetails) : Promise<PaymentExecutedPostResponse> => {
|
|
10
|
-
const { userData } = userDataHandler;
|
|
11
8
|
const deviceDetails = getDeviceDetails()
|
|
9
|
+
const browserData = getBrowserData()
|
|
10
|
+
const shopperData = getShopperDetails()
|
|
12
11
|
|
|
13
|
-
const isDeliveryAddressEmpty = (address: DeliveryAddress): boolean => {
|
|
14
|
-
return Object.values(address).every(
|
|
15
|
-
(value) => value === null || value === undefined || value === ''
|
|
16
|
-
);
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
const deliveryAddress = {
|
|
20
|
-
address1: userData.address1,
|
|
21
|
-
address2: userData.address2,
|
|
22
|
-
city: userData.city,
|
|
23
|
-
state: userData.state,
|
|
24
|
-
countryCode: userData.country,
|
|
25
|
-
postalCode: userData.pincode,
|
|
26
|
-
labelType: userData.labelType,
|
|
27
|
-
labelName: userData.labelName,
|
|
28
|
-
};
|
|
29
12
|
const requestBody = {
|
|
30
|
-
browserData:
|
|
31
|
-
screenHeight:
|
|
32
|
-
Constants.platform?.ios?.screenHeight ||
|
|
33
|
-
Constants.platform?.android?.screenHeight ||
|
|
34
|
-
0,
|
|
35
|
-
screenWidth:
|
|
36
|
-
Constants.platform?.ios?.screenWidth ||
|
|
37
|
-
Constants.platform?.android?.screenWidth ||
|
|
38
|
-
0,
|
|
39
|
-
acceptHeader: 'application/json',
|
|
40
|
-
userAgentHeader: 'Expo App',
|
|
41
|
-
browserLanguage: 'en_US',
|
|
42
|
-
ipAddress: 'null',
|
|
43
|
-
colorDepth: 24,
|
|
44
|
-
javaEnabled: true,
|
|
45
|
-
timeZoneOffSet: new Date().getTimezoneOffset(),
|
|
46
|
-
packageId: Constants.manifest?.id || 'com.boxpay.checkout.sdk',
|
|
47
|
-
},
|
|
13
|
+
browserData: browserData,
|
|
48
14
|
instrumentDetails,
|
|
49
|
-
shopper:
|
|
50
|
-
email: userData.email,
|
|
51
|
-
firstName: userData.firstName,
|
|
52
|
-
gender: null,
|
|
53
|
-
lastName: userData.lastName,
|
|
54
|
-
phoneNumber: userData.phone,
|
|
55
|
-
uniqueReference: userData.uniqueId,
|
|
56
|
-
dateOfBirth: userData.dob,
|
|
57
|
-
panNumber: userData.pan,
|
|
58
|
-
deliveryAddress: isDeliveryAddressEmpty(deliveryAddress)
|
|
59
|
-
? null
|
|
60
|
-
: deliveryAddress,
|
|
61
|
-
},
|
|
15
|
+
shopper: shopperData,
|
|
62
16
|
deviceDetails: deviceDetails
|
|
63
17
|
};
|
|
64
18
|
|
|
@@ -80,8 +80,12 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
|
|
|
80
80
|
const [recommendedInstrumentsArray, setRecommendedInstruments] = useState<PaymentClass[]>([]);
|
|
81
81
|
const [savedCardArray, setSavedCardArray] = useState<PaymentClass[]>([]);
|
|
82
82
|
const [savedUpiArray, setSavedUpiArray] = useState<PaymentClass[]>([]);
|
|
83
|
+
const [qrImageUrl, setQrImageUrl] = useState<string | null> (null)
|
|
84
|
+
const qrTimerRef = useRef<NodeJS.Timeout | null>(null);
|
|
85
|
+
const [timerValue, setTimerValue] = useState(5 * 60);
|
|
83
86
|
|
|
84
87
|
let isFirstTimeLoadRef = useRef(true);
|
|
88
|
+
let qrIsExpired = useRef(false)
|
|
85
89
|
|
|
86
90
|
const handlePaymentIntent = async (selectedIntent: string) => {
|
|
87
91
|
setLoadingState(true);
|
|
@@ -153,6 +157,38 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
|
|
|
153
157
|
});
|
|
154
158
|
};
|
|
155
159
|
|
|
160
|
+
const handleUpiQRPayment = async() => {
|
|
161
|
+
const requestPayload: InstrumentDetails ={
|
|
162
|
+
type: 'upi/qr',
|
|
163
|
+
}
|
|
164
|
+
setLoadingState(true);
|
|
165
|
+
const response = await upiPostRequest(requestPayload);
|
|
166
|
+
handlePaymentResponse({
|
|
167
|
+
response: response,
|
|
168
|
+
checkoutDetailsErrorMessage: checkoutDetailsHandler.checkoutDetails.errorMessage,
|
|
169
|
+
onSetStatus: setStatus,
|
|
170
|
+
onSetTransactionId: setTransactionId,
|
|
171
|
+
onSetPaymentHtml: setPaymentHtml,
|
|
172
|
+
onSetPaymentUrl: setPaymentUrl,
|
|
173
|
+
onSetFailedMessage: (msg) => (paymentFailedMessage.current = msg),
|
|
174
|
+
onShowFailedModal: () => setFailedModalState(true),
|
|
175
|
+
onShowSuccessModal: (ts) => {
|
|
176
|
+
setSuccessfulTimeStamp(ts);
|
|
177
|
+
setSuccessModalState(true);
|
|
178
|
+
},
|
|
179
|
+
onShowSessionExpiredModal: () => setSessionExppireModalState(true),
|
|
180
|
+
onOpenQr: (id:string)=> {
|
|
181
|
+
setQrImageUrl(id)
|
|
182
|
+
startQRTimer()
|
|
183
|
+
qrIsExpired.current = false
|
|
184
|
+
},
|
|
185
|
+
onOpenUpiIntent : (url) => {
|
|
186
|
+
urlToBase64(url);
|
|
187
|
+
},
|
|
188
|
+
setLoading: setLoadingState
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
|
|
156
192
|
useEffect(() => {
|
|
157
193
|
if (isFirstTimeLoadRef.current) {
|
|
158
194
|
isFirstTimeLoadRef.current = false;
|
|
@@ -202,6 +238,33 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
|
|
|
202
238
|
}
|
|
203
239
|
}, [paymentUrl, paymentHtml]);
|
|
204
240
|
|
|
241
|
+
const startQRTimer = () => {
|
|
242
|
+
qrTimerRef.current = setInterval(() => {
|
|
243
|
+
setTimerValue((prevTime) => {
|
|
244
|
+
if (prevTime <= 1) {
|
|
245
|
+
clearInterval(qrTimerRef.current!);
|
|
246
|
+
qrIsExpired.current = true
|
|
247
|
+
return 0;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// ⏱️ Decrement timer
|
|
251
|
+
const newTime = prevTime - 1;
|
|
252
|
+
|
|
253
|
+
// 🌐 Call API every 4 seconds (or any interval you want)
|
|
254
|
+
if (newTime % 4 === 0) {
|
|
255
|
+
callFetchStatusApi();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return newTime;
|
|
259
|
+
});
|
|
260
|
+
}, 1000);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const stopQRTimer= () => {
|
|
264
|
+
if(qrTimerRef.current) {
|
|
265
|
+
clearInterval(qrTimerRef.current!);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
205
268
|
const openUPIIntent = async (url: string) => {
|
|
206
269
|
try {
|
|
207
270
|
await Linking.openURL(url); // Open the UPI app
|
|
@@ -304,6 +367,7 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
|
|
|
304
367
|
const methodFlags = {
|
|
305
368
|
isUPIIntentVisible: false,
|
|
306
369
|
isUPICollectVisible: false,
|
|
370
|
+
isUPIQRVisible : false,
|
|
307
371
|
isCardsVisible: false,
|
|
308
372
|
isWalletVisible: false,
|
|
309
373
|
isNetbankingVisible: false,
|
|
@@ -317,6 +381,8 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
|
|
|
317
381
|
methodFlags.isUPIIntentVisible = true;
|
|
318
382
|
} else if (method.brand === 'UpiCollect') {
|
|
319
383
|
methodFlags.isUPICollectVisible = true;
|
|
384
|
+
} else if(method.brand === 'UpiQr') {
|
|
385
|
+
methodFlags.isUPIQRVisible = true
|
|
320
386
|
}
|
|
321
387
|
} else if (method.type === 'Card') {
|
|
322
388
|
methodFlags.isCardsVisible = true;
|
|
@@ -471,6 +537,7 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
|
|
|
471
537
|
isDOBEditable: isFieldEditable('SHOPPER_DOB'),
|
|
472
538
|
isUpiIntentMethodEnabled : methodFlags.isUPIIntentVisible,
|
|
473
539
|
isUpiCollectMethodEnabled : methodFlags.isUPICollectVisible,
|
|
540
|
+
isUpiQRMethodEnabled : methodFlags.isUPIQRVisible,
|
|
474
541
|
isCardMethodEnabled : methodFlags.isCardsVisible,
|
|
475
542
|
isWalletMethodEnabled : methodFlags.isWalletVisible,
|
|
476
543
|
isNetBankingMethodEnabled : methodFlags.isNetbankingVisible,
|
|
@@ -666,6 +733,11 @@ const MainScreen = ({route, navigation} : MainScreenProps) => {
|
|
|
666
733
|
}
|
|
667
734
|
savedUpiArray={savedUpiArray}
|
|
668
735
|
onClickRadio={handleSavedUpiSectionClick}
|
|
736
|
+
qrImage={qrImageUrl}
|
|
737
|
+
handleQRPayment={handleUpiQRPayment}
|
|
738
|
+
qrIsExpired = {qrIsExpired.current}
|
|
739
|
+
timeRemaining={timerValue}
|
|
740
|
+
stopTimer = {stopQRTimer}
|
|
669
741
|
/>
|
|
670
742
|
|
|
671
743
|
{savedCardArray.length != 0 && (
|