@open-tender/utils
Version:
A library of utils for use with Open Tender applications that utilize our cloud-based Order API.
41 lines (40 loc) • 1.43 kB
JavaScript
import { useState } from 'react';
import { validatePassword } from '../utils/passwordValidation';
/**
* Custom hook for password field validation and state management
* Follows SRP by encapsulating all password-related state and logic
*/
export const usePasswordValidation = () => {
const [passwordTouched, setPasswordTouched] = useState(false);
const handlePasswordChange = () => {
if (!passwordTouched) {
setPasswordTouched(true);
}
};
const isPasswordValid = (password) => {
if (!password)
return false;
const validation = validatePassword(password);
return validation.isValid;
};
const shouldShowRequirements = (password, hidePassword = false) => {
return !hidePassword && !!password;
};
const getPasswordErrors = (password, errors, fieldName = 'password') => {
const passwordErrors = {};
if (errors[fieldName]) {
// If password is valid according to frontend but still has error, it's from backend
const isValidFrontend = password && validatePassword(password).isValid;
if (isValidFrontend || !password) {
passwordErrors[fieldName] = errors[fieldName];
}
}
return passwordErrors;
};
return {
handlePasswordChange,
isPasswordValid,
shouldShowRequirements,
getPasswordErrors
};
};