Я использую Yup. js для проверки некоторых полей формы.
У меня есть два целочисленных поля, Year Built
и Year Renovated
.
Year Built
является обязательным полем, Year Renovated
- нет.
Год ремонта можно оставить пустым, однако , если есть значение , оно должно быть больше, чем год постройки (ремонт обязательно должен произойти после даты постройки).
Я считаю, что мне нужно использовать функцию ref()
, а также функцию when()
. Я пробовал следующее:
let currentYear = new Date (). GetFullYear ();
yup.object().shape({
yearBuilt : yup.number().integer().min(1700).max(currentYear+1).required(),
yearRenovated : yup.number().integer().when(
'$yearRenovated', (yearRenovated, schema)=>{
return yearRenovated > 0 ?
schema.min(yup.ref('yearBuilt')).max(currentYear+1) :
schema.transform(emptyStringToNull).nullable()
}
)
})
* Функция преобразования emptyStringToNull
просто проверяет наличие value === ''
и возвращает null, если это так.
Вышеупомянутое действительно допускает нулевые значения, а также правильно проверяет целое число. Однако он неправильно оценивает yearRenovated > yearBuilt
. Как мне правильно проверить, что если yearRenovated
не равно нулю, то больше, чем yearBuilt
?
Большое спасибо за вашу помощь.