# 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;
    }