All files / src/_hooks useValidateSchema.ts

30.77% Statements 4/13
0% Branches 0/5
0% Functions 0/4
30.77% Lines 4/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 311x     1x 1x   1x                                                
import * as React from 'react';
import * as yup from 'yup';
 
const noError: string[] = [];
const unknownError = ['Unknown error'];
 
export function useValidateSchema<T>(
  schema?: yup.Schema<T>,
  value?: T,
  { abortEarly, recursive }: yup.ValidateOptions = {},
): string[] {
  const [errors, setErrors] = React.useState<string[]>(noError);
 
  React.useEffect(() => {
    if (!schema) {
      setErrors(noError);
      return;
    }
    schema
      .validate(value, { strict: true, abortEarly, recursive }) // to avoid taking a useEffect dependency on validateOpts that is an object
      .then(() => {
        setErrors(noError);
      })
      .catch(e => {
        setErrors(e.errors || unknownError);
      });
  }, [schema, value, abortEarly, recursive]);
 
  return errors;
}