Skip to content

Commit 4c4be9f

Browse files
fix: co-badged card selection when priority scheme disabled
1 parent 398d80f commit 4c4be9f

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

src/components/elements/CardElement.res

+3-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ let make = (
6969
text,
7070
expireRef: React.ref<Nullable.t<ReactNative.TextInput.element>>,
7171
) => {
72-
let cardBrand = getCardBrand(text)
72+
let enabledCardSchemes = PaymentUtils.getCardNetworks(cardNetworks->Option.getOr(None))
73+
let validCardBrand = getFirstValidCardScheme(~cardNumber=text, ~enabledCardSchemes)
74+
let cardBrand = validCardBrand === "" ? getCardBrand(text) : validCardBrand
7375
let num = formatCardNumber(text, cardType(cardBrand))
7476

7577
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/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

+12
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,18 @@ 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.filter(card => isCardSchemeEnabled(~cardScheme=card, ~enabledCardSchemes))
157+
->Array.get(0)
158+
->Option.getOr("")
159+
}
160+
149161
let getEligibleCoBadgedCardSchemes = (~matchedCardSchemes, ~enabledCardSchemes) => {
150162
matchedCardSchemes->Array.filter(ele =>
151163
enabledCardSchemes->Array.includes(ele)

0 commit comments

Comments
 (0)