import { useState } from "react"; const validatePhoneNumber = (phone) => { // Regex for exactly 10 digits const phoneRegex = /^\d{10}$/; return phoneRegex.test(phone); }; export const validateForm = (formData, validationRules, setErrMsg) => { const errors = {}; Object.keys(validationRules).forEach((field) => { const rules = validationRules[field]; const value = formData[field]; if ( rules.required && (!value || (typeof value === "string" && value.trim() === "")) ) { errors[field] = "Enter This Field"; } else if (rules.email && !validateEmail(value)) { errors[field] = "Invalid Email"; } else if (rules.custom && !rules.custom(value)) { errors[field] = rules.customMessage || "Invalid value"; } else if (rules.fileType && value && value instanceof File) { // Validate file type if (!rules.fileType.includes(value.type)) { errors[field] = "Invalid file type"; } // Validate file size if (rules.fileSize && value.size > rules.fileSize) { errors[field] = "File is too large"; } } else if (rules.phoneNumber && !validatePhoneNumber(value)) { // Validate phone number errors[field] = "Invalid phone number. Must be exactly 11 digits."; } }); setErrMsg(errors); return Object.keys(errors).length === 0; // Return true if no errors }; const validateEmail = (email) => { const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailPattern.test(email); }; export const FormField = ({ label, type, name, value, onChange, error, options, className, onSubmit, accept, placeholder, required, checked, ref, style, disabled, }) => { const [showPassword, setShowPassword] = useState(false); const handleTogglePasswordVisibility = () => { setShowPassword(!showPassword); }; return ( <>
{error}
)}