Условная валидация в FieldArray с использованием Formik & Yup - PullRequest
0 голосов
/ 23 января 2020

У меня есть ScheduleForm, который имеет вложенные значения, называемые hours_attributes. Отдельные часы имеют обязательную условную привязку, в которой требуется наличие значения opens, если значение all_day равно false. Вот как написана моя текущая схема:

const ScheduleSchema = Yup.object().shape({
  name: Yup.string()
    .required('Required'),
  hours_attributes: Yup.array().of(
    Yup.object().shape({
      opens: Yup.object().when('all_day', {
      is: false,
      then: Yup.string().required('Required'),
      otherwise: Yup.string()
    }),
  }))
});

Я не уверен, ожидает ли значение when индекса значения этого конкретного часа all_day. Нужен ли какой-то индекс?

1 Ответ

0 голосов
/ 24 января 2020

Попробуйте, передав функцию 2-му аргументу when:

const ScheduleSchema = Yup.object().shape({
  name: Yup.string()
    .required('Required'),
  hours_attributes: Yup.array().of(
    Yup.object().shape({
      opens: Yup.boolean().when('all_day', (value, schema) =>
        value ? schema : schema.required('Required')),
  }))
});

Если приведенный выше фрагмент не работает, измените hours_attributes следующим образом:


Yup.object({
      opens: Yup.boolean().when('all_day', (value, schema) =>
        value ? schema : schema.required('Required'))
}),

Если вы тогда значение opens должно быть истинным:


Yup.object({
      opens: Yup.boolean().when('all_day', (value, schema) =>
        value ? schema : schema.oneOf([true], 'Required'))
}),

...