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

Commit 76d17e9

Browse files
committed
Refactoring change action reducer
1 parent a688548 commit 76d17e9

File tree

5 files changed

+18
-42
lines changed

5 files changed

+18
-42
lines changed

src/reducers/form-reducer.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,13 @@ export function createInitialState(model, state, customInitialFieldState = {}, o
3131
} else {
3232
return i.merge(initialFieldState, {
3333
initialValue: state,
34-
value: state,
3534
model,
3635
...customInitialFieldState,
3736
});
3837
}
3938

4039
const initialForm = i.merge(initialFieldState, {
4140
initialValue: state,
42-
value: state,
4341
model,
4442
...customInitialFieldState,
4543
});

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

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import actionTypes from '../../action-types';
22
import i from 'icepick';
33
import get from '../../utils/get';
4-
import shallowEqual from '../../utils/shallow-equal';
54
import isPlainObject from '../../utils/is-plain-object';
65
import mapValues from '../../utils/map-values';
76
import { createInitialState } from '../form-reducer';
@@ -16,34 +15,23 @@ function updateFieldValue(field, action, parentModel = undefined) {
1615
? field.$form
1716
: field;
1817

18+
const valueIsArray = Array.isArray(value);
19+
1920
const changedFieldProps = {
2021
validated: false,
21-
retouched: fieldState.submitted
22-
? true
23-
: fieldState.retouched,
22+
retouched: fieldState.submitted || fieldState.retouched,
2423
intents: [{ type: 'validate' }],
25-
pristine: silent
26-
? fieldState.pristine
27-
: false,
28-
loadedValue: load
29-
? value
30-
: fieldState.loadedValue,
24+
pristine: silent && fieldState.pristine,
25+
loadedValue: (load && value) || fieldState.loadedValue,
3126
};
3227

33-
if (shallowEqual(field.value, value)) {
34-
return i.merge(field, changedFieldProps);
35-
}
36-
3728
if (removeKeys) {
3829
invariant(field && field.$form,
3930
'Unable to remove keys. ' +
4031
'Field for "%s" in store is not an array/object.',
4132
model);
4233

43-
const valueIsArray = Array.isArray(field.$form.value);
44-
const removeKeysArray = Array.isArray(removeKeys)
45-
? removeKeys
46-
: [removeKeys];
34+
const removeKeysArray = [].concat(removeKeys);
4735

4836
let result;
4937

@@ -70,8 +58,8 @@ function updateFieldValue(field, action, parentModel = undefined) {
7058
return result;
7159
}
7260

73-
if (!Array.isArray(value) && !isPlainObject(value)) {
74-
return i.merge(field, i.set(changedFieldProps, 'value', value));
61+
if (!valueIsArray && !isPlainObject(value)) {
62+
return i.merge(field, changedFieldProps);
7563
}
7664

7765
const updatedField = mapValues(value, (subValue, index) => {
@@ -89,12 +77,7 @@ function updateFieldValue(field, action, parentModel = undefined) {
8977
}, parentModel ? `${parentModel}.${model}` : model);
9078
}
9179

92-
if (shallowEqual(subValue, subField.value)) {
93-
return subField;
94-
}
95-
9680
return i.merge(subField, i.assign(changedFieldProps, {
97-
value: subValue,
9881
loadedValue: load
9982
? subValue
10083
: subField.loadedValue,

test/field-actions-spec.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,11 +1101,7 @@ Object.keys(testContexts).forEach((testKey) => {
11011101

11021102
assert.containSubset(
11031103
reducer(changedState, actions.setInitial('test.foo'))
1104-
.foo,
1105-
{
1106-
...initialFieldState,
1107-
value: 'changed',
1108-
});
1104+
.foo, initialFieldState);
11091105
});
11101106
});
11111107

test/form-reducer-actions-spec.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ describe('formReducer() (V1)', () => {
2323
expectedField: {
2424
pristine: false,
2525
validated: false,
26-
value: 'foo',
2726
},
2827
expectedForm: {
2928
pristine: false,
@@ -36,7 +35,6 @@ describe('formReducer() (V1)', () => {
3635
$form: {
3736
pristine: false,
3837
validated: false,
39-
value: { foo: 'bar' },
4038
},
4139
},
4240
expectedForm: {
@@ -50,7 +48,6 @@ describe('formReducer() (V1)', () => {
5048
$form: {
5149
pristine: false,
5250
validated: false,
53-
value: [1, 2, 3],
5451
},
5552
},
5653
expectedForm: {
@@ -62,7 +59,6 @@ describe('formReducer() (V1)', () => {
6259
args: ['string'],
6360
expectedField: {
6461
pristine: true,
65-
value: 'string',
6662
loadedValue: 'string',
6763
},
6864
expectedForm: {
@@ -74,7 +70,6 @@ describe('formReducer() (V1)', () => {
7470
args: [42],
7571
expectedField: {
7672
pristine: true,
77-
value: 42,
7873
loadedValue: 42,
7974
},
8075
expectedForm: {
@@ -87,12 +82,10 @@ describe('formReducer() (V1)', () => {
8782
expectedField: {
8883
$form: {
8984
pristine: true,
90-
value: { foo: 'bar' },
9185
loadedValue: { foo: 'bar' },
9286
},
9387
foo: {
9488
pristine: true,
95-
value: 'bar',
9689
initialValue: 'bar',
9790
},
9891
},
@@ -707,7 +700,6 @@ describe('formReducer() (V1)', () => {
707700

708701
it('should change the loaded value for the field', () => {
709702
assert.equal(loadedState.foo.loadedValue, 'new loaded');
710-
assert.equal(loadedState.foo.value, 'new loaded');
711703
});
712704

713705
it('should change the loaded value for the form', () => {

test/local-forms-spec.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@ describe('local forms', () => {
1111

1212
describe('standard usage with onUpdate', () => {
1313
let innerFormState;
14+
let innerModelState;
1415

1516
const form = TestUtils.renderIntoDocument(
16-
<LocalForm onUpdate={(formValue) => innerFormState = formValue}>
17+
<LocalForm
18+
onUpdate={(formValue) => innerFormState = formValue}
19+
onChange={(modelState) => innerModelState = modelState}
20+
>
1721
<Control.text model=".foo" />
1822
</LocalForm>
1923
);
@@ -38,9 +42,12 @@ describe('local forms', () => {
3842
},
3943
foo: {
4044
pristine: false,
41-
value: 'changed',
4245
},
4346
});
47+
48+
assert.deepEqual(innerModelState, {
49+
foo: 'changed',
50+
});
4451
});
4552
});
4653

0 commit comments

Comments
 (0)