Skip to content

Commit

Permalink
Filter card brands in PAN field
Browse files Browse the repository at this point in the history
  • Loading branch information
porter-stripe committed Oct 17, 2024
1 parent cd92fb6 commit 7aee8fb
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ internal class CardDetailsController(
val numberElement = CardNumberElement(
IdentifierSpec.CardNumber,
DefaultCardNumberController(
cardTextFieldConfig = CardNumberConfig(),
cardTextFieldConfig = CardNumberConfig(isCBCEligible = cbcEligibility != CardBrandChoiceEligibility.Ineligible, cardBrandFilter = cardBrandFilter),
cardAccountRangeRepository = cardAccountRangeRepositoryFactory.create(),
uiContext = uiContext,
workContext = workContext,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,17 @@ package com.stripe.android.ui.core.elements
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.VisualTransformation
import com.stripe.android.CardBrandFilter
import com.stripe.android.CardUtils
import com.stripe.android.model.CardBrand
import com.stripe.android.uicore.elements.TextFieldState
import com.stripe.android.uicore.elements.TextFieldStateConstants
import com.stripe.android.R as StripeR

internal class CardNumberConfig : CardDetailsTextFieldConfig {
internal class CardNumberConfig(
private val isCBCEligible: Boolean,
private val cardBrandFilter: CardBrandFilter
) : CardDetailsTextFieldConfig {
override val capitalization: KeyboardCapitalization = KeyboardCapitalization.None
override val debugLabel: String = "Card number"
override val label: Int = StripeR.string.stripe_acc_label_card_number
Expand All @@ -22,6 +26,12 @@ internal class CardNumberConfig : CardDetailsTextFieldConfig {

return if (number.isBlank()) {
TextFieldStateConstants.Error.Blank
} else if (!cardBrandFilter.isAccepted(brand) && (!isCBCEligible || number.length > 8)) {
return TextFieldStateConstants.Error.Invalid(
errorMessageResId = StripeR.string.stripe_disallowed_card_brand,
formatArgs = arrayOf(brand.displayName),
preventMoreInput = false,
)
} else if (brand == CardBrand.Unknown) {
TextFieldStateConstants.Error.Invalid(
errorMessageResId = StripeR.string.stripe_invalid_card_number,
Expand Down

0 comments on commit 7aee8fb

Please sign in to comment.