-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFormErrorHandling.js
More file actions
41 lines (34 loc) · 1.69 KB
/
FormErrorHandling.js
File metadata and controls
41 lines (34 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const constructErrorMessage = ( { errorCode, elementObj } ) => {
let errorMessage;
errorCode == '001' ? errorMessage = `Please fill in ${ getFieldNames( findMissingRequiredFields( elementObj ) ) }, field(s) required` : // (Code 001) // Missing essential fields
errorCode == '002' ? errorMessage = 'Passwords do not match' : // (Code 002) // Passwords do not match
errorMessage = ``; // (N/A) // General error
return errorMessage
}
const styleErrorFields = ( { elements }, root ) => {
setDefaultFieldStyles( root )
elements.forEach( element => { element.classList.add( "error-field" ) });
}
const getFieldNames = ( { keys } ) => {
const names = [ 'First Name', 'Date Of Birth' ];
const nameList = keys.map( key => names.find( name => key.charAt(0) == name.charAt(0).toLowerCase() ))
return nameList.length > 1 ? nameList.join(" and ") : nameList[0];
}
const findMissingRequiredFields = ( { firstName, dob } ) => {
const missingFields = {};
missingFields.keys = [];
missingFields.elements = [];
for(let [fieldName, fieldInp] of Object.entries( { firstName, dob } )) {
if( !fieldInp.value ){
missingFields.keys.push( fieldName );
missingFields.elements.push( fieldInp )
}
}
return missingFields
}
const setDefaultFieldStyles = ( root ) => {
const fields = Array.from( root.querySelector('.input-area').children )
fields.forEach( ( element ) => { if( element.classList.contains( "error-field" ) ){ element.classList.remove( "error-field" ) } } )
}
const errorHandlers = { constructErrorMessage, getFieldNames, styleErrorFields, findMissingRequiredFields, setDefaultFieldStyles }
export default errorHandlers;