Log in
import React, { useState } from 'react'
export default function FullFormFunction() {
const[state,setState] =useState({
form: {
email: "",
password: "",
confirmPassword: "",
},
formErrors: {
email: null,
password: null,
confirmPassword: null,
}
});
var handleChange = e => {
const { name, value, checked } = e.target;
const { form, formErrors } = state;
let formObj = {};
formObj = {
...form,
[name]: value
};
//state for value
if (!Object.keys(formErrors).includes(name)) return;
let formErrorsObj = {};
if (name === "password" ||
name === "confirmPassword") {
let refValue = state.form[
name === "password" ? "confirmPassword" : "password"
];
const errorMsg = validateField(name, value, refValue);
formErrorsObj = { ...formErrors, [name]: errorMsg };
// if (!errorMsg && refValue) {
// formErrorsObj.confirmPassword = null;
// formErrorsObj.password = null;
// }
} else {
const errorMsg = validateField(
name,
name === "email" ?
state.form["email"] : value
);
formErrorsObj = { ...formErrors, [name]: errorMsg };
}
setState({...state ,formErrors: formErrorsObj,form: formObj });
};
var validateField = (name, value, refValue) => {
let errorMsg = null;
switch (name) {
case "email":
if (!value) errorMsg = "Please enter Email.";
else if (
!/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
value
)
)
errorMsg = "Please enter valid Email.";
break;
case "password":
// refValue is the value of Confirm Password field
if (!value) errorMsg = "Please enter Password.";
else if (refValue && value !== refValue)
errorMsg = "Password and Confirm Password does not match.";
break;
case "confirmPassword":
// refValue is the value of Password field
if (!value) errorMsg = "Please enter Confirm Password.";
else if (refValue && value !== refValue)
errorMsg = "Password and Confirm Password does not match.";
break;
default:
break;
}
return errorMsg;
};
var validateForm = (form, formErrors, validateFunc) => {
const errorObj = {};
Object.keys(formErrors).map(x => {
let refValue = null;
if (x === "password" || x === "confirmPassword") {
refValue = form[x === "password" ? "confirmPassword" : "password"];
}
const msg = validateFunc(x, form[x], refValue);
if (msg) errorObj[x] = msg;
});
return errorObj;
};
var handleSubmit = () => {
const { form, formErrors } = state;
const errorObj = validateForm(form, formErrors, validateField);
if (Object.keys(errorObj).length !== 0) {
setState({...state, formErrors: errorObj });
return false;
}
//database
//api code
console.log("Data: ", form);
};
return (
<>
<div className="signup-box">
<p className="title">Log In </p>
<div className="row">
<div className="col-md-6">
<div className="form-group">
<label>
Email:<span className="asterisk">*</span>
</label>
<input
className="form-control"
type="text"
name="email"
value={state.form.email}
onChange={handleChange}
onBlur={handleChange}
/>
{state.formErrors.email && (
<span className="err">{state.formErrors.email}</span>
)}
</div>
<div className="form-group">
<label>
Password:<span className="asterisk">*</span>
</label>
<input
className="form-control"
type="password"
name="password"
value={state.form.password}
onChange={handleChange}
onBlur={handleChange}
/>
{state.formErrors.password && (
<span className="err">{state.formErrors.password}</span>
)}
</div>
<div className="form-group">
<label>
Confirm Password:<span className="asterisk">*</span>
</label>
<input
className="form-control"
type="password"
name="confirmPassword"
value={state.form.confirmPassword}
onChange={handleChange}
onBlur={handleChange}
/>
{state.formErrors.confirmPassword && (
<span className="err">{state.formErrors.confirmPassword}</span>
)}
</div>
</div>
</div>
<div className="form-group">
<input
type="button"
className="btn btn-primary"
value="Submit"
onClick={handleSubmit}
/>
</div>
</div>
</>
)
}
Comments
Post a Comment