joi icon indicating copy to clipboard operation
joi copied to clipboard

Access current key as a parameter of the schema validator to generate dynamically styled labels

Open SimonGodefroid opened this issue 2 years ago • 0 comments

I'm trying to achieve the following...

export const myValidationSchema = Joi.object<Whatever>({
  myField: Joi.boolean().required().label('My field'),
  myOtherField: Joi.boolean().required().label('My other field'),
}).unknown(false);

but without having having to specifically write the label by hand. Essentially the naming of our attributes is such that it'd be okay to pass a function accessing to this to the .label method so that we could just return the attribute name but in a human readable way.

I'm suggesting an implementation by giving an example but there must be a way to achieve this that I'm not aware of (maybe with all the $_ properties).

const toTitleCase = (label:string) => _.startCase(label);
 
export const myValidationSchema = Joi.object<Whatever>({
  myField: Joi.boolean().required().label(toTitleCase),
  myOtherField: Joi.boolean().required().label(toTitleCase),
}).unknown(false);

Which would make my validators spit an error like "My field is required"

Hope you understand what I'm trying to achieve.

SimonGodefroid avatar Apr 28 '23 10:04 SimonGodefroid