Skip to content

Commit e4bcede

Browse files
fix: co-badged card selection when priority scheme disabled (#237)
1 parent c72aac7 commit e4bcede

File tree

5 files changed

+25
-12
lines changed

5 files changed

+25
-12
lines changed

src/components/elements/CardElement.res

+3-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ let make = (
7373
text,
7474
expireRef: React.ref<Nullable.t<ReactNative.TextInput.element>>,
7575
) => {
76-
let cardBrand = getCardBrand(text)
76+
let enabledCardSchemes = PaymentUtils.getCardNetworks(cardNetworks->Option.getOr(None))
77+
let validCardBrand = getFirstValidCardScheme(~cardNumber=text, ~enabledCardSchemes)
78+
let cardBrand = validCardBrand === "" ? getCardBrand(text) : validCardBrand
7779
let num = formatCardNumber(text, cardType(cardBrand))
7880

7981
let isthisValid = cardValid(num, cardBrand)

src/components/elements/CardSchemeComponent.res

+3-10
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,14 @@ module CardSchemeSelectionPopoverElement = {
4646
let make = (~cardNumber, ~cardNetworks) => {
4747
let (cardData, setCardData) = React.useContext(CardDataContext.cardDataContext)
4848

49-
let cardBrand = Validation.getCardBrand(cardNumber)
49+
let enabledCardSchemes = PaymentUtils.getCardNetworks(cardNetworks->Option.getOr(None))
50+
let validCardBrand = Validation.getFirstValidCardScheme(~cardNumber, ~enabledCardSchemes)
51+
let cardBrand = validCardBrand === "" ? Validation.getCardBrand(cardNumber) : validCardBrand
5052
let (cardBrandIcon, setCardBrandIcon) = React.useState(_ =>
5153
cardBrand === "" ? "waitcard" : cardBrand
5254
)
5355
let (dropDownIconWidth, _) = React.useState(_ => Animated.Value.create(0.))
5456

55-
let getCardNetworks = cardNetworks => {
56-
switch cardNetworks {
57-
| Some(cardNetworks) =>
58-
cardNetworks->Array.map((item: PaymentMethodListType.card_networks) => item.card_network)
59-
| None => []
60-
}
61-
}
62-
63-
let enabledCardSchemes = getCardNetworks(cardNetworks->Option.getOr(None))
6457
let matchedCardSchemes = cardNumber->Validation.clearSpaces->Validation.getAllMatchedCardSchemes
6558
let eligibleCardSchemes = Validation.getEligibleCoBadgedCardSchemes(
6659
~matchedCardSchemes,

src/types/SamsungPayType.res

-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ let getShippingDetails = (dict): SdkTypes.addressDetails => {
135135
->Option.getOr(Dict.make())
136136
137137
let fullName = getString(shippingDict, "addressee", "")
138-
Console.log2("FullName", fullName)
139138
140139
let nameArr = String.split(fullName, " ")
141140
let firstName = nameArr[0]->Option.getOr("")

src/utility/logics/PaymentUtils.res

+8
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,11 @@ let getActionType = (nextActionObj: option<PaymentConfirmTypes.nextAction>) => {
181181
let actionType = nextActionObj->Option.getOr({type_: "", redirectToUrl: ""})
182182
actionType.type_
183183
}
184+
185+
let getCardNetworks = cardNetworks => {
186+
switch cardNetworks {
187+
| Some(cardNetworks) =>
188+
cardNetworks->Array.map((item: PaymentMethodListType.card_networks) => item.card_network)
189+
| None => []
190+
}
191+
}

src/utility/reusableCodeFromWeb/Validation.res

+11
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,17 @@ let getAllMatchedCardSchemes = cardNumber => {
146146
})
147147
}
148148

149+
let isCardSchemeEnabled = (~cardScheme, ~enabledCardSchemes) => {
150+
enabledCardSchemes->Array.includes(cardScheme)
151+
}
152+
153+
let getFirstValidCardScheme = (~cardNumber, ~enabledCardSchemes) => {
154+
let allMatchedCards = getAllMatchedCardSchemes(cardNumber->clearSpaces)
155+
allMatchedCards
156+
->Array.find(card => isCardSchemeEnabled(~cardScheme=card, ~enabledCardSchemes))
157+
->Option.getOr("")
158+
}
159+
149160
let getEligibleCoBadgedCardSchemes = (~matchedCardSchemes, ~enabledCardSchemes) => {
150161
matchedCardSchemes->Array.filter(ele => enabledCardSchemes->Array.includes(ele))
151162
}

0 commit comments

Comments
 (0)