UNPKG

user-auth-pkg

Version:

A **highly customizable** and **reusable login form component** built with **React Hook Form**, **Yup**, and **Material UI**, supporting **image uploads**, **file inputs**, **CAPTCHA validation**, and flexible UI overrides.

29 lines (28 loc) 1.27 kB
import * as yup from 'yup'; export const buildValidationSchema = (config) => { const schemaObj = {}; config.forEach((field) => { const message = field.placeholder || field.label || field.name; if (field.isFile || field.isImage) { let fileSchema = yup .mixed() .required(`${message} is required`) .test('fileExists', 'File is required', (value) => value instanceof File); if (field.isImage) { fileSchema = fileSchema.test('fileType', 'Only image files are allowed (jpg, png)', (value) => value instanceof File && ['image/jpeg', 'image/png'].includes(value.type)); } schemaObj[field.name] = fileSchema; } else { let base = yup.string().required(`${message} is required`); if (field.type === 'email') base = base.email('Invalid email format'); if (field.type === 'password') base = base.min(6, 'Password must be at least 6 characters'); if (field.type === 'number') base = base.matches(/^\d+$/, 'Only numbers are allowed'); schemaObj[field.name] = base; } }); return yup.object().shape(schemaObj); };