Skip to content

Commit 5151e2d

Browse files
committed
Fix validation for #4891
1 parent 0633ef3 commit 5151e2d

File tree

1 file changed

+41
-25
lines changed

1 file changed

+41
-25
lines changed

src/shared/containers/Gigs/RecruitCRMJobApply.jsx

+41-25
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class RecruitCRMJobApplyContainer extends React.Component {
5757
[key]: value,
5858
},
5959
}));
60+
this.validateForm(key);
6061
}
6162

6263
onApplyClick() {
@@ -70,7 +71,7 @@ class RecruitCRMJobApplyContainer extends React.Component {
7071
});
7172
}
7273

73-
validateForm() {
74+
validateForm(prop) {
7475
this.setState((state) => {
7576
const { formData, formErrors } = state;
7677
// Form validation happens here
@@ -80,6 +81,9 @@ class RecruitCRMJobApplyContainer extends React.Component {
8081
// check required text fields for value
8182
// check min/max lengths
8283
_.each(requiredTextFields, (key) => {
84+
// validate only modified prop if set
85+
// and do not touch the others
86+
if (prop && prop !== key) return;
8387
if (!formData[key] || !_.trim(formData[key])) formErrors[key] = 'Required field';
8488
else if (formData[key] && _.trim(formData[key]).length < 2) formErrors[key] = 'Must be at least 2 characters';
8589
else if (formData[key] && _.trim(formData[key]).length > 2) {
@@ -101,36 +105,48 @@ class RecruitCRMJobApplyContainer extends React.Component {
101105
} else delete formErrors[key];
102106
});
103107
// check for selected country
104-
if (!_.find(formData.country, { selected: true })) formErrors.country = 'Please, select your country';
105-
else delete formErrors.country;
108+
if (!prop || prop === 'country') {
109+
if (!_.find(formData.country, { selected: true })) formErrors.country = 'Please, select your country';
110+
else delete formErrors.country;
111+
}
106112
// check payExpectation to be a number
107-
if (formData.payExpectation && _.trim(formData.payExpectation)) {
108-
if (!_.isInteger(_.toNumber(formData.payExpectation))) formErrors.payExpectation = 'Must be integer value in $';
109-
else delete formErrors.payExpectation;
110-
} else delete formErrors.payExpectation;
113+
if (!prop || prop === 'payExpectation') {
114+
if (formData.payExpectation && _.trim(formData.payExpectation)) {
115+
if (!_.isInteger(_.toNumber(formData.payExpectation))) formErrors.payExpectation = 'Must be integer value in $';
116+
else delete formErrors.payExpectation;
117+
} else delete formErrors.payExpectation;
118+
}
111119
// check for valid email
112-
if (formData.email && _.trim(formData.email)) {
113-
if (!(isValidEmail(formData.email))) formErrors.email = 'Invalid email';
114-
else delete formErrors.email;
120+
if (!prop || prop === 'email') {
121+
if (formData.email && _.trim(formData.email)) {
122+
if (!(isValidEmail(formData.email))) formErrors.email = 'Invalid email';
123+
else delete formErrors.email;
124+
}
115125
}
116126
// require atleast 1 skill
117-
if (!_.find(formData.skills, { selected: true })) formErrors.skills = 'Please, add technical skills';
118-
else delete formErrors.skills;
127+
if (!prop || prop === 'skills') {
128+
if (!_.find(formData.skills, { selected: true })) formErrors.skills = 'Please, add technical skills';
129+
else delete formErrors.skills;
130+
}
119131
// have accepted terms
120-
if (!formData.agreedTerms) formErrors.agreedTerms = 'Please, accept our terms';
121-
else delete formErrors.agreedTerms;
132+
if (!prop || prop === 'agreedTerms') {
133+
if (!formData.agreedTerms) formErrors.agreedTerms = 'Please, accept our terms';
134+
else delete formErrors.agreedTerms;
135+
}
122136
// has CV file ready for upload
123-
if (!formData.fileCV) formErrors.fileCV = 'Please, pick your CV file for uploading';
124-
else {
125-
const sizeInMB = (formData.fileCV.size / (1024 * 1024)).toFixed(2);
126-
if (sizeInMB > 8) {
127-
formErrors.fileCV = 'Max file size is limited to 8 MB';
128-
delete formData.fileCV;
129-
} else if (_.endsWith(formData.fileCV.name, '.pdf') || _.endsWith(formData.fileCV.name, '.docx')) {
130-
delete formErrors.fileCV;
131-
} else {
132-
formErrors.fileCV = 'Only .pdf and .docx files are allowed';
133-
delete formErrors.fileCV;
137+
if (!prop || prop === 'fileCV') {
138+
if (!formData.fileCV) formErrors.fileCV = 'Please, pick your CV file for uploading';
139+
else {
140+
const sizeInMB = (formData.fileCV.size / (1024 * 1024)).toFixed(2);
141+
if (sizeInMB > 8) {
142+
formErrors.fileCV = 'Max file size is limited to 8 MB';
143+
delete formData.fileCV;
144+
} else if (_.endsWith(formData.fileCV.name, '.pdf') || _.endsWith(formData.fileCV.name, '.docx')) {
145+
delete formErrors.fileCV;
146+
} else {
147+
formErrors.fileCV = 'Only .pdf and .docx files are allowed';
148+
delete formErrors.fileCV;
149+
}
134150
}
135151
}
136152
// updated state

0 commit comments

Comments
 (0)