Skip to content

Commit ad4d04a

Browse files
Abhishek ChorotiyaAbhishek Chorotiya
authored andcommitted
feat: amazonPay
1 parent 15c4ccb commit ad4d04a

File tree

6 files changed

+36
-50
lines changed

6 files changed

+36
-50
lines changed

src/Payments/AmazonPay/AmazonPay.res

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ let make = (~amazonPayToken) => {
88

99
let {iframeId} = Recoil.useRecoilValueFromAtom(RecoilAtoms.keys)
1010

11-
let handleFullscreenClick = () => {
11+
let showFullScreenLoader = () => {
1212
Utils.messageParentWindow([
1313
("fullscreen", true->JSON.Encode.bool),
1414
("param", "paymentloader"->JSON.Encode.string),
1515
("iframeId", iframeId->JSON.Encode.string),
1616
])
1717
}
18-
<div onClick={_ => handleFullscreenClick()} id="AmazonPayButton" />
18+
<div onClick={_ => showFullScreenLoader()} id="AmazonPayButton" />
1919
}
20+
21+
let default = make

src/Payments/AmazonPay/AmazonPayHelpers.res

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,62 +6,47 @@ external renderAmazonPayButton: (~buttonId: string, ~config: amazonPayConfigType
66

77
let deliveryPriceMapper = dict => {
88
{
9-
amount: getInt(dict, "amount", 0),
10-
displayAmount: getString(dict, "display_amount", ""),
11-
currencyCode: getString(dict, "currency_code", ""),
9+
amount: dict->getInt("amount", 0),
10+
displayAmount: dict->getString("display_amount", ""),
11+
currencyCode: dict->getString("currency_code", ""),
1212
}
1313
}
1414

1515
let shippingMethodMapper = dict => {
1616
{
17-
shippingMethodName: getString(dict, "shipping_method_name", ""),
18-
shippingMethodCode: getString(dict, "shipping_method_code", ""),
17+
shippingMethodName: dict->getString("shipping_method_name", ""),
18+
shippingMethodCode: dict->getString("shipping_method_code", ""),
1919
}
2020
}
2121

2222
let deliveryOptionMapper = dict => {
2323
let priceData = dict->getDictFromDict("price")->deliveryPriceMapper
2424
{
25-
id: getString(dict, "id", ""),
25+
id: dict->getString("id", ""),
2626
price: {
2727
amount: priceData.displayAmount,
2828
currencyCode: priceData.currencyCode,
2929
},
3030
shippingMethod: dict->getDictFromDict("shipping_method")->shippingMethodMapper,
31-
isDefault: getBool(dict, "is_default", false),
31+
isDefault: dict->getBool("is_default", false),
3232
}
3333
}
3434

3535
let amazonPayTokenMapper = dict => {
3636
{
37-
walletName: getString(dict, "wallet_name", ""),
38-
merchantId: getString(dict, "merchant_id", ""),
39-
ledgerCurrency: getString(dict, "ledger_currency", ""),
40-
storeId: getString(dict, "store_id", ""),
41-
paymentIntent: getString(dict, "payment_intent", ""),
42-
totalShippingAmount: getString(dict, "total_shipping_amount", ""),
43-
totalTaxAmount: getString(dict, "total_tax_amount", ""),
44-
totalBaseAmount: getString(dict, "total_base_amount", ""),
45-
deliveryOptions: getArray(dict, "delivery_options")->Array.map(item =>
46-
item->getDictFromJson->deliveryOptionMapper
47-
),
37+
walletName: dict->getString("wallet_name", ""),
38+
merchantId: dict->getString("merchant_id", ""),
39+
ledgerCurrency: dict->getString("ledger_currency", ""),
40+
storeId: dict->getString("store_id", ""),
41+
paymentIntent: dict->getString("payment_intent", ""),
42+
totalTaxAmount: dict->getString("total_tax_amount", ""),
43+
totalBaseAmount: dict->getString("total_base_amount", ""),
44+
deliveryOptions: dict
45+
->getArray("delivery_options")
46+
->Array.map(item => item->getDictFromJson->deliveryOptionMapper),
4847
}
4948
}
5049

51-
let mapDeliveryOptionsToConfig = (options: array<deliveryOption>): array<deliveryOption> => {
52-
options->Array.map(option => {
53-
{
54-
id: option.id,
55-
price: {
56-
amount: option.price.amount,
57-
currencyCode: option.price.currencyCode,
58-
},
59-
shippingMethod: option.shippingMethod,
60-
isDefault: option.isDefault,
61-
}
62-
})
63-
}
64-
6550
let amazonPayBody = (amazonCheckoutSessionId, shipping) => {
6651
let wallet = {
6752
amazon_pay: {

src/Payments/AmazonPay/AmazonPayHooks.res

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,18 @@ let useAmazonPay = token => {
1515
let getAmazonPayConfig = (sessionToken: amazonPayTokenType): amazonPayConfigType => {
1616
let baseAmount = sessionToken.totalBaseAmount->Float.fromString->Option.getOr(0.0)
1717
let taxAmount = sessionToken.totalTaxAmount->Float.fromString->Option.getOr(0.0)
18-
let shippingAmount = sessionToken.totalShippingAmount->Float.fromString->Option.getOr(0.0)
18+
let defaultShippingAmount =
19+
sessionToken.deliveryOptions
20+
->Array.find(option => option.isDefault)
21+
->Option.mapOr("0.0", option => option.price.amount)
22+
23+
let shippingAmount = defaultShippingAmount->Float.fromString->Option.getOr(0.0)
24+
1925
let totalOrderAmount = (baseAmount +. taxAmount +. shippingAmount)->Float.toString
2026
let currencyCode = sessionToken.ledgerCurrency
2127

2228
{
23-
merchantId: "A3UJN62U20X4GB",
29+
merchantId: sessionToken.merchantId,
2430
ledgerCurrency: sessionToken.ledgerCurrency,
2531
sandbox: true,
2632
checkoutLanguage: "en_US",
@@ -32,7 +38,7 @@ let useAmazonPay = token => {
3238
currencyCode: sessionToken.ledgerCurrency,
3339
},
3440
checkoutSessionConfig: {
35-
storeId: "amzn1.application-oa2-client.43ee1af277a94b6c8efd9118dd6c156c",
41+
storeId: sessionToken.storeId,
3642
scopes: ["name", "email", "phoneNumber", "billingAddress"],
3743
paymentDetails: {
3844
paymentIntent: sessionToken.paymentIntent,
@@ -43,7 +49,7 @@ let useAmazonPay = token => {
4349
shippingAddressRef.current = event->getShippingAddressFromEvent
4450

4551
{
46-
totalShippingAmount: {amount: sessionToken.totalShippingAmount, currencyCode},
52+
totalShippingAmount: {amount: defaultShippingAmount, currencyCode},
4753
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
4854
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
4955
totalChargeAmount: {amount: totalOrderAmount, currencyCode},
@@ -55,7 +61,7 @@ let useAmazonPay = token => {
5561
shippingAddressRef.current = event->getShippingAddressFromEvent
5662

5763
{
58-
totalShippingAmount: {amount: sessionToken.totalShippingAmount, currencyCode},
64+
totalShippingAmount: {amount: defaultShippingAmount, currencyCode},
5965
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
6066
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
6167
totalChargeAmount: {amount: totalOrderAmount, currencyCode},
@@ -64,10 +70,8 @@ let useAmazonPay = token => {
6470
}
6571
},
6672
onDeliveryOptionSelection: event => {
67-
Console.log("Delivery option updated")
68-
let deliveryOptions = sessionToken.deliveryOptions
6973
let selectedOption =
70-
deliveryOptions->Array.find(option => option.id === event.deliveryOptions.id)
74+
sessionToken.deliveryOptions->Array.find(option => option.id === event.deliveryOptions.id)
7175
let newShippingAmount = selectedOption->Option.mapOr("0.0", option => option.price.amount)
7276
let baseAmount = sessionToken.totalBaseAmount->Float.fromString->Option.getOr(0.0)
7377
let taxAmount = sessionToken.totalTaxAmount->Float.fromString->Option.getOr(0.0)
@@ -83,11 +87,6 @@ let useAmazonPay = token => {
8387
}
8488
},
8589
onCompleteCheckout: event => {
86-
Console.log2(
87-
"Checkout completed successfully! (This is a demo - no actual payment was processed)",
88-
event,
89-
)
90-
9190
let amazonCheckoutSessionId =
9291
event->getDictFromJson->getString("amazonCheckoutSessionId", "")
9392

@@ -116,7 +115,7 @@ let useAmazonPay = token => {
116115
}
117116

118117
let isRenderedOnce = React.useRef(false)
119-
let config = getAmazonPayConfig(token)
118+
let config = React.useMemo(() => getAmazonPayConfig(token), [token])
120119

121120
React.useEffect3(() => {
122121
let shouldRender =
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let make = React.lazy_(() => Js.import(AmazonPay.default))

src/Payments/AmazonPay/AmazonPayTypes.res

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ type amazonPayTokenType = {
2727
ledgerCurrency: string,
2828
storeId: string,
2929
paymentIntent: string,
30-
totalShippingAmount: string,
3130
totalTaxAmount: string,
3231
totalBaseAmount: string,
3332
deliveryOptions: array<deliveryOption>,

src/Payments/PaymentRequestButtonElement.res

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ let make = (~sessions, ~walletOptions) => {
154154
switch amazonPayToken {
155155
| AmazonPayTokenOptional(optToken) =>
156156
switch optToken {
157-
| Some(token) => <AmazonPay amazonPayToken={token->Utils.getDictFromJson} />
157+
| Some(token) => <AmazonPayLazy amazonPayToken={token->Utils.getDictFromJson} />
158158
| None => React.null
159159
}
160160
| _ => React.null

0 commit comments

Comments
 (0)