tonyf
tonyf

Reputation: 35567

Yup validation rules issues

Just trying to get a handle on Yup and unfortunately I can't seem to find any examples that point to validating a nested object and a nested array (of objects) within another object.

I have something like this:

"books": [{
            "info": {
                "dateReleased": null,
                "timeReleased": null
            },
            "reviewers": [
               {
                 "company": "",
                 "name": ""
               }
           ]
}]

I just have no idea what the required Yup validation syntacx is for info and reviewers as all I want to validate is that the values are not null and are required.

I'vetried this but no validation is firing:

Yup.object().shape({
    books: Yup.array(
                info: Yup.object({
                     dateReleased: Yup.date().required('Rquired')                                
                     timeReleased: Yup.date().required('Required') 
                })
                reviewers: Yup.array(
                     Yup.object({
                       company: Yup.string().required('Required')                                
                       name: Yup.string().required('Required') 
                     })         
                )                   
    )
  }) 

With the above, I'm not getting any console errors but none of my validation rules for info and reviewers are firing.

Upvotes: 0

Views: 4347

Answers (1)

Mithu
Mithu

Reputation: 36

Yup Validation


const value = {
  books: [
    {
      info: {
        dateReleased: null,
        timeReleased: null,
      },
      reviewers: [
        {
          company: "",
          name: "",
        },
      ],
    },
  ],
};

const schema = yup.object().shape({
  books: yup.array(
    yup.object().shape({
      info: yup.object().shape({
        dateReleased: yup.date().required('Required'),                            
        timeReleased: yup.date().required('Required') 
      }),
      reviewer: yup.array(
        yup.object().shape({
          company: yup.string().required('Required'),                              
          name: yup.string().required('Required') 
        })
      )
    })
  ),
});

schema.validate(value).catch(err => {
  console.log(err.name); // ValidationError
  console.log(err.errors); // [books[0].info.timeReleased must be a `date` type, but the final value was: `Invalid Date`.]
});

Upvotes: 2

Related Questions