diff --git a/src/Components/Surcharge.res b/src/Components/Surcharge.res index f8821d4bf..1b69d51b6 100644 --- a/src/Components/Surcharge.res +++ b/src/Components/Surcharge.res @@ -19,12 +19,15 @@ let make = ( let paymentMethodTypes = paymentMethodType->getPaymentMethodTypes + let getOneClickWalletsMessage = SurchargeUtils.useOneClickWalletsMessageGetter(~list) + let getSurchargeMessage = () => { if isForWallets { - SurchargeUtils.getOneClickWalletsMessage(~list) + getOneClickWalletsMessage() } else { switch paymentMethodTypes.surcharge_details { - | Some(surchargeDetails) => SurchargeUtils.getMessage(~paymentMethod, ~surchargeDetails, ~list) + | Some(surchargeDetails) => + SurchargeUtils.getMessage(~paymentMethod, ~surchargeDetails, ~list) | None => if paymentMethod === "card" { let creditPaymentMethodTypes = getPaymentMethodTypes("credit") @@ -44,9 +47,17 @@ let make = ( let debitCardSurcharge = debitSurchargeDetails.displayTotalSurchargeAmount if creditCardSurcharge >= debitCardSurcharge { - SurchargeUtils.getMessage(~paymentMethod, ~surchargeDetails={creditSurchargeDetails}, ~list) + SurchargeUtils.getMessage( + ~paymentMethod, + ~surchargeDetails={creditSurchargeDetails}, + ~list, + ) } else { - SurchargeUtils.getMessage(~paymentMethod, ~surchargeDetails={debitSurchargeDetails}, ~list) + SurchargeUtils.getMessage( + ~paymentMethod, + ~surchargeDetails={debitSurchargeDetails}, + ~list, + ) } | (None, Some(surchargeDetails)) | (Some(surchargeDetails), None) => diff --git a/src/Components/SurchargeUtils.res b/src/Components/SurchargeUtils.res index cc077d976..8d56baf4b 100644 --- a/src/Components/SurchargeUtils.res +++ b/src/Components/SurchargeUtils.res @@ -13,39 +13,41 @@ type walletSurchargeDetails = { surchargeDetails: PaymentMethodsRecord.surchargeDetails, } -let getSurchargeDetailsForOneClickWallets = (~list) => { +let useSurchargeDetailsForOneClickWallets = (~list) => { let areOneClickWalletsRendered = Recoil.useRecoilValueFromAtom( RecoilAtoms.areOneClickWalletsRendered, ) - oneClickWallets->Js.Array2.reduce((acc, wallet) => { - let isWalletBtnRendered = switch wallet.paymentMethodType { - | "apple_pay" => areOneClickWalletsRendered.isApplePay - | "paypal" => areOneClickWalletsRendered.isPaypal - | "google_pay" => areOneClickWalletsRendered.isGooglePay - | _ => false - } - if isWalletBtnRendered { - let paymentMethodType = - PaymentMethodsRecord.getPaymentMethodTypeFromList( - ~list, - ~paymentMethod="wallet", - ~paymentMethodType=wallet.paymentMethodType, - )->Belt.Option.getWithDefault(PaymentMethodsRecord.defaultPaymentMethodType) - switch paymentMethodType.surcharge_details { - | Some(surchargDetails) => - acc->Js.Array2.concat([ - { - name: wallet.displayName, - surchargeDetails: surchargDetails, - }, - ]) - | None => acc + React.useMemo2(() => { + oneClickWallets->Js.Array2.reduce((acc, wallet) => { + let isWalletBtnRendered = switch wallet.paymentMethodType { + | "apple_pay" => areOneClickWalletsRendered.isApplePay + | "paypal" => areOneClickWalletsRendered.isPaypal + | "google_pay" => areOneClickWalletsRendered.isGooglePay + | _ => false } - } else { - acc - } - }, []) + if isWalletBtnRendered { + let paymentMethodType = + PaymentMethodsRecord.getPaymentMethodTypeFromList( + ~list, + ~paymentMethod="wallet", + ~paymentMethodType=wallet.paymentMethodType, + )->Belt.Option.getWithDefault(PaymentMethodsRecord.defaultPaymentMethodType) + switch paymentMethodType.surcharge_details { + | Some(surchargDetails) => + acc->Js.Array2.concat([ + { + name: wallet.displayName, + surchargeDetails: surchargDetails, + }, + ]) + | None => acc + } + } else { + acc + } + }, []) + }, (areOneClickWalletsRendered, list)) } let getMessage = ( @@ -70,44 +72,48 @@ let getMessage = ( ) } -let getOneClickWalletsMessage = (~list) => { +let useOneClickWalletsMessageGetter = (~list) => { let {localeString} = Recoil.useRecoilValueFromAtom(RecoilAtoms.configAtom) - let oneClickWalletsArr = getSurchargeDetailsForOneClickWallets(~list) + let oneClickWalletsArr = useSurchargeDetailsForOneClickWallets(~list) - if oneClickWalletsArr->Js.Array2.length !== 0 { - let msg = oneClickWalletsArr->Js.Array2.reducei((acc, wallet, index) => { - let amount = wallet.surchargeDetails.displayTotalSurchargeAmount->Js.Float.toString - let myMsg = - <> - {React.string(`${list.currency} ${amount}`)} - {React.string(`${Utils.nbsp}${localeString.on} ${wallet.name}`)} - - let msgToConcat = if index === 0 { - myMsg - } else if index === oneClickWalletsArr->Belt.Array.length - 1 { + let getOneClickWalletsMessage = () => { + if oneClickWalletsArr->Js.Array2.length !== 0 { + let msg = oneClickWalletsArr->Js.Array2.reducei((acc, wallet, index) => { + let amount = wallet.surchargeDetails.displayTotalSurchargeAmount->Js.Float.toString + let myMsg = + <> + {React.string(`${list.currency} ${amount}`)} + {React.string(`${Utils.nbsp}${localeString.on} ${wallet.name}`)} + + let msgToConcat = if index === 0 { + myMsg + } else if index === oneClickWalletsArr->Belt.Array.length - 1 { + <> + {React.string(`${Utils.nbsp}${localeString.\"and"}${Utils.nbsp}`)} + {myMsg} + + } else { + <> + {React.string(`,${Utils.nbsp}`)} + {myMsg} + + } <> - {React.string(`${Utils.nbsp}${localeString.\"and"}${Utils.nbsp}`)} - {myMsg} + {acc} + {msgToConcat} - } else { + }, React.null) + let finalElement = <> - {React.string(`,${Utils.nbsp}`)} - {myMsg} + {React.string(`${localeString.surchargeMsgAmountForOneClickWallets}:${Utils.nbsp}`)} + {msg} - } - <> - {acc} - {msgToConcat} - - }, React.null) - let finalElement = - <> - {React.string(`${localeString.surchargeMsgAmountForOneClickWallets}:${Utils.nbsp}`)} - {msg} - - Some(finalElement) - } else { - None + Some(finalElement) + } else { + None + } } + + getOneClickWalletsMessage }