longshotlabs / simpl-schema

A JavaScript schema validation package that supports direct validation of MongoDB update modifier objects
https://www.npmjs.com/package/simpl-schema
MIT License
560 stars 114 forks source link

Cleaning and validating against another field in a nested object array #500

Open boltonag opened 1 month ago

boltonag commented 1 month ago

In the following example I wish to set a field (defaultDose) to null if another field (context) within the same nested array has a particular value ('P') and invalidate the schema if the 'defaultDose' is not entered and the context is not 'P' - see code snippet. dosage: [Object], 'dosage.$.context': { type: String, label: 'Context', }, 'dosage.$.defaultDose': { type: Number, label: 'Default dose', optional: true, autoValue() { console.log(this.field('dosage.$.context')); if (this.field('dosage.$.context').value === 'P' || this.value === '') return null; }, custom() { if (this.value === null && this.field('dosage.$.context').value !== 'P') { return 'missing'; } }, },

log returns: { operator: null, value: undefined, isSet: false } Is there any way to access another field in the same instance of the object array in these functions?

github-actions[bot] commented 1 month ago

Thank you for submitting an issue!

If this is a bug report, please be sure to include, at minimum, example code showing a small schema and any necessary calls with all their arguments, which will reproduce the issue. Even better, you can link to a saved online code editor example, where anyone can immediately run the code and see the issue.

If you are requesting a feature, include a code example of how you imagine it working if it were implemented.

If you need to edit your issue description, click the [...] and choose Edit.

Be patient. This is a free and freely licensed package that I maintain in my spare time. You may get a response in a day, but it could also take a month. If you benefit from this package and would like to see more of my time devoted to it, you can help by sponsoring.

boltonag commented 1 month ago

I've found it! Should have used siblingField

boltonag commented 1 month ago

An longer example about working with arrays and more examples of this. functions and properties might help new users.