react-vite-themes
Version:
A test/experimental React theme system created for learning purposes. Features atomic design components, SCSS variables, and dark/light theme support. Not intended for production use.
32 lines (31 loc) • 1.17 kB
JavaScript
import { useCallback } from 'react';
import { useFormContext } from './useFormContext';
export const useFormValidation = () => {
const form = useFormContext();
const createCrossFieldValidator = useCallback((_fieldName, validateFn) => ({
required: true,
custom: (value) => validateFn(value, form.values)
}), [form.values]);
const createPasswordConfirmationValidator = useCallback((passwordField) => ({
required: true,
custom: (value) => {
const password = form.values[passwordField];
return value !== password ? 'Passwords do not match' : null;
}
}), [form.values]);
const createConditionalValidator = useCallback((condition, validator) => ({
...validator,
custom: (value) => {
if (!condition(form.values)) {
return null; // Skip validation if condition is not met
}
return validator.custom ? validator.custom(value) : null;
}
}), [form.values]);
return {
createCrossFieldValidator,
createPasswordConfirmationValidator,
createConditionalValidator,
form
};
};