ember-changeset-validations
ember-changeset-validations copied to clipboard
Strange behavior with an array of objects
VERSION
4.1.0
Test Case
Steps to reproduce
[In the test case]
- Input some text in the comments
- add some comments and some text
- try to rollback
[In any changeset]
- Have some array with objects inside of your changeset
- Change the content of some objects in the array
- Try to rollback/trigger validation
Expected Behavior
The content of the object in the array also rollbacks. Validation triggers properly for in-array object keys.
Actual Behavior
The content of the objects in the array is not roll-backed after modification. Impossible to make validation works for properties of nested objects. (except when a new object is added/deleted to the main array, but its not real-time for the properties of these objects)
Maybe i'm doing it the wrong way, i never saw support for this kind of structure and validation in ember-changeset, so let me know if it's a bug or just me !
Quick overview of the test case:
const validator = {
title: [validatePresence(true)],
content: [validatePresence(true)],
comments: [
(e) => {
/**
* Validates only when array is changed
*/
console.log(e);
return true;
},
],
// not working
'comments.0.content': [
(e) => {
console.log(e);
return true;
},
],
};
...
Changeset({
title: 'Article',
comments: [
{
content: 'That was fun', <-- content does not validate when modified and does not rollback
},
{
content: 'That was not fun',
},
],
lookupValidator(validator),
validator
})
I am trying to do something similar - I have a property
results = [{ value: 1}]
Trying to validate 'results.0.value': validatePresence(true)
It's returning valid even if value is empty.
Note this appears to be related to the lookupValidator
function, because if I use a standard validation object for the map, but use my own validation function, then it works fine.