Files
Stirling-PDF/frontend/src/proprietary/routes/signup/SignupFormValidation.ts
T
James BruntonandGitHub d2b38ef4b8 Restructure frontend code to allow for extensions (#4721)
# Description of Changes
Move frontend code into `core` folder and add infrastructure for
`proprietary` folder to include premium, non-OSS features
2025-10-28 10:29:36 +00:00

66 lines
1.8 KiB
TypeScript

import { useTranslation } from 'react-i18next';
export interface SignupFieldErrors {
name?: string
email?: string
password?: string
confirmPassword?: string
}
export interface SignupValidationResult {
isValid: boolean
error: string | null
fieldErrors?: SignupFieldErrors
}
export const useSignupFormValidation = () => {
const { t } = useTranslation();
const validateSignupForm = (
email: string,
password: string,
confirmPassword: string,
name?: string
): SignupValidationResult => {
const fieldErrors: SignupFieldErrors = {};
// Validate name
if (name !== undefined && name !== null && !name.trim()) {
fieldErrors.name = t('signup.nameRequired', 'Name is required');
}
// Validate email
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!email) {
fieldErrors.email = t('signup.emailRequired', 'Email is required');
} else if (!emailRegex.test(email)) {
fieldErrors.email = t('signup.invalidEmail');
}
// Validate password
if (!password) {
fieldErrors.password = t('signup.passwordRequired', 'Password is required');
} else if (password.length < 6) {
fieldErrors.password = t('signup.passwordTooShort');
}
// Validate confirm password
if (!confirmPassword) {
fieldErrors.confirmPassword = t('signup.confirmPasswordRequired', 'Please confirm your password');
} else if (password !== confirmPassword) {
fieldErrors.confirmPassword = t('signup.passwordsDoNotMatch');
}
const hasErrors = Object.keys(fieldErrors).length > 0;
return {
isValid: !hasErrors,
error: null, // Don't show generic error, field errors are more specific
fieldErrors: hasErrors ? fieldErrors : undefined
};
};
return {
validateSignupForm
};
};