Skip to content

Commit acce523

Browse files
Abhishek ChorotiyaAbhishek Chorotiya
authored andcommitted
feat: amazonPay
1 parent a795949 commit acce523

File tree

3 files changed

+72
-61
lines changed

3 files changed

+72
-61
lines changed

src/Payments/AmazonPay/AmazonPayHelpers.res

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,46 @@ let getShippingAddressFromEvent = event => {
109109
phone: {number: phoneNumber},
110110
}
111111
}
112+
113+
let handleOnInitCheckout = (
114+
event,
115+
shippingAddressRef: React.ref<shipping>,
116+
defaultShippingAmount,
117+
currencyCode,
118+
sessionToken: amazonPayTokenType,
119+
totalOrderAmount,
120+
) => {
121+
shippingAddressRef.current = event->getShippingAddressFromEvent
122+
123+
{
124+
totalShippingAmount: {amount: defaultShippingAmount, currencyCode},
125+
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
126+
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
127+
totalChargeAmount: {amount: totalOrderAmount, currencyCode},
128+
totalDiscountAmount: {amount: "0.00", currencyCode},
129+
deliveryOptions: sessionToken.deliveryOptions,
130+
}
131+
}
132+
133+
// Shared function for onInitCheckout and onShippingAddressSelection
134+
// Both handlers return identical values with updated shipping address
135+
let handleOnShippingAddressSelection = handleOnInitCheckout
136+
137+
let handleOnDeliveryOptionSelection = (event, currencyCode, sessionToken: amazonPayTokenType) => {
138+
let selectedOption =
139+
sessionToken.deliveryOptions->Array.find(option => option.id === event.deliveryOptions.id)
140+
141+
let newShippingAmount = selectedOption->Option.mapOr("0.0", option => option.price.amount)
142+
let baseAmount = sessionToken.totalBaseAmount->Float.fromString->Option.getOr(0.0)
143+
let taxAmount = sessionToken.totalTaxAmount->Float.fromString->Option.getOr(0.0)
144+
let shippingAmount = newShippingAmount->Float.fromString->Option.getOr(0.0)
145+
let newTotalAmount = (baseAmount +. taxAmount +. shippingAmount)->Float.toString
146+
147+
{
148+
totalShippingAmount: {amount: newShippingAmount, currencyCode},
149+
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
150+
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
151+
totalChargeAmount: {amount: newTotalAmount, currencyCode},
152+
totalDiscountAmount: {amount: "0.00", currencyCode},
153+
}
154+
}

src/Payments/AmazonPay/AmazonPayHooks.res

