Estoy creando un formulario de varios pasos que es dinámico en función de una respuesta de un servidor. El formulario está construido en React usando Formiz para lograr esto. Estoy tratando de crear los objetos de validación en función de la información del backend. Según los documentos de Formiz, la validación personalizada se vería así:
validations={[ { rule: (val) => val !== 0, message: 'Need some real number here', }, { rule: (val) => val !== 7, message: '7 is a lucky number but please try another one', }, { rule: (val) => val !== 66, message: '66 is not a valid number', }, ]} La información que pasa desde el backend donde eq puede ser lessThan o greaterThan , y when representa la clave del campo a referencia. Lo siguiente significa que si el valor de companyStructure es soleProp , entonces el valor de ownershipPercentage debe ser igual a 100.
{ ... key: 'ownershipPercentage', ... validation: { required: true, rules: [ { when: 'companyStructure', value: 'soleProp', eq: 100, message: `Value must be equal to 100.` } ] }, },Mi función actual para crear un objeto de validación en el que estoy atascado:
const checkFieldValidation = () => { const fieldValidation = {} const checkIf: any = { eq: (a: any, b: any) => a === b, lessThan: (a: number, b: number) => a < b, greaterThan: (a: number, b: number) => a > b } if (field.validation.rules) { const rules = field.validation.rules const fieldValue = ~~form.values[rules.when] const conditions = Object.keys(checkIf).filter((k) => k in rules) return conditions.every((condition) => { return checkIf[condition](fieldValue, rules[condition]) }) } } ¿Cuál sería la forma correcta de tomar esos datos y devolver una ecuación apropiada basada en: (val) => val !== 7 ?