-
Notifications
You must be signed in to change notification settings - Fork 6
Description
This behaviour isn't necessarily a bug – I understand why it happens, and what the workaround for it is, but I wanted to flag it for visibility and in case anybody has the time and willingness to work on a solution.
Suppose we have a class like
class MyClass {
count = 0;
shouldValidateCount = true;
}and validations for that class like
{
count: validateSometimes([
validateNumber({ gt: 0 })
], function() {
return this.get('shouldValidateCount');
})
}Then if we create a changeset around an instance of MyClass (with count set to 0 and shouldValidateCount set to true) using those validations, the following happens:
(async function showValidationGotcha() {
await changeset.validate();
console.log(changeset.get('isValid')); // false
changeset.set('shouldValidateCount', false);
console.log(changeset.get('isValid')); // false, when really should be true
})();We can of course work around this by explicitly calling changeset.validate() or changeset.validate('count') whenever shouldValidateCount gets set to a new value, but this is clunky and easily forgotten – and gets hard to manage when an object has a large number of conditional validations.
I'm not familiar with the internals of tracked properties etc., but it'd be awesome if it was possible to tap into a mechanism like that to ensure that the validations for properties with conditions associated with them get recomputed whenever a dependency of that condition is updated 🤔