1function displayValidationResult(fieldName, result) { 2 if (result.length === 0) { 3 hideFieldErrorMsg(fieldName); 4 } else { 5 showFieldErrorMsg(fieldName, result[0]); 6 } 7} 8 9async function validateNameByCountry(personName, countryCode) { 10 return new Promise((resolve, reject) => { 11 validatePersonalNameUseLanguageInCountry(personName, countryCode, function (result) { 12 resolve(result); 13 }); 14 }); 15} 16 17async function newValidateNameField() { 18 var firstNameResult = await validateFirstName(); 19 var lastNameResult = await validateLastName(); 20 21 return firstNameResult && lastNameResult; 22} 23 24async function validateByRules(rules, target) { 25 return rules.reduce(async (promiseResult, rule) => { 26 var result = await promiseResult; 27 if (rule.asyncValidator) { 28 const failMessage = (await rule.asyncValidator(target)).failMessage; 29 30 if (failMessage !== null) { 31 result.push(failMessage); 32 } 33 } 34 35 if (rule.validator && !rule.validator(target)) { 36 result.push(rule.failMessage); 37 }; 38 39 return result; 40 }, []); 41} 42 43async function validateByCountry(name) { 44 const fullNameRules = [{ 45 asyncValidator: async (val) => { 46 var result = await validateNameByCountry(val, country.CountryCode); 47 48 return { 49 failMessage: result.IsValid ? null : result.Message 50 }; 51 } 52 }]; 53 const fullNameResult = await validateByRules(fullNameRules, name); 54 return fullNameResult; 55} 56 57async function validateFirstName() { 58 const firstName = getTextfieldTrimValue("FirstName"); 59 60 const firstNameRules = [{ 61 failMessage: validationMsg.FirstNameMustBeEntered, 62 validator: (val) => !isEmpty(val) 63 }, { 64 failMessage: validationMsg.CannotContainNumber, 65 validator: (val) => !isContainNumber(val) 66 }]; 67 68 const firstNameResult = await validateByRules(firstNameRules, firstName); 69 const languageResult = await validateByCountry(firstName); 70 const result = firstNameResult.concat(languageResult); 71 72 if (isFirstNameFieldDirty) { 73 displayValidationResult("FirstName", result); 74 } 75 return result.length === 0; 76} 77 78// TODO: refactor merge validateFirstName & validateFullName method 79async function validateFullName() { 80 const fullName = getTextfieldTrimValue("FullName"); 81 82 const fullNameRules = [{ 83 failMessage: validationMsg.FullNameMustBeEntered, 84 validator: (val) => !isEmpty(val) 85 }, { 86 failMessage: validationMsg.CannotContainNumber, 87 validator: (val) => !isContainNumber(val) 88 }]; 89 90 const fullNameResult = await validateByRules(fullNameRules, fullName); 91 const languageResult = await validateByCountry(fullName); 92 const result = fullNameResult.concat(languageResult); 93 94 if (isFullNameFieldDirty) { 95 displayValidationResult("FullName", result); 96 } 97 return result.length === 0; 98} 99 100async function validateLastName() { 101 const lastName = getTextfieldTrimValue("LastName"); 102 103 const noNeedLastName = $("#cbNoLastName").is(":checked"); 104 105 const lastNameRules = [{ 106 failMessage: validationMsg.LastNameMustBeEntered, 107 validator: (val) => { 108 return noNeedLastName || !isEmpty(val); 109 } 110 }, { 111 failMessage: validationMsg.CannotContainNumber, 112 validator: (val) => { 113 return noNeedLastName || !isContainNumber(val); 114 } 115 }]; 116 117 const lastNameResult = await validateByRules(lastNameRules, lastName); 118 const languageResult = await validateByCountry(lastName); 119 const result = lastNameResult.concat(languageResult); 120 121 if (isLastNameFieldDirty) { 122 displayValidationResult("LastName", result); 123 } 124 return result.length === 0; 125} 126 127const firstNameValidationDebounce = debounce(function () { 128 validateFirstName().then(function (isValid) { 129 stepTwoValidateProxy.proxy.txtFirstName = isValid; 130 }); 131}); 132 133const lastNameValidationDebounce = debounce(function () { 134 validateLastName().then(function (isValid) { 135 stepTwoValidateProxy.proxy.txtLastName = isValid; 136 }); 137}); 138 139const fullNameValidationDebounce = debounce(function () { 140 validateFullName().then(function (isValid) { 141 stepTwoValidateProxy.proxy.txtFullName = isValid; 142 }); 143}); 144 145
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.