Требуется помощь по схеме проверки

const ValidationSchema = Yup.object().shape({
  name: Yup.string()
    .min(2, 'String too short!')
    .max(50, 'String too long!')
    .required('Field is required!')
    .lowercase(),
  phases: Yup.array().of(
    Yup.object().shape({
      sla_type: Yup.string(),
      sla: Yup.number(),
    }),
  ),
});

Во-первых, я только начал изучать YUP, и мне он понравился. Престижность команде ...

Выше моя схема проверки. Под Phases у меня есть два поля: sla_type и sla

Вот чего я пытаюсь достичь:

  1. Если sla_type пусто, и sla также пусто, проверка не требуется, значения не требуются
  2. Если sla_type === 'minutes', sla должно быть min (1), max (60)
  3. Если sla_type === 'hours', sla должно быть min (1), max (24)
  4. Если sla_type === 'days', sla должно быть min (1), max (90)

Как я могу этого добиться?


person Timur Catakli    schedule 08.08.2019    source источник


Ответы (1)


Вы можете использовать да .when (), вот так:

const ValidationSchema = Yup.object().shape({
    name: Yup.string()
      .min(2, 'String too short!')
      .max(50, 'String too long!')
      .required('Field is required!')
      .lowercase(),
    phases: Yup.array().of(

      Yup.object().shape({
        sla_type: Yup.string().oneOf(['minutes', 'hours', 'days']),
        sla: Yup.number().when('sla_type', (sla_type) => {
          switch (sla_type) {
            case 'minutes': 
              return Yup.number().min(1).max(60)
            case 'hours': 
              return Yup.number().min(1).max(24)
            case 'days': 
              return Yup.number().min(1).max(90)
          }
        })
      })

    )
  });
person jayarjo    schedule 10.08.2019