Files
sp/src/hooks/useFormValidation.js
2025-03-29 16:08:07 +05:30

57 lines
1.6 KiB
JavaScript

import { useState, useCallback, useEffect } from 'react';
/**
* Custom hook for form validation based on critical business rules
* @param {Object} domainConfig - Domain configuration state
* @param {Object} validation - Domain validation state
* @param {Object} dnsVerified - DNS verification state
* @returns {Object} - Form validation state and methods
*/
const useFormValidation = (domainConfig, validation, dnsVerified) => {
const [formValid, setFormValid] = useState(true);
const { useCustomDomain, dnsMethod } = domainConfig;
const { isValidDomain } = validation;
// Validate form
const validateForm = useCallback(() => {
let valid = true;
// For custom domain, require domain validation and DNS verification
if (useCustomDomain) {
// First requirement: domain must be validated successfully
if (!isValidDomain) {
valid = false;
}
// Second requirement: appropriate DNS verification must pass
else if (dnsMethod === 'cname' && dnsVerified.cname !== true) {
valid = false;
}
else if (dnsMethod === 'ns' && dnsVerified.ns !== true) {
valid = false;
}
}
setFormValid(valid);
return valid;
}, [useCustomDomain, isValidDomain, dnsMethod, dnsVerified.cname, dnsVerified.ns]);
// Validate form when relevant state changes
useEffect(() => {
validateForm();
}, [
useCustomDomain,
isValidDomain,
dnsMethod,
dnsVerified.cname,
dnsVerified.ns,
validateForm
]);
return {
formValid,
validateForm
};
};
export default useFormValidation;