Skip to content

Commit b29da42

Browse files
feat: dc - scheme selection (#234)
1 parent 8429567 commit b29da42

3 files changed

Lines changed: 32 additions & 33 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "processout.js",
3-
"version": "1.7.1",
3+
"version": "1.7.2",
44
"description": "ProcessOut.js is a JavaScript library for ProcessOut's payment processing API.",
55
"scripts": {
66
"build:processout": "tsc -p src/processout && uglifyjs --compress --keep-fnames --ie8 dist/processout.js -o dist/processout.js",

src/dynamic-checkout/payment-methods/card.ts

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,22 @@ module ProcessOut {
5050
cardForm => {
5151
this.getCardDetailsSectionEventListeners()
5252

53-
// Dynamically change scheme logo based on the card number
5453
cardForm.getNumberField().addEventListener("input", e => {
55-
const scheme = e.schemes[0]
56-
const cardSchemeLogo = document.querySelector(".dco-card-scheme-logo")
57-
58-
if (scheme && CARD_SCHEMES_ASSETS[scheme]) {
59-
cardSchemeLogo.removeAttribute("hidden")
60-
61-
cardSchemeLogo.setAttribute(
62-
"src",
63-
this.procesoutInstance.endpoint("js", CARD_SCHEMES_ASSETS[scheme]),
64-
)
65-
} else {
66-
cardSchemeLogo.setAttribute("hidden", "true")
54+
if (!this.paymentMethod.card.scheme_selection_enabled) {
55+
// Dynamically change scheme logo based on the card number
56+
const scheme = e.schemes[0]
57+
const cardSchemeLogo = document.querySelector(".dco-card-scheme-logo")
58+
59+
if (scheme && CARD_SCHEMES_ASSETS[scheme]) {
60+
cardSchemeLogo.removeAttribute("hidden")
61+
62+
cardSchemeLogo.setAttribute(
63+
"src",
64+
this.procesoutInstance.endpoint("js", CARD_SCHEMES_ASSETS[scheme]),
65+
)
66+
} else {
67+
cardSchemeLogo.setAttribute("hidden", "true")
68+
}
6769
}
6870

6971
this.validateCardRestrictions(e.schemes || [])
@@ -193,6 +195,8 @@ module ProcessOut {
193195
options.expiryAutoNext = false
194196
options.cardNumberAutoNext = true
195197
options.requireCVC = this.paymentMethod.card.cvc_required
198+
options.enableCardSchemeSelection = this.paymentMethod.card.scheme_selection_enabled
199+
options.preferredSchemes = this.paymentMethod.card.scheme_selection_default_order
196200

197201
return options
198202
}
@@ -434,7 +438,9 @@ module ProcessOut {
434438
},
435439
])
436440

437-
HTMLElements.appendChildren(cardNumberInput, [cardSchemeLogo])
441+
if (!this.paymentMethod.card.scheme_selection_enabled) {
442+
HTMLElements.appendChildren(cardNumberInput, [cardSchemeLogo])
443+
}
438444

439445
HTMLElements.appendChildren(cardNumberInputWrapper, [
440446
cardNumberInput,
@@ -722,23 +728,17 @@ module ProcessOut {
722728
if (!restrictToIins || restrictToIins.length === 0 || !data) {
723729
return
724730
}
731+
725732
const iin = data.card_iin || ""
726733

727734
if (iin.length === 0) {
728735
this.setCardRestrictionState(false)
729736
return
730737
}
731738

732-
var isBlockedIin = false
739+
const isAllowedIin = restrictToIins.indexOf(iin) !== -1
733740

734-
restrictToIins.forEach(function (blockedIin) {
735-
if (blockedIin === iin) {
736-
isBlockedIin = true
737-
return
738-
}
739-
})
740-
741-
this.setCardRestrictionState(isBlockedIin)
741+
this.setCardRestrictionState(!isAllowedIin)
742742
}
743743

744744
private validateCardRestrictions(schemes: string[]) {
@@ -753,18 +753,15 @@ module ProcessOut {
753753
return
754754
}
755755

756-
var isBlockedScheme = false
756+
var hasAllowedScheme = false
757757

758-
restrictToSchemes.forEach(function (blockedScheme) {
759-
schemes.forEach(function (scheme) {
760-
if (blockedScheme === scheme) {
761-
isBlockedScheme = true
762-
return
763-
}
764-
})
758+
schemes.forEach(function (scheme) {
759+
if (restrictToSchemes.indexOf(scheme) !== -1) {
760+
hasAllowedScheme = true
761+
}
765762
})
766763

767-
this.setCardRestrictionState(isBlockedScheme)
764+
this.setCardRestrictionState(!hasAllowedScheme)
768765
}
769766

770767
private setCardRestrictionState(isRestricted: boolean) {

src/dynamic-checkout/types/api.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ type Card = {
7373
cvc_required: boolean
7474
cardholder_name_required: boolean
7575
scheme_selection_allowed: boolean
76+
scheme_selection_enabled: boolean
77+
scheme_selection_default_order: string[]
7678
saving_allowed: boolean
7779
billing_address: BillingAddress
7880
restrict_to_iins: string[] | null

0 commit comments

Comments
 (0)