Skip to content
This repository was archived by the owner on Aug 23, 2022. It is now read-only.

Commit 4c51e39

Browse files
committed
change reducer passing parentModel to subFields. fixes #528
1 parent dfa13cd commit 4c51e39

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/reducers/form/change-action-reducer.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { createInitialState } from '../form-reducer';
99
import initialFieldState from '../../constants/initial-field-state';
1010
import updateParentForms from '../../utils/update-parent-forms';
1111

12-
function updateFieldValue(field, action) {
12+
function updateFieldValue(field, action, parentModel = undefined) {
1313
const { value, removeKeys, silent, load, model } = action;
1414

1515
const fieldState = (field && field.$form)
@@ -70,13 +70,13 @@ function updateFieldValue(field, action) {
7070
}
7171

7272
const updatedField = mapValues(value, (subValue, index) => {
73-
const subField = field[index] || createInitialState(`${model}.${index}`, subValue);
73+
const subField = field[index] || createInitialState(`${(parentModel ? parentModel + '.' : '') + model}.${index}`, subValue);
7474

7575
if (Object.hasOwnProperty.call(subField, '$form')) {
7676
return updateFieldValue(subField, {
7777
model: index,
7878
value: subValue,
79-
});
79+
}, (parentModel ? parentModel + '.' : '') + model);
8080
}
8181

8282
if (shallowEqual(subValue, subField.value)) {

test/model-actions-spec.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,33 @@ describe('model actions', () => {
2626
const reducer = combineForms({
2727
user: {
2828
username: '',
29-
items: [{name: 'item 1'}]
29+
items: [{name: 'item 1', subitems: [{name: 'subitem 1'}]}]
3030
},
3131
})
3232
const DATA = {
3333
username: 'loaded',
34-
items: [{name: 'item 1'}, {name: 'item 2'}],
34+
items: [{name: 'item 1', subitems: [{name: 'subitem 1'}, {name: 'subitem 2'}]}, {name: 'item 2', subitems: [{name: 'subitem 1'}]}],
3535
};
3636
const initial = reducer(undefined, {});
3737
const actual = reducer({}, actions.load('user', DATA));
3838

3939
assert.equal(actual.forms.user.items.$form.model, "user.items");
40+
4041
assert.equal(actual.forms.user.items[0].$form.model, "user.items.0");
4142
assert.equal(actual.forms.user.items[0].name.model, "user.items.0.name");
43+
assert.equal(actual.forms.user.items[0].subitems.$form.model, "user.items.0.subitems");
44+
45+
// assert.equal(actual.forms.user.items[0].subitems, "user.items.0.subitems.0");
46+
assert.equal(actual.forms.user.items[0].subitems[0].$form.model, "user.items.0.subitems.0");
47+
assert.equal(actual.forms.user.items[0].subitems[0].name.model, "user.items.0.subitems.0.name");
48+
assert.equal(actual.forms.user.items[0].subitems[1].$form.model, "user.items.0.subitems.1");
49+
assert.equal(actual.forms.user.items[0].subitems[1].name.model, "user.items.0.subitems.1.name");
50+
4251
assert.equal(actual.forms.user.items[1].$form.model, "user.items.1");
4352
assert.equal(actual.forms.user.items[1].name.model, "user.items.1.name");
53+
assert.equal(actual.forms.user.items[1].subitems.$form.model, "user.items.1.subitems");
54+
assert.equal(actual.forms.user.items[1].subitems[0].$form.model, "user.items.1.subitems.0");
55+
assert.equal(actual.forms.user.items[1].subitems[0].name.model, "user.items.1.subitems.0.name");
4456
});
4557

4658
it('should load model and form stay untouched', () => {

0 commit comments

Comments
 (0)