Skip to content

Commit

Permalink
refactor: move confirm gpay, paypal, applepay callbacks to proceeRequ…
Browse files Browse the repository at this point in the history
…estWallet (#63)
  • Loading branch information
Shivam25092001 authored Aug 9, 2024
1 parent 3f1acd4 commit fce063b
Show file tree
Hide file tree
Showing 4 changed files with 212 additions and 235 deletions.
32 changes: 9 additions & 23 deletions src/headless/Headless.res
Original file line number Diff line number Diff line change
Expand Up @@ -80,17 +80,12 @@ let registerHeadless = headless => {
"user_agent",
nativeProp.hyperParams.userAgent->Option.getOr("")->JSON.Encode.string,
),
]
->Dict.fromArray
->JSON.Encode.object,
]->Utils.getDictFromArray,
),
]
->Dict.fromArray
->JSON.Encode.object,
]->Utils.getDictFromArray,
),
]
->Dict.fromArray
->JSON.Encode.object
->Utils.getDictFromArray
->JSON.stringify
->confirmCall(nativeProp)
| "Cancel" => reRegisterCallback.contents()
Expand Down Expand Up @@ -185,17 +180,11 @@ let registerHeadless = headless => {
"user_agent",
nativeProp.hyperParams.userAgent->Option.getOr("")->JSON.Encode.string,
),
]
->Dict.fromArray
->JSON.Encode.object,
]->Utils.getDictFromArray,
),
]
->Dict.fromArray
->JSON.Encode.object,
]->Utils.getDictFromArray,
),
]
->Dict.fromArray
->JSON.Encode.object
]->Utils.getDictFromArray
->JSON.stringify
->confirmCall(nativeProp)
}
Expand All @@ -222,9 +211,7 @@ let registerHeadless = headless => {
| None => JSON.Encode.null
},
),
]
->Dict.fromArray
->JSON.Encode.object
]->Utils.getDictFromArray
confirmCall(body->JSON.stringify, nativeProp)

