В схеме я хотел бы настроить схему на основе родителя родителя .
Если, например: если toggleMonday - true, то в будние дни -> понедельник должно быть указано Speci c схема проверки.
Теперь работает следующий пример. Однако это довольно многословно.
const schema = yup.object().shape({
toggleMonday: yup.bool().required(),
toggleTuesday: yup.bool().required(),
toggleWednesday: yup.bool().required(),
toggleThursday: yup.bool().required(),
toggleFriday: yup.bool().required(),
toggleSaturday: yup.bool().required(),
toggleSunday: yup.bool().required(),
weekdays: yup.object()
// works, toggleMonday is a sibling of weekdays
.when('toggleMonday', {
is: true,
then: yup.object().shape({
monday: yup.array().of(yup.object().shape(daySchema)).daySchemaFirstTimeslotRequired(),
tuesday: yup.array().of(yup.object().shape(daySchema)),
wednesday: yup.array().of(yup.object().shape(daySchema)),
thursday: yup.array().of(yup.object().shape(daySchema)),
friday: yup.array().of(yup.object().shape(daySchema)),
saturday: yup.array().of(yup.object().shape(daySchema)),
sunday: yup.array().of(yup.object().shape(daySchema)),
}),
})
.when('toggleTuesday', {
is: true,
then: yup.object().shape({
monday: yup.array().of(yup.object().shape(daySchema)),
tuesday: yup.array().of(yup.object().shape(daySchema)).daySchemaFirstTimeslotRequired(),
wednesday: yup.array().of(yup.object().shape(daySchema)),
thursday: yup.array().of(yup.object().shape(daySchema)),
friday: yup.array().of(yup.object().shape(daySchema)),
saturday: yup.array().of(yup.object().shape(daySchema)),
sunday: yup.array().of(yup.object().shape(daySchema)),
}),
})
// etc.
});
Как видите, он довольно повторяющийся.
В этом примере используется метод mixed.when()
. Тем не менее, кажется, что вы можете ориентироваться только на одноуровневые или дочерние дочерние поля.
Вложение его под каждый день соответственно не работает, поскольку дни вложены в «будни».
Что-то в строках:
const schema = yup.object().shape({
toggleMonday: yup.bool().required(),
toggleTuesday: yup.bool().required(),
toggleWednesday: yup.bool().required(),
toggleThursday: yup.bool().required(),
toggleFriday: yup.bool().required(),
toggleSaturday: yup.bool().required(),
toggleSunday: yup.bool().required(),
weekdays: yup.object()
// does not work, toggleMonday is not a sibling of 'monday'
monday: yup.array().when('toggleMonday', {
is: true,
then: yup.array().of(yup.object().shape(daySchema)).daySchemaFirstTimeslotRequired(),
otherwise: yup.array().of(yup.object().shape(daySchema)),
}),
tuesday: yup.array().when('toggleMonday', {
is: true,
then: yup.array().of(yup.object().shape(daySchema)).daySchemaFirstTimeslotRequired(),
otherwise: yup.array().of(yup.object().shape(daySchema)),
}),
// etc.
});
Любой совет?