57 lines
1.6 KiB
JavaScript
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; |