Я столкнулся с этой проблемой со схемой проверки Formik. Моя форма имеет 3 формы, которые она принимает, и несколько полей, которые присутствуют в каждой форме, в зависимости от заданного типа параметров и верхнего типа. Проблема заключается в том, что когда я пытаюсь отправить свою форму, если одно из полей ниже не отображается и не имеет значения, функция submitForm не срабатывает. Я установил условную логику как можно лучше, поэтому почему .nullable не разрешает отправку формы?
примеры формы формы:
type === expire => только endDate
type === постоянный => нижний и верхний (в зависимости от upperType) и startDate
и т.п.
Проблема в том, что когда виден только endDate, форма все еще пытается проверить остальные поля формы и то же самое с другими формами формы. Моя логика проверки неверна?
export const validationSchema = (type: string, upperType: RangeType | undefined) => {
const result = Yup.object({
lower: Yup.string().when([], {
is: type !== 'expire',
then: Yup.string().required(errorMessages.lowerRequired),
otherwise: Yup.string().nullable(true)
}),
upper: Yup.string().when([], {
is: (type !== 'expire' && (upperType === ASYMMETRICAL || upperType === OUTER)),
then: Yup.string().required(errorMessages.upperRequired),
otherwise: Yup.string().nullable(true)
}),
startDate: Yup.date()
.when([], {
is: type === 'permanent' || type === 'temporary',
then: Yup.date().nullable(true)
})
.max(dateMaxServer(), errorMessages.dateMax),
endDate: Yup.date().when([], {
is: type === 'temporary' || type === 'expire',
then: Yup.date().required(errorMessages.dateRequired),
otherwise: Yup.date().nullable(true)
}),
})
return result
}