Skip to content

Commit 388d907

Browse files
Pradeep KumarPradeep-kumar1202
authored andcommitted
refactor: Moving common functions to shared-codebase
1 parent 9a9497e commit 388d907

15 files changed

+27
-90
lines changed

src/CardSchemeComponent.res

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ let make = (~cardNumber, ~paymentType, ~cardBrand, ~setCardBrand) => {
3434
let enabledCardSchemes =
3535
paymentMethodListValue->PaymentUtils.getSupportedCardBrands->Option.getOr([])
3636

37-
let matchedCardSchemes = cardNumber->CardUtils.clearSpaces->CardUtils.getAllMatchedCardSchemes
37+
let matchedCardSchemes = cardNumber->CardValidations.clearSpaces->CardValidations.getAllMatchedCardSchemes
3838

3939
let eligibleCardSchemes = CardUtils.getEligibleCoBadgedCardSchemes(
4040
~matchedCardSchemes,
@@ -48,7 +48,7 @@ let make = (~cardNumber, ~paymentType, ~cardBrand, ~setCardBrand) => {
4848
let loggerState = Recoil.useRecoilValueFromAtom(RecoilAtoms.loggerAtom)
4949
let isCoBadgedCardDetectedOnce = React.useRef(false)
5050
let shouldShowCoBadgeCardSchemeDropDown =
51-
isCardCoBadged && cardNumber->CardUtils.clearSpaces->String.length >= 16
51+
isCardCoBadged && cardNumber->CardValidations.clearSpaces->String.length >= 16
5252

5353
React.useEffect1(() => {
5454
if shouldShowCoBadgeCardSchemeDropDown && !isCoBadgedCardDetectedOnce.current {

src/CardUtils.res

Lines changed: 2 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
open CardValidations
2+
13
type cardIssuer =
24
| VISA
35
| MASTERCARD
@@ -145,7 +147,6 @@ type options = {timeZone: string}
145147
type dateTimeFormat = {resolvedOptions: unit => options}
146148
@val @scope("Intl") external dateTimeFormat: unit => dateTimeFormat = "DateTimeFormat"
147149

148-
let toInt = val => val->Int.fromString->Option.getOr(0)
149150
let toString = val => val->Int.toString
150151

151152
let getQueryParamsDictforKey = (searchParams, keyName) => {
@@ -204,33 +205,6 @@ let getCardStringFromType = val => {
204205
}
205206
}
206207

207-
let getobjFromCardPattern = cardBrand => {
208-
let patternsDict = CardPattern.cardPatterns
209-
patternsDict
210-
->Array.filter(item => {
211-
cardBrand === item.issuer
212-
})
213-
->Array.get(0)
214-
->Option.getOr(CardPattern.defaultCardPattern)
215-
}
216-
217-
let clearSpaces = value => {
218-
value->String.replaceRegExp(%re("/\D+/g"), "")
219-
}
220-
221-
let slice = (val, start: int, end: int) => {
222-
val->String.slice(~start, ~end)
223-
}
224-
225-
let getStrFromIndex = (arr: array<string>, index) => {
226-
arr->Array.get(index)->Option.getOr("")
227-
}
228-
229-
let formatCVCNumber = (val, cardType) => {
230-
let clearValue = val->clearSpaces
231-
let obj = getobjFromCardPattern(cardType)
232-
clearValue->slice(0, obj.maxCVCLength)
233-
}
234208

235209
let getCurrentMonthAndYear = (dateTimeIsoString: string) => {
236210
let tempTimeDateString = dateTimeIsoString->String.replace("Z", "")
@@ -269,13 +243,6 @@ let formatCardNumber = (val, cardType) => {
269243

270244
formatedCard->String.trim
271245
}
272-
let splitExpiryDates = val => {
273-
let split = val->String.split("/")
274-
let value = split->Array.map(item => item->String.trim)
275-
let month = value->Array.get(0)->Option.getOr("")
276-
let year = value->Array.get(1)->Option.getOr("")
277-
(month, year)
278-
}
279246
let getExpiryDates = val => {
280247
let date = Date.make()->Date.toISOString
281248
let (month, year) = splitExpiryDates(val)
@@ -296,24 +263,6 @@ let isExpiryComplete = val => {
296263
month->String.length == 2 && year->String.length == 2
297264
}
298265

299-
let formatCardExpiryNumber = val => {
300-
let clearValue = val->clearSpaces
301-
let expiryVal = clearValue->toInt
302-
let formatted = if expiryVal >= 2 && expiryVal <= 9 && clearValue->String.length == 1 {
303-
`0${clearValue} / `
304-
} else if clearValue->String.length == 2 && expiryVal > 12 {
305-
let val = clearValue->String.split("")
306-
`0${val->getStrFromIndex(0)} / ${val->getStrFromIndex(1)}`
307-
} else {
308-
clearValue
309-
}
310-
311-
if clearValue->String.length >= 3 {
312-
`${formatted->slice(0, 2)} / ${formatted->slice(2, 4)}`
313-
} else {
314-
formatted
315-
}
316-
}
317266

318267
let getCardBrand = cardNumber => {
319268
try {
@@ -750,18 +699,6 @@ let getPaymentMethodBrand = (customerMethod: PaymentType.customerMethods) => {
750699
}
751700
}
752701

753-
let getAllMatchedCardSchemes = cardNumber => {
754-
CardPattern.cardPatterns->Array.reduce([], (acc, item) => {
755-
if String.match(cardNumber, item.pattern)->Option.isSome {
756-
acc->Array.push(item.issuer)
757-
}
758-
acc
759-
})
760-
}
761-
762-
let isCardSchemeEnabled = (~cardScheme, ~enabledCardSchemes) => {
763-
enabledCardSchemes->Array.includes(cardScheme)
764-
}
765702

766703
let getFirstValidCardSchemeFromPML = (~cardNumber, ~enabledCardSchemes) => {
767704
let allMatchedCards = getAllMatchedCardSchemes(cardNumber->clearSpaces)

src/CollectWidget.res

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ let make = (
9090
// Empty string is valid (no error)
9191
| (_, _, "") => (true, "")
9292
| (PayoutMethodData(CardExpDate(_)), "number" | "tel", _) => {
93-
let formattedExpiry = formatCardExpiryNumber(value)
93+
let formattedExpiry = CardValidations.formatCardExpiryNumber(value)
9494
if isExipryValid(formattedExpiry) {
9595
handleInputFocus(~currentRef=cardExpRef, ~destinationRef=cardHolderRef)
9696
}
@@ -103,7 +103,7 @@ let make = (
103103
->Option.getOr(""),
104104
)
105105
let formattedCardNumber = formatCardNumber(value, cardType)
106-
if cardValid(clearSpaces(formattedCardNumber), getCardStringFromType(cardType)) {
106+
if cardValid(CardValidations.clearSpaces(formattedCardNumber), getCardStringFromType(cardType)) {
107107
handleInputFocus(~currentRef=cardNumberRef, ~destinationRef=cardExpRef)
108108
}
109109
(true, formattedCardNumber)

src/Components/AddBankAccount.res

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ let make = (~modalData, ~setModalData) => {
6262
| Some(data: ACHTypes.data) =>
6363
let last4digts =
6464
data.iban !== ""
65-
? data.iban->CardUtils.clearSpaces->String.sliceToEnd(~start=-4)
65+
? data.iban->CardValidations.clearSpaces->String.sliceToEnd(~start=-4)
6666
: data.accountNumber->String.sliceToEnd(~start=-4)
6767

6868
<div className="flex flex-row justify-between w-full relative animate-slowShow">

src/Components/BlikCodePaymentInput.res

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ let make = () => {
88
let blikCodeRef = React.useRef(Nullable.null)
99
let formatBSB = bsb => {
1010
let formatted = bsb->String.replaceRegExp(%re("/\D+/g"), "")
11-
let firstPart = formatted->CardUtils.slice(0, 3)
12-
let secondPart = formatted->CardUtils.slice(3, 6)
11+
let firstPart = formatted->CardValidations.slice(0, 3)
12+
let secondPart = formatted->CardValidations.slice(3, 6)
1313

1414
if formatted->String.length <= 3 {
1515
firstPart

src/Components/EmailPaymentInput.res

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
open RecoilAtoms
22
open Utils
3-
open EmailValidation
3+
open CardValidations
44

55
@react.component
66
let make = () => {

src/Components/SavedCardItem.res

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ let make = (
101101

102102
// * Sending card expiry to handle cases where the card expires before the use date.
103103
`${expiryMonth}${String.substring(~start=2, ~end=4, expiryYear)}`
104-
->formatCardExpiryNumber
104+
->CardValidations.formatCardExpiryNumber
105105
->emitExpiryDate
106106

107107
PaymentUtils.emitPaymentMethodInfo(

src/Hooks/CommonCardProps.res

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ let useCardForm = (~logger, ~paymentType) => {
6565
}, [cardBrand])
6666

6767
React.useEffect(() => {
68-
let obj = getobjFromCardPattern(cardBrand)
68+
let obj = CardValidations.getobjFromCardPattern(cardBrand)
6969
let cvcLength = obj.maxCVCLength
7070
if (
7171
cvcNumberInRange(cvcNumber, cardBrand)->Array.includes(true) &&
@@ -108,7 +108,7 @@ let useCardForm = (~logger, ~paymentType) => {
108108
let val = ReactEvent.Form.target(ev)["value"]
109109
logInputChangeInfo("cardNumber", logger)
110110
let card = val->formatCardNumber(cardType)
111-
let clearValue = card->clearSpaces
111+
let clearValue = card->CardValidations.clearSpaces
112112
setCardValid(clearValue, cardBrand, setIsCardValid)
113113
if (
114114
focusCardValid(clearValue, cardBrand) &&
@@ -136,7 +136,7 @@ let useCardForm = (~logger, ~paymentType) => {
136136
let changeCardExpiry = ev => {
137137
let val = ReactEvent.Form.target(ev)["value"]
138138
logInputChangeInfo("cardExpiry", logger)
139-
let formattedExpiry = val->formatCardExpiryNumber
139+
let formattedExpiry = val->CardValidations.formatCardExpiryNumber
140140
if isExipryValid(formattedExpiry) {
141141
handleInputFocus(~currentRef=expiryRef, ~destinationRef=cvcRef)
142142
emitExpiryDate(formattedExpiry)
@@ -148,7 +148,7 @@ let useCardForm = (~logger, ~paymentType) => {
148148
let changeCVCNumber = ev => {
149149
let val = ReactEvent.Form.target(ev)["value"]
150150
logInputChangeInfo("cardCVC", logger)
151-
let cvc = val->formatCVCNumber(cardBrand)
151+
let cvc = val->CardValidations.formatCVCNumber(cardBrand)
152152
setCvcNumber(_ => cvc)
153153
if cvc->String.length > 0 && cvcNumberInRange(cvc, cardBrand)->Array.includes(true) {
154154
zipRef.current->Nullable.toOption->Option.forEach(input => input->focus)->ignore

src/Payments/BacsBankDebit.res

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ open Utils
44

55
let formatSortCode = sortcode => {
66
let formatted = sortcode->String.replaceRegExp(%re("/\D+/g"), "")
7-
let firstPart = formatted->CardUtils.slice(0, 2)
8-
let secondPart = formatted->CardUtils.slice(2, 4)
9-
let thirdpart = formatted->CardUtils.slice(4, 6)
7+
let firstPart = formatted->CardValidations.slice(0, 2)
8+
let secondPart = formatted->CardValidations.slice(2, 4)
9+
let thirdpart = formatted->CardValidations.slice(4, 6)
1010

1111
if formatted->String.length <= 2 {
1212
firstPart

src/Payments/Boleto.res

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ let cleanSocialSecurityNumber = socialSecurityNumber =>
66

77
let formatSocialSecurityNumber = socialSecurityNumber => {
88
let formatted = socialSecurityNumber->cleanSocialSecurityNumber
9-
let firstPart = formatted->CardUtils.slice(0, 3)
10-
let secondPart = formatted->CardUtils.slice(3, 6)
11-
let thirdPart = formatted->CardUtils.slice(6, 9)
12-
let fourthPart = formatted->CardUtils.slice(9, 11)
9+
let firstPart = formatted->CardValidations.slice(0, 3)
10+
let secondPart = formatted->CardValidations.slice(3, 6)
11+
let thirdPart = formatted->CardValidations.slice(6, 9)
12+
let fourthPart = formatted->CardValidations.slice(9, 11)
1313

1414
if formatted->String.length <= 3 {
1515
firstPart

0 commit comments

Comments
 (0)