Tengo el siguiente objeto:
const values = { people: [ { name: "Mark", age: null }, { name: "Shark", age: 31 } ], isAgeRequired: false }; Cuando isAgeRequired cambia a true , en mi esquema Yup me gustaría hacer que el valor de age para cada objeto en la matriz de people requiera.
Tengo la siguiente definición de esquema yup, pero en este momento parece validarse con éxito incluso si no se cumplen los requisitos anteriores:
const validator = object({ people: array( object({ name: string().required(), age: number() .nullable() .when("isAgeRequired", { is: true, then: (schema) => schema.required() }) }) ) });El problema es que el contexto principal no está disponible en parent , por lo que una forma de evitar esto era "levantar" la isAgeRequired .when .when hermano así:
// Declare the default person schema separately because I'll want to reuse it. const person = { name: string().required(), age: number().nullable() } const validator = object({ people: array( object(personSchema) ).when('isAgeRequired', (isAgeRequired, schema) => { if (Required) { return array({ ...personSchema, age: personSchema.age.required() // Override existing age rule and attach .required to it }) } return schema; }) });