| SAVEDLISTWALLET(data) =>
Expand All @@ -240,7 +227,7 @@ let registerHeadless = headless => {
switch data.walletType->Option.getOr("")->walletNameToTypeMapper {
| GOOGLE_PAY =>
HyperModule.launchGPay(
GooglePayTypeNew.getGpayToken(~obj=session, ~appEnv=nativeProp.env, ~requiredFields=[]), //walletType.required_field,
GooglePayTypeNew.getGpayToken(~obj=session, ~appEnv=nativeProp.env, ~requiredFields=[]),
var => {
RequiredFieldsTypes.importStates("./../utility/reusableCodeFromWeb/States.json")
->Promise.then(res => {
Expand Down Expand Up @@ -282,8 +269,7 @@ let registerHeadless = headless => {
("session_token_data", session.session_token_data),
("payment_request_data", session.payment_request_data),
]
->Dict.fromArray
->JSON.Encode.object
->Utils.getDictFromArray
->JSON.stringify,
var => {
RequiredFieldsTypes.importStates("./../utility/reusableCodeFromWeb/States.json")
Expand Down
175 changes: 3 additions & 172 deletions src/pages/payment/Redirect.res
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ let make = (
let (country, setCountry) = React.useState(_ => Some(nativeProp.hyperParams.country))
let (blikCode, setBlikCode) = React.useState(_ => None)
let (error, setError) = React.useState(_ => None)
let (statesJson, setStatesJson) = React.useState(_ => None)

let walletType: PaymentMethodListType.payment_method_types_wallet = switch redirectProp {
| WALLET(walletVal) => walletVal
Expand Down Expand Up @@ -183,164 +182,17 @@ let make = (
handleSuccessFailure(~apiResStatus=errorMessage, ~closeSDK, ())
}


let responseCallback = (~paymentStatus: LoadingContext.sdkPaymentState, ~status) => {
switch paymentStatus {
| PaymentSuccess => {
setLoading(PaymentSuccess)
setTimeout(() => handleSuccessFailure(~apiResStatus=status, ()), 300)->ignore
setTimeout(() => handleSuccessFailure(~apiResStatus=status, ()), 300)->ignore
}
| _ => handleSuccessFailure(~apiResStatus=status, ())
}
}

let confirmPayPal = var => {
let paymentData = var->PaymentConfirmTypes.itemToObjMapperJava
switch paymentData.error {
| "" =>
let json = paymentData.paymentMethodData->JSON.Encode.string
let paymentData = [("token", json)]->Utils.getDictFromArray
let payment_method_data =
[
(
walletType.payment_method,
[(walletType.payment_method_type ++ "_sdk", paymentData)]->Utils.getDictFromArray,
),
]->Utils.getDictFromArray
ProcessPaymentRequest.processRequest(
~payment_method=walletType.payment_method,
~payment_method_data,
~payment_method_type=paymentMethod,
~payment_experience_type=?walletType.payment_experience->getIndexZeroAndApplyTransform(
paymentExperience => paymentExperience.payment_experience_type,
),
~eligible_connectors=?walletType.payment_experience->getIndexZeroAndApplyTransform(
paymentExperience => paymentExperience.eligible_connectors,
),
~errorCallback,
~responseCallback,
~paymentMethod,
~paymentExperience,
~nativeProp,
~allApiData,
~fetchAndRedirect,
(),
)
| "User has canceled" =>
setLoading(FillingDetails)
setError(_ => Some("Payment was Cancelled"))
| err => setError(_ => Some(err))
}
}

let confirmGPay = var => {
let paymentData = var->PaymentConfirmTypes.itemToObjMapperJava
switch paymentData.error {
| "" =>
let json = paymentData.paymentMethodData->JSON.parseExn
let obj = json->Utils.getDictFromJson->GooglePayTypeNew.itemToObjMapper(statesJson)
let payment_method_data =
[
(
walletType.payment_method,
[
(walletType.payment_method_type, obj.paymentMethodData->ButtonElement.parser),
]->Utils.getDictFromArray,
),
]->Utils.getDictFromArray
ProcessPaymentRequest.processRequest(
~payment_method=walletType.payment_method,
~payment_method_data,
~payment_method_type=paymentMethod,
~payment_experience_type=?walletType.payment_experience->getIndexZeroAndApplyTransform(
paymentExperience => paymentExperience.payment_experience_type,
),
~eligible_connectors=?walletType.payment_experience->getIndexZeroAndApplyTransform(
paymentExperience => paymentExperience.eligible_connectors,
),
~errorCallback,
~responseCallback,
~paymentMethod,
~paymentExperience,
~nativeProp,
~allApiData,
~fetchAndRedirect,
(),
)
| "Cancel" =>
setLoading(FillingDetails)
setError(_ => Some("Payment was Cancelled"))
| err =>
setLoading(FillingDetails)
setError(_ => Some(err))
}
}

let confirmApplePay = var => {
switch var
->Dict.get("status")
->Option.getOr(JSON.Encode.null)
->JSON.Decode.string
->Option.getOr("") {
| "Cancelled" =>
setLoading(FillingDetails)
setError(_ => Some("Cancelled"))
| "Failed" =>
setLoading(FillingDetails)
setError(_ => Some("Failed"))
| "Error" =>
setLoading(FillingDetails)
setError(_ => Some("Error"))
| _ =>
let payment_data = var->Dict.get("payment_data")->Option.getOr(JSON.Encode.null)

let payment_method = var->Dict.get("payment_method")->Option.getOr(JSON.Encode.null)

let transaction_identifier =
var->Dict.get("transaction_identifier")->Option.getOr(JSON.Encode.null)

if transaction_identifier->JSON.stringify == "Simulated Identifier" {
setLoading(FillingDetails)
setError(_ => Some("Apple Pay is not supported in Simulated Environment"))
} else {
let paymentData =
[
("payment_data", payment_data),
("payment_method", payment_method),
("transaction_identifier", transaction_identifier),
]->Utils.getDictFromArray

let payment_method_data =
[
(
walletType.payment_method,
[(walletType.payment_method_type, paymentData)]->Utils.getDictFromArray,
),
]->Utils.getDictFromArray

ProcessPaymentRequest.processRequest(
~payment_method=walletType.payment_method,
~payment_method_data,
~payment_method_type=paymentMethod,
~payment_experience_type=?walletType.payment_experience->getIndexZeroAndApplyTransform(
paymentExperience => paymentExperience.payment_experience_type,
),
~eligible_connectors=?walletType.payment_experience->getIndexZeroAndApplyTransform(
paymentExperience => paymentExperience.eligible_connectors,
),
~errorCallback,
~responseCallback,
~paymentMethod,
~paymentExperience,
~nativeProp,
~allApiData,
~fetchAndRedirect,
(),
)
}
}
}

let handlePress = _ => {
setLoading(ProcessingPayments(None))
switch redirectProp {
Expand Down Expand Up @@ -399,9 +251,6 @@ let make = (
~setError,
~showAlert,
~sessionObject,
~confirmGPay,
~confirmPayPal,
~confirmApplePay,
~errorCallback,
~responseCallback,
~paymentMethod,
Expand All @@ -420,11 +269,7 @@ let make = (
setEmail(_ => Some(text))
}
let handlePressName = text => {
let y = if text->String.length >= 3 {
Some(true)
} else {
None
}
let y = text->String.length >= 3 ? Some(true) : None
setIsNameValid(_ => y)
setName(_ => Some(text))
}
Expand All @@ -441,21 +286,6 @@ let make = (
)) || (fields.name == "klarna" && isKlarna)
}, (isEmailValid, isNameValid, sessionData))

React.useEffect0(() => {
// Dynamically import/download Postal codes and states JSON
RequiredFieldsTypes.importStates("./../../utility/reusableCodeFromWeb/States.json")
->Promise.then(res => {
setStatesJson(_ => Some(res.states))
Promise.resolve()
})
->Promise.catch(_ => {
setStatesJson(_ => None)
Promise.resolve()
})
->ignore
None
})

React.useEffect(() => {
if isScreenFocus {
setConfirmButtonDataRef(
Expand All @@ -482,6 +312,7 @@ let make = (
name,
country,
email,
selectedBank,
))

<View style={viewStyle(~marginHorizontal=18.->dp, ())}>
Expand Down
8 changes: 0 additions & 8 deletions src/types/PaymentMethodListType.res
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,6 @@ type payment_method =
| BANK_REDIRECT(payment_method_types_bank_redirect)
| CRYPTO(payment_method_types_pay_later)

// type payment_method =
// | CARD(array<payment_method_types_card>)
// | WALLET(array<payment_method_types_wallet>)
// | PAY_LATER(array<payment_method_types_pay_later>)
// | BANK_REDIRECT(array<payment_method_types_bank_redirect>)
// | CRYPTO(array<payment_method_types_pay_later>)
// | NONE

type online = {
ip_address?: string,
user_agent?: string,
Expand Down
Loading

0 comments on commit fce063b

Please sign in to comment.