From 18798c36665f0534a8966dad487b3023feebe1b3 Mon Sep 17 00:00:00 2001 From: sahil Date: Mon, 20 Jun 2022 17:11:47 +0530 Subject: [PATCH 1/4] add specific error messages --- src/pages/EnablePayments/AdditionalDetailsStep.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/pages/EnablePayments/AdditionalDetailsStep.js b/src/pages/EnablePayments/AdditionalDetailsStep.js index 4ba70e297843..f8d78120ae3f 100644 --- a/src/pages/EnablePayments/AdditionalDetailsStep.js +++ b/src/pages/EnablePayments/AdditionalDetailsStep.js @@ -106,6 +106,18 @@ class AdditionalDetailsStep extends React.Component { 'ssn', ]; + this.errorTranslationKeys = { + legalFirstName: 'bankAccount.error.firstName', + legalLastName: 'bankAccount.error.lastName', + addressStreet: 'bankAccount.error.addressStreet', + addressCity: 'bankAccount.error.addressCity', + addressState: 'bankAccount.error.addressState', + addressZip: 'bankAccount.error.zipCode', + phoneNumber: 'bankAccount.error.phoneNumber', + dob: 'bankAccount.error.dob', + ssn: 'bankAccount.error.ssnLast4', + }; + this.fieldNameTranslationKeys = { legalFirstName: 'additionalDetailsStep.legalFirstNameLabel', legalLastName: 'additionalDetailsStep.legalLastNameLabel', @@ -141,7 +153,7 @@ class AdditionalDetailsStep extends React.Component { return ''; } - return `${this.props.translate(this.fieldNameTranslationKeys[fieldName])} ${this.props.translate('common.isRequiredField')}.`; + return this.props.translate(this.errorTranslationKeys[fieldName]); } /** From 5945666ccfaf05977b80df8e7077116d050bc7f7 Mon Sep 17 00:00:00 2001 From: sahil Date: Mon, 20 Jun 2022 18:25:54 +0530 Subject: [PATCH 2/4] show error when the user isn't 18 --- .../EnablePayments/AdditionalDetailsStep.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/pages/EnablePayments/AdditionalDetailsStep.js b/src/pages/EnablePayments/AdditionalDetailsStep.js index f8d78120ae3f..006e8bd3383c 100644 --- a/src/pages/EnablePayments/AdditionalDetailsStep.js +++ b/src/pages/EnablePayments/AdditionalDetailsStep.js @@ -115,6 +115,7 @@ class AdditionalDetailsStep extends React.Component { addressZip: 'bankAccount.error.zipCode', phoneNumber: 'bankAccount.error.phoneNumber', dob: 'bankAccount.error.dob', + age: 'bankAccount.error.age', ssn: 'bankAccount.error.ssnLast4', }; @@ -176,6 +177,10 @@ class AdditionalDetailsStep extends React.Component { errors.dob = true; } + if (!ValidationUtils.meetsAgeRequirements(this.props.walletAdditionalDetailsDraft.dob)) { + errors.age = true; + } + if (!ValidationUtils.isValidAddress(this.props.walletAdditionalDetailsDraft.addressStreet)) { errors.addressStreet = true; } @@ -213,6 +218,16 @@ class AdditionalDetailsStep extends React.Component { }); } + /** + * Clear both errors associated with dob, and set the new value. + * + * @param {String} value + */ + clearDateErrorsAndSetValue(value) { + this.formHelper.clearErrors(this.props, ['dob', 'age']); + Wallet.updateAdditionalDetailsDraft({dob: value}); + } + /** * @param {String} fieldName * @param {String} value @@ -339,10 +354,10 @@ class AdditionalDetailsStep extends React.Component { this.clearErrorAndSetValue('dob', val)} + onInputChange={val => this.clearDateErrorsAndSetValue(val)} defaultValue={this.props.walletAdditionalDetailsDraft.dob || ''} placeholder={this.props.translate('common.dob')} - errorText={this.getErrorText('dob')} + errorText={this.getErrorText('dob') || this.getErrorText('age')} maximumDate={new Date()} /> Date: Tue, 28 Jun 2022 21:05:23 +0530 Subject: [PATCH 3/4] add specific error for full ssn --- src/languages/en.js | 1 + src/languages/es.js | 1 + .../EnablePayments/AdditionalDetailsStep.js | 21 ++++++++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/languages/en.js b/src/languages/en.js index 02bf873c3a9d..286efb47fd66 100755 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -607,6 +607,7 @@ export default { legalMiddleNameLabel: 'Legal middle name', legalLastNameLabel: 'Legal last name', selectAnswer: 'You need to select a response to proceed.', + ssnFull9Error: 'Please enter a valid 9 digit SSN', needSSNFull9: 'We\'re having trouble verifying your SSN. Please enter the full 9 digits of your SSN.', weCouldNotVerify: 'We could not verify', pleaseFixIt: 'Please fix this information before continuing.', diff --git a/src/languages/es.js b/src/languages/es.js index d7751c630de9..e2326ad8840c 100644 --- a/src/languages/es.js +++ b/src/languages/es.js @@ -607,6 +607,7 @@ export default { legalMiddleNameLabel: 'Segundo nombre legal', legalLastNameLabel: 'Apellido legal', selectAnswer: 'Selecciona una respuesta.', + ssnFull9Error: 'Por favor escribe los 9 dígitos de un SSN válido', needSSNFull9: 'Estamos teniendo problemas para verificar su SSN. Ingresa los 9 dígitos del SSN.', weCouldNotVerify: 'No pudimos verificar', pleaseFixIt: 'Corrije esta información antes de continuar.', diff --git a/src/pages/EnablePayments/AdditionalDetailsStep.js b/src/pages/EnablePayments/AdditionalDetailsStep.js index 006e8bd3383c..7d9dbcfe706d 100644 --- a/src/pages/EnablePayments/AdditionalDetailsStep.js +++ b/src/pages/EnablePayments/AdditionalDetailsStep.js @@ -117,6 +117,7 @@ class AdditionalDetailsStep extends React.Component { dob: 'bankAccount.error.dob', age: 'bankAccount.error.age', ssn: 'bankAccount.error.ssnLast4', + ssnFull9: 'additionalDetailsStep.ssnFull9Error', }; this.fieldNameTranslationKeys = { @@ -189,7 +190,11 @@ class AdditionalDetailsStep extends React.Component { errors.phoneNumber = true; } - if (!ValidationUtils.isValidSSNLastFour(this.props.walletAdditionalDetailsDraft.ssn) && !ValidationUtils.isValidSSNFullNine(this.props.walletAdditionalDetailsDraft.ssn)) { + if (this.props.walletAdditionalDetails.shouldAskForFullSSN) { + if (!ValidationUtils.isValidSSNFullNine(this.props.walletAdditionalDetailsDraft.ssn)) { + errors.ssnFull9 = true; + } + } else if (!ValidationUtils.isValidSSNLastFour(this.props.walletAdditionalDetailsDraft.ssn)) { errors.ssn = true; } @@ -228,6 +233,16 @@ class AdditionalDetailsStep extends React.Component { Wallet.updateAdditionalDetailsDraft({dob: value}); } + /** + * Clear ssn and ssnFull9 error and set the new value + * + * @param {String} value + */ + clearSSNErrorAndSetValue(value) { + this.formHelper.clearErrors(this.props, ['ssn', 'ssnFull9']); + Wallet.updateAdditionalDetailsDraft({ssn: value}); + } + /** * @param {String} fieldName * @param {String} value @@ -363,9 +378,9 @@ class AdditionalDetailsStep extends React.Component { this.clearErrorAndSetValue('ssn', val)} + onChangeText={val => this.clearSSNErrorAndSetValue(val)} value={this.props.walletAdditionalDetailsDraft.ssn || ''} - errorText={this.getErrorText('ssn')} + errorText={this.getErrorText('ssnFull9') || this.getErrorText('ssn')} maxLength={shouldAskForFullSSN ? 9 : 4} keyboardType={CONST.KEYBOARD_TYPE.NUMBER_PAD} /> From 35454e16eeb88cdf066a8ca552d475772efc9dda Mon Sep 17 00:00:00 2001 From: sahil Date: Tue, 28 Jun 2022 22:17:00 +0530 Subject: [PATCH 4/4] handle undefined value for phone number --- src/libs/ValidationUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/ValidationUtils.js b/src/libs/ValidationUtils.js index 74545181286e..a562df509c82 100644 --- a/src/libs/ValidationUtils.js +++ b/src/libs/ValidationUtils.js @@ -256,7 +256,7 @@ function validateIdentity(identity) { * @param {Boolean} [isCountryCodeOptional] * @returns {Boolean} */ -function isValidUSPhone(phoneNumber, isCountryCodeOptional) { +function isValidUSPhone(phoneNumber = '', isCountryCodeOptional) { // Remove non alphanumeric characters from the phone number const sanitizedPhone = phoneNumber.replace(CONST.REGEX.NON_ALPHA_NUMERIC, ''); const isUsPhone = isCountryCodeOptional