UNPKG

@material-ui/lab

Version:

Material-UI Lab - Incubator for Material-UI React components.

23 lines (20 loc) 787 B
import * as React from 'react'; import { useUtils } from './useUtils'; const defaultIsSameError = (a, b) => a === b; export function makeValidationHook(validateFn, { defaultValidationError, isSameError = defaultIsSameError } = {}) { return (value, props) => { const utils = useUtils(); const previousValidationErrorRef = React.useRef(defaultValidationError || null); const validationError = validateFn(utils, value, props); React.useEffect(() => { if (props.onError && !isSameError(validationError, previousValidationErrorRef.current)) { props.onError(validationError, value); } previousValidationErrorRef.current = validationError; }, [previousValidationErrorRef, props, validationError, value]); return validationError; }; }