I Want to Make Validation optional for only password and confirm password in the case when updateUser action Dispatch
How can I stop the validation for a specific user action call? this is the yup schema
const RegisterSchema = Yup.object().shape({
code: Yup.string()
.required("Employee Code is required!")
.max(8, "Employee Code should not exceed 8 characters")
.matches(/^[0-9]+$/, "Only number are allowed for this field"),
firstName: Yup.string()
.required("First name is required!")
.max(16, "First name should not exceed 16 characters")
.required("First name is required")
.matches(/^[aA-zZ]+$/, "Invalid First name"),
lastName: Yup.string()
.required("Last name is required!")
.max(16, "Last name should not exceed 16 characters")
.required("Last name is required")
.matches(/^[aA-zZ]+$/, "Invalid Last name"),
userName: Yup.string()
.required("User name is required")
.matches(/^[^\s]+(\s+[^\s]+)*$/, "Invalid User name")
.max(16, "User name should not exceed 16 characters"),
address: Yup.string()
.required("Address is required")
.matches(/^[^\s]+(\s+[^\s]+)*$/, "Invalid Address"),
role: Yup.mixed().required("Role is required!"),
desigination: Yup.mixed().required("Desigination is required!"),
department: Yup.mixed().required("Department is required!"),
date: Yup.mixed().required("Date is required"),
city: Yup.mixed().required("City name is required"),
country: Yup.mixed().required("Country name is required"),
phone: Yup.string()
.matches(
/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\\\\/]?)?((?:\(?\d{1,}\)?[\-\.\\\\/]?){0,})(?:[\-\.\\\\/]?(?:#|ext\.?|extension|x)[\-\.\\\\/]?(\d+))?$/i,
"Phone number should be numeric only!"
)
.required("Phone number is required")
.min(10, "Phone number must be at least 10 characters")
.max(10, "Phone number must be at least 10 characters"),
email: Yup.string()
.email("Email must be a valid email address")
.required("Email is required"),
password: Yup.string().when("check", {
is: (check) => true,
then: Yup.string()
.required("Password is required")
.matches(
/^(?=(?:.*[A-Z].*){1})(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$/,
"Must Contain 8 Characters, One Uppercase, One Lowercase, One Number and one special case Character"
),
// otherwise:
}),
confirmPassword: Yup.string().when("check", {
is: (check) => true,
then: Yup.string()
.required("Confirm Password is required")
.oneOf([Yup.ref("password"), null], "Passwords must match"),
// otherwise:
}),
});
I tried using When is condition to make it work but it only happens to work with a boolean attribute
const formik = useFormik({
enableReinitialize: true,
initialValues: userDetail,
validationSchema: RegisterSchema,
onSubmit: async (values) => {
let roleName: any = [];
values.role.forEach((role) => {
roleName.push(role.label);
});
let x: any = location.state;
if (location.state !== undefined) {
await dispatch(
updateUser({
id: x.userId,
firstName: values.firstName,
lastName: values.lastName,
userName: values.userName,
desigination: values.desigination.value,
department: values.department.value,
role: roleName ? roleName : roles[0],
date: values.date,
address: values.address,
city: values.city,
country: values.country,
email: values.email,
password: values.password,
confirmPassword: values.confirmPassword,
phone: values.phone,
code: values.code,
})
);
} else {
await dispatch(
addUser({
firstName: values.firstName,
lastName: values.lastName,
userName: values.userName,
desigination: values.desigination.value,
department: values.department.value,
role: roleName ? roleName : roles[0],
date: values.date,
address: values.address,
city: values.city,
country: values.country,
email: values.email,
password: values.password,
confirmPassword: values.confirmPassword,
phone: values.phone,
code: values.code,
})
);
}
},
});