yup.js проверить массив, когда условие - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть объект с флагом в качестве логического значения и другой элемент в виде массива объектов.

Я хотел бы проверить массив объектов только в том случае, если флаг имеет значение true.

Итак:

{
  shouldCheck: false
}

это должно пройти

{
  shouldCheck: true
}

это должно сломаться

{
  shouldCheck: true,
  rules: []
}

это должно сломаться

{
  shouldCheck: true,
  rules: [1]
}

это должно сломаться

{
  shouldCheck: true,
  rules: [{other: 'xx'}]
}

это должно сломаться

{
  shouldCheck: true,
  rules: [right: 'one']
}

это должно пройти

yup схема:

const delaySchema = yup.object().shape({
  shouldCheck: yup.boolean(),
  rules: yup.mixed()
    .when(['shouldCheck'], {
      is: (sck) => {
        return sck;
      },
    then: yup.array().of(yup.object().shape({
      right: yup.string().required(),
    })),
    otherwise: yup.mixed().nullable()
  }),
});

теперь проблема в том, что он игнорирует внутреннеецените и не проверяйте их.

1 Ответ

0 голосов
/ 30 января 2019

попробуйте использовать yup. array () перед условием

const delaySchema = yup.object().shape({
  shouldCheck: yup.boolean(),
  rules: yup.array()
    .when(['shouldCheck'], {
      is: (sck) => {
        return sck;
      },
    then: yup.array().of(yup.object().shape({
      right: yup.string().required(),
    })),
    otherwise: yup.mixed().nullable()
  }),
});
...