UNPKG

react-native-masked-text

Version:

Text and TextInput with mask for React Native applications

73 lines (58 loc) 1.73 kB
import BaseMask from './_base.mask' import CustomMask from './custom.mask' const CREDIT_CARD_MASKS = { 'visa-or-mastercard': { regular: '9999 9999 9999 9999', obfuscated: '9999 **** **** 9999' }, 'amex': { regular: '9999 999999 99999', obfuscated: '9999 ****** 99999' }, 'diners': { regular: '9999 999999 9999', obfuscated: '9999 ****** 9999' }, } const CREDIT_CARD_SETTINGS = { obfuscated: false, issuer: 'visa-or-mastercard' } const MASK_TRANSLATION = { '*': val => null } export default class CreditCardMask extends BaseMask { static getType() { return 'credit-card' } getValue(value, settings) { let selectedMask = this.getMask(value, settings) return CustomMask.shared.getValue(value, { mask: selectedMask, translation: MASK_TRANSLATION }) } validate(value, settings) { if (!!value) { let selectedMask = this.getMask(value, settings) return value.length === selectedMask.length } return true } getRawValue(maskedValue, settings) { if (!maskedValue) return [] return maskedValue.split(' ').map(val => { if (!val) return '' return val.trim() }) } getMask(value, settings) { let mergedSettings = super.mergeSettings(CREDIT_CARD_SETTINGS, settings) const selectedMask = this._selectMask(mergedSettings.issuer, mergedSettings.obfuscated) return selectedMask } _selectMask(issuer, obfuscated) { const maskType = obfuscated ? 'obfuscated' : 'regular' return CREDIT_CARD_MASKS[issuer][maskType] } }