Skip to content

Commit 4d41657

Browse files
Pradeep-kumar1202Pradeep Kumar
andauthored
refactor: Moving CardValidations and Utils to the shared-codebase (#27)
Co-authored-by: Pradeep Kumar <pradeep.kumar@Pradeep-Kumar-M6LJQ60G2H.local>
1 parent 713771d commit 4d41657

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

sdk-utils/CardValidations.res

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
let toInt = val => val->Int.fromString->Option.getOr(0)
2+
3+
let getobjFromCardPattern = cardBrand => {
4+
let patternsDict = CardPattern.cardPatterns
5+
patternsDict
6+
->Array.filter(item => {
7+
cardBrand === item.issuer
8+
})
9+
->Array.get(0)
10+
->Option.getOr(CardPattern.defaultCardPattern)
11+
}
12+
13+
let clearSpaces = value => {
14+
value->String.replaceRegExp(%re("/\D+/g"), "")
15+
}
16+
17+
let slice = (val, start: int, end: int) => {
18+
val->String.slice(~start, ~end)
19+
}
20+
21+
let getAllMatchedCardSchemes = cardNumber => {
22+
CardPattern.cardPatterns->Array.reduce([], (acc, item) => {
23+
if String.match(cardNumber, item.pattern)->Option.isSome {
24+
acc->Array.push(item.issuer)
25+
}
26+
acc
27+
})
28+
}
29+
30+
let isCardSchemeEnabled = (~cardScheme, ~enabledCardSchemes) => {
31+
enabledCardSchemes->Array.includes(cardScheme)
32+
}
33+
34+
let formatCVCNumber = (val, cardType) => {
35+
let clearValue = val->clearSpaces
36+
let obj = getobjFromCardPattern(cardType)
37+
clearValue->slice(0, obj.maxCVCLength)
38+
}
39+
40+
let getStrFromIndex = (arr: array<string>, index) => {
41+
arr->Array.get(index)->Option.getOr("")
42+
}
43+
44+
let splitExpiryDates = val => {
45+
let split = val->String.split("/")
46+
let value = split->Array.map(item => item->String.trim)
47+
let month = value->Array.get(0)->Option.getOr("")
48+
let year = value->Array.get(1)->Option.getOr("")
49+
(month, year)
50+
}
51+
52+
let formatCardExpiryNumber = val => {
53+
let clearValue = val->clearSpaces
54+
let expiryVal = clearValue->toInt
55+
let formatted = if expiryVal >= 2 && expiryVal <= 9 && clearValue->String.length == 1 {
56+
`0${clearValue} / `
57+
} else if clearValue->String.length == 2 && expiryVal > 12 {
58+
let val = clearValue->String.split("")
59+
`0${val->getStrFromIndex(0)} / ${val->getStrFromIndex(1)}`
60+
} else {
61+
clearValue
62+
}
63+
64+
if clearValue->String.length >= 3 {
65+
`${formatted->slice(0, 2)} / ${formatted->slice(2, 4)}`
66+
} else {
67+
formatted
68+
}
69+
}

0 commit comments

Comments
 (0)