Проверять поля условно на основе другого поля в Yup и Formik

У меня проблема с проверкой. Я хотел, чтобы, если значение access равно 1, вы могли выбрать start_date и end_date, НО если значение access не равно 1, вы можете выбрать только сегодня.

Коды

Отредактируйте 63973773 / error-when-setting-an-input-in-reactjs-label-is-over-  перезаписывает значение (разветвленного)

export const validationSchema = yup.object().shape({
  access: yup.number().nullable(),
  start_date: yup.string().required('Select start date'),
  end_date: yup.string().required('Select end date'),
});

person Joseph    schedule 04.10.2020    source источник


Ответы (1)


Вместо проверки строки вы можете использовать проверку даты, просто убедитесь, что настроили правильный обмен сообщениями !:

import moment from "moment";
...
const today = new Date().toDateString();
const validationSchema = yup.object().shape({
  access: yup.number().nullable(),
  start_date: yup.date()
    .typeError("Invalid date")
    .required("Select start date")
    .when("access", {
      is: 1,
      otherwise: (d) => d.min(today, "Should be today's date")
          .max(today, "Should be today's date")
    }),
  end_date: yup.date()
    .typeError("Invalid date")
    .required("Select end date")
    .when("access", {
      is: 1,
      otherwise: (d) => d.min(today, "Should be today's date")
          .max(today, "Should be today's date")
    })
});

Обновить stackblitz можно здесь .

person Dipen Shah    schedule 04.10.2020
comment
Когда доступ равен 1, вы можете выбрать любую дату. Но когда значение access НЕ ЕСТЬ 1, вы можете выбрать только сегодня. и, кстати, пожалуйста, используйте date-fns. Я разместил свой код и ящик в своем вопросе. Спасибо - person Joseph; 04.10.2020