Lines changed: 28 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -45,62 +45,40 @@ let useAmazonPay = token => {
4545
canHandlePendingAuthorization: false,
4646
},
4747
},
48-
onInitCheckout: event => {
49-
shippingAddressRef.current = event->getShippingAddressFromEvent
50-
51-
{
52-
totalShippingAmount: {amount: defaultShippingAmount, currencyCode},
53-
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
54-
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
55-
totalChargeAmount: {amount: totalOrderAmount, currencyCode},
56-
totalDiscountAmount: {amount: "0.00", currencyCode},
57-
deliveryOptions: sessionToken.deliveryOptions,
58-
}
59-
},
60-
onShippingAddressSelection: event => {
61-
shippingAddressRef.current = event->getShippingAddressFromEvent
62-
63-
{
64-
totalShippingAmount: {amount: defaultShippingAmount, currencyCode},
65-
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
66-
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
67-
totalChargeAmount: {amount: totalOrderAmount, currencyCode},
68-
totalDiscountAmount: {amount: "0.00", currencyCode},
69-
deliveryOptions: sessionToken.deliveryOptions,
70-
}
71-
},
72-
onDeliveryOptionSelection: event => {
73-
let selectedOption =
74-
sessionToken.deliveryOptions->Array.find(option => option.id === event.deliveryOptions.id)
75-
let newShippingAmount = selectedOption->Option.mapOr("0.0", option => option.price.amount)
76-
let baseAmount = sessionToken.totalBaseAmount->Float.fromString->Option.getOr(0.0)
77-
let taxAmount = sessionToken.totalTaxAmount->Float.fromString->Option.getOr(0.0)
78-
let shippingAmount = newShippingAmount->Float.fromString->Option.getOr(0.0)
79-
let newTotalAmount = (baseAmount +. taxAmount +. shippingAmount)->Float.toString
80-
81-
{
82-
totalShippingAmount: {amount: newShippingAmount, currencyCode},
83-
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
84-
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
85-
totalChargeAmount: {amount: newTotalAmount, currencyCode},
86-
totalDiscountAmount: {amount: "0.00", currencyCode},
87-
}
88-
},
89-
onCompleteCheckout: event => {
90-
let amazonCheckoutSessionId =
91-
event->getDictFromJson->getString("amazonCheckoutSessionId", "")
92-
48+
onInitCheckout: e =>
49+
handleOnInitCheckout(
50+
e,
51+
shippingAddressRef,
52+
defaultShippingAmount,
53+
currencyCode,
54+
sessionToken,
55+
totalOrderAmount,
56+
),
57+
onShippingAddressSelection: e =>
58+
handleOnShippingAddressSelection(
59+
e,
60+
shippingAddressRef,
61+
defaultShippingAmount,
62+
currencyCode,
63+
sessionToken,
64+
totalOrderAmount,
65+
),
66+
onDeliveryOptionSelection: e =>
67+
handleOnDeliveryOptionSelection(e, currencyCode, sessionToken),
68+
onCompleteCheckout: event =>
9369
intent(
94-
~bodyArr=amazonPayBody(amazonCheckoutSessionId, shippingAddressRef.current),
70+
~bodyArr=amazonPayBody(
71+
event->getDictFromJson->getString("amazonCheckoutSessionId", ""),
72+
shippingAddressRef.current,
73+
),
9574
~confirmParam={
9675
return_url: options.wallets.walletReturnUrl,
9776
publishableKey,
9877
},
9978
~handleUserError=true,
10079
~manualRetry=isManualRetryEnabled,
101-
)
102-
},
103-
onCancel: _ => {
80+
),
81+
onCancel: _ =>
10482
intent(
10583
~bodyArr=amazonPayBody("", shippingAddressRef.current),
10684
~confirmParam={
@@ -109,8 +87,7 @@ let useAmazonPay = token => {
10987
},
11088
~handleUserError=true,
11189
~manualRetry=isManualRetryEnabled,
112-
)
113-
},
90+
),
11491
}
11592
}
11693

src/Payments/AmazonPay/AmazonPayTypes.res

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,6 @@ type amountDetails = {
5353
currencyCode: string,
5454
}
5555

56-
type cartDetails = {
57-
totalShippingAmount: amountDetails,
58-
totalBaseAmount: amountDetails,
59-
totalTaxAmount: amountDetails,
60-
totalChargeAmount: amountDetails,
61-
totalDiscountAmount: amountDetails,
62-
deliveryOptions: array<deliveryOption>,
63-
}
64-
6556
type shippingAddressResponse = {
6657
totalShippingAmount: amountDetails,
6758
totalBaseAmount: amountDetails,
@@ -93,7 +84,7 @@ type amazonPayConfigType = {
9384
buttonColor: string,
9485
estimatedOrderAmount: estimatedOrderAmount,
9586
checkoutSessionConfig: checkoutSessionConfig,
96-
onInitCheckout: JSON.t => cartDetails,
87+
onInitCheckout: JSON.t => shippingAddressResponse,
9788
onShippingAddressSelection: JSON.t => shippingAddressResponse,
9889
onDeliveryOptionSelection: deliveryOptionEvent => deliveryOptionResponse,
9990
onCompleteCheckout: JSON.t => unit,

0 commit comments

Comments
 (0)