Skip to content

Commit 67186f1

Browse files
authored
Merge pull request #44400 from nkdengineer/fix/44111
2 parents aecc38b + bc8dfd4 commit 67186f1

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

src/components/AddPaymentCard/PaymentCardForm.tsx

+20
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ function PaymentCardForm({
137137

138138
const [isCurrencyModalVisible, setIsCurrencyModalVisible] = useState(false);
139139
const [currency, setCurrency] = useState<keyof typeof CONST.CURRENCY>(CONST.CURRENCY.USD);
140+
const [cardNumber, setCardNumber] = useState('');
140141

141142
const validate = (values: FormOnyxValues<typeof ONYXKEYS.FORMS.ADD_DEBIT_CARD_FORM>): FormInputErrors<typeof ONYXKEYS.FORMS.ADD_DEBIT_CARD_FORM> => {
142143
const errors = ValidationUtils.getFieldRequiredErrors(values, REQUIRED_FIELDS);
@@ -181,6 +182,23 @@ function PaymentCardForm({
181182
setIsCurrencyModalVisible(false);
182183
}, []);
183184

185+
const onChangeCardNumber = useCallback((newValue: string) => {
186+
// replace all characters that are not spaces or digits
187+
let validCardNumber = newValue.replace(/[^\d ]/g, '');
188+
189+
// gets only the first 16 digits if the inputted number have more digits than that
190+
validCardNumber = validCardNumber.match(/(?:\d *){1,16}/)?.[0] ?? '';
191+
192+
// add the spacing between every 4 digits
193+
validCardNumber =
194+
validCardNumber
195+
.replace(/ /g, '')
196+
.match(/.{1,4}/g)
197+
?.join(' ') ?? '';
198+
199+
setCardNumber(validCardNumber);
200+
}, []);
201+
184202
if (!shouldShowPaymentCardForm) {
185203
return null;
186204
}
@@ -204,6 +222,8 @@ function PaymentCardForm({
204222
role={CONST.ROLE.PRESENTATION}
205223
ref={cardNumberRef}
206224
inputMode={CONST.INPUT_MODE.NUMERIC}
225+
onChangeText={onChangeCardNumber}
226+
value={cardNumber}
207227
/>
208228
<InputWrapper
209229
InputComponent={TextInput}

0 commit comments

Comments
 (0)